Sofascore Chances

Replace betting odds with chances calculated by the odds

이 스크립트를 설치하려면 Tampermonkey, Greasemonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램을 설치해야 합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Userscripts와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 유저 스크립트 관리자 확장 프로그램이 필요합니다.

(이미 유저 스크립트 관리자가 설치되어 있습니다. 설치를 진행합니다!)

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

(이미 유저 스타일 관리자가 설치되어 있습니다. 설치를 진행합니다!)

// ==UserScript==
// @name         Sofascore Chances
// @namespace    https://greasyfork.org/users/21515
// @version      0.2.2
// @description  Replace betting odds with chances calculated by the odds
// @author       CennoxX
// @homepage     https://twitter.com/CennoxX
// @match        https://www.sofascore.com/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=sofascore.com
// @license      MIT
// @grant        none
// ==/UserScript==
/* jshint esversion: 11 */

(function() {
    "use strict";
    var getChances = (nodes) => {
        if (nodes[0].innerHTML?.includes("%"))
            return null;
        var values = nodes.map(n => Number(n.innerHTML));
        var all = values.reduce((sum, v) => sum + 1 / v, 0);
        return values.map(v => Math.round((1 / v) / all * 100) + " %");
    };
    setInterval(()=>{
        var results = [];
        var selector = "span.textStyle_display\\.micro";
        document.querySelectorAll(selector).forEach(span => {
            for (var el = span.parentElement; el; el = el.parentElement) {
                var matches = el.querySelectorAll(selector);
                if (matches.length == 3 && Number(matches[0].innerHTML)) {
                    results.push([...matches]);
                    break;
                }
            }
        });
        results.forEach(r => {
            var chances = getChances(r);
            if (chances)
                requestAnimationFrame(() => r.forEach((node, i) => { node.innerHTML = chances[i] }));
        });
    },500);
})();