@everymatrix/general-footer-template 1.77.15 → 1.77.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.
@@ -3,223 +3,7 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  const index = require('./index-13599735.js');
6
-
7
- /**
8
- * custom rules for component types
9
- */
10
- const getDevice = () => {
11
- let userAgent = window.navigator.userAgent;
12
- if (userAgent.toLowerCase().match(/android/i)) {
13
- return 'Android';
14
- }
15
- if (userAgent.toLowerCase().match(/iphone/i)) {
16
- return 'iPhone';
17
- }
18
- if (userAgent.toLowerCase().match(/ipad|ipod/i)) {
19
- return 'iPad';
20
- }
21
- return 'PC';
22
- };
23
- const getDevicePlatform = () => {
24
- const device = getDevice();
25
- if (device) {
26
- if (device === 'PC') {
27
- return 'dk';
28
- }
29
- else if (device === 'iPad' || device === 'iPhone') {
30
- return 'ios';
31
- }
32
- else {
33
- return 'mtWeb';
34
- }
35
- }
36
- };
37
- const componentRules = {
38
- "downloadApp": {
39
- component: 'custom-content-section'
40
- },
41
- "link-section": {
42
- component: 'link-section-list'
43
- },
44
- "copyright": {
45
- component: 'custom-content-section'
46
- },
47
- "download": {
48
- component: 'custom-content-section'
49
- },
50
- "helpLinks": {
51
- component: 'image-list'
52
- },
53
- "license-description": {
54
- component: 'custom-content-section'
55
- },
56
- "licenses": {
57
- component: 'image-list',
58
- },
59
- "payment": {
60
- component: 'image-list',
61
- },
62
- "social": {
63
- component: 'image-list',
64
- },
65
- "sponsors": {
66
- component: 'image-list',
67
- },
68
- "vendors": {
69
- component: 'image-list',
70
- },
71
- "clock": {
72
- component: 'custom-clock',
73
- },
74
- "logo": {
75
- component: 'footer-logo'
76
- }
77
- };
78
- // This method takes repeater content and changes it to fit an uniform standard for property names in order to be treated in a general case by the footer
79
- // ex. if helpLinks repeaters use "helpImage" and socialLinks repeaters use "socialImage", both will use "image" after the normalization
80
- const normalizeRepeaterContent = (data) => {
81
- const repeaterResponse = {
82
- repeaters: {
83
- vendors: {
84
- categoryTitle: data.gameVendorsLinksTitle,
85
- content: []
86
- },
87
- "link-section": {
88
- categoryTitle: data.helpLinksTitle,
89
- content: []
90
- },
91
- helpLinks: {
92
- categoryTitle: data.helpLinksTitle,
93
- content: []
94
- },
95
- licenses: {
96
- categoryTitle: data.licensesLinksTitle,
97
- content: []
98
- },
99
- sponsors: {
100
- categoryTitle: data.sponsorsLinksTitle,
101
- content: []
102
- },
103
- payment: {
104
- categoryTitle: data.paymentLinksTitle,
105
- content: []
106
- },
107
- social: {
108
- categoryTitle: data.socialLinksTitle,
109
- content: []
110
- },
111
- downloadApp: {
112
- categoryTitle: data.downloadAppLinksTitle,
113
- content: []
114
- }
115
- },
116
- wysiwyg: {
117
- copyright: {
118
- categoryTitle: 'test',
119
- content: 'test'
120
- },
121
- customCSS: {
122
- categoryTitle: 'test',
123
- content: 'test'
124
- },
125
- download: {
126
- categoryTitle: 'test',
127
- content: 'test'
128
- },
129
- downloadApp: {
130
- categoryTitle: 'test',
131
- content: 'test'
132
- },
133
- "license-description": {
134
- categoryTitle: 'test',
135
- content: 'test'
136
- }
137
- }
138
- };
139
- const propertyNamesMap = {
140
- helpLinks: {
141
- repeaterName: 'helpLinksRepeater',
142
- isExternalLink: 'helpLinkType',
143
- image: 'helpLinkImage',
144
- title: 'helpLinkTitle',
145
- url: 'helpLinkUrl',
146
- target: 'target'
147
- },
148
- "link-section": {
149
- repeaterName: 'helpLinksRepeater',
150
- isExternalLink: 'helpLinkType',
151
- linkCategory: 'helpLinkCategory',
152
- image: 'helpLinkImage',
153
- title: 'helpLinkTitle',
154
- url: 'helpLinkUrl',
155
- target: 'target'
156
- },
157
- social: {
158
- repeaterName: 'socialLinksRepeater',
159
- isExternalLink: 'isExternalLink',
160
- image: 'socialLinkImage',
161
- title: 'socialLinkTitle',
162
- url: 'socialLinkUrl',
163
- target: 'target'
164
- },
165
- vendors: {
166
- repeaterName: 'gameVendorsRepeater',
167
- isExternalLink: 'isExternalLink',
168
- image: 'gameVendorImage',
169
- title: 'gameVendorTitle',
170
- url: 'gameVendorUrl',
171
- target: 'target'
172
- },
173
- licenses: {
174
- repeaterName: 'licensesRepeater',
175
- isExternalLink: 'isExternalLink',
176
- image: 'licenseImage',
177
- title: 'licenseTitle',
178
- url: 'licenseUrl',
179
- target: 'target'
180
- },
181
- payment: {
182
- repeaterName: 'paymentMethodsRepeater',
183
- isExternalLink: 'isExternalLink',
184
- image: 'paymentMethodImage',
185
- title: 'paymentTitle',
186
- url: 'paymentMethodUrl',
187
- target: 'target'
188
- },
189
- sponsors: {
190
- repeaterName: 'sponsorsRepeater',
191
- isExternalLink: 'isExternalLink',
192
- image: 'sponsorImage',
193
- title: 'sponsorTitle',
194
- url: 'sponsorUrl',
195
- target: 'target'
196
- }
197
- };
198
- // this goes through all of the repeater content sections and uniformize their property names so that the footer can treat them generally instead of case-by-case
199
- Object.entries(repeaterResponse.repeaters).forEach(repeater => {
200
- var _a, _b, _c;
201
- if (propertyNamesMap[repeater[0]] && data[(_a = propertyNamesMap[repeater[0]]) === null || _a === void 0 ? void 0 : _a.repeaterName]) {
202
- repeater[1].content = (_c = data[(_b = propertyNamesMap[repeater[0]]) === null || _b === void 0 ? void 0 : _b.repeaterName]) === null || _c === void 0 ? void 0 : _c.map(content => {
203
- var _a, _b, _c, _d, _e, _f;
204
- return {
205
- // all properties have a null fallback - avoid undefined propagation
206
- isExternalLink: (_a = content[propertyNamesMap[repeater[0]].isExternalLink]) !== null && _a !== void 0 ? _a : null,
207
- linkCategory: (_b = content[propertyNamesMap[repeater[0]].linkCategory]) !== null && _b !== void 0 ? _b : null,
208
- image: (_c = content[propertyNamesMap[repeater[0]].image]) !== null && _c !== void 0 ? _c : null,
209
- title: (_d = content[propertyNamesMap[repeater[0]].title]) !== null && _d !== void 0 ? _d : null,
210
- url: (_e = content[propertyNamesMap[repeater[0]].url]) !== null && _e !== void 0 ? _e : null,
211
- target: (_f = content[propertyNamesMap[repeater[0]].target]) !== null && _f !== void 0 ? _f : null,
212
- };
213
- });
214
- }
215
- });
216
- repeaterResponse.repeaters.downloadApp.content = data.downloadInfos.imageArea || [];
217
- repeaterResponse.wysiwyg.downloadApp.content = data.downloadInfos.downloadDescription || '';
218
- repeaterResponse.wysiwyg.copyright.content = data.copyright;
219
- repeaterResponse.wysiwyg.customCSS.content = data.customCSS;
220
- repeaterResponse.wysiwyg["license-description"].content = data.licenseDesc;
221
- return repeaterResponse;
222
- };
6
+ const utils = require('./utils-9b9a9d42.js');
223
7
 
224
8
  /**
225
9
  * @name setClientStyling
@@ -284,7 +68,7 @@ const GeneralFooterTemplateStyle0 = demoFooterCss;
284
68
  const GeneralFooterTemplate = class {
285
69
  constructor(hostRef) {
286
70
  index.registerInstance(this, hostRef);
287
- this.platform = getDevicePlatform();
71
+ this.platform = utils.getDevicePlatform();
288
72
  /**
289
73
  * Host element
290
74
  */
@@ -306,7 +90,7 @@ const GeneralFooterTemplate = class {
306
90
  this.clockFormat = 'HH:MM:ss';
307
91
  this.timeZone = '';
308
92
  this.mbSource = undefined;
309
- this.dropdownLinks = false;
93
+ this.accordionLinks = false;
310
94
  this.hasErrors = false;
311
95
  this.footerContent = undefined;
312
96
  }
@@ -337,7 +121,7 @@ const GeneralFooterTemplate = class {
337
121
  this.hasErrors = true;
338
122
  }
339
123
  else {
340
- this.footerContent = normalizeRepeaterContent(data);
124
+ this.footerContent = utils.normalizeRepeaterContent(data);
341
125
  }
342
126
  });
343
127
  }
@@ -367,10 +151,10 @@ const GeneralFooterTemplate = class {
367
151
  }
368
152
  else {
369
153
  const footerSections = this.sectionsList.map((section, i) => {
370
- const FooterElement = componentRules[section].component;
154
+ const FooterElement = utils.componentRules[section].component;
371
155
  const elementIsRepeater = this.footerContent.repeaters.hasOwnProperty(section);
372
156
  const elementIsCustom = this.footerContent.wysiwyg.hasOwnProperty(section);
373
- return index.h(FooterElement, { class: `${section} FooterSectionContainer FooterSectionContainer${i + 1}`, userid: this.userid, session: this.session, "base-url": this.baseUrl, endpoint: this.endpoint, language: this.language, "navigate-via-event": this.navigateViaEvent, "post-message-event": this.postMessageEvent, ruleset: componentRules[section], repeaterContent: elementIsRepeater ? this.footerContent.repeaters[section] : null, customContent: elementIsCustom ? this.footerContent.wysiwyg[section].content : null, "translation-url": this.translationUrl, "clock-format": this.clockFormat, "time-zone": this.timeZone, "dropdown-links": this.dropdownLinks });
157
+ return index.h(FooterElement, { class: `${section} FooterSectionContainer FooterSectionContainer${i + 1}`, userid: this.userid, session: this.session, "base-url": this.baseUrl, endpoint: this.endpoint, language: this.language, "navigate-via-event": this.navigateViaEvent, "post-message-event": this.postMessageEvent, ruleset: utils.componentRules[section], repeaterContent: elementIsRepeater ? this.footerContent.repeaters[section] : null, customContent: elementIsCustom ? this.footerContent.wysiwyg[section].content : null, "translation-url": this.translationUrl, "clock-format": this.clockFormat, "time-zone": this.timeZone, "accordion-links": this.accordionLinks });
374
158
  });
375
159
  return (index.h("footer", { class: "FooterContainer", ref: el => this.stylingContainer = el }, index.h("div", { class: "FooterGrid customStyle" }, footerSections)));
376
160
  }
@@ -19,7 +19,7 @@ var patchBrowser = () => {
19
19
 
20
20
  patchBrowser().then(async (options) => {
21
21
  await appGlobals.globalScripts();
22
- return index.bootstrapLazy([["custom-content-section.cjs",[[2,"custom-content-section",{"customContent":[1,"custom-content"],"repeaterContent":[8,"repeater-content"],"navigateViaEvent":[516,"navigate-via-event"],"postMessageEvent":[513,"post-message-event"]}]]],["link-section-list.cjs",[[0,"link-section-list",{"repeaterContent":[8,"repeater-content"],"baseUrl":[513,"base-url"],"language":[513],"navigateViaEvent":[4,"navigate-via-event"],"postMessageEvent":[513,"post-message-event"],"dropdownLinks":[516,"dropdown-links"],"openCategory":[32]}]]],["custom-clock.cjs",[[2,"custom-clock",{"clockFormat":[513,"clock-format"],"timeZone":[513,"time-zone"],"translationUrl":[513,"translation-url"],"language":[513],"timeString":[32]},null,{"translationUrl":["handleNewTranslations"]}]]],["footer-logo.cjs",[[2,"footer-logo",{"endpoint":[513],"language":[513],"logoContent":[32]},null,{"endpoint":["onConfigChange"],"language":["onConfigChange"]}]]],["general-footer-template.cjs",[[1,"general-footer-template",{"language":[513],"sections":[513],"endpoint":[513],"env":[513],"userRoles":[513,"user-roles"],"userid":[513],"session":[513],"baseUrl":[513,"base-url"],"navigateViaEvent":[513,"navigate-via-event"],"postMessageEvent":[513,"post-message-event"],"clientStyling":[513,"client-styling"],"clientStylingUrl":[513,"client-styling-url"],"customCss":[513,"custom-css"],"translationUrl":[513,"translation-url"],"clockFormat":[513,"clock-format"],"timeZone":[513,"time-zone"],"mbSource":[513,"mb-source"],"dropdownLinks":[516,"dropdown-links"],"hasErrors":[32],"footerContent":[32]},null,{"language":["watchLanguage"]}]]],["ui-image_2.cjs",[[0,"ui-image",{"src":[1],"width":[1],"height":[1],"alt":[1],"styles":[8],"detectDistance":[1,"detect-distance"],"imgLoaded":[32],"shouldLoad":[32]},null,{"src":["handleSrc"]}],[0,"ui-skeleton",{"structure":[1],"width":[1],"height":[1],"borderRadius":[8,"border-radius"],"marginBottom":[8,"margin-bottom"],"marginTop":[8,"margin-top"],"marginLeft":[8,"margin-left"],"marginRight":[8,"margin-right"],"animation":[4],"rows":[2],"size":[1]},null,{"structure":["handleStructureChange"]}]]],["image-list.cjs",[[2,"image-list",{"repeaterContent":[8,"repeater-content"],"navigateViaEvent":[4,"navigate-via-event"],"postMessageEvent":[513,"post-message-event"]}]]]], options);
22
+ return index.bootstrapLazy([["custom-content-section.cjs",[[2,"custom-content-section",{"customContent":[1,"custom-content"],"repeaterContent":[8,"repeater-content"],"navigateViaEvent":[516,"navigate-via-event"],"postMessageEvent":[513,"post-message-event"]}]]],["link-section-list.cjs",[[0,"link-section-list",{"repeaterContent":[8,"repeater-content"],"baseUrl":[513,"base-url"],"language":[513],"navigateViaEvent":[4,"navigate-via-event"],"postMessageEvent":[513,"post-message-event"],"accordionLinks":[516,"accordion-links"],"openCategory":[32]}]]],["custom-clock.cjs",[[2,"custom-clock",{"clockFormat":[513,"clock-format"],"timeZone":[513,"time-zone"],"translationUrl":[513,"translation-url"],"language":[513],"timeString":[32]},null,{"translationUrl":["handleNewTranslations"]}]]],["footer-logo.cjs",[[2,"footer-logo",{"endpoint":[513],"language":[513],"logoContent":[32]},null,{"endpoint":["onConfigChange"],"language":["onConfigChange"]}]]],["general-footer-template.cjs",[[1,"general-footer-template",{"language":[513],"sections":[513],"endpoint":[513],"env":[513],"userRoles":[513,"user-roles"],"userid":[513],"session":[513],"baseUrl":[513,"base-url"],"navigateViaEvent":[513,"navigate-via-event"],"postMessageEvent":[513,"post-message-event"],"clientStyling":[513,"client-styling"],"clientStylingUrl":[513,"client-styling-url"],"customCss":[513,"custom-css"],"translationUrl":[513,"translation-url"],"clockFormat":[513,"clock-format"],"timeZone":[513,"time-zone"],"mbSource":[513,"mb-source"],"accordionLinks":[516,"accordion-links"],"hasErrors":[32],"footerContent":[32]},null,{"language":["watchLanguage"]}]]],["ui-image_2.cjs",[[0,"ui-image",{"src":[1],"width":[1],"height":[1],"alt":[1],"styles":[8],"detectDistance":[1,"detect-distance"],"imgLoaded":[32],"shouldLoad":[32]},null,{"src":["handleSrc"]}],[0,"ui-skeleton",{"structure":[1],"width":[1],"height":[1],"borderRadius":[8,"border-radius"],"marginBottom":[8,"margin-bottom"],"marginTop":[8,"margin-top"],"marginLeft":[8,"margin-left"],"marginRight":[8,"margin-right"],"animation":[4],"rows":[2],"size":[1]},null,{"structure":["handleStructureChange"]}]]],["image-list.cjs",[[2,"image-list",{"repeaterContent":[8,"repeater-content"],"navigateViaEvent":[4,"navigate-via-event"],"postMessageEvent":[513,"post-message-event"]}]]]], options);
23
23
  });
24
24
 
25
25
  exports.setNonce = index.setNonce;
@@ -3,6 +3,7 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  const index = require('./index-13599735.js');
6
+ const utils = require('./utils-9b9a9d42.js');
6
7
 
7
8
  const linkSectionListCss = ":host {\n display: block;\n margin: 0;\n padding: 0;\n}\n\n.SkeletonWrapper {\n width: 25px;\n height: 25px;\n}\n\n.LinkSectionListContainer {\n display: block;\n container-type: inline-size;\n}\n.LinkSectionListWrapper {\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n grid-template-columns: 1fr;\n}\n.LinkSectionListTitle {\n font-weight: var(--emw--font-weight-semibold, 500);\n text-transform: uppercase;\n}\n.LinkSectionListDropdownHeader {\n display: flex;\n justify-content: space-between;\n align-items: center;\n width: 100%;\n background: var(--emw--color-primary, #184026);\n color: var(--emw--color-typography, #FFFFFF);\n text-align: left;\n padding: 10px;\n border: none;\n border-radius: var(--emw--button-border-radius, 4px);\n margin-bottom: 3px;\n cursor: pointer;\n font-size: 1rem;\n}\n.LinkSectionListDropdownHeader:hover {\n color: var(--emw--color-secondary, #52d004);\n}\n.LinkSectionListDropdownHeader:hover svg {\n fill: var(--emw--color-secondary, #52d004);\n}\n.LinkSectionListDropdownHeader.IsOpen {\n color: var(--emw--color-secondary, #52d004);\n}\n.LinkSectionListDropdownHeader.IsOpen svg {\n fill: var(--emw--color-secondary, #52d004);\n}\n.LinkSectionListDropdownHeader .TriangleActive {\n transform: rotate(90deg);\n -webkit-transform: rotate(90deg);\n}\n.LinkSectionListDropdownHeader svg {\n fill: var(--emw--color-typography, #FFFFFF);\n margin-left: 8px;\n width: 16px;\n transform: rotate(-90deg);\n -webkit-transform: rotate(-90deg);\n}\n.LinkSectionListDropdownList {\n list-style: none;\n display: none;\n}\n.LinkSectionListDropdownList.open {\n display: flex;\n margin: 5px 0;\n}\n.LinkSectionListLink {\n font-weight: var(--emw--font-weight-light, 300);\n}\n\nul {\n width: fit-content;\n margin: 0;\n display: flex;\n flex-direction: column;\n gap: var(--emw--spacing-medium, 16px);\n padding-left: var(--emw--spacing-small-minus, 10px);\n font-size: var(--emw--font-size-small, 16px);\n text-transform: uppercase;\n}\nul li {\n list-style: disc;\n display: flex;\n align-items: center;\n position: relative;\n}\nul li .LinkSectionListLinkText {\n display: flex;\n gap: 5px;\n flex-direction: row;\n align-items: center;\n}\nul li .LinkSectionListLinkText span {\n text-align: center;\n cursor: pointer;\n}\n\na {\n color: inherit;\n}\n\n@container (min-width: 280px) {\n .LinkSectionListWrapper {\n grid-template-columns: repeat(2, 1fr);\n }\n}\n@container (min-width: 650px) {\n .LinkSectionListWrapper {\n grid-gap: 2rem;\n grid-template-columns: repeat(4, 1fr);\n grid-template-rows: 1fr;\n }\n}";
8
9
  const LinkSectionListStyle0 = linkSectionListCss;
@@ -10,19 +11,28 @@ const LinkSectionListStyle0 = linkSectionListCss;
10
11
  const LinkSectionList = class {
11
12
  constructor(hostRef) {
12
13
  index.registerInstance(this, hostRef);
14
+ this.isMobile = utils.isMobile();
13
15
  this.repeaterContent = undefined;
14
16
  this.baseUrl = undefined;
15
17
  this.language = undefined;
16
18
  this.navigateViaEvent = false;
17
19
  this.postMessageEvent = '';
18
- this.dropdownLinks = false;
20
+ this.accordionLinks = false;
19
21
  this.openCategory = null;
20
22
  }
21
23
  navigateLink(link) {
22
24
  window.postMessage({ type: this.postMessageEvent, path: link.linkUrl, url: link.linkUrl, target: link.target, externalLink: link.externalLink }, window.location.href);
23
25
  }
24
- toggleCategory(cat) {
25
- this.openCategory = this.openCategory === cat ? null : cat;
26
+ toggleCategory(category) {
27
+ if (!this.isMobile)
28
+ return;
29
+ this.openCategory = this.openCategory === category ? null : category;
30
+ }
31
+ isCategoryOpen(category) {
32
+ if (this.isMobile) {
33
+ return this.openCategory === category;
34
+ }
35
+ return true;
26
36
  }
27
37
  createHrefLink(link) {
28
38
  return link.externalLink ? link.linkUrl : `${this.baseUrl}/${this.language}${link.linkUrl}`;
@@ -56,19 +66,15 @@ const LinkSectionList = class {
56
66
  }
57
67
  return obj;
58
68
  }, []);
59
- return index.h("div", { class: "LinkSectionListContainer" }, index.h("div", { class: "LinkSectionListWrapper" }, this.repeaterContent.categoryTitle && index.h("h2", { class: "LinkSectionListTitle" }, this.repeaterContent.categoryTitle), linkSections.map(category => this.dropdownLinks ? (index.h("div", { class: "LinkSectionListDropdown" }, index.h("button", { type: 'button', class: `LinkSectionListDropdownHeader ${this.openCategory === category.categoryTitle ? 'IsOpen' : ''}`, onClick: () => this.toggleCategory(category.categoryTitle) }, category.categoryTitle, index.h("span", { class: this.openCategory === category.categoryTitle ? 'TriangleActive' : 'TriangleInactive' }, index.h("svg", { xmlns: "http://www.w3.org/2000/svg", width: "14", height: "6.835", viewBox: "0 0 14 6.835" }, index.h("path", { id: "arrow", d: "M281.541,447.921a.488.488,0,0,0,.295-.122l6.5-5.851a.488.488,0,1,0-.65-.726l-6.176,5.556-6.176-5.556h0a.488.488,0,1,0-.65.726l6.5,5.851a.488.488,0,0,0,.355.122Z", transform: "translate(-274.511 -441.088)" })))), index.h("ul", { class: { 'LinkSectionListDropdownList': true, open: this.openCategory === category.categoryTitle } }, category.links.map(link => index.h("li", { class: "LinkSectionListLink", key: link.linkName }, this.navigateViaEvent === true ? (index.h("span", null, link.linkName && link.icon ? (index.h("span", { class: "LinkSectionListLinkText", onClick: () => this.navigateLink(link) }, index.h("div", { class: "ContainerImage" }, index.h("ui-image", { class: "LinkSectionIcon", src: link.icon, alt: "icon" })), index.h("span", { class: '' }, link.linkName, " "))) :
60
- link.linkName ?
61
- index.h("span", { class: "LinkSectionListLinkText", onClick: () => this.navigateLink(link) }, index.h("span", null, link.linkName, " "))
62
- :
63
- index.h("span", { class: "LinkSectionListLinkText", onClick: () => this.navigateLink(link) }, index.h("div", { class: "ContainerImage" }, index.h("ui-image", { class: "LinkSectionIcon", src: link.icon, alt: "icon" }))))) : (index.h("a", { class: "LinkSectionListLink", href: this.createHrefLink(link), target: link.target || '_blank' }, link.linkName && link.icon ? (index.h("span", { class: "LinkSectionListLinkText" }, index.h("div", { class: "ContainerImage" }, index.h("ui-image", { class: "LinkSectionIcon", src: link.icon, alt: "icon" })), index.h("span", null, link.linkName))) :
64
- link.linkName ? (index.h("span", { class: "LinkSectionListLinkText" }, index.h("span", null, link.linkName))) :
65
- index.h("span", { class: "LinkSectionListLinkText" }, index.h("div", { class: "ContainerImage" }, index.h("ui-image", { class: "LinkSectionIcon", src: link.icon, alt: "icon" })))))))))) : (index.h("ul", null, category.categoryTitle && index.h("p", null, category.categoryTitle), category.links.map(link => index.h("li", { class: "LinkSectionListLink", key: link.linkName }, this.navigateViaEvent === true ? (index.h("span", null, link.linkName && link.icon ? (index.h("span", { class: "LinkSectionListLinkText", onClick: () => this.navigateLink(link) }, index.h("div", { class: "ContainerImage" }, index.h("ui-image", { class: "LinkSectionIcon", src: link.icon, alt: "icon" })), index.h("span", { class: '' }, link.linkName, " "))) :
69
+ const renderLinkItems = (category) => category.links.map(link => index.h("li", { class: "LinkSectionListLink", key: link.linkName }, this.navigateViaEvent === true ? (index.h("span", null, link.linkName && link.icon ? (index.h("span", { class: "LinkSectionListLinkText", onClick: () => this.navigateLink(link) }, index.h("div", { class: "ContainerImage" }, index.h("ui-image", { class: "LinkSectionIcon", src: link.icon, alt: "icon" })), index.h("span", { class: '' }, link.linkName, " "))) :
66
70
  link.linkName ?
67
71
  index.h("span", { class: "LinkSectionListLinkText", onClick: () => this.navigateLink(link) }, index.h("span", null, link.linkName, " "))
68
72
  :
69
73
  index.h("span", { class: "LinkSectionListLinkText", onClick: () => this.navigateLink(link) }, index.h("div", { class: "ContainerImage" }, index.h("ui-image", { class: "LinkSectionIcon", src: link.icon, alt: "icon" }))))) : (index.h("a", { class: "LinkSectionListLink", href: this.createHrefLink(link), target: link.target || '_blank' }, link.linkName && link.icon ? (index.h("span", { class: "LinkSectionListLinkText" }, index.h("div", { class: "ContainerImage" }, index.h("ui-image", { class: "LinkSectionIcon", src: link.icon, alt: "icon" })), index.h("span", null, link.linkName))) :
70
74
  link.linkName ? (index.h("span", { class: "LinkSectionListLinkText" }, index.h("span", null, link.linkName))) :
71
- index.h("span", { class: "LinkSectionListLinkText" }, index.h("div", { class: "ContainerImage" }, index.h("ui-image", { class: "LinkSectionIcon", src: link.icon, alt: "icon" }))))))))))));
75
+ index.h("span", { class: "LinkSectionListLinkText" }, index.h("div", { class: "ContainerImage" }, index.h("ui-image", { class: "LinkSectionIcon", src: link.icon, alt: "icon" })))))));
76
+ return index.h("div", { class: "LinkSectionListContainer" }, index.h("div", { class: `LinkSectionListWrapper ${this.accordionLinks ? (this.isMobile ? "is-mobile" : "is-desktop") : ""}` }, this.repeaterContent.categoryTitle && index.h("h2", { class: "LinkSectionListTitle" }, this.repeaterContent.categoryTitle), linkSections.map(category => this.accordionLinks ?
77
+ (index.h("div", { class: "LinkSectionListDropdown" }, index.h("button", { type: 'button', class: `LinkSectionListDropdownHeader ${this.openCategory === category.categoryTitle ? 'IsOpen' : ''}`, onClick: () => this.toggleCategory(category.categoryTitle) }, category.categoryTitle, index.h("span", { class: this.isCategoryOpen(category.categoryTitle) ? 'TriangleActive' : 'TriangleInactive' }, index.h("svg", { xmlns: "http://www.w3.org/2000/svg", width: "14", height: "6.835", viewBox: "0 0 14 6.835" }, index.h("path", { id: "arrow", d: "M281.541,447.921a.488.488,0,0,0,.295-.122l6.5-5.851a.488.488,0,1,0-.65-.726l-6.176,5.556-6.176-5.556h0a.488.488,0,1,0-.65.726l6.5,5.851a.488.488,0,0,0,.355.122Z", transform: "translate(-274.511 -441.088)" })))), index.h("ul", { class: { 'LinkSectionListDropdownList': true, open: this.isCategoryOpen(category.categoryTitle) } }, renderLinkItems(category)))) : (index.h("ul", null, category.categoryTitle && index.h("p", null, category.categoryTitle), renderLinkItems(category))))));
72
78
  }
73
79
  };
74
80
  LinkSectionList.style = LinkSectionListStyle0;
@@ -8,7 +8,7 @@ const appGlobals = require('./app-globals-3a1e7e63.js');
8
8
  const defineCustomElements = async (win, options) => {
9
9
  if (typeof window === 'undefined') return undefined;
10
10
  await appGlobals.globalScripts();
11
- return index.bootstrapLazy([["custom-content-section.cjs",[[2,"custom-content-section",{"customContent":[1,"custom-content"],"repeaterContent":[8,"repeater-content"],"navigateViaEvent":[516,"navigate-via-event"],"postMessageEvent":[513,"post-message-event"]}]]],["link-section-list.cjs",[[0,"link-section-list",{"repeaterContent":[8,"repeater-content"],"baseUrl":[513,"base-url"],"language":[513],"navigateViaEvent":[4,"navigate-via-event"],"postMessageEvent":[513,"post-message-event"],"dropdownLinks":[516,"dropdown-links"],"openCategory":[32]}]]],["custom-clock.cjs",[[2,"custom-clock",{"clockFormat":[513,"clock-format"],"timeZone":[513,"time-zone"],"translationUrl":[513,"translation-url"],"language":[513],"timeString":[32]},null,{"translationUrl":["handleNewTranslations"]}]]],["footer-logo.cjs",[[2,"footer-logo",{"endpoint":[513],"language":[513],"logoContent":[32]},null,{"endpoint":["onConfigChange"],"language":["onConfigChange"]}]]],["general-footer-template.cjs",[[1,"general-footer-template",{"language":[513],"sections":[513],"endpoint":[513],"env":[513],"userRoles":[513,"user-roles"],"userid":[513],"session":[513],"baseUrl":[513,"base-url"],"navigateViaEvent":[513,"navigate-via-event"],"postMessageEvent":[513,"post-message-event"],"clientStyling":[513,"client-styling"],"clientStylingUrl":[513,"client-styling-url"],"customCss":[513,"custom-css"],"translationUrl":[513,"translation-url"],"clockFormat":[513,"clock-format"],"timeZone":[513,"time-zone"],"mbSource":[513,"mb-source"],"dropdownLinks":[516,"dropdown-links"],"hasErrors":[32],"footerContent":[32]},null,{"language":["watchLanguage"]}]]],["ui-image_2.cjs",[[0,"ui-image",{"src":[1],"width":[1],"height":[1],"alt":[1],"styles":[8],"detectDistance":[1,"detect-distance"],"imgLoaded":[32],"shouldLoad":[32]},null,{"src":["handleSrc"]}],[0,"ui-skeleton",{"structure":[1],"width":[1],"height":[1],"borderRadius":[8,"border-radius"],"marginBottom":[8,"margin-bottom"],"marginTop":[8,"margin-top"],"marginLeft":[8,"margin-left"],"marginRight":[8,"margin-right"],"animation":[4],"rows":[2],"size":[1]},null,{"structure":["handleStructureChange"]}]]],["image-list.cjs",[[2,"image-list",{"repeaterContent":[8,"repeater-content"],"navigateViaEvent":[4,"navigate-via-event"],"postMessageEvent":[513,"post-message-event"]}]]]], options);
11
+ return index.bootstrapLazy([["custom-content-section.cjs",[[2,"custom-content-section",{"customContent":[1,"custom-content"],"repeaterContent":[8,"repeater-content"],"navigateViaEvent":[516,"navigate-via-event"],"postMessageEvent":[513,"post-message-event"]}]]],["link-section-list.cjs",[[0,"link-section-list",{"repeaterContent":[8,"repeater-content"],"baseUrl":[513,"base-url"],"language":[513],"navigateViaEvent":[4,"navigate-via-event"],"postMessageEvent":[513,"post-message-event"],"accordionLinks":[516,"accordion-links"],"openCategory":[32]}]]],["custom-clock.cjs",[[2,"custom-clock",{"clockFormat":[513,"clock-format"],"timeZone":[513,"time-zone"],"translationUrl":[513,"translation-url"],"language":[513],"timeString":[32]},null,{"translationUrl":["handleNewTranslations"]}]]],["footer-logo.cjs",[[2,"footer-logo",{"endpoint":[513],"language":[513],"logoContent":[32]},null,{"endpoint":["onConfigChange"],"language":["onConfigChange"]}]]],["general-footer-template.cjs",[[1,"general-footer-template",{"language":[513],"sections":[513],"endpoint":[513],"env":[513],"userRoles":[513,"user-roles"],"userid":[513],"session":[513],"baseUrl":[513,"base-url"],"navigateViaEvent":[513,"navigate-via-event"],"postMessageEvent":[513,"post-message-event"],"clientStyling":[513,"client-styling"],"clientStylingUrl":[513,"client-styling-url"],"customCss":[513,"custom-css"],"translationUrl":[513,"translation-url"],"clockFormat":[513,"clock-format"],"timeZone":[513,"time-zone"],"mbSource":[513,"mb-source"],"accordionLinks":[516,"accordion-links"],"hasErrors":[32],"footerContent":[32]},null,{"language":["watchLanguage"]}]]],["ui-image_2.cjs",[[0,"ui-image",{"src":[1],"width":[1],"height":[1],"alt":[1],"styles":[8],"detectDistance":[1,"detect-distance"],"imgLoaded":[32],"shouldLoad":[32]},null,{"src":["handleSrc"]}],[0,"ui-skeleton",{"structure":[1],"width":[1],"height":[1],"borderRadius":[8,"border-radius"],"marginBottom":[8,"margin-bottom"],"marginTop":[8,"margin-top"],"marginLeft":[8,"margin-left"],"marginRight":[8,"margin-right"],"animation":[4],"rows":[2],"size":[1]},null,{"structure":["handleStructureChange"]}]]],["image-list.cjs",[[2,"image-list",{"repeaterContent":[8,"repeater-content"],"navigateViaEvent":[4,"navigate-via-event"],"postMessageEvent":[513,"post-message-event"]}]]]], options);
12
12
  };
13
13
 
14
14
  exports.setNonce = index.setNonce;
@@ -0,0 +1,230 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * custom rules for component types
5
+ */
6
+ const isMobile = () => {
7
+ let userAgent = window.navigator.userAgent;
8
+ return !!(userAgent.toLowerCase().match(/android/i) ||
9
+ userAgent.toLowerCase().match(/blackberry|bb/i) ||
10
+ userAgent.toLowerCase().match(/iphone|ipad|ipod/i) ||
11
+ userAgent.toLowerCase().match(/windows phone|windows mobile|iemobile|wpdesktop/i));
12
+ };
13
+ const getDevice = () => {
14
+ let userAgent = window.navigator.userAgent;
15
+ if (userAgent.toLowerCase().match(/android/i)) {
16
+ return 'Android';
17
+ }
18
+ if (userAgent.toLowerCase().match(/iphone/i)) {
19
+ return 'iPhone';
20
+ }
21
+ if (userAgent.toLowerCase().match(/ipad|ipod/i)) {
22
+ return 'iPad';
23
+ }
24
+ return 'PC';
25
+ };
26
+ const getDevicePlatform = () => {
27
+ const device = getDevice();
28
+ if (device) {
29
+ if (device === 'PC') {
30
+ return 'dk';
31
+ }
32
+ else if (device === 'iPad' || device === 'iPhone') {
33
+ return 'ios';
34
+ }
35
+ else {
36
+ return 'mtWeb';
37
+ }
38
+ }
39
+ };
40
+ const componentRules = {
41
+ "downloadApp": {
42
+ component: 'custom-content-section'
43
+ },
44
+ "link-section": {
45
+ component: 'link-section-list'
46
+ },
47
+ "copyright": {
48
+ component: 'custom-content-section'
49
+ },
50
+ "download": {
51
+ component: 'custom-content-section'
52
+ },
53
+ "helpLinks": {
54
+ component: 'image-list'
55
+ },
56
+ "license-description": {
57
+ component: 'custom-content-section'
58
+ },
59
+ "licenses": {
60
+ component: 'image-list',
61
+ },
62
+ "payment": {
63
+ component: 'image-list',
64
+ },
65
+ "social": {
66
+ component: 'image-list',
67
+ },
68
+ "sponsors": {
69
+ component: 'image-list',
70
+ },
71
+ "vendors": {
72
+ component: 'image-list',
73
+ },
74
+ "clock": {
75
+ component: 'custom-clock',
76
+ },
77
+ "logo": {
78
+ component: 'footer-logo'
79
+ }
80
+ };
81
+ // This method takes repeater content and changes it to fit an uniform standard for property names in order to be treated in a general case by the footer
82
+ // ex. if helpLinks repeaters use "helpImage" and socialLinks repeaters use "socialImage", both will use "image" after the normalization
83
+ const normalizeRepeaterContent = (data) => {
84
+ const repeaterResponse = {
85
+ repeaters: {
86
+ vendors: {
87
+ categoryTitle: data.gameVendorsLinksTitle,
88
+ content: []
89
+ },
90
+ "link-section": {
91
+ categoryTitle: data.helpLinksTitle,
92
+ content: []
93
+ },
94
+ helpLinks: {
95
+ categoryTitle: data.helpLinksTitle,
96
+ content: []
97
+ },
98
+ licenses: {
99
+ categoryTitle: data.licensesLinksTitle,
100
+ content: []
101
+ },
102
+ sponsors: {
103
+ categoryTitle: data.sponsorsLinksTitle,
104
+ content: []
105
+ },
106
+ payment: {
107
+ categoryTitle: data.paymentLinksTitle,
108
+ content: []
109
+ },
110
+ social: {
111
+ categoryTitle: data.socialLinksTitle,
112
+ content: []
113
+ },
114
+ downloadApp: {
115
+ categoryTitle: data.downloadAppLinksTitle,
116
+ content: []
117
+ }
118
+ },
119
+ wysiwyg: {
120
+ copyright: {
121
+ categoryTitle: 'test',
122
+ content: 'test'
123
+ },
124
+ customCSS: {
125
+ categoryTitle: 'test',
126
+ content: 'test'
127
+ },
128
+ download: {
129
+ categoryTitle: 'test',
130
+ content: 'test'
131
+ },
132
+ downloadApp: {
133
+ categoryTitle: 'test',
134
+ content: 'test'
135
+ },
136
+ "license-description": {
137
+ categoryTitle: 'test',
138
+ content: 'test'
139
+ }
140
+ }
141
+ };
142
+ const propertyNamesMap = {
143
+ helpLinks: {
144
+ repeaterName: 'helpLinksRepeater',
145
+ isExternalLink: 'helpLinkType',
146
+ image: 'helpLinkImage',
147
+ title: 'helpLinkTitle',
148
+ url: 'helpLinkUrl',
149
+ target: 'target'
150
+ },
151
+ "link-section": {
152
+ repeaterName: 'helpLinksRepeater',
153
+ isExternalLink: 'helpLinkType',
154
+ linkCategory: 'helpLinkCategory',
155
+ image: 'helpLinkImage',
156
+ title: 'helpLinkTitle',
157
+ url: 'helpLinkUrl',
158
+ target: 'target'
159
+ },
160
+ social: {
161
+ repeaterName: 'socialLinksRepeater',
162
+ isExternalLink: 'isExternalLink',
163
+ image: 'socialLinkImage',
164
+ title: 'socialLinkTitle',
165
+ url: 'socialLinkUrl',
166
+ target: 'target'
167
+ },
168
+ vendors: {
169
+ repeaterName: 'gameVendorsRepeater',
170
+ isExternalLink: 'isExternalLink',
171
+ image: 'gameVendorImage',
172
+ title: 'gameVendorTitle',
173
+ url: 'gameVendorUrl',
174
+ target: 'target'
175
+ },
176
+ licenses: {
177
+ repeaterName: 'licensesRepeater',
178
+ isExternalLink: 'isExternalLink',
179
+ image: 'licenseImage',
180
+ title: 'licenseTitle',
181
+ url: 'licenseUrl',
182
+ target: 'target'
183
+ },
184
+ payment: {
185
+ repeaterName: 'paymentMethodsRepeater',
186
+ isExternalLink: 'isExternalLink',
187
+ image: 'paymentMethodImage',
188
+ title: 'paymentTitle',
189
+ url: 'paymentMethodUrl',
190
+ target: 'target'
191
+ },
192
+ sponsors: {
193
+ repeaterName: 'sponsorsRepeater',
194
+ isExternalLink: 'isExternalLink',
195
+ image: 'sponsorImage',
196
+ title: 'sponsorTitle',
197
+ url: 'sponsorUrl',
198
+ target: 'target'
199
+ }
200
+ };
201
+ // this goes through all of the repeater content sections and uniformize their property names so that the footer can treat them generally instead of case-by-case
202
+ Object.entries(repeaterResponse.repeaters).forEach(repeater => {
203
+ var _a, _b, _c;
204
+ if (propertyNamesMap[repeater[0]] && data[(_a = propertyNamesMap[repeater[0]]) === null || _a === void 0 ? void 0 : _a.repeaterName]) {
205
+ repeater[1].content = (_c = data[(_b = propertyNamesMap[repeater[0]]) === null || _b === void 0 ? void 0 : _b.repeaterName]) === null || _c === void 0 ? void 0 : _c.map(content => {
206
+ var _a, _b, _c, _d, _e, _f;
207
+ return {
208
+ // all properties have a null fallback - avoid undefined propagation
209
+ isExternalLink: (_a = content[propertyNamesMap[repeater[0]].isExternalLink]) !== null && _a !== void 0 ? _a : null,
210
+ linkCategory: (_b = content[propertyNamesMap[repeater[0]].linkCategory]) !== null && _b !== void 0 ? _b : null,
211
+ image: (_c = content[propertyNamesMap[repeater[0]].image]) !== null && _c !== void 0 ? _c : null,
212
+ title: (_d = content[propertyNamesMap[repeater[0]].title]) !== null && _d !== void 0 ? _d : null,
213
+ url: (_e = content[propertyNamesMap[repeater[0]].url]) !== null && _e !== void 0 ? _e : null,
214
+ target: (_f = content[propertyNamesMap[repeater[0]].target]) !== null && _f !== void 0 ? _f : null,
215
+ };
216
+ });
217
+ }
218
+ });
219
+ repeaterResponse.repeaters.downloadApp.content = data.downloadInfos.imageArea || [];
220
+ repeaterResponse.wysiwyg.downloadApp.content = data.downloadInfos.downloadDescription || '';
221
+ repeaterResponse.wysiwyg.copyright.content = data.copyright;
222
+ repeaterResponse.wysiwyg.customCSS.content = data.customCSS;
223
+ repeaterResponse.wysiwyg["license-description"].content = data.licenseDesc;
224
+ return repeaterResponse;
225
+ };
226
+
227
+ exports.componentRules = componentRules;
228
+ exports.getDevicePlatform = getDevicePlatform;
229
+ exports.isMobile = isMobile;
230
+ exports.normalizeRepeaterContent = normalizeRepeaterContent;
@@ -26,7 +26,7 @@ export class GeneralFooterTemplate {
26
26
  this.clockFormat = 'HH:MM:ss';
27
27
  this.timeZone = '';
28
28
  this.mbSource = undefined;
29
- this.dropdownLinks = false;
29
+ this.accordionLinks = false;
30
30
  this.hasErrors = false;
31
31
  this.footerContent = undefined;
32
32
  }
@@ -90,7 +90,7 @@ export class GeneralFooterTemplate {
90
90
  const FooterElement = componentRules[section].component;
91
91
  const elementIsRepeater = this.footerContent.repeaters.hasOwnProperty(section);
92
92
  const elementIsCustom = this.footerContent.wysiwyg.hasOwnProperty(section);
93
- return h(FooterElement, { class: `${section} FooterSectionContainer FooterSectionContainer${i + 1}`, userid: this.userid, session: this.session, "base-url": this.baseUrl, endpoint: this.endpoint, language: this.language, "navigate-via-event": this.navigateViaEvent, "post-message-event": this.postMessageEvent, ruleset: componentRules[section], repeaterContent: elementIsRepeater ? this.footerContent.repeaters[section] : null, customContent: elementIsCustom ? this.footerContent.wysiwyg[section].content : null, "translation-url": this.translationUrl, "clock-format": this.clockFormat, "time-zone": this.timeZone, "dropdown-links": this.dropdownLinks });
93
+ return h(FooterElement, { class: `${section} FooterSectionContainer FooterSectionContainer${i + 1}`, userid: this.userid, session: this.session, "base-url": this.baseUrl, endpoint: this.endpoint, language: this.language, "navigate-via-event": this.navigateViaEvent, "post-message-event": this.postMessageEvent, ruleset: componentRules[section], repeaterContent: elementIsRepeater ? this.footerContent.repeaters[section] : null, customContent: elementIsCustom ? this.footerContent.wysiwyg[section].content : null, "translation-url": this.translationUrl, "clock-format": this.clockFormat, "time-zone": this.timeZone, "accordion-links": this.accordionLinks });
94
94
  });
95
95
  return (h("footer", { class: "FooterContainer", ref: el => this.stylingContainer = el }, h("div", { class: "FooterGrid customStyle" }, footerSections)));
96
96
  }
@@ -407,7 +407,7 @@ export class GeneralFooterTemplate {
407
407
  "attribute": "mb-source",
408
408
  "reflect": true
409
409
  },
410
- "dropdownLinks": {
410
+ "accordionLinks": {
411
411
  "type": "boolean",
412
412
  "mutable": false,
413
413
  "complexType": {
@@ -421,7 +421,7 @@ export class GeneralFooterTemplate {
421
421
  "tags": [],
422
422
  "text": "whether dropdown behavior is enabled for the link-section-list"
423
423
  },
424
- "attribute": "dropdown-links",
424
+ "attribute": "accordion-links",
425
425
  "reflect": true,
426
426
  "defaultValue": "false"
427
427
  }