@everymatrix/casino-tournaments-table 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.
@@ -1,722 +0,0 @@
1
- <svelte:options tag={null} />
2
-
3
- <script lang="ts">
4
- import { onMount } from 'svelte';
5
- import { getDevice, isMobile } from 'rvhelper';
6
- import { _, addNewMessages } from './i18n';
7
- import { TRANSLATIONS } from './translations';
8
-
9
- import arrowUpSvg from './images/arrow-up.svg';
10
- import arrowDownSvg from './images/arrow-down.svg'
11
-
12
- export let sortable:Boolean = false;
13
- export let firstrow:Boolean = false;
14
- export let lang:String = 'en';
15
- export let fractiondigit: string = '2'
16
-
17
- export let clientstyling:string = '';
18
- export let clientstylingurl:string = '';
19
- export let translationurl:string = '';
20
-
21
- let customStylingContainer: HTMLElement;
22
- let displayNone:boolean = false;
23
-
24
- let columns:any = [];
25
- let data:any = [];
26
- let sortColumn:any = null;
27
- let sortDirection:any = null;
28
- let column:any = null;
29
- let firstRowData:any = null;
30
- let showTable:Boolean = true;
31
- let userAgent = window.navigator.userAgent;
32
- let isUserPositionChanged:Boolean = false;
33
- let isUserPositionUp:Boolean = false;
34
- let firstRowChangeFlagTimer: any=null;
35
- let lastUserPosition:number;
36
- let tooltipColSpan:number;
37
-
38
- const setTranslationUrl = ():void => {
39
- let url:string = translationurl;
40
-
41
- fetch(url).then((res:any) => res.json())
42
- .then((res) => {
43
- Object.keys(res).forEach((item:any):void => {
44
- addNewMessages(item, res[item]);
45
- });
46
- }).catch((err:any) => {
47
- console.log(err);
48
- });
49
- }
50
-
51
- Object.keys(TRANSLATIONS).forEach((item) => {
52
- addNewMessages(item, TRANSLATIONS[item]);
53
- });
54
-
55
- const findTableRowDataByRank =(position: Number, data)=>{
56
- let rowData = data.find((row)=>{
57
- return row.Rank == position;
58
- })
59
- return rowData;
60
- }
61
- let rankChangeTime1,rankChangeTime2:any;
62
- const processUserRankChanged = (newUserPosion) =>{
63
- if(!lastUserPosition){
64
- lastUserPosition = newUserPosion;
65
- return;// first place bet, do not show change flag
66
- }
67
- isUserPositionChanged = lastUserPosition != newUserPosion;
68
- // when (position changed) or (position not changed but still in 2.5s)
69
- isUserPositionUp = lastUserPosition > newUserPosion;
70
- if(isUserPositionChanged){
71
- rankChangeTime1 = (new Date()).getTime(); //reset time1, make sure userrank change more than once during 5mins
72
- firstRowChangeFlagTimer = setTimeout(function (){
73
- rankChangeTime2 = (new Date()).getTime();
74
- let timeInterval = (rankChangeTime2 - rankChangeTime1)/1000;
75
- if(timeInterval > 4){
76
- isUserPositionChanged = false;
77
- }
78
- lastUserPosition = newUserPosion;
79
- }, 5000);
80
- }
81
- }
82
- const messageHandler = (e:any) => {
83
- if (e.data && e.data.type === 'CasinoTableData') {
84
- data = e.data.tableData;
85
- display = data;
86
- }
87
-
88
- if (e.data && e.data.type === 'CasinoTableColumns') {
89
- columns = e.data.tableColumns;
90
- tooltipColSpan = columns.length || 4;
91
- }
92
-
93
- // set view after current user row defined.
94
- if (e.data && e.data.type === 'CasinoTableCurrentUserData'){
95
- if(data){
96
- data.forEach(item => {
97
- if(item.userID == e.data.tableData.userID){
98
- item.isCurrentUser = true;
99
- //clear first row data when update
100
- if(!lastUserPosition){
101
- lastUserPosition = e.data.tableData.Rank;
102
- }
103
- if(firstRowData){
104
- processUserRankChanged( e.data.tableData.Rank);
105
- firstRowData = null;
106
- }else{
107
- processUserRankChanged( e.data.tableData.Rank);
108
- }
109
- }
110
- });
111
- display = data;
112
- }
113
- }
114
- if (firstrow) {
115
- if (e.data && e.data.type === 'CasinoTableFirstRowData') {
116
- let newFirstRowData:any = e.data.tableData;
117
- if(!firstRowData){
118
- firstRowData = e.data.tableData;
119
- lastUserPosition = firstRowData.Rank;
120
- return;
121
- }
122
- if(firstRowData && firstRowData.UserID == newFirstRowData.UserID){
123
- processUserRankChanged( newFirstRowData.Rank);
124
- firstRowData = e.data.tableData;
125
- }
126
-
127
- }
128
- }
129
- // CasinoTableDataUpdate
130
- if(e.data && e.data.type==='CasinoTableDataUpdate' && e.data.tableData){
131
- let tableUpdateData = e.data.tableData;
132
- //check data type before foreach
133
- if( !(data instanceof Array)){
134
- return;
135
- }
136
- data.forEach(function (row, idx){
137
- let updateRowByPosition = findTableRowDataByRank(row.Rank, tableUpdateData);
138
- if(!updateRowByPosition){
139
- return;
140
- }
141
- data[idx] = updateRowByPosition;
142
- });
143
- }
144
- }
145
-
146
- const sortBy = (column:any) => {
147
- const sameColumn = column === sortColumn;
148
- const currentlyAscending = sortDirection === "ASC";
149
- const unsetSort = sameColumn && !currentlyAscending;
150
-
151
- sortColumn = unsetSort ? null : column;
152
- sortDirection = unsetSort
153
- ? null
154
- : sameColumn && currentlyAscending
155
- ? "DESC"
156
- : "ASC";
157
- }
158
-
159
- const getComparator = (type:any, column:any) => {
160
- const key = column.toLowerCase();
161
-
162
- if (type === "string") {
163
- return (a, b) => a[key].localeCompare(b[key]);
164
- }
165
- if (type === "number") {
166
- return (a, b) => a[key] - b[key];
167
- }
168
- if (type === "object") {
169
- return (a, b) => a[key] - b[key];
170
- }
171
- }
172
-
173
- const formatDate = (value:any) => {
174
- return new Intl.DateTimeFormat("en-GB", {
175
- year: "numeric",
176
- month: "short",
177
- day: "numeric"
178
- }).format(value);
179
- }
180
-
181
- const sortData = () => {
182
- let items = [];
183
-
184
- if (data) {
185
- items = [...data];
186
- }
187
-
188
- if (!data.length) {
189
- return data;
190
- }
191
-
192
- const type:any = typeof data[0][sortColumn.toLowerCase()];
193
-
194
- items.sort(getComparator(type, sortColumn));
195
-
196
- return sortDirection === "ASC" ? items : items.reverse();
197
- }
198
-
199
- const collapseTable = () => {
200
- showTable = !showTable;
201
- }
202
-
203
- const shownPlayer = (name: string) => name === 'me' ? $_('me') : name
204
-
205
- const setClientStyling = ():void => {
206
- let sheet = document.createElement('style');
207
- sheet.innerHTML = clientstyling;
208
- customStylingContainer.appendChild(sheet);
209
- }
210
-
211
- const setClientStylingURL = ():void => {
212
- displayNone = true;
213
-
214
- let url:URL = new URL(clientstylingurl);
215
- let cssFile:HTMLElement = document.createElement('style');
216
-
217
- fetch(url.href)
218
- .then((res:any) => res.text())
219
- .then((data:any) => {
220
- cssFile.innerHTML = data
221
-
222
- setTimeout(() => { customStylingContainer.appendChild(cssFile) }, 1);
223
- setTimeout(() => { displayNone = false; }, 500);
224
- });
225
- }
226
-
227
- onMount(() => {
228
- window.addEventListener('message', messageHandler, false);
229
- return () => {
230
- window.removeEventListener('message', messageHandler);
231
- }
232
- });
233
-
234
- $: customStylingContainer && clientstyling && setClientStyling();
235
- $: customStylingContainer && clientstylingurl && setClientStylingURL();
236
- $: translationurl && setTranslationUrl();
237
- $: display = sortColumn && sortDirection ? sortData() : [...data];
238
- $: sort = column === sortColumn ? sortDirection : null;
239
-
240
- </script>
241
-
242
- <div bind:this={customStylingContainer}>
243
- {#if data.length > 0 || firstRowData}
244
- {#if isMobile(userAgent) == true}
245
- <div class="TableContent" part="TableContent">
246
- <div class="TableUser TableHeadRow" part="TableUser TableHeadRow">
247
- {#each columns as column}
248
- <div class="TableCell Table{column}" part="TableCell Table{column}">
249
- {#if sortable == 'true'}
250
- <button on:click={() => sortBy(column)} data-sort={sort}>
251
- {$_(`${column}`)}
252
- </button>
253
- {:else}
254
- <p data-sort={sort}>{$_(`${column}`)}</p>
255
- {/if}
256
- </div>
257
- {/each}
258
- </div>
259
- {#if firstrow == 'true' && firstRowData}
260
- <div class="TableUser CurrentUserRow {firstRowData.Unqualified ? 'UnqualifiedRow' : ''}" part="TableUser CurrentUserRow {firstRowData.Unqualified ? 'UnqualifiedRow' : ''}">
261
- <div class="TableCell TableRank {firstRowData.Prize? 'Qualified' : ''}" part="TableCell TableRank RankFirstRow {firstRowData.Prize? 'Qualified' : ''}">
262
- {firstRowData.Rank}
263
- </div>
264
- <div class="TableCell TablePlayer" part="TableCell TablePlayer">{shownPlayer(firstRowData.Player)}</div>
265
- <div class="TableCell TablePoints" part="TableCell TablePoints">{firstRowData.Points}</div>
266
- {#if firstRowData.Prize}
267
- <div class="TableCell TablePrize {!firstRowData.Unqualified? 'Qualified' : ''}" part="TableCell TablePrize {!firstRowData.Unqualified? 'Qualified' : ''}">{firstRowData.Prize}</div>
268
- {:else}
269
- <div class="TableCell TablePrize" part="TableCell TablePrize">-</div>
270
- {/if}
271
- </div>
272
- {#if firstRowData.Unqualified}
273
- <div class="TableUserTooltips" part="TableUserTooltips">
274
- <svg class="ExclamationMark" part="ExclamationMark" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg">
275
- <path d="M9.03087 3.14062C8.71521 2.56443 8.27722 2.06437 7.74767 1.67553C7.21811 1.28669 6.60971 1.01855 5.96544 0.889885C5.32118 0.761222 4.65646 0.775158 4.01817 0.930778C3.37988 1.0864 2.78361 1.37989 2.27086 1.79064C1.68689 2.25306 1.22358 2.85008 0.920762 3.53063C0.679091 4.08921 0.556377 4.69205 0.560655 5.30065C0.562354 5.92327 0.693172 6.53873 0.944444 7.10839C1.19572 7.67806 1.5622 8.18953 2.02086 8.61059C2.83307 9.36649 3.89773 9.79259 5.00719 9.80553C6.11665 9.81848 7.19124 9.4174 8.02086 8.68066C8.3779 8.38276 8.67913 8.0238 8.91075 7.6206C9.34355 6.92428 9.57213 6.12051 9.57066 5.30065C9.57316 4.54694 9.38776 3.80448 9.03087 3.14062V3.14062ZM4.43077 7.39062C4.41666 7.24208 4.44786 7.09281 4.52013 6.96227C4.59239 6.83174 4.70243 6.72606 4.8358 6.65917C4.96917 6.59228 5.11961 6.56724 5.26744 6.58739C5.41528 6.60754 5.55357 6.67195 5.66417 6.77209C5.77477 6.87223 5.85238 7.00344 5.88707 7.14855C5.92176 7.29367 5.91186 7.44586 5.85851 7.5852C5.80516 7.72454 5.71098 7.84448 5.58824 7.92931C5.46551 8.01415 5.31996 8.05999 5.17076 8.06066C5.0777 8.06746 4.9841 8.05526 4.89586 8.02489C4.80762 7.99453 4.72651 7.94653 4.65733 7.8839C4.58816 7.82127 4.53247 7.74531 4.49352 7.66051C4.45456 7.57572 4.43323 7.4839 4.43077 7.39062V7.39062ZM5.05065 2.69067H5.25084C5.32609 2.69062 5.40056 2.70571 5.46983 2.7351C5.53911 2.76448 5.60165 2.80755 5.65392 2.86169C5.70619 2.91582 5.7471 2.9799 5.77403 3.05016C5.80097 3.12043 5.81334 3.19542 5.81066 3.27062L5.7108 5.66064C5.70312 5.8039 5.64068 5.93873 5.53649 6.03735C5.43229 6.13596 5.29421 6.19087 5.15074 6.19067C5.00827 6.19076 4.87125 6.13559 4.76866 6.03674C4.66607 5.93788 4.60587 5.80301 4.60069 5.66064L4.50084 3.27062C4.49817 3.19625 4.51016 3.12209 4.53648 3.05248C4.5628 2.98287 4.60295 2.91923 4.65416 2.86523C4.70537 2.81123 4.76671 2.76801 4.83483 2.73803C4.90294 2.70805 4.97624 2.69195 5.05065 2.69067V2.69067Z"/>
276
- </svg>
277
- <em part="TableUserTooltipsEm">{$_('UnqualifiedTips')}</em>
278
- </div>
279
- {/if}
280
- {/if}
281
- {#if showTable}
282
- {#each display as row}
283
- <div class="TableUser {row.isCurrentUser ? 'CurrentUserRow' : ''}" part="TableUser {row.isCurrentUser ? 'CurrentUserRow' : ''}">
284
- <div class="TableCell TableRank {row.Prize? 'Qualified' : ''}" part="TableCell Rank-{row.Rank} TableRank {row.Prize? 'Qualified' : ''}">{row.Rank}</div>
285
- <div class="TableCell TablePlayer" part="TableCell TablePlayer">{shownPlayer(row.Player)}</div>
286
- <div class="TableCell TablePoints" part="TableCell TablePoints">{row.Points}</div>
287
- {#if row.Prize}
288
- <div class="TableCell TablePrize {!row.Unqualified? 'Qualified' : ''}" part="TableCell TablePrize {!row.Unqualified? 'Qualified' : ''}">{row.Prize}</div>
289
- {:else}
290
- <div class="TableCell TablePrize" part="TableCell TablePrize">-</div>
291
- {/if}
292
- </div>
293
- {#if row.isCurrentUser && row.Unqualified}
294
- <div class="TableUserTooltips {row.Unqualified ? 'UnqualifiedRow' : ''}" part="TableUserTooltips {row.Unqualified ? 'UnqualifiedRow' : ''}">
295
- <svg class="ExclamationMark" part="ExclamationMark" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg">
296
- <path d="M9.03087 3.14062C8.71521 2.56443 8.27722 2.06437 7.74767 1.67553C7.21811 1.28669 6.60971 1.01855 5.96544 0.889885C5.32118 0.761222 4.65646 0.775158 4.01817 0.930778C3.37988 1.0864 2.78361 1.37989 2.27086 1.79064C1.68689 2.25306 1.22358 2.85008 0.920762 3.53063C0.679091 4.08921 0.556377 4.69205 0.560655 5.30065C0.562354 5.92327 0.693172 6.53873 0.944444 7.10839C1.19572 7.67806 1.5622 8.18953 2.02086 8.61059C2.83307 9.36649 3.89773 9.79259 5.00719 9.80553C6.11665 9.81848 7.19124 9.4174 8.02086 8.68066C8.3779 8.38276 8.67913 8.0238 8.91075 7.6206C9.34355 6.92428 9.57213 6.12051 9.57066 5.30065C9.57316 4.54694 9.38776 3.80448 9.03087 3.14062V3.14062ZM4.43077 7.39062C4.41666 7.24208 4.44786 7.09281 4.52013 6.96227C4.59239 6.83174 4.70243 6.72606 4.8358 6.65917C4.96917 6.59228 5.11961 6.56724 5.26744 6.58739C5.41528 6.60754 5.55357 6.67195 5.66417 6.77209C5.77477 6.87223 5.85238 7.00344 5.88707 7.14855C5.92176 7.29367 5.91186 7.44586 5.85851 7.5852C5.80516 7.72454 5.71098 7.84448 5.58824 7.92931C5.46551 8.01415 5.31996 8.05999 5.17076 8.06066C5.0777 8.06746 4.9841 8.05526 4.89586 8.02489C4.80762 7.99453 4.72651 7.94653 4.65733 7.8839C4.58816 7.82127 4.53247 7.74531 4.49352 7.66051C4.45456 7.57572 4.43323 7.4839 4.43077 7.39062V7.39062ZM5.05065 2.69067H5.25084C5.32609 2.69062 5.40056 2.70571 5.46983 2.7351C5.53911 2.76448 5.60165 2.80755 5.65392 2.86169C5.70619 2.91582 5.7471 2.9799 5.77403 3.05016C5.80097 3.12043 5.81334 3.19542 5.81066 3.27062L5.7108 5.66064C5.70312 5.8039 5.64068 5.93873 5.53649 6.03735C5.43229 6.13596 5.29421 6.19087 5.15074 6.19067C5.00827 6.19076 4.87125 6.13559 4.76866 6.03674C4.66607 5.93788 4.60587 5.80301 4.60069 5.66064L4.50084 3.27062C4.49817 3.19625 4.51016 3.12209 4.53648 3.05248C4.5628 2.98287 4.60295 2.91923 4.65416 2.86523C4.70537 2.81123 4.76671 2.76801 4.83483 2.73803C4.90294 2.70805 4.97624 2.69195 5.05065 2.69067V2.69067Z"/>
297
- </svg>
298
- <em part="TableUserTooltipsEm">{$_('UnqualifiedTips')}</em>
299
- </div>
300
- {/if}
301
- {/each}
302
- {/if}
303
- </div>
304
- {:else}
305
- <div class="TournamentsTable" part="TournamentsTable">
306
- <table class="LeftTable" part="LeftTable">
307
- <thead part="LeftTableThead">
308
- <tr part="LeftTableTr">
309
- {#each columns as column}
310
- <th part="LeftTableTh">
311
- {#if sortable == 'true'}
312
- <button on:click={() => sortBy(column)} data-sort={sort} part="LeftTableButton">
313
- {$_(`${column}`)}
314
- </button>
315
- {:else}
316
- <p data-sort={sort} part="LeftTableP">{$_(`${column}`)}</p>
317
- {/if}
318
- </th>
319
- {/each}
320
- </tr>
321
- </thead>
322
- <tbody part="LeftTableTbody">
323
- {#if firstrow == 'true' && firstRowData}
324
- <tr class="FirstRow {firstRowData.Unqualified ? 'UnqualifiedRow':''}" part="FirstRow {firstRowData.Unqualified ? 'UnqualifiedRow':''}">
325
- <td part="LeftTableTd RankFirstRow"><strong class="RankCol" part="RankCol"><em part="LeftTableTdEm">#{firstRowData.Rank}</em>
326
- <div class="ScoreChangeFlag {isUserPositionChanged ? 'Show' : 'Hidden'}" part="ScoreChangeFlag {isUserPositionChanged ? 'Show' : 'Hidden'}">
327
- <img src="{arrowUpSvg}" part="Rank_Arror_UP" class="svg Arrow Up {isUserPositionChanged && isUserPositionUp ? 'Show' : 'Hidden'}" />
328
- <img src="{arrowDownSvg}" part="Rank_Arror_Down" class="svg Arrow Down {isUserPositionChanged && !isUserPositionUp ? 'Show' : 'Hidden'}" />
329
- </div></strong>
330
- </td>
331
- <td part="LeftTableTd">{shownPlayer(firstRowData.Player)}</td>
332
- <td part="LeftTableTd">
333
- <div class="Flex" part="Flex">{firstRowData.Points}</div>
334
- </td>
335
- <td class="LeftTableTd {!firstRowData.Unqualified? 'Qualified' : ''}" part="LeftTableTd {!firstRowData.Unqualified? 'Qualified' : ''}">
336
- {#if firstRowData.Prize}
337
- {firstRowData.Prize}
338
- {:else}
339
- -
340
- {/if}
341
- </td>
342
- </tr>
343
- {#if firstRowData.Unqualified}
344
- <tr class="TooltipsRow" part="TooltipsRow">
345
- <td colspan="{tooltipColSpan}" part="LeftTableTd">
346
- <span class="TipsContent" part="TipsContent">
347
- <svg class="ExclamationMark" part="ExclamationMark" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg">
348
- <path d="M9.03087 3.14062C8.71521 2.56443 8.27722 2.06437 7.74767 1.67553C7.21811 1.28669 6.60971 1.01855 5.96544 0.889885C5.32118 0.761222 4.65646 0.775158 4.01817 0.930778C3.37988 1.0864 2.78361 1.37989 2.27086 1.79064C1.68689 2.25306 1.22358 2.85008 0.920762 3.53063C0.679091 4.08921 0.556377 4.69205 0.560655 5.30065C0.562354 5.92327 0.693172 6.53873 0.944444 7.10839C1.19572 7.67806 1.5622 8.18953 2.02086 8.61059C2.83307 9.36649 3.89773 9.79259 5.00719 9.80553C6.11665 9.81848 7.19124 9.4174 8.02086 8.68066C8.3779 8.38276 8.67913 8.0238 8.91075 7.6206C9.34355 6.92428 9.57213 6.12051 9.57066 5.30065C9.57316 4.54694 9.38776 3.80448 9.03087 3.14062V3.14062ZM4.43077 7.39062C4.41666 7.24208 4.44786 7.09281 4.52013 6.96227C4.59239 6.83174 4.70243 6.72606 4.8358 6.65917C4.96917 6.59228 5.11961 6.56724 5.26744 6.58739C5.41528 6.60754 5.55357 6.67195 5.66417 6.77209C5.77477 6.87223 5.85238 7.00344 5.88707 7.14855C5.92176 7.29367 5.91186 7.44586 5.85851 7.5852C5.80516 7.72454 5.71098 7.84448 5.58824 7.92931C5.46551 8.01415 5.31996 8.05999 5.17076 8.06066C5.0777 8.06746 4.9841 8.05526 4.89586 8.02489C4.80762 7.99453 4.72651 7.94653 4.65733 7.8839C4.58816 7.82127 4.53247 7.74531 4.49352 7.66051C4.45456 7.57572 4.43323 7.4839 4.43077 7.39062V7.39062ZM5.05065 2.69067H5.25084C5.32609 2.69062 5.40056 2.70571 5.46983 2.7351C5.53911 2.76448 5.60165 2.80755 5.65392 2.86169C5.70619 2.91582 5.7471 2.9799 5.77403 3.05016C5.80097 3.12043 5.81334 3.19542 5.81066 3.27062L5.7108 5.66064C5.70312 5.8039 5.64068 5.93873 5.53649 6.03735C5.43229 6.13596 5.29421 6.19087 5.15074 6.19067C5.00827 6.19076 4.87125 6.13559 4.76866 6.03674C4.66607 5.93788 4.60587 5.80301 4.60069 5.66064L4.50084 3.27062C4.49817 3.19625 4.51016 3.12209 4.53648 3.05248C4.5628 2.98287 4.60295 2.91923 4.65416 2.86523C4.70537 2.81123 4.76671 2.76801 4.83483 2.73803C4.90294 2.70805 4.97624 2.69195 5.05065 2.69067V2.69067Z"/>
349
- </svg>
350
- {$_('UnqualifiedTips')}
351
- </span>
352
- </td>
353
- </tr>
354
- {/if}
355
- {/if}
356
- {#if showTable}
357
- {#each display as row}
358
- <tr class="LeftTableTr {row.isCurrentUser ? 'FirstRow' : ''} {row.isCurrentUser && row.Unqualified? 'UnqualifiedRow': ''}" part="LeftTableTr {row.isCurrentUser ? 'FirstRow' : ''} {row.isCurrentUser && row.Unqualified? 'UnqualifiedRow': ''}">
359
- <td part="LeftTableTd Rank-{row.Rank}"><strong class="RankCol" part="RankCol"><em part="LeftTableTdEm">#{row.Rank}
360
- <div class="ScoreChangeFlag {isUserPositionChanged ? 'Show' : 'Hidden'}" part="ScoreChangeFlag {isUserPositionChanged ? 'Show' : 'Hidden'}">
361
- {#if row.isCurrentUser}
362
- <img src="{arrowUpSvg}" part="Rank_Arror_UP" class="svg Arrow Up {isUserPositionChanged && isUserPositionUp ? 'Show' : 'Hidden'}" />
363
- <img src="{arrowDownSvg}" part="Rank_Arror_Down" class="svg Arrow Down {isUserPositionChanged && !isUserPositionUp ? 'Show' : 'Hidden'}" />
364
- {/if}
365
- </div>
366
-
367
- </em></strong></td>
368
- <td part="LeftTableTd">{shownPlayer(row.Player)}</td>
369
- <td part="LeftTableTd"><div class="Flex ScoreUp" part="Flex ScoreUp">{row.Points}</div></td>
370
- <td class="LeftTableTd {!row.Unqualified? 'Qualified' : ''}" part="LeftTableTd {!row.Unqualified? 'Qualified' : ''}">
371
- {#if row.Prize}
372
- {row.Prize}
373
- {:else}
374
- -
375
- {/if}
376
- </td>
377
- </tr>
378
- {#if row.Unqualified && row.isCurrentUser}
379
- <tr class="TooltipsRow" part="TooltipsRow">
380
- <td colspan="{tooltipColSpan}" part="LeftTableTd">
381
- <span class="TipsContent" part="TipsContent">
382
- <svg class="ExclamationMark" part="ExclamationMark" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg">
383
- <path d="M9.03087 3.14062C8.71521 2.56443 8.27722 2.06437 7.74767 1.67553C7.21811 1.28669 6.60971 1.01855 5.96544 0.889885C5.32118 0.761222 4.65646 0.775158 4.01817 0.930778C3.37988 1.0864 2.78361 1.37989 2.27086 1.79064C1.68689 2.25306 1.22358 2.85008 0.920762 3.53063C0.679091 4.08921 0.556377 4.69205 0.560655 5.30065C0.562354 5.92327 0.693172 6.53873 0.944444 7.10839C1.19572 7.67806 1.5622 8.18953 2.02086 8.61059C2.83307 9.36649 3.89773 9.79259 5.00719 9.80553C6.11665 9.81848 7.19124 9.4174 8.02086 8.68066C8.3779 8.38276 8.67913 8.0238 8.91075 7.6206C9.34355 6.92428 9.57213 6.12051 9.57066 5.30065C9.57316 4.54694 9.38776 3.80448 9.03087 3.14062V3.14062ZM4.43077 7.39062C4.41666 7.24208 4.44786 7.09281 4.52013 6.96227C4.59239 6.83174 4.70243 6.72606 4.8358 6.65917C4.96917 6.59228 5.11961 6.56724 5.26744 6.58739C5.41528 6.60754 5.55357 6.67195 5.66417 6.77209C5.77477 6.87223 5.85238 7.00344 5.88707 7.14855C5.92176 7.29367 5.91186 7.44586 5.85851 7.5852C5.80516 7.72454 5.71098 7.84448 5.58824 7.92931C5.46551 8.01415 5.31996 8.05999 5.17076 8.06066C5.0777 8.06746 4.9841 8.05526 4.89586 8.02489C4.80762 7.99453 4.72651 7.94653 4.65733 7.8839C4.58816 7.82127 4.53247 7.74531 4.49352 7.66051C4.45456 7.57572 4.43323 7.4839 4.43077 7.39062V7.39062ZM5.05065 2.69067H5.25084C5.32609 2.69062 5.40056 2.70571 5.46983 2.7351C5.53911 2.76448 5.60165 2.80755 5.65392 2.86169C5.70619 2.91582 5.7471 2.9799 5.77403 3.05016C5.80097 3.12043 5.81334 3.19542 5.81066 3.27062L5.7108 5.66064C5.70312 5.8039 5.64068 5.93873 5.53649 6.03735C5.43229 6.13596 5.29421 6.19087 5.15074 6.19067C5.00827 6.19076 4.87125 6.13559 4.76866 6.03674C4.66607 5.93788 4.60587 5.80301 4.60069 5.66064L4.50084 3.27062C4.49817 3.19625 4.51016 3.12209 4.53648 3.05248C4.5628 2.98287 4.60295 2.91923 4.65416 2.86523C4.70537 2.81123 4.76671 2.76801 4.83483 2.73803C4.90294 2.70805 4.97624 2.69195 5.05065 2.69067V2.69067Z"/>
384
- </svg>
385
- {$_('UnqualifiedTips')}
386
- </span>
387
- </td>
388
- </tr>
389
- {/if}
390
- {/each}
391
- {/if}
392
- </tbody>
393
- </table>
394
- <div class="RightButton" part="RightButton">
395
- <div class="CollapseButton" part="CollapseButton" on:click={() => collapseTable()}>
396
- {#if showTable}
397
- <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#ffffff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
398
- <path d="M18 15l-6-6-6 6"/>
399
- </svg>
400
- {:else}
401
- <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#ffffff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
402
- <path d="M6 9l6 6 6-6"/>
403
- </svg>
404
- {/if}
405
- </div>
406
- </div>
407
- </div>
408
- {/if}
409
- {:else}
410
- {#if isMobile(userAgent) == true}
411
- {#if showTable}
412
- <div bind:this={customStylingContainer} class="TableContent" part="TableContent">
413
- <div class="TableUser" part="TableUser"><p>{$_('nowinners')}</p></div>
414
- </div>
415
- {/if}
416
- {:else}
417
- <div class="TournamentsTable" part="TournamentsTable">
418
- <table class="LeftTable" part="LeftTable">
419
- <thead part="LeftTableThead">
420
- <tr part="LeftTableTr">
421
- {#each columns as column}
422
- <th part="LeftTableTh">
423
- {#if sortable == 'true'}
424
- <button on:click={() => sortBy(column)} data-sort={sort} part="LeftTableButton">
425
- {$_(`${column}`)}
426
- </button>
427
- {:else}
428
- <p data-sort={sort} part="LeftTableP">{$_(`${column}`)}</p>
429
- {/if}
430
- </th>
431
- {/each}
432
- </tr>
433
- </thead>
434
- <tbody part="LeftTableTbody">
435
- <tr part="LeftTableTr">
436
- <td colspan="{tooltipColSpan}" part="LeftTableTd">{$_('nowinners')}</td>
437
- </tr>
438
- </tbody>
439
- </table>
440
- </div>
441
- {/if}
442
- {/if}
443
- </div>
444
- <style lang="scss">
445
-
446
-
447
- *,
448
- *::before,
449
- *::after {
450
- margin: 0;
451
- padding: 0;
452
- list-style: none;
453
- text-decoration: none;
454
- outline: none;
455
- box-sizing: border-box;
456
- }
457
-
458
- .LeaderboardContainer {
459
- background: var(--emfe-w-color-contrast, #07072A);
460
- color: #fff;
461
- display: flex;
462
- width: 100%;
463
- height: 52px;
464
- align-items: center;
465
- justify-content: space-between;
466
- gap: 20px;
467
- }
468
-
469
- .Leaderboard {
470
- width: 100%;
471
- height: 44px;
472
- display: flex;
473
- align-items: center;
474
- padding-left: 20px;
475
- }
476
-
477
- .TableContent {
478
- width: 100%;
479
- font-size: 14px;
480
- margin-bottom: 2px;
481
- border-bottom: solid 1px var(--emfe-w-color-white, #FFFFFF);
482
- &.TableContentFirstRow {
483
- box-sizing: border-box;
484
- border: 2px solid var(--emfe-w-color-green, #48952a);
485
- }
486
- }
487
-
488
- .TableUser {
489
- background: var(--emfe-w-table-bg, #282828);
490
- height: 44px;
491
- display: flex;
492
- align-items: center;
493
- border-bottom: solid 1px var(--emfe-w-table-border, #3a3a3a);
494
- &.TableHeadRow {
495
- background: var(--emfe-w-table-header-bg, #1c1c1c);
496
- color: var(--emfe-w-color-white, #fff);
497
- }
498
- &.CurrentUserRow {
499
- box-sizing: border-box;
500
- background: var(--emfe-w-table-currentuser-bg, #533a34);
501
- }
502
- &.UnqualifiedRow {
503
- border-bottom: 0;
504
- }
505
- }
506
- .TableUserTooltips{
507
- display: flex;
508
- gap: 4px;
509
- flex-direction: row;
510
- width: 100%;
511
- padding: 10px 0;
512
- background: var(--emfe-w-table-currentuser-bg, #533a34);
513
- font-size: 0.8rem;
514
- line-height: 1.2;
515
- }
516
- .TooltipsRow {
517
- border: 2px solid var(--emfe-w-tooltips-border, #fecf00);
518
- border-top: 0;
519
- .ExclamationMark {
520
- fill:var(--emfe-w-color-exclamation, #fecf00);
521
- }
522
- td {
523
- padding: 0 0 10px 0;
524
- font-size: 12px;
525
- color: var(--emfe-w-color-tooltips, #fecf00);
526
- }
527
- }
528
- .TableCell {
529
- padding:10px;
530
- flex: 2;
531
- text-align: center;
532
- }
533
- .TableRank {
534
- flex: 1 50px;
535
- }
536
- .TablePlayer{
537
- flex: 5;
538
- }
539
- .TablePrize {
540
- flex: 5;
541
- }
542
- .Qualified {
543
- color: var(--emfe-w-highlight, #debb05);
544
- }
545
- .ExclamationMark {
546
- vertical-align: text-top;
547
- width: 14px;
548
- height: 14px;
549
- fill: var(--emfe-w-color-exclamation, #fecf00);
550
- }
551
- .TableUserDetails {
552
- background: var(--emfe-w-color-contrast, #07072A);
553
- display: flex;
554
- line-height: 18px;
555
- align-items: center;
556
- text-align: center;
557
- justify-content:space-around;
558
- height: 52px;
559
- }
560
-
561
- .TournamentsTable {
562
- width: 100%;
563
- display: flex;
564
- justify-content: space-between;
565
- text-align: center;
566
- .LeftTable {
567
- width: 100%;
568
- border-collapse: collapse;
569
- tr td{text-align: center;}
570
- .TooltipsRow td{
571
- text-align: center;
572
- display: table-cell;
573
- span{
574
- text-align: center;
575
- display: inline-block;
576
- }
577
- }
578
- }
579
- }
580
-
581
- .RightButton {
582
- cursor: pointer;
583
- background: var(--emfe-w-color-contrast, #07072A);
584
- width: 50px;
585
- height: 70px;
586
- border: 2px solid var(--emfe-w-color-contrast, #0D0D4D);
587
- &.MobileClass {
588
- height: 50px;
589
- }
590
- }
591
-
592
- .FirstRow {
593
- outline: 2px solid #1B9800;
594
- &.UnqualifiedRow {
595
- outline: 0;
596
- border: 2px solid var(--emfe-w-tooltips-border, #fecf00);
597
- border-bottom: 0;
598
- td {
599
- border-bottom: 0;
600
- }
601
- }
602
- .RankCol{
603
- position: relative;
604
- width: max-content;
605
- display: inline;
606
- .ScoreChangeFlag{
607
- position: absolute;
608
- top: 0px;
609
- right: -29px;
610
- .Arrow{
611
- &.Up{ color: #0cdc13}
612
- &.Down{color: #FF4500}
613
- }
614
- }
615
-
616
- }
617
- }
618
- .Show{display: inline-flex}
619
- .Hidden{display: none}
620
- svg.Arrow.Up, svg.Arrow.Down, .svg.Arrow.Up, .svg.Arrow.Down {
621
- &.Show{display: inline-flex}
622
- &.Hidden{display: none}
623
- animation-name: twinkle;
624
- animation-duration: 1s;
625
- animation-iteration-count: infinite;
626
- width: 14px;
627
- height: 14px;
628
- }
629
-
630
- @keyframes twinkle {
631
- 0% {opacity: 0;}
632
- 25% {opacity: 1;}
633
- 100% {opacity: 0;}
634
- }
635
-
636
- table {
637
- width: 100%;
638
- border-spacing: 0;
639
- position: relative;
640
- overflow: auto;
641
- margin-bottom: 0.5rem;
642
- }
643
-
644
- th {
645
- padding: 1.5rem 1.25rem;
646
- height: 70px;
647
- background-color: var(--emfe-w-color-contrast, #07072A);
648
- border-bottom: 1px solid var(--emfe-w-color-contrast, #0D0D4D);
649
- top: 0;
650
- color: var(--emfe-w-color-white, #FFFFFF);
651
- }
652
-
653
- td {
654
- margin: 0;
655
- padding: 1.25rem;
656
- vertical-align: top;
657
- text-align: inherit;
658
- color: var(--emfe-w-color-white, #FFFFFF);
659
- font-size: 11px;
660
- max-width: 20%;
661
- background-color: var(--emfe-w-color-contrast, #07072A);
662
- border-bottom: 1px solid var(--emfe-w-color-contrast, #0D0D4D);
663
- }
664
-
665
- td:first-child {
666
- left: 0;
667
- top: auto;
668
- width: 10rem;
669
- }
670
-
671
- svg {
672
- width: 1.25rem;
673
- height: 1.25rem;
674
-
675
- fill: rgba(0, 0, 0, 0.5);
676
- flex-shrink: 0;
677
- }
678
-
679
- .flex {
680
- display: flex;
681
- align-items: center;
682
- }
683
-
684
- button {
685
- font-weight: bold;
686
- font-size: inherit;
687
- text-transform: capitalize;
688
- background-color: transparent;
689
- border: none;
690
- cursor: pointer;
691
- display: block;
692
- padding: 0 1rem 0 0;
693
- background-size: 0.75rem;
694
- background-repeat: no-repeat;
695
- background-position: center right;
696
- background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%234f4f4f' d='M16.29 14.29L12 18.59l-4.29-4.3a1 1 0 00-1.42 1.42l5 5a1 1 0 001.42 0l5-5a1 1 0 00-1.42-1.42zM7.71 9.71L12 5.41l4.29 4.3a1 1 0 001.42 0 1 1 0 000-1.42l-5-5a1 1 0 00-1.42 0l-5 5a1 1 0 001.42 1.42z'/%3E%3C/svg%3E");
697
- }
698
-
699
- .CollapseButton {
700
- display: flex;
701
- align-items: center;
702
- justify-content: center;
703
- width: 100%;
704
- height: 100%;
705
- background: var(--emfe-w-color-contrast, #07072A);
706
- color: var(--emfe-w-color-white, #FFFFFF);
707
- }
708
-
709
- [data-sort="ASC"],
710
- [data-sort="DESC"] {
711
- background-size: 1rem;
712
- background-position: right -0.15rem center;
713
- }
714
-
715
- [data-sort="ASC"] {
716
- background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%234f4f4f' d='M11.29 11.46a1 1 0 001.42 0l3-3A1 1 0 1014.29 7L12 9.34 9.71 7a1 1 0 10-1.42 1.46zm3 1.08L12 14.84l-2.29-2.3A1 1 0 008.29 14l3 3a1 1 0 001.42 0l3-3a1 1 0 00-1.42-1.42z'/%3E%3C/svg%3E");
717
- }
718
-
719
- [data-sort="DESC"] {
720
- background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%234f4f4f' d='M12.71 12.54a1 1 0 00-1.42 0l-3 3A1 1 0 009.71 17L12 14.66 14.29 17a1 1 0 001.42 0 1 1 0 000-1.42zm-3-1.08L12 9.16l2.29 2.3a1 1 0 001.42 0 1 1 0 000-1.42l-3-3a1 1 0 00-1.42 0l-3 3a1 1 0 001.42 1.42z'/%3E%3C/svg%3E");
721
- }
722
- </style>