PageSourceSearch

https://fploptimized.com/calculator.html

html fploptimized.com collected 2026-10-04 13:32:04 UTC 49,142 bytes, 910 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en_US">
3
4<head>
5    <title>FPL Optimized  - FPL Expected Points Calculator</title>
6    <meta charset="UTF-8" />
7    <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
8    <meta http-equiv="Pragma" content="no-cache">
9    <meta http-equiv="Expires" content="0">
10    <meta name="description" content="Optimized squads for Fantasy Premier League -- everyday!" />
11    <meta name="keywords"
12        content="fantasy, football, soccer, premier league, mathematics, optimization, analytics, sports" />
13    <meta name="author" content="Sertalp B. Cay ([email protected])" />
14    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
15    <link rel="stylesheet" href="https://fastly.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css"
16        integrity="sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2" crossorigin="anonymous">
17    
17<script src="https://fastly.jsdelivr.net/npm/@fortawesome/[email protected]/js/fontawesome.min.js"
18        integrity="sha256-TMRxGf3NaZhrxTfD8y/NGiyE4UXBA3udH1l+Co8JDVU=" crossorigin="anonymous"></script>
18
19    
19<script src="https://d3js.org/d3.v6.js"></script>
19
20    
20<script src="https://cdnjs.cloudflare.com/ajax/libs/d3-interpolate/1.3.0/d3-interpolate.js"
21        integrity="sha512-KcUKnCgVgjA6pyyyN33d5S1IHk9hFUaldkL8BmKvqR+7q9HyZj3jmWJemF6IJuLkcj3biCNzdGgXNPJCjurXnQ=="
22        crossorigin="anonymous"></script>
22
23    <link rel="stylesheet" href="https://fastly.jsdelivr.net/npm/@fortawesome/[email protected]/css/all.min.css"
24        integrity="sha256-rx5u3IdaOCszi7Jb18XD9HSn8bNiEgAqWJbdBvIYYyU=" crossorigin="anonymous">
25    <!-- <link href="url_for('static', filename='3rdparty/vis-timeline-graph2d.min.css')" rel="stylesheet" type="text/css" /> -->
26
27    <!-- <link rel="stylesheet" href="https://cdn.datatables.net/1.10.22/css/jquery.dataTables.min.css"> -->
28    <!-- <link rel="stylesheet" href="https://cdn.datatables.net/searchbuilder/1.0.1/css/searchBuilder.dataTables.min.css"> -->
29    <!-- <link rel="stylesheet" href="https://cdn.datatables.net/fixedcolumns/3.3.2/css/fixedColumns.dataTables.min.css"> -->
30    <!-- <link rel="stylesheet" href="https://cdn.datatables.net/1.10.22/css/dataTables.bootstrap4.min.css"> -->
31    <!-- <link rel="stylesheet" href="https://cdn.datatables.net/fixedcolumns/3.3.2/css/fixedColumns.bootstrap4.min.css"> -->
32    <!-- <link rel="stylesheet" href="https://cdn.datatables.net/responsive/2.2.6/css/responsive.bootstrap4.min.css"> -->
33
34    <link rel="stylesheet" type="text/css"
35        href="https://cdn.datatables.net/v/bs4/dt-1.10.23/b-1.6.5/b-colvis-1.6.5/b-html5-1.6.5/fc-3.3.2/fh-3.1.7/r-2.2.6/sp-1.2.2/datatables.min.css" />
36
37    <!-- Global site tag (gtag.js) - Google Analytics -->
vendor: 68 bytes, lines 37-38
37
38    <script async src="https://www.googletagmanager.com/gtag/js?id=
38G-L07T8LS957
vendor: 16 bytes, lines 38-39
38"></script>
39    
39<script>
40        
vendor: 175 bytes, lines 40-46
40window.dataLayer = window.dataLayer || [];
41
42        function gtag() {
43            dataLayer.push(arguments);
44        }
45        gtag('js', new Date());
46        gtag('config', '
46G-L07T8LS957
vendor: 8 bytes, lines 46-47
46');
47    
47</script>
47
48
49    <link rel="stylesheet" href="/static/css/styles.css?ts=20260920183004">
50    <link rel="stylesheet" href="/static/css/svg.css?ts=20260920183004">
51
52    <style>
53        :root {
54            --bg-primary: #1a1a1c;
55            --bg-secondary: #2d2d30;
56            --bg-card: #3a3a3d;
57            --bg-squad-card: #474747;
58            --text-primary: #e0e0e0;
59            --text-secondary: #b0b0b0;
60            --accent: #B81636;
61            --accent-hover: #5bbbb6;
62            --border-color: #4a4a4d;
63            --border-complement: #B81636;
64            --svg-bg: #5a5d5c;
65            --svg-text: #ffffff;
66            --svg-stroke: #ffffff;
67            --chart-goal: #40c8de;
68            --chart-assist: #ff9650;
69            --chart-cs: #97b070;
70        }
71
72        [data-theme="light"] {
73            --bg-primary: #f5f5f5;
74            --bg-secondary: #ffffff;
75            --bg-card: #ffffff;
76            --bg-squad-card: #fafafa;
77            --text-primary: #2d2d30;
78            --text-secondary: #6b6b6b;
79            --accent: #B81636;
80            --accent-hover: #5bbbb6;
81            --border-color: #e0e0e0;
82            --border-complement: #B81636;
83            --svg-bg: #e8e8e8;
84            --svg-text: #2d2d30;
85            --svg-stroke: #2d2d30;
86            --chart-goal: #2196F3;
87            --chart-assist: #FF6B35;
88            --chart-cs: #4CAF50;
89        }
90
91        body {
92            background: var(--bg-primary) !important;
93            color: var(--text-primary) !important;
94            transition: background-color 0.3s ease, color 0.3s ease;
95        }
96
97        .bg-squad-card {
98            background-color: var(--bg-squad-card) !important;
99            color: var(--text-primary) !important;
100        }
101
102        .border-complement {
103            border-color: var(--border-complement) !important;
104        }
105
106        .card {
107            background-color: var(--bg-card) !important;
108            color: var(--text-primary) !important;
109        }
110
111        .card-header {
112            background-color: var(--bg-squad-card) !important;
113            color: var(--text-primary) !important;
114        }
115
116        .table {
117            color: var(--text-primary) !important;
118            background-color: var(--bg-card) !important;
119        }
120
121        .table-striped tbody tr:nth-of-type(odd) {
122            background-color: var(--bg-secondary) !important;
123        }
124
125        .table-dark {
126            background-color: var(--bg-secondary) !important;
127            color: var(--text-primary) !important;
128        }
129
130        .modal-content {
131            background-color: var(--bg-card) !important;
132            color: var(--text-primary) !important;
133        }
134
135        .form-control {
136            background-color: var(--bg-secondary) !important;
137            border-color: var(--border-color) !important;
138            color: var(--text-primary) !important;
139        }
140
141        .form-control:focus {
142            background-color: var(--bg-secondary) !important;
143            border-color: var(--accent) !important;
144            color: var(--text-primary) !important;
145            box-shadow: 0 0 0 0.2rem rgba(184, 22, 54, 0.25) !important;
146        }
147
148        .input-group-text {
149            background-color: var(--bg-secondary) !important;
150            border-color: var(--border-color) !important;
151            color: var(--text-primary) !important;
152        }
153
154        .btn-primary {
155            background-color: var(--accent);
156            border-color: var(--accent);
157        }
158
159        .btn-primary:hover {
160            background-color: var(--accent-hover);
161            border-color: var(--accent-hover);
162        }
163
164        .btn-secondary {
165            background-color: var(--bg-secondary);
166            border-color: var(--border-color);
167            color: var(--text-primary);
168        }
169
170        .btn-secondary:hover {
171            background-color: var(--border-color);
172            border-color: var(--border-color);
173            color: var(--text-primary);
174        }
175
176        .theme-toggle-btn {
177            background: transparent;
178            border: 1px solid rgba(255, 255, 255, 0.3);
179            color: #e0e0e0;
180            border-radius: 20px;
181            padding: 5px 12px;
182            font-size: 13px;
183            cursor: pointer;
184            transition: all 0.3s ease;
185            display: inline-flex;
186            align-items: center;
187            gap: 6px;
188            margin-left: auto;
189            margin-right: 10px;
190        }
191
192        [data-theme="light"] .theme-toggle-btn {
193            border: 1px solid rgba(0, 0, 0, 0.2);
194            /*color: #2d2d30;
195            background: white;*/
196        }
197
198        .theme-toggle-btn:hover {
199            background: rgba(255, 255, 255, 0.1);
200            border-color: var(--accent-hover);
201        }
202
203        [data-theme="light"] .theme-toggle-btn:hover {
204            background: rgba(0, 0, 0, 0.05);
205        }
206
207        .major-display-box {
208            background-color: var(--bg-secondary) !important;
209            color: var(--text-primary) !important;
210            border: var(--border-color) 1px solid !important;
211        }
212
213        .minor-display-box {
214            background-color: var(--bg-secondary) !important;
215            color: var(--text-primary) !important;
216            border: var(--border-color) 1px solid !important;
217        }
218    </style>
219
220    
220<script>
221        // Apply theme immediately to prevent flash
222        (function () {
223            const savedTheme = localStorage.getItem('theme') || 'dark';
224            document.documentElement.setAttribute('data-theme', savedTheme);
225        })();
226    </script>
226
227
228    <link rel="manifest" href="/static/asset/manifest.json">
229    <link rel="apple-touch-icon" href="/static/asset/apple_logo_114.png">
230    <link rel="apple-touch-startup-image" href="/static/asset/apple_splash_320.png">
231    <meta name="apple-mobile-web-app-capable" content="yes">
232    <meta name="mobile-web-app-capable" content="yes">
233    <meta name="apple-touch-fullscreen" content="yes" />
234    <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
235    <meta name="apple-mobile-web-app-title" content="FPLOptimized">
236
237</head>
238
239<body>
240
241    <div id="app">
242
243        <header class="bg-dark-gray mb-1">
244            <div class="container">
245                <nav class="navbar navbar-collapse navbar-dark container-fluid pl-0 pr-0">
246                    <a class="navbar-brand ml-0 ml-md-3 mr-0 mr-md-3 mr-auto" href="/" aria-label="Bootstrap"><img
247                            src="/static/images/logo_128.png" height="33" /> FPL Optimized</a>
248                    <span class="text-muted">by <a href="https://solioanalytics.com" target="_blank"
249                            class="text-muted">Solio
250                            Analytics</a></span>
251                    <button class="theme-toggle-btn" onclick="toggleTheme()">
252                        <i class="fas fa-moon" id="theme-icon"></i>
253                        <span id="theme-text">Dark</span>
254                    </button>
255                    <!-- <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#menuToggler" aria-controls="menuToggler" aria-expanded="false" aria-label="Toggle navigation">
256                        <span class="navbar-toggler-icon"></span>
257                    </button>
258                    <div class="collapse navbar-collapse text-secondary flex-row-reverse" id="menuToggler">
259                        <span class="twitter-link ml-2 float-right"><a href="https://twitter.com/sertalpbilal"></a></span>
260                        <ul class="navbar-nav">
261                            <li class="nav-item">
262                                <a class="nav-link" href="week.html">Optimal Squads</a>
263                            </li>
264                            <li class="nav-item">
265                                <a class="nav-link" href="live_gw.html">Live GW</a>
266                            </li>
267                            <li class="nav-item">
268                                <a class="nav-link" href="team_summary.html">GW Summary</a>
269                            </li>
270                            <li class="nav-item">
271                                <a class="nav-link" href="fpl_analytics_league.html">FPL Analytics xP League</a>
272                            </li>
273                            <li class="nav-item no-sep">
274                                <a class="nav-link" href="https://twitter.com/sertalpbilal" target=_blank><i class="fab fa-twitter-square"></i></a>
275                            </li>
276                        </ul>
277                    </div> -->
278                </nav>
279            </div>
280        </header>
281
282
283        <!-- <div class="mt-1 container">
284            <div class="row pl-3 pr-3">
285                <div class="col-12 alert alert-info alert-dismissible text-small fade show" role="alert">
286                    <i class="fas fa-info-circle"></i> First time on FPL Optimized? Read a summary of tools <a target="_blank" href="https://threadreaderapp.com/thread/1391100607205941253.html">here.</a>
287                    <button type="button" class="close top-close" data-dismiss="alert" aria-label="Close">
288                        <span aria-hidden="true">&times;</span>
289                    </button>
290                </div>
291            </div>
292        </div> -->
293
294        <!-- <div class="mt-2 container">
295            <div class="row pl-3 pr-3">
296                <div class="col-12 alert alert-warning alert-dismissible text-small fade show" role="alert">
297                    <i class="fas fa-info-circle"></i> FPLOptimized is getting ready for the new season! Some functonalities may not work properly.</a>
298                    <button type="button" class="close top-close" data-dismiss="alert" aria-label="Close">
299                        <span aria-hidden="true">&times;</span>
300                    </button>
301                </div>
302            </div>
303        </div> -->
304        <!--         
305        <div class="mt-2 container">
306            <div class="row pl-3 pr-3">
307                <div class="col-12 alert alert-success alert-dismissible text-small fade show" role="alert">
308                    <i class="fas fa-info-circle"></i> FPLOptimized is ready for new season! Welcome back :)</a>
309                    <button type="button" class="close top-close" data-dismiss="alert" aria-label="Close">
310                        <span aria-hidden="true">&times;</span>
311                    </button>
312                </div>
313            </div>
314        </div> -->
315
316
317        <!-- <div class="mt-2 container mb-1">
318            <div class="row pl-3 pr-3">
319                <div class="col-12 alert alert-success alert-dismissible text-small fade show" role="alert">
320                    <i class="fas fa-info-circle"></i> Join the next part of our journey at <a
321                        href="https://solioanalytics.com">solioanalytics.com</a>
322                    <button type="button" class="close top-close" data-dismiss="alert" aria-label="Close">
323                        <span aria-hidden="true">&times;</span>
324                    </button>
325                </div>
326            </div>
327        </div> -->
328
329        <!-- <div class="mt-2 container">
330            <div class="row pl-3 pr-3">
331                <div class="col-12 alert alert-warning alert-dismissible text-small fade show" role="alert">
332                    <i class="fas fa-trophy"></i> <a href="https://footballcontentawards.com/voting" target="blank">Vote for FPL Optimized in Football Content Awards. (Fantasy Football / Organization)</a>
333                    <button type="button" class="close top-close" data-dismiss="alert" aria-label="Close">
334                        <span aria-hidden="true">&times;</span>
335                    </button>
336                </div>
337            </div>
338        </div> -->
339
340        
340<script>
341            function toggleTheme() {
342                const html = document.documentElement;
343                const icon = document.getElementById('theme-icon');
344                const text = document.getElementById('theme-text');
345                const currentTheme = html.getAttribute('data-theme');
346
347                if (currentTheme === 'light') {
348                    html.setAttribute('data-theme', 'dark');
349                    icon.className = 'fas fa-moon';
350                    text.textContent = 'Dark';
351                    localStorage.setItem('theme', 'dark');
352                } else {
353                    html.setAttribute('data-theme', 'light');
354                    icon.className = 'fas fa-sun';
355                    text.textContent = 'Light';
356                    localStorage.setItem('theme', 'light');
357                }
358
359                // Trigger theme change event for charts
360                document.dispatchEvent(new CustomEvent('themeChanged'));
361            }
362
363            // Update icon after DOM loads
364            document.addEventListener('DOMContentLoaded', function () {
365                const savedTheme = localStorage.getItem('theme') || 'dark';
366                const icon = document.getElementById('theme-icon');
367                const text = document.getElementById('theme-text');
368
369                /*if (savedTheme === 'light') {
370                    icon.className = 'fas fa-sun';
371                    text.textContent = 'Light';
372                } else {
373                    icon.className = 'fas fa-moon';
374                    text.textContent = 'Dark';
375                }*/
376            });
377        </script>
377
378
379<main class="container" v-cloak>
380    <div class="row mb-3">
381        <div class="col-12">
382            <div class="card border-dark bg-squad-card">
383                <h5 class="card-header border-complement text-center scenario_title">FPL Expected Points Calculator</h5>
384                <div class="card-body red-border-bottom" v-cloak>
385
386                    <!-- <div class="row justify-content-center">
387                        <div class="col-12 col-md-8">
388                            <div class="card mt-1 mr-3 m-1 ml-3 bg-gray-3 text-small">
389                                <div class="card-header pt-1 pb-0 click-title collapsed" data-toggle="collapse" data-target="#controls" aria-expanded="false" aria-controls="controls">
390                                    <span>Bet Convertor</span>
391                                    <div class="close text-white">
392                                        <i class="toggle-button fas fa-caret-up"></i>
393                                    </div>
394                                </div>
395                                <div class="collapse" id="controls">
396                                    <div class="card-body pt-1 pb-2 row justify-content-center">
397                                        
398                                        <div class="flex-column metric mw-10 ml-1 col-4 col-md-3">
399                                            <div class="text-center p-0">Fraction</div>
400                                            <div class="setting-value text-center p-0">
401                                                <div class="d-flex flex-row setting-line mb-0">
402                                                    <input type="text"  class="form-control live-select" v-model="bet_fraction">
403                                                </div>
404                                            </div>
405                                        </div>
406
407                                        <div class="flex-column metric mw-10 ml-1 col-4 col-md-3">
408                                            <div class="text-center p-0">Decimal</div>
409                                            <div class="setting-value text-center p-0">
410                                                <div class="d-flex flex-row setting-line mb-0">
411                                                    <input type="text"  class="form-control live-select" v-model="bet_decimal">
412                                                </div>
413                                            </div>
414                                        </div>
415
416                                        <div class="flex-column metric mw-10 ml-1 col-4 col-md-3">
417                                            <div class="text-center p-0">American</div>
418                                            <div class="setting-value text-center p-0">
419                                                <div class="d-flex flex-row setting-line mb-0">
420                                                    <input type="text"  class="form-control live-select" v-model="bet_american">
421                                                </div>
422                                            </div>
423                                        </div>
424
425                                        <div class="flex-column metric mw-10 ml-1 col-4 col-md-3">
426                                            <div class="text-center p-0">Bookmaker's Margin</div>
427                                            <div class="setting-value text-center p-0">
428                                                <div class="d-flex flex-row setting-line mb-0">
429                                                    <input type="text"  class="form-control live-select" v-model="bookmaker_margin">
430                                                </div>
431                                            </div>
432                                        </div>
433
434                                        <div class="flex-column metric mw-10 ml-1 col-4 col-md-3">
435                                            <div class="text-center p-0">Implied Probability %</div>
436                                            <div class="setting-value text-center p-0">
437                                                <div class="d-flex flex-row setting-line mb-0">
438                                                    <input type="text"  class="form-control live-select" v-model="bookmaker_margin">
439                                                </div>
440                                            </div>
441                                        </div>
442            
443                                    </div>
444                                </div>
445                            </div>
446                        </div>
447                    </div> -->
448
449
450                    <!-- <div class="text-center mb-2 text-small">
451                        Sample values are available on <a href="https://fplreview.com/raw-free-model-data/" target=_blank>FPLReview</a> and <a href="https://www.drafthound.com/football/premier-league/players" target=_blank>DraftHound</a>.
452                    </div> -->
453
454                    <div class="text-center mb-2 text-small">
455                        <div class="custom-control custom-switch text-small d-inline-block mr-3">
456                            <input type="checkbox" class="custom-control-input" id="r_switch" @change="toggle_rate">
457                            <label class="custom-control-label highlighted-checkbox" for="r_switch">Show Rates</label>
458                        </div>
459                    </div>
460
461                    <div class="controls-top row justify-content-center text-small mb-3"
462                        v-for="p in _.range(player_count)">
463
464
465                        <!-- player_name -->
466
467                        <div class="col-4 col-sm-2">
468                            <div class="form-group mb-0">
469                                <label for="select-2">Player Name</label>
470                                <div class="input-group mb-1 no-wrap">
471                                    <input type="text" class="form-control small-inner-text" id="select-name"
472                                        v-model="players[p].name">
473                                </div>
474                            </div>
475                        </div>
476
477                        <div class="col-4 col-sm-2">
478                            <div class="form-group mb-0">
479                                <label for="select-1">Player Position</label>
480                                <select class="form-control small-inner-text" id="select-1"
481                                    v-model="players[p].position">
482                                    <option value="1">GK</option>
483                                    <option value="2">DF</option>
484                                    <option value="3">MD</option>
485                                    <option value="4">FW</option>
486                                </select>
487                            </div>
488                        </div>
489                        <!-- <div class="col-3 col-md-2 ml-1 mr-1">
490                            <div class="form-group">
491                                <label for="select-0">Play %</label>
492                                <div class="input-group mb-3">
493                                    <input type="number" step="0.1" min="0" max="100" class="form-control" id="select-0" v-model.number="player_play">
494                                    <div class="input-group-append">
495                                        <span class="input-group-text">%</span>
496                                    </div>
497                                </div>
498                            </div>
499                        </div> -->
500                        <div class="col-4 col-sm-2">
501                            <div class="form-group mb-0">
502                                <div v-if="!show_rates">
503                                    <label for="select-2" :style="{color: colors[0]}">Anytime Goal %</label>
504                                    <div class="input-group mb-1 no-wrap">
505                                        <input type="number" step="0.1" min="0" max="100"
506                                            class="form-control small-inner-text" id="select-2"
507                                            v-model.number="players[p].goal">
508                                        <div class="input-group-append">
509                                            <span class="input-group-text small-perc">%</span>
510                                        </div>
511                                    </div>
512                                </div>
513                                <div v-else>
514                                    <label for="comp-2" :style="{color: colors[0]}">Avg. Goal Rate</label>
515                                    <div class="input-group mb-1 no-wrap">
516                                        <input type="number" step="0.01" min="0"
517                                            class="form-control small-inner-text goal_rates" id="comp-2"
518                                            @change="update_goal" :data-order="p">
519                                    </div>
520                                </div>
521                            </div>
522                        </div>
523                        <div class="col-5 col-sm-2">
524                            <div class="form-group mb-0 ">
525                                <div v-if="!show_rates">
526                                    <label for="select-3" :style="{color: colors[1]}">Anytime Assist %</label>
527                                    <div class="input-group mb-1 no-wrap">
528                                        <input type="number" step="0.1" min="0" max="100"
529                                            class="form-control small-inner-text" id="select-3"
530                                            v-model.number="players[p].assist">
531                                        <div class="input-group-append">
532                                            <span class="input-group-text small-perc">%</span>
533                                        </div>
534                                    </div>
535                                </div>
536                                <div v-else>
537                                    <label for="comp-3" :style="{color: colors[1]}">Avg. Assist Rate</label>
538                                    <div class="input-group mb-1 no-wrap">
539                                        <input type="number" step="0.01" min="0"
540                                            class="form-control small-inner-text assist_rates" id="comp-3"
541                                            @change="update_assist" :data-order="p">
542                                    </div>
543                                </div>
544                            </div>
545                        </div>
546                        <div class="col-5 col-sm-2">
547                            <div class="form-group mb-0">
548                                <div v-if="!show_rates">
549                                    <label for="select-4" :style="{color: colors[2]}">Clean Sheet %</label>
550                                    <div class="input-group mb-1 no-wrap">
551                                        <input type="number" step="0.1" min="0" max="100"
552                                            class="form-control small-inner-text" id="select-4"
553                                            v-model.number="players[p].cs">
554                                        <div class="input-group-append">
555                                            <span class="input-group-text small-perc">%</span>
556                                        </div>
557                                    </div>
558                                </div>
559                                <div v-else>
560                                    <label for="comp-4" :style="{color: colors[2]}">Avg. Goals Conceded</label>
561                                    <div class="input-group mb-1 no-wrap">
562                                        <input type="number" step="0.01" min="0"
563                                            class="form-control small-inner-text gc_rates" id="comp-4"
564                                            @change="update_gc" :data-order="p">
565                                    </div>
566                                </div>
567                            </div>
568                        </div>
569                        <div class="col-0 d-flex align-items-end">
570                            <button :style="{'visibility': player_count > 1 || p > 0 ? 'visible': 'hidden'}"
571                                class="btn btn-secondary text-small mb-1" @click="remove_player(players[p])"><i
572                                    class="fas fa-times"></i></button>
573                        </div>
574                    </div>
575                    <div class="controls-top row justify-content-center text-small">
576                        <button class="btn btn-secondary text-small mb-1" @click="add_player"
577                            v-show="player_count < 4"><i class="fas fa-plus"></i></button>
578                    </div>
579                    <div class="text-center">
580                        <button class="btn btn-primary text-small" @click="calculate">Calculate</button>
581                    </div>
582                </div>
583                <div class="card-body red-border-bottom">
584
585                    <div class="row justify-content-center mb-3">
586                        <div class="major-display-box m-1" v-for="(value,key) in players_cached">
587                            <div class="major-box-title">EV {{ value.name ? '('+ value.name +')' : '' }}</div>
588                            <div class="major-box-value">{{ expected_points[key].toFixed(2) }}</div>
589                            <div class="major-box-footnote">*Excluding appearance, bonus, PK, GK save points</div>
590                        </div>
591                    </div>
592
593                    <div class="row justify-content-center mb-3" v-if="players_cached.length == 2">
594                        <div class="minor-display-box m-1 p-3">
595                            <div class="minor-box-title">{{ players_cached[0].name }} > {{ players_cached[1].name }}
596                            </div>
597                            <div class="minor-box-value pb-2">{{ (comparison.p1_better * 100).toFixed(2) }}%</div>
598                        </div>
599                        <div class="minor-display-box m-1 p-3">
600                            <div class="minor-box-title">{{ players_cached[0].name }} = {{ players_cached[1].name }}
601                            </div>
602                            <div class="minor-box-value pb-2">{{ (comparison.players_equal * 100).toFixed(2) }}%</div>
603                        </div>
604                        <div class="minor-display-box m-1 p-3">
605                            <div class="minor-box-title">{{ players_cached[0].name }} < {{ players_cached[1].name
606                                    }}</div>
607                                    <div class="minor-box-value pb-2">{{ (comparison.p2_better * 100).toFixed(2) }}%
608                                    </div>
609                            </div>
610                        </div>
611
612                        <div class="row justify-content-center mb-3" v-for="(value,key) in players_cached">
613                            <div class="col-4">
614                                <div class="minor-display-box">
615                                    <div class="minor-box-title" :style="{color: colors[0]}">Average Goals Scored {{
616                                        value.name ? '(' + value.name + ')' : '' }}</div>
617                                    <div class="minor-box-value red-border-bottom pb-2">{{ goal_rate[key].toFixed(2) }}
618                                    </div>
619                                    <div class="minor-box-title" :style="{color: colors[0]}">Average Goal Points</div>
620                                    <div class="minor-box-value">{{ goal_points[key].toFixed(2) }}</div>
621                                    <div class="minor-box-footnote">*Assuming 90 mins</div>
622                                </div>
623                            </div>
624                            <div class="col-4">
625                                <div class="minor-display-box">
626                                    <div class="minor-box-title" :style="{color: colors[1]}">Average Assists Made {{
627                                        value.name ? '(' + value.name + ')' : '' }}</div>
628                                    <div class="minor-box-value red-border-bottom pb-2">{{ assist_rate[key].toFixed(2)
629                                        }}</div>
630                                    <div class="minor-box-title" :style="{color: colors[1]}">Average Assist Points</div>
631                                    <div class="minor-box-value">{{ assist_points[key].toFixed(2) }}</div>
632                                    <div class="minor-box-footnote">*Assuming 90 mins</div>
633                                </div>
634                            </div>
635                            <div class="col-4">
636                                <div class="minor-display-box">
637                                    <div class="minor-box-title" :style="{color: colors[2]}">Average Conceded {{
638                                        value.name ? '(' + value.name + ')' : '' }}</div>
639                                    <div class="minor-box-value red-border-bottom pb-2">{{ gc_rate[key].toFixed(2) }}
640                                    </div>
641                                    <div class="minor-box-title" :style="{color: colors[2]}">Average CS-GC Points</div>
642                                    <div class="minor-box-value">{{ csgc_points[key].toFixed(2) }}</div>
643                                    <div class="minor-box-footnote">*Assuming 90 mins</div>
644                                </div>
645                            </div>
646                        </div>
647
648                        <div>
649                            <div id="ev_graph">
650
651                            </div>
652                        </div>
653
654                    </div>
655                    <div class="card-body red-border-bottom">
656                        <div class="metric-self">
657                            <div class="text-center mb-1" :style="{color: colors[0]}">Goals</div>
658                            <div class="row">
659                                <div class="col-12">
660                                    <div class="table-responsive">
661                                        <table class="table table-sm table-striped">
662                                            <thead>
663                                                <tr>
664                                                    <th>#</th>
665                                                    <th v-for="g in _.range(0,11)">
666                                                        {{ g }}
667                                                    </th>
668                                                    <th>Total</th>
669                                                </tr>
670                                            </thead>
671                                            <tbody>
672                                                <tr>
673                                                    <td>Prob.</td>
674                                                    <td v-for="g in _.range(0,11)">
675                                                        {{ ((goal_probs[0][g] || 0) * 100).toFixed(2) }}%
676                                                    </td>
677                                                    <td>-</td>
678                                                </tr>
679                                                <tr>
680                                                    <td>Points</td>
681                                                    <td v-for="g in _.range(0,11)">
682                                                        {{ (active_rates[0]['goal'] || 0) * g }}
683                                                    </td>
684                                                    <td>-</td>
685                                                </tr>
686                                                <tr>
687                                                    <td>EV</td>
688                                                    <td v-for="g in _.range(0,11)">
689                                                        {{ (active_rates[0]['goal'] * goal_probs[0][g] * g ||
690                                                        0).toFixed(2) }}
691                                                    </td>
692                                                    <td>{{ goal_points[0].toFixed(2) }}</td>
693                                                </tr>
694                                            </tbody>
695                                        </table>
696                                    </div>
697                                    <div id="goal_prob_graph">
698
699                                    </div>
700                                </div>
701                            </div>
702                        </div>
703
704                        <div class="metric-self">
705                            <div class="text-center mb-1" :style="{color: colors[1]}">Assists</div>
706                            <div class="row">
707                                <div class="col-12">
708                                    <div class="table-responsive">
709                                        <table class="table table-sm table-striped">
710                                            <thead>
711                                                <tr>
712                                                    <th>#</th>
713                                                    <th v-for="g in _.range(0,11)">
714                                                        {{ g }}
715                                                    </th>
716                                                    <th>Total</th>
717                                                </tr>
718                                            </thead>
719                                            <tbody>
720                                                <tr>
721                                                    <td>Prob.</td>
722                                                    <td v-for="g in _.range(0,11)">
723                                                        {{ ((assist_probs[0][g] || 0) * 100).toFixed(2) }}%
724                                                    </td>
725                                                    <td>-</td>
726                                                </tr>
727                                                <tr>
728                                                    <td>Points</td>
729                                                    <td v-for="g in _.range(0,11)">
730                                                        {{ (active_rates[0]['assist'] || 0) * g }}
731                                                    </td>
732                                                    <td>-</td>
733                                                </tr>
734                                                <tr>
735                                                    <td>EV</td>
736                                                    <td v-for="g in _.range(0,11)">
737                                                        {{ (active_rates[0]['assist'] * assist_probs[0][g] * g ||
738                                                        0).toFixed(2) }}
739                                                    </td>
740                                                    <td>{{ assist_points[0].toFixed(2) }}</td>
741                                                </tr>
742                                            </tbody>
743                                        </table>
744                                    </div>
745                                    <div id="assist_prob_gra
745ph">
746
747                                    </div>
748                                </div>
749                            </div>
750                        </div>
751
752                        <div class="metric-self">
753                            <div class="text-center mb-1" :style="{color: colors[2]}">Clean Sheet - Goals Conceded</div>
754                            <div class="row">
755                                <div class="col-12">
756                                    <div class="table-responsive">
757                                        <table class="table table-sm table-striped">
758                                            <thead>
759                                                <tr>
760                                                    <th>#</th>
761                                                    <th v-for="g in _.range(0,11)">
762                                                        {{ g }}
763                                                    </th>
764                                                    <th>Total</th>
765                                                </tr>
766                                            </thead>
767                                            <tbody>
768                                                <tr>
769                                                    <td>Prob.</td>
770                                                    <td v-for="g in _.range(0,11)">
771                                                        {{ ((gc_probs[0][g] || 0) * 100).toFixed(2) }}%
772                                                    </td>
773                                                    <td>-</td>
774                                                </tr>
775                                                <tr>
776                                                    <td>CS Points</td>
777                                                    <td v-for="g in _.range(0,11)">
778                                                        {{ (active_rates[0]['cs'] || 0) * (g==0) }}
779                                                    </td>
780                                                    <td>-</td>
781                                                </tr>
782                                                <tr>
783                                                    <td>GC Points</td>
784                                                    <td v-for="g in _.range(0,11)">
785                                                        {{ (active_rates[0]['2gc'] || 0) * (Math.floor(g/2)) }}
786                                                    </td>
787                                                    <td>-</td>
788                                                </tr>
789                                                <tr>
790                                                    <td>EV</td>
791                                                    <td v-for="g in _.range(0,11)">
792                                                        {{ ((gc_probs[0][g] || 0) * ((active_rates[0]['cs'] || 0) *
793                                                        (g==0) + (active_rates[0]['2gc'] || 0) *
794                                                        (Math.floor(g/2)))).toFixed(2) }}
795                                                    </td>
796                                                    <td>{{ csgc_points[0].toFixed(2) }}</td>
797                                                </tr>
798                                            </tbody>
799                                        </table>
800                                    </div>
801                                    <div class="mt-2" id="cs_prob_graph">
802
803                                    </div>
804                                    <div class="mt-4" id="gc_prob_graph">
805
806                                    </div>
807                                </div>
808                            </div>
809                        </div>
810
811                    </div>
812                </div>
813            </div>
814        </div>
815
816        <div class="row" v-cloak>
817            <div class="col-12 mb-3">
818                <div class="card border-dark bg-squad-card qa">
819                    <div class="card-footer disclaimer">
820                        The information contained on this website is for general information purposes only. Any reliance
821                        you place on this information is strictly at your own risk.
822                    </div>
823                </div>
824            </div>
825        </div>
826
827</main>
828
829 </div>
830
831
832
833<script src="https://code.jquery.com/jquery-3.5.1.min.js" crossorigin="anonymous"></script>
vendor: 1 bytes, line 833
833
834<script src="https://cdnjs.cloudflare.com/ajax/libs/svg.js/3.0.16/svg.js"
835    integrity="sha512-M17tsaj3tHw5m/gI+8XjDLTuPZ0cpTofhFLJUT9niFa/DK8WAhsSLW764iSaaXoAoivXEFUP6VxvpiahJPQ4fg=="
836    crossorigin="anonymous"></script>
vendor: 1 bytes, line 836
836
837<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.js"
838    integrity="sha512-WNLxfP/8cVYL9sj8Jnp6et0BkubLP31jhTG9vhL/F5uEZmg5wEzKoXp1kJslzPQWwPT1eyMiSxlKCgzHLOTOTQ=="
839    crossorigin="anonymous"></script>
vendor: 1 bytes, line 839
839
840<script src="https://fastly.jsdelivr.net/npm/[email protected]/lodash.min.js"
841    integrity="sha256-ur/YlHMU96MxHEsy3fHGszZHas7NzH4RQlD4tDVvFhw=" crossorigin="anonymous"></script>
vendor: 1 bytes, line 841
841
842<script src="https://fastly.jsdelivr.net/npm/[email protected]"></script>
842
843<!-- 
843<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>
vendor: 1 bytes, line 843
843
844<script>
845    Vue.config.performance = true;
846    Vue.prototype.$log = console.log;
847</script>
847 -->
848<script src="https://cdnjs.cloudflare.com/ajax/libs/jstat/1.9.5/jstat.js"
849    integrity="sha512-D5uf20+sRi7oJxHzrp6LZDaY/IrSFIKmaQ7bOQA6V1Z+Jr9DOFKodR3RyYwdeEoGUZlfz76XQlDy5/TWdyKz9Q=="
850    crossorigin="anonymous" referrerpolicy="no-referrer"></script>
vendor: 1 bytes, line 850
850
851<script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.3.2/html2canvas.min.js"
852    integrity="sha512-tVYBzEItJit9HXaWTPo8vveXlkK62LbA+wez9IgzjTmFNLMBO1BEYladBw2wnM3YURZSMUyhayPCoLtjGh84NQ=="
853    crossorigin="anonymous" referrerpolicy="no-referrer"></script>
853
854
855
856<script src="https://fastly.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.js"
857    crossorigin="anonymous"></script>
vendor: 1 bytes, line 857
857
858<script src="https://fastly.jsdelivr.net/npm/[email protected]/vue-cookies.js"
859    integrity="sha256-pdSyqKvUOsiAZVUhatSOyW3Wom0l7ABtO8w7LjPA3vU=" crossorigin="anonymous"></script>
859
860<!-- 
860<script type="text/javascript" src="url_for('static', filename='3rdparty/vis-timeline-graph2d.min.js')"></script>
860 -->
861
862<!-- 
862<script src="https://cdn.datatables.net/1.10.22/js/jquery.dataTables.min.js"></script>
vendor: 1 bytes, line 862
862
863<script src="https://cdn.datatables.net/1.10.22/js/dataTables.bootstrap4.min.js"></script>
vendor: 1 bytes, line 863
863
864<script src="https://cdn.datatables.net/fixedcolumns/3.3.2/js/dataTables.fixedColumns.min.js"></script>
864 -->
865<!-- 
865<script src="https://cdn.datatables.net/responsive/2.2.6/js/dataTables.responsive.min.js"></script>
865 -->
866<!-- 
866<script src="https://cdn.datatables.net/responsive/2.2.6/js/responsive.bootstrap4.min.js"></script>
866 -->
867<!-- 
867<script src="https://cdn.datatables.net/fixedheader/3.1.7/js/dataTables.fixedHeader.min.js"></script>
867 -->
868<!-- 
868<script src="https://cdn.datatables.net/searchbuilder/1.0.1/js/dataTables.searchBuilder.min.js"></script>
868 -->
869
870<script type="text/javascript"
871    src="https://cdn.datatables.net/v/bs4/dt-1.10.23/b-1.6.5/b-colvis-1.6.5/b-html5-1.6.5/fc-3.3.2/fh-3.1.7/r-2.2.6/sp-1.2.2/datatables.min.js"></script>
871
872
873<script src="https://fastly.jsdelivr.net/npm/[email protected]"></script>
873
874
875<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-csv/1.0.21/jquery.csv.js"
876    integrity="sha512-2ypsPur7qcA+2JjmmIJR1c4GWFqTLIe1naXXplraMg0aWyTOyAMpOk+QL+ULpzwrO/GdwA3qB3FhVyyiR8gdhw=="
877    crossorigin="anonymous" referrerpolicy="no-referrer"></script>
877
878
879<script src="https://fastly.jsdelivr.net/npm/[email protected]/fernetBrowser.js"></script>
879
880
881<script>
882    let repo_name = ""
883    let season = "";
884    let gw = "";
885    let next_gw = "";
886    let date = "";
887    let lastupdate = "";
888    let listdates = [
889    ];
890    let is_active = false ;
891    let active_gw = -1 ;
892</script>
892
893
894
895<script src="/static/js/main.js?ts=20260920183004"></script>
895
896
897<script src="/static/js/calculator.js?ts=20260920183004"></script>
897
898
899
900<script>
901    $('.alert').alert()
902</script>
902
903
904<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"ebff31e0ee5346329299366b4d5cf8b1","r":1,"spa":2}' crossorigin="anonymous"></script>
904
905</body>
906
907<!-- <div class="text-muted text-center mx-auto text-small mb-1 c-footnote">Icons made by <a href="https://www.freepik.com" title="Freepik">Freepik</a> from <a href="https://www.flaticon.com/" title="Flaticon">www.flaticon.com</a></div> -->
908<div class="mx-auto text-center d-block text-muted text-small mb-1">Last update: </div>
909
910</html> 

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.