@everymatrix/casino-games-category-section 1.33.5 → 1.34.1
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/index.html
CHANGED
|
@@ -33,8 +33,8 @@
|
|
|
33
33
|
<casino-games-category-section
|
|
34
34
|
endpoint="https://demo-api.stage.norway.everymatrix.com"
|
|
35
35
|
lang="en"
|
|
36
|
-
session="
|
|
37
|
-
userid="
|
|
36
|
+
session="f139354a-99d2-48c6-8b07-7542fe53311c"
|
|
37
|
+
userid="4506648"
|
|
38
38
|
favorites="true"
|
|
39
39
|
fetchviaevent="false"
|
|
40
40
|
displayedgamecount="8"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@everymatrix/casino-games-category-section",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.34.1",
|
|
4
4
|
"main": "dist/casino-games-category-section.js",
|
|
5
5
|
"svelte": "src/index.ts",
|
|
6
6
|
"scripts": {
|
|
@@ -35,5 +35,5 @@
|
|
|
35
35
|
"publishConfig": {
|
|
36
36
|
"access": "public"
|
|
37
37
|
},
|
|
38
|
-
"gitHead": "
|
|
38
|
+
"gitHead": "5ce0bbd8d4005bb9f6fbed830e8882a14e79712a"
|
|
39
39
|
}
|
|
@@ -76,11 +76,10 @@
|
|
|
76
76
|
let container:any;
|
|
77
77
|
let maxTotal:number;
|
|
78
78
|
let categoryName:HTMLElement;
|
|
79
|
-
let favoriteGames:Array<Object>;
|
|
80
79
|
let showFavGamesCategory:boolean = false;
|
|
81
80
|
let customStylingContainer:HTMLElement;
|
|
82
81
|
let validObservers:boolean = false;
|
|
83
|
-
|
|
82
|
+
|
|
84
83
|
let thumbnailContainer:Array<HTMLElement> = new Array(10000);
|
|
85
84
|
let intersectingIndexes:Object = {};
|
|
86
85
|
let visibilityconnect:string = '';
|
|
@@ -89,6 +88,9 @@
|
|
|
89
88
|
let visibilityChange;
|
|
90
89
|
let dataloaded;
|
|
91
90
|
|
|
91
|
+
let favoriteGames:Array<Object>;
|
|
92
|
+
let listOfGamesIDs:Array<string> = [];
|
|
93
|
+
|
|
92
94
|
let favoriteGamesData:any = {
|
|
93
95
|
items: [],
|
|
94
96
|
count: 0,
|
|
@@ -141,50 +143,56 @@
|
|
|
141
143
|
});
|
|
142
144
|
});
|
|
143
145
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
+
// Start favored games section
|
|
147
|
+
const getFavoritesGames = (sessionID:string, playerID:string) => {
|
|
146
148
|
let url = `${endpoint}/v1/player/${playerID}/favorites/`;
|
|
147
|
-
|
|
148
149
|
isLoading = true;
|
|
149
150
|
let options = {
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
151
|
+
method: "GET",
|
|
152
|
+
headers: {
|
|
153
|
+
'X-SessionID': sessionID,
|
|
154
|
+
}
|
|
154
155
|
};
|
|
155
156
|
|
|
156
157
|
return new Promise((resolve, reject) => {
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
158
|
+
fetch(url, options)
|
|
159
|
+
.then((res:any) => res.json())
|
|
160
|
+
.then((updatedArray:any) => {
|
|
161
|
+
isLoading = false;
|
|
162
|
+
|
|
163
|
+
if (updatedArray) {
|
|
164
|
+
favoriteGames = updatedArray.items;
|
|
165
|
+
favoriteGames.forEach((fav) => {
|
|
166
|
+
if (!listOfGamesIDs.includes(fav.id)) {
|
|
167
|
+
listOfGamesIDs.push(fav.id);
|
|
168
|
+
}
|
|
169
|
+
});
|
|
170
|
+
window.postMessage({ type: 'UpdateFavoritesCount', favoriteGames});
|
|
171
|
+
} else {
|
|
172
|
+
favoriteGames = [];
|
|
173
|
+
}
|
|
161
174
|
|
|
162
|
-
|
|
163
|
-
favoriteGames = updatedArray.items;
|
|
164
|
-
} else {
|
|
165
|
-
favoriteGames = [];
|
|
166
|
-
}
|
|
175
|
+
if(categoryid === 'FAVORITES') showFavoriteSection(favoriteGames);
|
|
167
176
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
177
|
+
shownCategoryData.forEach((item) => {
|
|
178
|
+
item.isFavorite = checkFavorite(item.id);
|
|
179
|
+
});
|
|
171
180
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
181
|
+
let aux:any = shownCategoryData;
|
|
182
|
+
shownCategoryData = undefined;
|
|
183
|
+
shownCategoryData = aux;
|
|
175
184
|
|
|
176
|
-
|
|
185
|
+
resolve(favoriteGames);
|
|
177
186
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
});
|
|
187
|
+
}).catch((err:any) => {
|
|
188
|
+
console.error(err);
|
|
189
|
+
reject(err);
|
|
190
|
+
});
|
|
191
|
+
});
|
|
184
192
|
}
|
|
185
193
|
|
|
186
194
|
// @TODO categoryId type
|
|
187
|
-
const getData = (
|
|
195
|
+
const getData = (categoryid:any, offset:number, limit:number) => {
|
|
188
196
|
isLoading = true;
|
|
189
197
|
let categoryidparsed = '';
|
|
190
198
|
let url:any = '';
|
|
@@ -247,7 +255,7 @@
|
|
|
247
255
|
}
|
|
248
256
|
}
|
|
249
257
|
}
|
|
250
|
-
|
|
258
|
+
|
|
251
259
|
fetch(url)
|
|
252
260
|
.then((res:any) => res.json())
|
|
253
261
|
.then((categoryData:any) => {
|
|
@@ -403,7 +411,7 @@
|
|
|
403
411
|
|
|
404
412
|
case 'CategoryChange':
|
|
405
413
|
limit = 20;
|
|
406
|
-
|
|
414
|
+
break;
|
|
407
415
|
|
|
408
416
|
case 'ApplySorter':
|
|
409
417
|
categoryid = e.data.itemId;
|
|
@@ -416,101 +424,187 @@
|
|
|
416
424
|
});
|
|
417
425
|
break;
|
|
418
426
|
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
item.isFavorite = checkFavorite(item.id);
|
|
433
|
-
});
|
|
434
|
-
shownCategoryData = categoryData.games.items;
|
|
435
|
-
showLoadCategory = false;
|
|
436
|
-
// @TODO: replace this quick fix - when there are only a few category games, the view scrolls to the footer
|
|
437
|
-
if(shownCategoryData.length < 10 && e.data.origin ==! 'filters') {
|
|
438
|
-
scrollTop = true;
|
|
439
|
-
setTimeout(() => {
|
|
440
|
-
window.postMessage({ type: 'WidgetTopReference', scrollTop }, window.location.href);
|
|
441
|
-
}, 500);
|
|
442
|
-
}
|
|
443
|
-
});
|
|
444
|
-
}
|
|
445
|
-
break;
|
|
446
|
-
|
|
447
|
-
case 'FavoriteUpdate':
|
|
448
|
-
if(categoryData) {
|
|
449
|
-
shownCategoryData = categoryData.games.items;
|
|
450
|
-
shownCategoryData.forEach((item:any) => {
|
|
427
|
+
case 'CategoryUpdate':
|
|
428
|
+
searched = false;
|
|
429
|
+
lobbyView = false;
|
|
430
|
+
searchItem = false;
|
|
431
|
+
validObservers = true;
|
|
432
|
+
categoryid = e.data.itemId;
|
|
433
|
+
if (categoryid !== 'MOSTPLAYED') {
|
|
434
|
+
showLoadCategory = false;
|
|
435
|
+
}
|
|
436
|
+
if(casinomygames !== 'true') {
|
|
437
|
+
getData(categoryid, 0, limit).then((res:any) => {
|
|
438
|
+
categoryData = res;
|
|
439
|
+
categoryData.games.items.forEach((item:any) => {
|
|
451
440
|
item.isFavorite = checkFavorite(item.id);
|
|
452
441
|
});
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
// Start favorite category section
|
|
462
|
-
case 'UpdateCategoryFavoriteGames':
|
|
463
|
-
if (e.data.receivedFavoriteResults) {
|
|
464
|
-
favoriteGames = e.data.receivedFavoriteResults.items;
|
|
465
|
-
if(e.data.favStadalone) return;
|
|
466
|
-
if(showFavGamesCategory) {
|
|
467
|
-
if(!lobbyView) {
|
|
468
|
-
window.postMessage({ type: 'CategoryUpdate', itemId: categoryid }, window.location.href);
|
|
469
|
-
}
|
|
470
|
-
} else {
|
|
471
|
-
window.postMessage({ type: 'FavoriteUpdate', lobbyScreen: e.data.lobbyScreen }, window.location.href);
|
|
442
|
+
shownCategoryData = categoryData.games.items;
|
|
443
|
+
showLoadCategory = false;
|
|
444
|
+
// @TODO: replace this quick fix - when there are only a few category games, the view scrolls to the footer
|
|
445
|
+
if(shownCategoryData.length < 10 && e.data.origin ==! 'filters') {
|
|
446
|
+
scrollTop = true;
|
|
447
|
+
setTimeout(() => {
|
|
448
|
+
window.postMessage({ type: 'WidgetTopReference', scrollTop }, window.location.href);
|
|
449
|
+
}, 500);
|
|
472
450
|
}
|
|
473
|
-
}
|
|
474
|
-
|
|
451
|
+
});
|
|
452
|
+
}
|
|
453
|
+
break;
|
|
475
454
|
|
|
476
|
-
case
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
if (item.gameModel) {
|
|
484
|
-
item.gameModel.isFavorite = item.gameModel ? true : false;
|
|
485
|
-
}
|
|
486
|
-
});
|
|
487
|
-
}
|
|
488
|
-
favoriteGamesData.items = platformFavorite(favGameArray, favoriteGamesData.items);
|
|
489
|
-
favoriteGamesData.name = "Favorites";
|
|
490
|
-
showFavGamesCategory = true;
|
|
491
|
-
isLoading = false;
|
|
492
|
-
}
|
|
493
|
-
break;
|
|
494
|
-
// End favorite category section
|
|
455
|
+
case `SetUnfavoredGame${categoryid}`:
|
|
456
|
+
removeFavoredGame(`${endpoint}/v1/player/${userid}/favorites`, session, e.data.id);
|
|
457
|
+
break;
|
|
458
|
+
|
|
459
|
+
case `SetFavoredGame${categoryid}`:
|
|
460
|
+
addFavoredGame(`${endpoint}/v1/player/${userid}/favorites`, session, e.data.id);
|
|
461
|
+
break;
|
|
495
462
|
|
|
496
463
|
case 'UserSessionID':
|
|
497
464
|
sessionID = e.data.session;
|
|
498
465
|
playerID = e.data.userID;
|
|
499
466
|
if (favorites == 'true') {
|
|
500
467
|
if (playerID && playerID.length && sessionID && sessionID.length > 0) {
|
|
501
|
-
|
|
468
|
+
getFavoritesGames(sessionID, playerID);
|
|
502
469
|
}
|
|
503
470
|
}
|
|
471
|
+
break;
|
|
504
472
|
|
|
505
|
-
|
|
506
|
-
|
|
473
|
+
case 'UpdateFavoredList':
|
|
474
|
+
if(categoryid === 'FAVORITES') updateFavoredList(e.data.url, e.data.sessionID)
|
|
475
|
+
break;
|
|
476
|
+
|
|
507
477
|
default:
|
|
508
478
|
// do nothing
|
|
509
|
-
|
|
479
|
+
break;
|
|
510
480
|
}
|
|
511
481
|
}
|
|
512
482
|
}
|
|
513
483
|
|
|
484
|
+
const addFavoriteState = () => {
|
|
485
|
+
if(categoryData) {
|
|
486
|
+
shownCategoryData = categoryData.games.items;
|
|
487
|
+
shownCategoryData.forEach((item:any) => {
|
|
488
|
+
item.isFavorite = checkFavorite(item.id);
|
|
489
|
+
});
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
//Adding fav. statement to variables
|
|
494
|
+
const checkFavorite = (gameId:string) => {
|
|
495
|
+
if (favoriteGames) {
|
|
496
|
+
if (favoriteGames.findIndex(obj => obj.id == gameId) !== -1) {
|
|
497
|
+
return true;
|
|
498
|
+
} else {
|
|
499
|
+
return false;
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
return false;
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
let addFavoredGame = async (url, sessionID, gameID) => {
|
|
506
|
+
// Wait for the updateFavoredList to complete
|
|
507
|
+
await updateFavoredList(url, sessionID);
|
|
508
|
+
|
|
509
|
+
if (!listOfGamesIDs.includes(gameID)) {
|
|
510
|
+
listOfGamesIDs.push(gameID);
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
let data = {
|
|
514
|
+
items: listOfGamesIDs
|
|
515
|
+
};
|
|
516
|
+
|
|
517
|
+
let options = {
|
|
518
|
+
method: "POST",
|
|
519
|
+
headers: {
|
|
520
|
+
'X-SessionID': sessionID,
|
|
521
|
+
'Content-Type': 'application/json',
|
|
522
|
+
'Accept': 'application/json',
|
|
523
|
+
},
|
|
524
|
+
body: JSON.stringify(data)
|
|
525
|
+
};
|
|
526
|
+
|
|
527
|
+
fetch(url, options)
|
|
528
|
+
.then((res) => res.json())
|
|
529
|
+
.then(() => {
|
|
530
|
+
window.postMessage({ type: `AddFavoriteThumbnail_${gameID}` }, window.location.href);
|
|
531
|
+
})
|
|
532
|
+
.catch((err) => {
|
|
533
|
+
console.error('Err', err);
|
|
534
|
+
});
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
const removeFavoredGame = (url:string, sessionID:string, gameID:string) => {
|
|
538
|
+
let options = {
|
|
539
|
+
method: "DELETE",
|
|
540
|
+
headers: {
|
|
541
|
+
'X-SessionID': sessionID,
|
|
542
|
+
}
|
|
543
|
+
};
|
|
544
|
+
|
|
545
|
+
fetch(`${url}/${gameID}`, options)
|
|
546
|
+
.then((res:any) => res.json())
|
|
547
|
+
.then(() => {
|
|
548
|
+
window.postMessage({ type: `RemoveFavoriteThumbnail_${gameID}` }, window.location.href);
|
|
549
|
+
updateFavoredList(url, sessionID);
|
|
550
|
+
});
|
|
551
|
+
|
|
552
|
+
if (listOfGamesIDs.includes(gameID)) {
|
|
553
|
+
listOfGamesIDs = listOfGamesIDs.filter(x => {
|
|
554
|
+
return x != gameID;
|
|
555
|
+
});
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
|
|
559
|
+
//Fetch fav list and pass to be updated
|
|
560
|
+
const updateFavoredList = async (url, sessionID) => {
|
|
561
|
+
let options = {
|
|
562
|
+
method: "GET",
|
|
563
|
+
headers: {
|
|
564
|
+
'X-SessionID': sessionID,
|
|
565
|
+
}
|
|
566
|
+
};
|
|
567
|
+
|
|
568
|
+
return fetch(url, options)
|
|
569
|
+
.then((res:any) => res.json())
|
|
570
|
+
.then((updatedArray:any) => {
|
|
571
|
+
favoriteGames = updatedArray.items;
|
|
572
|
+
if (!fetchviaevent) {
|
|
573
|
+
favoriteGames.forEach((item: any) => {
|
|
574
|
+
item.isFavorite = checkFavorite(item.id);
|
|
575
|
+
});
|
|
576
|
+
} else {
|
|
577
|
+
favoriteGames.forEach((item: any) => {
|
|
578
|
+
if (!listOfGamesIDs.includes(item.id)) {
|
|
579
|
+
listOfGamesIDs.push(item.id);
|
|
580
|
+
}
|
|
581
|
+
})
|
|
582
|
+
addFavoriteState();
|
|
583
|
+
}
|
|
584
|
+
|
|
585
|
+
if (categoryid === 'FAVORITES') { window.postMessage({ type: 'UpdateFavoritesCount', favoriteGames }); showFavoriteSection(favoriteGames); }
|
|
586
|
+
|
|
587
|
+
}).catch((err:any) => {
|
|
588
|
+
console.error(err);
|
|
589
|
+
});
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
const showFavoriteSection = (receivedFavoriteResults) => {
|
|
593
|
+
if (!receivedFavoriteResults) return;
|
|
594
|
+
let favGameArray;
|
|
595
|
+
favGameArray = receivedFavoriteResults?.items || receivedFavoriteResults || [];
|
|
596
|
+
if (favGameArray.length > 0) {
|
|
597
|
+
favGameArray.forEach((item: any) => {
|
|
598
|
+
if (item.gameModel) {
|
|
599
|
+
item.gameModel.isFavorite = true;
|
|
600
|
+
}
|
|
601
|
+
});
|
|
602
|
+
}
|
|
603
|
+
favoriteGamesData.items = platformFavorite(favGameArray, favoriteGamesData.items);
|
|
604
|
+
favoriteGamesData.name = "Favorites";
|
|
605
|
+
isLoading = false;
|
|
606
|
+
}
|
|
607
|
+
|
|
514
608
|
// @TODO categoryId type fix
|
|
515
609
|
const loadMoreGames = (categoryId:any) => {
|
|
516
610
|
limit += 1;
|
|
@@ -536,17 +630,6 @@
|
|
|
536
630
|
}
|
|
537
631
|
}
|
|
538
632
|
|
|
539
|
-
const checkFavorite = (gameId:string) => {
|
|
540
|
-
if (favoriteGames) {
|
|
541
|
-
if (favoriteGames.findIndex(obj => obj.id == gameId) !== -1) {
|
|
542
|
-
return true;
|
|
543
|
-
} else {
|
|
544
|
-
return false;
|
|
545
|
-
}
|
|
546
|
-
}
|
|
547
|
-
return false;
|
|
548
|
-
}
|
|
549
|
-
|
|
550
633
|
const addGameTag = (tags:any[]):string => {
|
|
551
634
|
if (tags?.length === 0) return '';
|
|
552
635
|
|
|
@@ -580,11 +663,10 @@
|
|
|
580
663
|
const initialSetup = () => {
|
|
581
664
|
// showFavGamesCategory vs categoryData
|
|
582
665
|
// favoriteGamesData vs shownCategoryData
|
|
583
|
-
|
|
584
666
|
switch(categoryid) {
|
|
585
667
|
case 'FAVORITES':
|
|
586
668
|
showFavGamesCategory = true;
|
|
587
|
-
|
|
669
|
+
break;
|
|
588
670
|
case 'MOSTPLAYED':
|
|
589
671
|
if(casinomygames === 'false') {
|
|
590
672
|
showFavGamesCategory = false;
|
|
@@ -644,25 +726,23 @@
|
|
|
644
726
|
}
|
|
645
727
|
|
|
646
728
|
onMount(() => {
|
|
647
|
-
if(fetchviaevent === 'true'){
|
|
648
729
|
window.addEventListener('visibilitychange', (e) => handleVisibilityChange())
|
|
649
730
|
window.addEventListener('message', messageHandler, false);
|
|
650
|
-
|
|
651
|
-
window.postMessage({ type: 'GetFavoredGame' }, window.location.href);
|
|
652
|
-
}
|
|
731
|
+
|
|
653
732
|
|
|
654
733
|
return () => {
|
|
655
734
|
window.removeEventListener('message', messageHandler);
|
|
656
735
|
window.removeEventListener('visibilitychange', messageHandler);
|
|
657
736
|
}
|
|
658
|
-
}
|
|
659
737
|
});
|
|
660
738
|
|
|
661
739
|
$: lang && setActiveLanguage();
|
|
740
|
+
//Widget is working as standalone when fetchviaevent isn't set
|
|
662
741
|
$: (fetchviaevent === 'false' || fetchviaevent === '') && endpoint && lang && categoryid && datasource && displayedgamecount && showallbuttongamescount && fetchGamesByCategory(categoryid, displayedgamecount, showallbuttongamescount);
|
|
663
|
-
|
|
742
|
+
//Call the fav. list fetch when widget is standalone
|
|
743
|
+
$: favorites === 'true' && endpoint && session && userid && getFavoritesGames(session, userid);
|
|
664
744
|
$: dataloaded && thumbnailContainer && setupObserver();
|
|
665
|
-
$: lang && categoryid && initialSetup();
|
|
745
|
+
$: lang && categoryid && userid && session && initialSetup();
|
|
666
746
|
$: translationurl && setTranslationUrl();
|
|
667
747
|
$: clientstyling && customStylingContainer && setClientStyling();
|
|
668
748
|
$: clientstylingurl && customStylingContainer && setClientStylingURL();
|
|
@@ -711,6 +791,7 @@
|
|
|
711
791
|
lang={lang}
|
|
712
792
|
searchitem={searchItem}
|
|
713
793
|
favorites={favorites}
|
|
794
|
+
categoryid={categoryid}
|
|
714
795
|
gamethumbnail={gameprops.thumbnail}
|
|
715
796
|
gamename={gameprops.name}
|
|
716
797
|
gamevendor={gameprops.vendor.name}
|
|
@@ -796,6 +877,7 @@
|
|
|
796
877
|
class="{MASONRY_CLASS_PREFIX}{gameprops.cellSize ? gameprops.cellSize : '1x1'}"
|
|
797
878
|
part="{MASONRY_CLASS_PREFIX}{gameprops.cellSize ? gameprops.cellSize : '1x1'}"
|
|
798
879
|
favorites={favorites}
|
|
880
|
+
categoryid={categoryid}
|
|
799
881
|
gamethumbnail={gameprops.thumbnail}
|
|
800
882
|
gamename={gameprops.name}
|
|
801
883
|
gamevendor={gameprops.vendor.name}
|
|
@@ -858,6 +940,7 @@
|
|
|
858
940
|
userid={userid}
|
|
859
941
|
lang={lang}
|
|
860
942
|
favorites={favorites}
|
|
943
|
+
categoryid={categoryid}
|
|
861
944
|
gamethumbnail={gameprops.gameModel.thumbnail}
|
|
862
945
|
gamename={gameprops.gameModel.name}
|
|
863
946
|
gamevendor={gameprops.gameModel.vendor.name}
|
|
@@ -891,6 +974,7 @@
|
|
|
891
974
|
userid={userid}
|
|
892
975
|
lang={lang}
|
|
893
976
|
favorites={favorites}
|
|
977
|
+
categoryid={categoryid}
|
|
894
978
|
gamethumbnail={gameprops.gameModel.thumbnail}
|
|
895
979
|
gamename={gameprops.gameModel.name}
|
|
896
980
|
gamevendor={gameprops.gameModel.vendor.name}
|