Predictor
A season-long score predictor with Play, Leaderboard, Private Leagues, Rules, and Prizes tabs, plus a compact single-match embed template.
Football score predictor widget with two templates: the default multi-tab interface (match predictions, global leaderboard, private leagues, game rules, and prizes) for a season-long engagement tool, and embed — a compact single-match card designed to sit inside an article. Users submit match score predictions across grouped matchweeks, track their standing on a global leaderboard, create or join private leagues, read game rules, and view prizes — all within a single embedded widget.
<div
data-component="fu-widget"
data-content-type="predictor"
data-content-id="your-predictor-template-id"
data-predictor-tabs="play,leaderboard,private-leagues,rules,prizes"
data-signin-cta-label="Sign in to Predict"
data-signin-cta-onclick="showSignInModal()"
data-predictor-match-card-bg-image-url="https://example.com/stadium-bg.jpg"
data-predictor-consents='[{"consentId":"tos","body":"I agree to the <a href=\"#\" target=\"_blank\" rel=\"noopener\">Terms of Service</a>","required":true,"defaultChecked":false}]'
></div>Configuration Attributes
| Attribute | Description | Options/Format | Default |
|---|---|---|---|
data-predictor-template | Which presentation to render | "standard", "embed" | "standard" |
data-predictor-tabs | Comma-separated list of tabs to enable | "play,leaderboard,private-leagues,rules,prizes" | All tabs |
data-signin-cta-label | Override the sign-in button label | Any string | Translated default |
data-signin-cta-onclick | JavaScript code to execute on sign-in click | JavaScript code | None |
data-signin-cta-url | Direct URL for the sign-in CTA | Valid URL | None |
data-signin-cta-target | Link target for the sign-in CTA URL | "_self", "_blank" | "_self" |
data-predictor-match-card-bg-image-url | Background image URL for match prediction cards | Valid image URL | Global config |
data-predictor-consents | JSON array of consent definitions required before predicting | Array of consent objects (see below) | Global config |
data-predictor-betslip | JSON object to enable betslip integration inside Predictor | PredictorBetslipConfig object (see below) | Global config |
Templates
Predictor supports two presentations, chosen via data-predictor-template. Unlike the shared WidgetTemplate enum used by most other widgets, Predictor's template is a plain string union.
| Template | Use case |
|---|---|
"standard" (default) | The full multi-tab interface — Play, Leaderboard, Private Leagues, Rules, Prizes. |
"embed" | A single upcoming match rendered as a compact card, meant to be dropped inside an article. No tabs, no leaderboard. |
<div
data-component="fu-widget"
data-content-type="predictor"
data-content-id="your-predictor-template-id"
data-predictor-template="embed"
data-predictor-embed-image-position="left"
data-predictor-embed-match-id="fb:m:451634"
data-predictor-embed-success-title="Prediction submitted!"
data-predictor-embed-success-description="Keep playing for a chance to win amazing prizes."
data-predictor-embed-success-cta-label="Play Now"
data-predictor-embed-success-cta-url="https://your-site.com/predictor"
data-predictor-embed-success-cta-target="_blank"
></div>Embed Attributes (only read when data-predictor-template="embed"):
| Attribute | Description | Options/Format | Default |
|---|---|---|---|
data-predictor-embed-image-position | Which side the image renders on; description takes the other side | "left", "right" | "right" |
data-predictor-embed-match-id | Pin a specific match | Match id | Soonest upcoming match |
data-predictor-embed-success-title | Title shown below the match card after a prediction is submitted | Any string | None |
data-predictor-embed-success-description | Description shown alongside the success title | Any string | None |
data-predictor-embed-success-cta-label | Success CTA button label | Any string | None |
data-predictor-embed-success-cta-onclick | Success CTA JavaScript function | JavaScript code | None |
data-predictor-embed-success-cta-url | Success CTA redirect URL | Valid URL | None |
data-predictor-embed-success-cta-target | Success CTA link target | "_self", "_blank" | "_self" |
Omit all
data-predictor-embed-success-*attributes to show nothing extra after a prediction is submitted.
Global configuration:
FuWidget.init({
// ... other config
predictor: {
template: "embed",
embed: {
imagePosition: "left",
matchId: "fb:m:451634",
successMessage: {
title: "Prediction submitted!",
description: "Keep playing for a chance to win amazing prizes.",
cta: {
defaultLabel: "Play Now",
url: "https://your-site.com/predictor",
target: "_blank",
},
},
},
},
});Tabs
Applies to
data-predictor-template="standard"only (or when the attribute is omitted, since"standard"is the default).
All tabs are shown by default. Use data-predictor-tabs to restrict which tabs are visible. The order in the attribute determines the display order.
| Tab value | Description |
|---|---|
play | Main prediction interface — submit match score forecasts |
leaderboard | Global rankings and user standings with pagination |
private-leagues | Create and join private leagues to compete with friends |
rules | Searchable game rules and scoring system |
prizes | Prize distribution and rewards information |
Consent Configuration
Require users to accept consent agreements before submitting their first prediction. Configure consents globally or per-widget using data-predictor-consents. Required consents block progression until accepted; optional consents are shown in the same modal but do not block it.
Global configuration:
FuWidget.init({
// ... other config
predictor: {
consents: [
{
consentId: "tos",
body: `I agree to the <a href="#" target="_blank" rel="noopener">Terms of Service</a>`,
required: true,
defaultChecked: false,
},
],
},
});Per-widget override:
<div
data-component="fu-widget"
data-content-type="predictor"
data-content-id="your-predictor-template-id"
data-predictor-consents='[{"consentId":"tos","body":"I agree to the <a href=\"#\" target=\"_blank\" rel=\"noopener\">Terms of Service</a>","required":true,"defaultChecked":false}]'
></div>Consent Object Fields:
| Field | Type | Description |
|---|---|---|
consentId | string | Unique identifier for the consent (e.g. "tos", "marketing") |
body | string | Text or HTML content of the consent label |
required | boolean | When true, the user must accept before they can predict |
defaultChecked | boolean | Pre-check the consent checkbox on load |
Betslip Integration
The Predictor widget has built-in betslip support. When enabled, users can add selections directly from the prediction interface and place bets alongside their predictions.
The trigger field controls which predictions open the betslip:
| Value | Description |
|---|---|
"predictions-only" | Betslip appears only for predictions that carry live odds |
"odds-only" | Betslip appears for any odds, regardless of prediction state |
Global configuration:
FuWidget.init({
// ... other config
predictor: {
betslip: {
trigger: "predictions-only",
position: "bottom-right",
currency: "USD",
ctaUrlTemplate: "https://bookmaker.com/betslip?s={SELECTIONS}",
},
},
});Per-widget override:
<div
data-component="fu-widget"
data-content-type="predictor"
data-content-id="your-predictor-template-id"
data-predictor-betslip='{"trigger":"predictions-only","position":"bottom-right","currency":"USD"}'
></div>PredictorBetslipConfig fields:
| Field | Type | Description |
|---|---|---|
trigger | string | When to activate the betslip: "predictions-only" or "odds-only" |
position | BetslipPosition | Widget position on the page (same options as standalone Betslip) |
maxSelections | number | Maximum allowed selections |
stakePresets | number[] | Quick-stake preset amounts |
oddsPollingInterval | number | Odds refresh interval in milliseconds |
currency | string | Currency label |
ctaUrlTemplate | string | URL for the place-bet CTA |
brandingLogoUrl | string | Bookmaker or sponsor logo URL |
labels | BetslipLabels | Override displayed text (see the Betslip widget page) |
Authentication and Sign-in
The widget automatically detects user authentication status. When a user is not authenticated, a sign-in prompt is shown in the Play tab. Configure the sign-in CTA globally or per-widget using the same signInCTA configuration as other widgets.
FuWidget.init({
// ... other config
signInCTA: {
defaultLabel: "Sign in to Predict",
onClick: () => {
window.location.href = "/signin";
},
},
});Features
- Two templates:
"standard"(multi-tab) and"embed"(single-match article card) - Multi-tab interface: Play, Leaderboard, Private Leagues, Rules, and Prizes (
"standard"only) - Season-long score prediction for grouped matchweeks
- Global leaderboard with paginated standings and user rank highlighting
- Private leagues — create and join custom competitive groups
- Consent management with required/optional consent gates
- Authentication-aware UI with configurable sign-in CTA
- Custom match card background image
- Built-in betslip integration for placing bets alongside predictions
- Custom theming and multi-language support
Related:Betslip widget (standalone betslip + the
FuWidget.betslipAPI) · Features → Sign-in & Additional CTA.
Updated 21 days ago
