@everymatrix/casino-tournaments-page-controller 1.44.0 → 1.45.2

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.
Files changed (44) hide show
  1. package/components/CasinoTournamentsDetails-CTbLTCNq.js +861 -0
  2. package/components/CasinoTournamentsDetails-CdFtnk8v.cjs +1 -0
  3. package/components/CasinoTournamentsPageController-BX5_-OUG.cjs +25 -0
  4. package/components/CasinoTournamentsPageController-By8Qf6Sl.js +8516 -0
  5. package/components/CasinoTournamentsRank-BPHA2JPF.js +271 -0
  6. package/components/CasinoTournamentsRank-Ccr8Z0om.cjs +1 -0
  7. package/components/CasinoTournamentsTab-CmF1j5XE.js +281 -0
  8. package/components/CasinoTournamentsTab-DXUCFgtb.cjs +1 -0
  9. package/components/CasinoTournamentsTable-8HJDxcSe.cjs +1 -0
  10. package/components/CasinoTournamentsTable-DL6KVTDX.js +1671 -0
  11. package/components/CasinoTournamentsThumbnail--BxjqzmL.cjs +4 -0
  12. package/components/CasinoTournamentsThumbnail-NcOyz0gt.js +866 -0
  13. package/components/CasinoTournamentsThumbnailController-B3YbDJuf.cjs +1 -0
  14. package/components/CasinoTournamentsThumbnailController-pROl7BE2.js +1406 -0
  15. package/components/CasinoTournamentsThumbnailDuration-Icm0PzJz.js +496 -0
  16. package/components/CasinoTournamentsThumbnailDuration-_PXBJwAk.cjs +1 -0
  17. package/components/CasinoTournamentsThumbnailGamesSlider-C4oebmHa.js +439 -0
  18. package/components/CasinoTournamentsThumbnailGamesSlider-DOXcgDnK.cjs +1 -0
  19. package/components/CasinoTournamentsThumbnailPrizes-Dgkbf6BO.cjs +1 -0
  20. package/components/CasinoTournamentsThumbnailPrizes-Oy21zp8B.js +311 -0
  21. package/components/CasinoTournamentsThumbnailRule-BMRBfYRJ.cjs +1 -0
  22. package/components/CasinoTournamentsThumbnailRule-BqQsSnWS.js +1110 -0
  23. package/es2015/casino-tournaments-page-controller.cjs +1 -0
  24. package/es2015/casino-tournaments-page-controller.js +16 -0
  25. package/package.json +22 -32
  26. package/.eslintrc +0 -84
  27. package/CHANGELOG.md +0 -7
  28. package/README.md +0 -0
  29. package/dist/casino-tournaments-page-controller.js +0 -2
  30. package/dist/casino-tournaments-page-controller.js.map +0 -1
  31. package/documentation.md +0 -119
  32. package/index.html +0 -35
  33. package/index.js +0 -1
  34. package/public/favicon.png +0 -0
  35. package/public/reset.css +0 -48
  36. package/rollup.config.js +0 -67
  37. package/src/CasinoTournamentsPageController.svelte +0 -871
  38. package/src/i18n.js +0 -28
  39. package/src/images/game-casino.svg +0 -684
  40. package/src/images/game-sports.svg +0 -485
  41. package/src/index.ts +0 -4
  42. package/src/translations.js +0 -182
  43. package/stories/CasinoTournamentsPageController.stories.js +0 -13
  44. package/tsconfig.json +0 -6
@@ -1,871 +0,0 @@
1
- <svelte:options tag={null}/>
2
-
3
- <script lang="ts">
4
- import { onMount } from 'svelte';
5
- import moment from 'moment';
6
- import { isMobile, getDevice, checkSession } from 'rvhelper';
7
- import { _, addNewMessages, date, setLocale, setupI18n } from './i18n';
8
- import { TRANSLATIONS } from './translations';
9
- import { EventSourcePolyfill } from 'event-source-polyfill';
10
-
11
- import gameCasinoSvg from './images/game-casino.svg';
12
- import gameSportsSvg from './images/game-sports.svg'
13
-
14
- import '@everymatrix/casino-tournaments-details';
15
- import '@everymatrix/casino-tournaments-thumbnail-controller';
16
- import '@everymatrix/casino-tournaments-table';
17
- import '@everymatrix/casino-tournaments-tab';
18
- import '@everymatrix/casino-tournaments-thumbnail-rule';
19
- import '@everymatrix/casino-tournaments-rank';
20
-
21
- export let session: string = '';
22
- export let userid: string = '';
23
- export let tourid: string = '';
24
- export let endpoint: string = '';
25
- export let showleaderboard: string = '';
26
- export let cmsendpoint: string = '';
27
- export let lang: string = '';
28
- export let navigationbackbutton: string = 'Default';
29
- export let currency: string = 'EUR';
30
- export let tablelimit: string = '30';
31
- export let namemask: string = '';
32
- export let showunqualifiedplayer: string = 'true'
33
- export let mobiletablelimit:string = '15';
34
- export let updatetableintime:string = 'true';
35
- export let viewmode:string = '';
36
- export let minscore:string = '';
37
- export let scorefractiondigit: string = '2';
38
- export let translationurl:string = '';
39
-
40
- export let leaderboardoffset:string = '0';
41
- export let leaderboardlimit:string = '15';
42
- export let keepbrowsercontext:string = 'false';
43
- export let clientstyling:string = '';
44
- export let clientstylingurl:string = '';
45
- // Variables of topics for communication
46
- let sessionTopic;
47
-
48
- let isLoggedIn: boolean = false;
49
- let sessionID: string = '';
50
- let playerID: string = '';
51
- let isLoading: boolean = true;
52
- let tournamentDescription: Array<any> = [];
53
- let tournamentProducts:any;
54
-
55
- let tournamentDetails: any = undefined;
56
- let tournamentTableData: any = undefined;
57
-
58
- let userAgent = window.navigator.userAgent;
59
-
60
- let showTable: boolean = false;
61
- let firstRowData: any = {};
62
- let firstRowAvailable: boolean = false;
63
-
64
- let tableUpdateEventSource: any;
65
- let tournamentUpdateEventSource:EventSourcePolyfill;
66
-
67
- let currentUserData:any = {};
68
- let currentUserInPage:Boolean = false;
69
- let activeTab = 'leaderboard';
70
- let overallRank:number;
71
- let latestRank:number;
72
- let isMiniMode:boolean;
73
- let shownStatus:any = '';
74
- let customStylingContainer:HTMLElement;
75
- let clientTranslation: any
76
-
77
- setupI18n({ withLocale: 'en', translations: {}});
78
-
79
- const setTranslationUrl = ():void => {
80
- let url:string = translationurl;
81
-
82
- fetch(url).then((res:any) => res.json())
83
- .then((res) => {
84
- clientTranslation = res
85
- Object.keys(res).forEach((item:any):void => {
86
- addNewMessages(item, res[item]);
87
- });
88
- }).catch((err:any) => {
89
- console.log(err);
90
- });
91
- }
92
-
93
- Object.keys(TRANSLATIONS).forEach((item: any) => {
94
- addNewMessages(item, TRANSLATIONS[item]);
95
- });
96
-
97
- const applyTranslation = (translation: any) => {
98
- if(!translation) return;
99
- Object.keys(translation).forEach((item:any):void => {
100
- addNewMessages(item, translation[item]);
101
- });
102
- }
103
-
104
- // @TODO this must be configurable
105
- const tableColumns = ['Rank', 'Player', 'Points','Prize'];
106
- // data for current user
107
- const transFormCurrentUserData = (item:any) => {
108
- const _fractiondigit = Number(scorefractiondigit) || 2
109
-
110
- let userData = {
111
- Rank: item.rank,
112
- Player: item.userID == playerID ? "me" : item.shortName,
113
- Points: item.score.toLocaleString('en-US', {
114
- minimumFractionDigits: _fractiondigit,
115
- maximumFractionDigits: _fractiondigit
116
- }),
117
- Prize: item.prizeName,
118
- Unqualified: item.unqualified,
119
- BetCount: item.betCount,
120
- userID: item.userID
121
- };
122
- return userData;
123
- }
124
-
125
- const transFormCurrentUserDataAtFistRow = (item: any) => ({
126
- ...transFormCurrentUserData(item),
127
- ...(item.unqualified === true ? { Rank: item.rank } : {})
128
- })
129
-
130
- // @TODO data type
131
- const transformTableData = (data:any) => {
132
-
133
- currentUserInPage = false
134
-
135
- let tableData:any = [];
136
-
137
- if (data && data.length > 0) {
138
- data.forEach((item:any) => {
139
- let transformedItem = transFormCurrentUserData(item)
140
- if(item.userID == playerID){
141
- currentUserData = transformedItem;
142
- currentUserInPage = true;
143
- }
144
- tableData.push(transformedItem);
145
- });
146
- }
147
-
148
- return tableData;
149
- },
150
- tournamentUpdateMessageHandler= (message:any) =>{
151
- if(!message.data){
152
- return;
153
- }
154
- try{
155
- let messagDataAsJson = JSON.parse(message.data);
156
- if(messagDataAsJson.messageType == 'TournamentUpdate'){
157
- window.postMessage({type: 'UpdateTournamentView', tournamentData: messagDataAsJson.item}, window.location.href);
158
- tournamentDetails = messagDataAsJson.item;
159
- transformTournamentData(messagDataAsJson.item);
160
- matchStatus();
161
- }
162
- }catch (e){
163
- console.error(e);
164
- }
165
- },
166
- startupTournamentUpdateListener = (tournamentID: string, searchParams:any)=>{
167
- let endpointURL:string = `${endpoint}/v1/tournaments/updates?filter=id=${tournamentID}&${searchParams.toString()}`;
168
- tournamentUpdateEventSource = new EventSourcePolyfill(endpointURL,{headers: {'accept': 'text/event-stream','X-SessionId': session}});
169
- if (!typeof (tournamentUpdateEventSource) != 'undefined'){
170
- tournamentUpdateEventSource.addEventListener('message', tournamentUpdateMessageHandler);
171
- }
172
- },
173
- tableUpdateMessageHandler = (message:any)=>{
174
- if(!message.data){
175
- return;
176
- }
177
- try{
178
- let messageData:any = message.data;
179
- let updateTableData:any = JSON.parse(messageData);
180
- if(!updateTableData || !updateTableData.items){
181
- return;
182
- }
183
- let newTableData: Array<LeaderboardRow> = transformTableData(updateTableData.items);
184
- window.postMessage({ type: 'CasinoTableData', tableData: newTableData }, window.location.href);
185
- currentUserInPage = newTableData.filter((item)=>{
186
- return item.userID = playerID;
187
- }).length > 0;
188
- if(updateTableData.item){
189
- firstRowAvailable = true;
190
- firstRowData = transFormCurrentUserDataAtFistRow(updateTableData.item);
191
- if(firstRowData){
192
- window.postMessage({ type: 'CasinoTableFirstRowData', tableData: firstRowData }, window.location.href);
193
- }
194
- }
195
-
196
- let newUserRank = currentUserInPage ? currentUserData.Rank : firstRowData.Rank;
197
- if(newUserRank != latestRank || overallRank != updateTableData.items.length){
198
- overallRank = updateTableData.items.length;//new player joined and spined
199
- window.postMessage({type: `TournamentRankInfo_${tourid}`, rankInfo:{
200
- rank: newUserRank,
201
- overallRank: overallRank,
202
- prize: currentUserInPage ? (currentUserData.Prize || '-') : (firstRowData.Prize || '-')
203
- }}, window.location.href);
204
- latestRank = newUserRank;
205
- }
206
-
207
- if(currentUserInPage){
208
- window.postMessage({ type: 'CasinoTableCurrentUserData', tableData: currentUserData }, window.location.href);
209
- }
210
- }catch(err){
211
- console.error(err);
212
- }
213
- },
214
- startupTableDataChangeListener = (tournamentID: String, searchParams: any) => {
215
- let endpointURL: String = `${endpoint}/v1/tournaments/${tournamentID}/leaderboard/updates?HeartBeat=false&${searchParams.toString()}`;
216
- if(tableUpdateEventSource){
217
- return;
218
- }
219
- tableUpdateEventSource = new EventSourcePolyfill(endpointURL,{headers: {'accept': 'text/event-stream','X-SessionId': session}});
220
- if (typeof (tableUpdateEventSource) != "undefined") {
221
- tableUpdateEventSource.addEventListener('open', tableUpdateMessageHandler);
222
- tableUpdateEventSource.addEventListener('message', tableUpdateMessageHandler);
223
- tableUpdateEventSource.addEventListener('error', tableUpdateMessageHandler);
224
- }
225
- },
226
- transformTournamentData = (data:any)=>{
227
- let productInfo={currency};
228
- if(data.wallet){
229
- let wallet = data.wallet;
230
- if(wallet.casino){
231
- productInfo['casino'] = {
232
- name: 'Casino',
233
- minbet: wallet.casino?.minStake?.amount[currency] || $_('unlimited'),
234
- maxbet: wallet.casino?.maxStake?.amount[currency] || $_('unlimited')
235
- }
236
- }
237
- if(wallet.sports){
238
- productInfo['sports'] = {
239
- name: 'Sports',
240
- minbet: wallet.sports?.minStake?.amount[currency] || $_('unlimited') ,
241
- maxbet: wallet.sports?.maxStake?.amount[currency] || $_('unlimited')
242
- }
243
- }
244
- tournamentProducts = productInfo;
245
- }
246
- }
247
-
248
- const getData = (endpointURL: String, tourID: String) => {
249
- let url = new URL(endpointURL + `/v1/tournaments/${tourID}`);
250
- let reqHeaders = new Headers({'X-SessionId': session});
251
-
252
- url.searchParams.append('expand', 'games');
253
- url.searchParams.append('language', lang);
254
- url.searchParams.append('platform', getDevice(userAgent));
255
-
256
- let requestOptions = {
257
- method: 'GET',
258
- headers: reqHeaders,
259
- };
260
-
261
- fetch(url.href, requestOptions)
262
- .then((res: any) => res.json())
263
- .then((res: any) => {
264
- tournamentDetails = res.item;
265
- transformTournamentData(tournamentDetails);
266
- startupTournamentUpdateListener(tourid, url.searchParams);
267
- });
268
- }
269
-
270
- const getTableData = (endpointURL: String, tourID: String) => {
271
- let url = new URL(endpointURL + `/v1/tournaments/${tourID}/leaderboard`);
272
- let reqHeaders = new Headers();
273
-
274
- url.searchParams.append('language', lang);
275
-
276
- let tableFilter = `includeUnqualifiedPlayer=${showunqualifiedplayer}`;
277
- tableFilter = namemask ? `${tableFilter},shortNameMask=${namemask}` : tableFilter;
278
- tableFilter = minscore ? `${tableFilter},minscore=${minscore}` : tableFilter;
279
-
280
- url.searchParams.append('filter', tableFilter);
281
-
282
- if (session) {
283
- let limit = isMobile(userAgent) == true? mobiletablelimit : tablelimit;
284
- url.searchParams.append('pagination', `offset=0,limit=${limit}`);
285
- reqHeaders.append('X-SessionId', session);
286
- }
287
- url.searchParams.append('platform', getDevice(userAgent));
288
-
289
- let requestOptions = {
290
- method: 'GET',
291
- headers: reqHeaders,
292
- };
293
-
294
- fetch(url, requestOptions)
295
- .then((res: any) => res.json())
296
- .then((res: any) => {
297
- tournamentTableData = transformTableData(res.items);
298
- if(res.item && !currentUserInPage){
299
- firstRowAvailable = true;
300
- firstRowData = transFormCurrentUserDataAtFistRow(res.item);
301
- }
302
- showTable = true;
303
- latestRank = currentUserInPage ? currentUserData.Rank : firstRowData.Rank
304
- overallRank = res.total;
305
-
306
- // @TODO data is not iterable error fix
307
- window.postMessage({
308
- type: 'CasinoTableData',
309
- tableData: tournamentTableData
310
- }, window.location.href);
311
- window.postMessage({type: 'CasinoTableColumns', tableColumns}, window.location.href);
312
- if (firstRowAvailable) {
313
- window.postMessage({type: 'CasinoTableFirstRowData', tableData: firstRowData}, window.location.href);
314
- }
315
- if(updatetableintime === 'true'){
316
- startupTableDataChangeListener(tourID, url.searchParams);
317
- }
318
- if (currentUserInPage){
319
- window.postMessage({ type: 'CasinoTableCurrentUserData', tableData: currentUserData }, window.location.href);
320
- }
321
- });
322
- }
323
-
324
- const messageHandler = (e: any) => {
325
- if (e.data && e.data.type == 'UserSessionID') {
326
- isLoggedIn = true;
327
- sessionID = e.data.session;
328
- }
329
-
330
- if (e.data && e.data.type == 'PlayerID') {
331
- playerID = e.data.playerID;
332
- }
333
- if(e.data && e.data.type == 'TournamentsTabSwitch'){
334
- activeTab = e.data.tab;
335
- }
336
- if(e.data && e.data.type === 'TournamentThumbnailMounted'){
337
- applyTranslation(clientTranslation);
338
- }
339
- }
340
-
341
- const matchStatus = () => {
342
- if (tournamentDetails.state == 'Unstarted') {
343
- shownStatus = $_('scheduled');
344
- }
345
-
346
- if (tournamentDetails.state == 'Running') {
347
- shownStatus = $_('ongoing');
348
- }
349
-
350
- if (tournamentDetails.state == 'Closed' || tournamentDetails.state == 'Closing') {
351
- shownStatus = $_('finished');
352
- }
353
- }
354
-
355
- const goBack = () => {
356
- // this function handles the back navigation making use of the prop: navigationbackbutton. If it has the
357
- // event value, it will emit the 'RedirectBack' event which will enable the client to handle the routing;
358
- // else, if it has the 'Default' value, it will do a window.history.back()
359
- if (navigationbackbutton == 'Event') {
360
- window.postMessage({type: 'RedirectBack'}, window.location.href);
361
- } else if (navigationbackbutton == 'Default') {
362
- window.history.back();
363
- }
364
- }
365
- const closeThumbnail = () =>{
366
- window.postMessage({ type: 'OnCloseThumbnail' }, window.location.href);
367
- }
368
- const gotoFromTournamentsPage = (pageType: string) =>{
369
- window.postMessage({ type: 'GotoFromTournamentsPage', pageType }, window.location.href);
370
- }
371
-
372
- const setSession = () => {
373
- if (session.length > 0 && session != 'false') {
374
- sessionID = session;
375
- playerID = userid;
376
- isLoggedIn = true;
377
- } else {
378
- isLoggedIn = false;
379
- }
380
-
381
- isLoading = false;
382
- }
383
- const setActiveLanguage = ():void => {
384
- setLocale(lang);
385
- setTimeout(() => {
386
- initTabTitle()
387
- }, 10)
388
- }
389
- const initialLoad = () => {
390
- setLocale(lang);
391
- getData(endpoint, tourid);
392
- getTableData(endpoint, tourid);
393
- }
394
-
395
- const getDataFromCMS = () => {
396
- fetch(`${cmsendpoint}/${tourid}`)
397
- .then((res: any) => res.json())
398
- .then((data: any) => {
399
- if (data && data.details) {
400
- tournamentDescription = data.details;
401
- }
402
- });
403
- }
404
- const initTabTitle= () =>{
405
- window.postMessage({type: 'TournamentsTabLocaleTextUpdate','state': 'leaderboard', 'text': $_('leaderBoard')}, window.location.href)
406
- window.postMessage({type: 'TournamentsTabLocaleTextUpdate','state': 'rules', 'text': $_('rules')}, window.location.href)
407
- window.postMessage({type: 'TournamentsTabLocaleTextUpdate','state': 'games', 'text': $_('games')}, window.location.href)
408
- }
409
-
410
- const setClientStyling = ():void => {
411
- let sheet = document.createElement('style');
412
- sheet.innerHTML = clientstyling;
413
- customStylingContainer.appendChild(sheet);
414
- }
415
-
416
- const setClientStylingURL = ():void => {
417
- let url:URL = new URL(clientstylingurl);
418
- let cssFile:HTMLElement = document.createElement('style');
419
-
420
- fetch(url.href)
421
- .then((res:any) => res.text())
422
- .then((data:any) => {
423
- cssFile.innerHTML = data
424
-
425
- setTimeout(() => { customStylingContainer.appendChild(cssFile) }, 1);
426
- });
427
- }
428
-
429
- onMount(() => {
430
- window.addEventListener('message', messageHandler, false);
431
- return () => {
432
- window.removeEventListener('message', messageHandler);
433
- if(tableUpdateEventSource){
434
- tableUpdateEventSource.removeEventListener('open', tableUpdateMessageHandler);
435
- tableUpdateEventSource.removeEventListener('message', tableUpdateMessageHandler);
436
- tableUpdateEventSource.removeEventListener('error', tableUpdateMessageHandler);
437
- }
438
- if(tournamentUpdateEventSource){
439
- tournamentUpdateEventSource.removeEventListener('message', tournamentUpdateMessageHandler);
440
- }
441
- }
442
- });
443
-
444
- $: session && userid && setSession();
445
- $: lang && setActiveLanguage();
446
- $: translationurl && setTranslationUrl();
447
- $: initialParameters = tourid && endpoint && session && lang;
448
- $: initialParameters && initialLoad();
449
- $: cmsendpoint && tourid && getDataFromCMS();
450
- $: isMiniMode = (viewmode != 'desktop') && isMobile(userAgent); // forward this page from tournamentslider
451
- $: clientstyling && customStylingContainer && setClientStyling();
452
- $: clientstylingurl && customStylingContainer && setClientStylingURL();
453
-
454
- // fix bug caused by svelte ^3.44 https://github.com/sveltejs/svelte/issues/7037
455
- $: betCount = tournamentDetails?.minBetCount || $_('unlimited')
456
- </script>
457
-
458
- {#if isLoading}
459
- <p class="LoadingMessage" part="LoadingMessage">
460
- {$_('loading')}
461
- </p>
462
- {/if}
463
- {#if !isMiniMode}
464
- <div class="TournamentsPage" part="TournamentsPage" bind:this={customStylingContainer}>
465
- <div class="TournamentsSectionWrapper" part="TournamentsSectionWrapper">
466
-
467
- <div class="TopButtons" part="TopButtons">
468
- <div class="BackButton" part="BackButton" on:click={() => goBack()}>
469
- <svg fill="none" stroke="currentColor" width="24" height="24" viewBox="0 0 24 24"
470
- xmlns="http://www.w3.org/2000/svg">
471
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 19l-7-7 7-7"></path>
472
- </svg>
473
- <p>{$_('back')}</p>
474
- </div>
475
- </div>
476
-
477
- <div class="TournamentContentDetails {isMobile(userAgent) ? 'MobileClass' : ''}"
478
- part="TournamentContentDetails {isMobile(userAgent) ? 'MobileClass' : ''}">
479
- <div
480
- class="{isMobile(userAgent) ? 'MobileClass' : ''}{showleaderboard == 'true' ? 'TournamentCardDetails' : 'FullSize'}"
481
- part="{isMobile(userAgent) ? 'MobileClass' : ''}{showleaderboard == 'true' ? 'TournamentCardDetails' : 'FullSize'}">
482
- {#if tournamentDetails}
483
- <casino-tournaments-thumbnail-controller
484
- session={session}
485
- userid={userid}
486
- endpoint={endpoint}
487
- tournamenturl={tournamentDetails.href}
488
- showdetails="false"
489
- showslider="true"
490
- showenrolled="true"
491
- fullsize={!!showleaderboard}
492
- {clientstyling}
493
- {clientstylingurl}
494
- {lang}
495
- {currency}
496
- {keepbrowsercontext}
497
- exportparts="Thumbnail, Status, Enrolled, CardImg, CardImgFinished, Details, Title, Date, ScoreCriteria, Games, TournamentPrizes, TournamentPrizesSvg, a, TournamentPrizesSvgA, PrizesTitle, Prizes, Prize, PrizeText, PrizeRank,
498
- TournamentDuration, TournamentDates, StartDate, EndDate, ProgressBar, ProgressBarFillEnd, Finished, ProgressBarFillStarting, Remaining, ProgressBarFill,
499
- TournamentsGamesSlider, SliderNavButton, items, item, PlayNowButton, itemHover, SliderNavButton
500
- TournamentCard, CardMaxWidth, CardFullSize, elementToFadeOut, elementToFadeIn, ph-item, ph-col-12, ph-picture, ph-row, ph-col-6, big, ph-col-4, empty, ph-col-8, TournamentButtons, LoginButton, RegisterButton, DetailsButton, EnrolledButton, JoinButton, JoinButtonFullSize, spinner, DetailsLargeButton, ErrorText, StatusUnstarted, StatusRunning, StatusClosed, StatusClosing, TournamentPrizesIconSection, TournamentPrizesIconWrapper"
501
- ></casino-tournaments-thumbnail-controller>
502
- {/if}
503
- {#if tournamentDescription.length > 0}
504
- {#each tournamentDescription as desc}
505
- <casino-tournaments-details
506
- title={desc.title}
507
- text={desc.description}
508
- exportparts="DetailsCard, DetailsTitle, Title, CollapseButtonDetails, DetailsContent"
509
- {clientstyling}
510
- {clientstylingurl}
511
- >
512
- </casino-tournaments-details>
513
- {/each}
514
- {/if}
515
- </div>
516
-
517
- <div class="{showleaderboard == 'true' ? 'TournamentTableDetails ' : 'DisplayNone'}"
518
- part="{showleaderboard == 'true' ? 'TournamentTableDetails ' : 'DisplayNone'}">
519
- {#if showleaderboard == "true"}
520
- {#if showTable == true}
521
- <casino-tournaments-table
522
- firstrow="true"
523
- sortable="false"
524
- {lang}
525
- {clientstyling}
526
- {clientstylingurl}
527
- exportparts="TableContent, TableUser, TableHeadRow, TableCell, CurrentUserRow, UnqualifiedRow, TableRank, Rank-1, Rank-2, Rank-3, RankFirstRow, TablePlayer, TablePoints, TablePrize, Qualified, TableUserTooltips, TableUserTooltipsEm, ExclamationMark,
528
- TournamentsTable, LeftTable, LeftTableThead, LeftTableTr, LeftTableTh, LeftTableTd, LeftTableTdEm, LeftTableButton, LeftTableP, LeftTableTbody, FirstRow, RankCol, ScoreChangeFlag, Show, Hidden, Rank_Arror_UP, Rank_Arror_Down, ScoreUp, Flex, RightButton, CollapseButton, TooltipsRow"
529
- ></casino-tournaments-table>
530
- {/if}
531
- {/if}
532
- </div>
533
-
534
- </div>
535
- </div>
536
- </div>
537
- {/if}
538
- {#if isMiniMode }
539
- <div class="TournamentsPage MiniMode {tournamentDetails ? 'hidden':''}" part="MiniTournamentPage" bind:this={customStylingContainer}>
540
- <div class="TournamentContentDetails {isMobile(userAgent) ? 'MobileClass' : ''}" part="TournamentContentDetails">
541
- <div class="{isMobile(userAgent) ? 'MobileClass' : ''}{showleaderboard == 'true' ? ' TournamentCardDetails' : ' FullSize'}" part="MobileTournamentCardDetails">
542
- {#if !tournamentDetails}
543
- <div class="Thumbnail MiniMode" part="MiniThumbnail">
544
- <img part="CardImg" class="CardImg {(status == 'Closing' || status == 'Closed') ? 'CardImgFinished' : ''}" src="https://i.stack.imgur.com/y9DpT.jpg"
545
- width="65px" height="40px" title="">
546
- <div class="MobileRight" part="ThumbnailRight">
547
- <div class="Title"> </div>
548
- <div>
549
- </div>
550
- </div>
551
- <div class="CloseButton" part="CloseButton" on:click='{()=>closeThumbnail()}'>X</div>
552
- </div>
553
- <casino-tournaments-rank
554
- {clientstyling}
555
- {clientstylingurl}
556
- prize="-"
557
- exportparts="casino-tournaments-rank, Rank, Icon, UserIcon, RankText, Rank_Arror_UP, Rank_Arror_Down, Prize, Icon, PrizeIcon, PrizeText"
558
- ></casino-tournaments-rank>
559
- {/if}
560
- {#if tournamentDetails}
561
- <div class="Thumbnail MiniMode" part="MiniThumbnail">
562
- {#if tournamentDetails.thumbnail}
563
- <img use:matchStatus part="CardImg" class="Mobile CardImg {(tournamentDetails.state == 'Closing' || tournamentDetails.state == 'Closed') ? 'CardImgFinished' : ''}"
564
- src="{tournamentDetails.thumbnail}" width="65px" height="40px" title="{tournamentDetails.nameOrTitle}">
565
- {:else}
566
- <img use:matchStatus part="CardImg" class="CardImg {(tournamentDetails.state == 'Closing' || tournamentDetails.state == 'Closed') ? 'CardImgFinished' : ''}" src="https://i.stack.imgur.com/y9DpT.jpg"
567
- width="65px" height="40px" title="{tournamentDetails.nameOrTitle}">
568
- {/if}
569
- <div class="MobileRight" part="ThumbnailRight">
570
- <div class="Title" part="ThumbnailRight_Title">{tournamentDetails.nameOrTitle}</div>
571
- <div part="ThumbnailRight_Period">
572
- {#if tournamentDetails.startTime}
573
- {$_('activePeriod', {values: {startdate: moment(tournamentDetails.startTime).format('DD/MM/YYYY HH:mm'), enddate:moment(tournamentDetails.endTime).format('DD/MM/YYYY HH:mm')}})}
574
- {/if}
575
- </div>
576
- </div>
577
- <div class="CloseButton" part="CloseButton" on:click='{()=>closeThumbnail()}'>X</div>
578
- </div>
579
-
580
- <casino-tournaments-rank part="ThumbnailRank" userrank="{currentUserInPage ? currentUserData.Rank : firstRowData.Rank}" overallrank="{overallRank}"
581
- prize="{currentUserInPage ? (currentUserData.Prize || '-') : (firstRowData.Prize || '-')}" tournamentid="{tourid}"
582
- exportparts="casino-tournaments-rank, Rank, Icon, UserIcon, RankText, Rank_Arror_UP, Rank_Arror_Down, Prize, Icon, PrizeIcon, PrizeText"
583
- {clientstyling}
584
- {clientstylingurl}
585
- ></casino-tournaments-rank>
586
- {/if}
587
- </div>
588
- <casino-tournaments-tab part="ThumbnailTab" use:initTabTitle tabs="leaderboard,rules,games" tab="leaderboard"
589
- exportparts="CustomStylingContainer, ul, li, LiText, sup, SupText, active"
590
- {clientstyling}
591
- {clientstylingurl}
592
- ></casino-tournaments-tab>
593
- <div class="TabContent {showleaderboard == 'true' ? 'TournamentTableDetails ' : 'DisplayNone'} { activeTab != 'leaderboard' ? 'hidden' : ''}" part="ThumbnailTabContent">
594
- <casino-tournaments-table firstrow="true" sortable="false" {lang}
595
- exportparts="TableContent, TableUser, TableHeadRow, TableCell, CurrentUserRow, UnqualifiedRow, TableRank, Rank-1, Rank-2, Rank-3, RankFirstRow, TablePlayer, TablePoints, TablePrize, Qualified, TableUserTooltips, TableUserTooltipsEm, ExclamationMark,
596
- TournamentsTable, LeftTable, LeftTableThead, LeftTableTr, LeftTableTh, LeftTableTd, LeftTableTdEm, LeftTableButton, LeftTableP, LeftTableTbody, FirstRow, RankCol, ScoreChangeFlag, Show, Hidden, Rank_Arror_UP, Rank_Arror_Down, ScoreUp, Flex, RightButton, CollapseButton, TooltipsRow"
597
- {clientstyling}
598
- {clientstylingurl}
599
- ></casino-tournaments-table>
600
- </div>
601
- <div class="TabContent Rules { activeTab != 'rules' ? 'hidden' : ''}" part="ThumbnailTabContent">
602
- {#if tournamentDetails}
603
- <casino-tournaments-thumbnail-rule lang="{lang}" tcurl="{tournamentDetails.termsUrl||'#'}" scorecriterial="{tournamentDetails.scoreCriteria}" betcount="{betCount}"
604
- starttime="{moment(tournamentDetails.startTime).format('DD/MM/YYYY HH:mm:ss')}"
605
- endtime="{moment(tournamentDetails.endTime).format('DD/MM/YYYY HH:mm:ss')}"
606
- products="{tournamentProducts}"
607
- exportparts="casino-tournaments-thumbnail-rule, rule, RuleIcon, RuleTxt"
608
- {clientstyling}
609
- {clientstylingurl}
610
- ></casino-tournaments-thumbnail-rule>
611
- {/if}
612
- </div>
613
- <div class="TabContent Games { activeTab != 'games' ? 'hidden' : ''}" part="ThumbnailTabContent">
614
- {#if tournamentProducts}
615
- <div class="GameItems {tournamentProducts.casino && tournamentProducts.sports ? 'TwoGames' : 'OneGame'}" part="ThumbnailTabContent_Games">
616
- {#if tournamentProducts.casino}
617
- <div part="ThumbnailTabContent_Casino">
618
- <img class="svg" part="ThumbnailTabContent_Games_Casino_Svg" src="{gameCasinoSvg}" width="78" height="75"/>
619
- <span part="ThumbnailTabContent_Games_Casino_Label" on:click='{() => gotoFromTournamentsPage("Casino")}'>{$_('forwardCasino')}</span>
620
- </div>
621
- {/if}
622
- {#if tournamentProducts.sports}
623
- <div class="SportsItems" part="ThumbnailTabContent_Sports">
624
- <img class="svg" part="ThumbnailTabContent_Games_Sports_Svg" src="{gameSportsSvg}" width="68" height="65"/>
625
- <span part="ThumbnailTabContent_Games_Sports_Label" on:click='{() => gotoFromTournamentsPage("Sports")}'>{$_('forwardSports')}</span>
626
- </div>
627
- {/if}
628
- </div>
629
- {/if}
630
- </div>
631
- <div class="BottomButton" part="ThumbnailGotoTournamentsButton" on:click='{()=>{gotoFromTournamentsPage("MyTournaments")}}' >{$_('forwardMyTournaments')}</div>
632
- </div>
633
- </div>
634
- {/if}
635
- <style lang="scss">
636
-
637
-
638
- *,
639
- *::before,
640
- *::after {
641
- margin: 0;
642
- padding: 0;
643
- list-style: none;
644
- text-decoration: none;
645
- outline: none;
646
- box-sizing: border-box;
647
- }
648
-
649
- .TournamentsPage {
650
- background: var(--emfe-w-color-contrast, #07072A);
651
- width: 100%;
652
- color: var(--emfe-w-color-white, #FFFFFF);
653
- }
654
-
655
- .TournamentsSectionWrapper {
656
- padding: 24px 0;
657
-
658
- @media screen and (max-width: 1300px) {
659
- padding: 24px 2.4%;
660
- }
661
- }
662
-
663
- .FullSize {
664
- width: 100%;
665
- }
666
-
667
- .DisplayNone {
668
- display: none;
669
- }
670
-
671
- .TopButtons {
672
- display: inline-flex;
673
- flex-direction: column;
674
- padding-bottom: 20px;
675
- font-size: 10px;
676
- }
677
-
678
- .BackButton {
679
- display: inline-flex;
680
- align-items: center;
681
- cursor: pointer;
682
-
683
- p {
684
- font-size: 24px;
685
- }
686
- }
687
-
688
- .NavButtons {
689
- margin-left: auto;
690
- gap: 10px;
691
- display: flex;
692
- }
693
-
694
- .PrevButton {
695
- display: flex;
696
- align-items: center;
697
- border: 1px solid var(--emfe-w-color-white, #FFFFFF);
698
- width: 105px;
699
- height: 36px;
700
- padding: 10px;
701
- font-size: 16px;
702
- cursor: pointer;
703
- }
704
-
705
- .NextButton {
706
- display: flex;
707
- align-items: center;
708
- border: 1px solid var(--emfe-w-color-white, #FFFFFF);
709
- padding: 10px;
710
- width: 75px;
711
- height: 36px;
712
- font-size: 16px;
713
- cursor: pointer;
714
- }
715
-
716
- .TournamentContentDetails {
717
- display: flex;
718
- gap: 20px;
719
-
720
- &.MobileClass {
721
- flex-direction: column;
722
- }
723
- }
724
-
725
- .TournamentCardDetails {
726
- width: 30%;
727
-
728
- &.MobileClass {
729
- width: 100%;
730
- }
731
- }
732
-
733
- .TournamentTableDetails {
734
- flex: auto;
735
- }
736
- .TournamentsPage.MiniMode{
737
- height: max-content;
738
- .MobileClass.TournamentCardDetails{
739
- padding: 5px 5px 0px 5px;
740
- background-color: #333333;
741
- padding-bottom: 12px;
742
- casino-tournaments-rank{display: block;}
743
- }
744
- .CloseButton{position: absolute; right: 3px; top: 3px; font-size: 11px; cursor: pointer}
745
- casino-tournaments-rank::part(Rank), casino-tournaments-rank::part(Prize){
746
- color: #0a0c19;
747
- font-size: 12px;
748
- margin: 0px 0px 0px 5px;
749
- padding: 2px;
750
- }
751
- casino-tournaments-rank::part(Rank){margin-left: 0px; }
752
- casino-tournaments-rank::part(Prize){margin-right: 0px;}
753
- casino-tournaments-rank::part(RankText), casino-tournaments-rank::part(PrizeText){font-weight: 400;}
754
-
755
- .hidden{display: none}
756
- casino-tournaments-thumbnail-controller::part(TournamentCard){
757
- padding: 5px 5px 0px 5px;
758
- background-color: #333333;
759
- }
760
- casino-tournaments-tab::part(LiText){
761
- height: 22px;
762
- top: calc(50% - 22px/2);
763
- font-style: normal;
764
- font-weight: 600;
765
- font-size: 14px;
766
- line-height: 22px;
767
- text-align: center;
768
- letter-spacing: -0.1px;
769
- }
770
- casino-tournaments-tab::part(CustomStylingContainer){
771
- margin-top: 0px;
772
- cursor: pointer;
773
- }
774
- .TabContent, casino-tournaments-tab{padding: 0 16px}
775
- .TabContent.Rules{
776
- padding-bottom: 28px;
777
- }
778
- .TabContent.Games{
779
- padding-bottom: 30px;
780
- .GameItems{
781
- &.OneGame{width: 100%;}
782
- &.TwoGames{width: 100%; display: flex; div{width: 50%}}
783
- text-align: center;
784
- margin: auto;
785
- margin-top: 39px;
786
- span{color: #FF8364; font-size: 12px; text-align: center; text-decoration-line: underline; cursor: pointer; margin-top: 5px}
787
- svg, .svg{height: 70px;display: block;margin: auto;}
788
- svg.ball, .svg.ball{width: 98px}
789
- }
790
- }
791
- .BottomButton{
792
- font-weight: 600;
793
- font-size: 15px;
794
- text-align: center;
795
- height: 35px;
796
- width: 60%;
797
- margin:20px auto;
798
- align-items: center;
799
- padding: 8.72351px 12.6887px;
800
- background: #FF8364;
801
- box-shadow: 0px 0.793047px 2.37914px rgba(0, 0, 0, 0.1), 0px 1.58609px 0.793047px rgba(0, 0, 0, 0.06), 0px 0.793047px 0.793047px rgba(0, 0, 0, 0.07);
802
- border-radius: 4.75828px;
803
- }
804
-
805
- .Thumbnail {
806
- position: relative;
807
- &.Mobile{border: 0px none;
808
- padding: 6px 5px 10px;
809
- background: #333333;}
810
- &.MiniMode .CardImg{margin-bottom: 5px; width: 65px; height: 40px}
811
-
812
- .CardImg {
813
- height: 300px;
814
- width: 100%;
815
- background: url('https://breakthrough.org/wp-content/uploads/2018/10/default-placeholder-image.png');
816
- background-repeat: no-repeat;
817
- background-position: center;
818
- background-size: auto;
819
- &.CardImgFinished {
820
- filter: grayscale(1);
821
- }
822
- &.Mobile{
823
- width: 65px;
824
- height: 40px;
825
- display: inline-block;
826
- }
827
- }
828
- .MobileRight{
829
- display: inline-block;
830
- line-height: 20px;
831
- font-size: 11px;
832
- padding: 2px 3px;
833
- vertical-align: top;
834
- width: calc(100% - 70px);
835
- .Title{text-transform: capitalize; font-size: 14px; font-weight: 600}
836
- }
837
-
838
- .Status {
839
- background: #000000;
840
- display: flex;
841
- justify-content: center;
842
- align-items: center;
843
- position: absolute;
844
- top: 20px;
845
- right: 20px;
846
- min-height: 30px;
847
- padding: 0 10px;
848
- font-size: 12px;
849
- text-transform: uppercase;
850
- z-index: 1;
851
- }
852
-
853
- .Enrolled {
854
- background: #2B2B5D;
855
- color: #aaaabe;
856
- display: flex;
857
- justify-content: center;
858
- align-items: center;
859
- position: absolute;
860
- top: 20px;
861
- left: 20px;
862
- min-height: 30px;
863
- padding: 0 10px;
864
- font-size: 12px;
865
- text-transform: uppercase;
866
- z-index: 1;
867
- }
868
- }
869
- }
870
-
871
- </style>