Skip to content

Commit 7a36d6f

Browse files
committed
some more fixes
1 parent c17438f commit 7a36d6f

9 files changed

Lines changed: 139 additions & 32 deletions

File tree

apps.json

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -110,8 +110,8 @@
110110
"i": "market_brief",
111111
"x": 0,
112112
"y": 12,
113-
"w": 13,
114-
"h": 20,
113+
"w": 20,
114+
"h": 24,
115115
"groups": [
116116
"Group 1",
117117
"Group 2",
@@ -120,10 +120,10 @@
120120
},
121121
{
122122
"i": "orderbook_ladder",
123-
"x": 13,
123+
"x": 20,
124124
"y": 12,
125-
"w": 14,
126-
"h": 20,
125+
"w": 20,
126+
"h": 24,
127127
"groups": [
128128
"Group 1",
129129
"Group 2",
@@ -132,10 +132,10 @@
132132
},
133133
{
134134
"i": "top_holders",
135-
"x": 27,
136-
"y": 12,
137-
"w": 13,
138-
"h": 20,
135+
"x": 0,
136+
"y": 36,
137+
"w": 40,
138+
"h": 16,
139139
"groups": [
140140
"Group 1",
141141
"Group 2",
@@ -145,7 +145,7 @@
145145
{
146146
"i": "selected_trades",
147147
"x": 0,
148-
"y": 32,
148+
"y": 52,
149149
"w": 40,
150150
"h": 12,
151151
"groups": [
@@ -233,4 +233,4 @@
233233
}
234234
]
235235
}
236-
]
236+
]

openbb_polymarket/browse.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,11 +71,11 @@ def _event_html(
7171
sub = " · ".join(part for part in (escape(tags), close_html) if part)
7272
event_id = str(event.get("event_id") or "")
7373
market_key = str((event.get("outcomes") or [{}])[0].get("market_key") or "")
74-
href = f"{base_url}/event_details?event_id={quote(event_id)}&theme={quote(theme)}"
74+
href = f"{base_url}/browse_markets?view={quote(event_id)}"
7575
if market_key:
7676
href += f"&market_key={quote(market_key, safe='')}"
7777
if back_qs:
78-
href += f"&back={quote(back_qs, safe='')}"
78+
href += f"&{back_qs}"
7979
selected = " selected" if event_id and event_id == selected_event_id else ""
8080
return f"""
8181
<a class="event{selected}" href="{href}" data-event-id="{escape(event_id)}" data-market-key="{escape(market_key)}">

openbb_polymarket/event_page.py

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ def render_event_page(
8181
history_figure: dict[str, Any] | None = None,
8282
poll_url: str = "",
8383
market_key: str = "",
84+
filters: dict[str, Any] | None = None,
8485
) -> str:
8586
is_light = theme == "light"
8687
assets = base_url.rstrip("/")
@@ -91,15 +92,27 @@ def render_event_page(
9192
)
9293
figure_json = json.dumps(history_figure or {}).replace("</", "<\\/")
9394
cfg_json = json.dumps(
94-
{"poll": poll_url, "event_id": event_id, "market_key": market_key}
95+
{
96+
"poll": poll_url,
97+
"event_id": event_id,
98+
"market_key": market_key,
99+
"theme": theme,
100+
"filters": filters or {},
101+
}
95102
).replace("</", "<\\/")
96-
outcomes = sorted(
103+
all_outcomes = sorted(
97104
(_outcome_row(m) for m in markets),
98105
key=lambda o: to_float(o["volume_total"]),
99106
reverse=True,
100107
)
101-
total_volume = sum(o["volume_total"] for o in outcomes)
102-
total_liquidity = sum(o["liquidity"] for o in outcomes)
108+
total_volume = sum(o["volume_total"] for o in all_outcomes)
109+
total_liquidity = sum(o["liquidity"] for o in all_outcomes)
110+
111+
def _active(outcome: dict[str, Any]) -> bool:
112+
return to_float(outcome["volume_total"]) > 0 or to_float(outcome["liquidity"]) > 0
113+
114+
outcomes = [o for o in all_outcomes if _active(o)] or all_outcomes
115+
hidden = len(all_outcomes) - len(outcomes)
103116
rep = markets[0] if markets else {}
104117
tags = ", ".join(
105118
str(t.get("slug") or t.get("label") or "")
@@ -110,14 +123,19 @@ def render_event_page(
110123
meta = " · ".join(
111124
part for part in (
112125
escape(tags),
113-
f"{len(outcomes)} markets",
126+
f"{len(outcomes)} of {len(all_outcomes)} markets" if hidden else f"{len(all_outcomes)} markets",
114127
f"${compact_number(total_volume)} volume",
115128
f"${compact_number(total_liquidity)} liquidity",
116129
(_time_el(event.get("endDate"), "ends ") if event.get("endDate") else ""),
117130
) if part
118131
)
119132

120133
rows = "".join(_outcome_html(o) for o in outcomes) or '<tr><td colspan="7" class="muted">No markets.</td></tr>'
134+
if hidden:
135+
rows += (
136+
f'<tr><td colspan="7" class="muted" style="text-align:center;padding-top:12px">'
137+
f"{hidden} inactive market{'s' if hidden != 1 else ''} hidden (no volume or liquidity)</td></tr>"
138+
)
121139

122140
resolution = ""
123141
if event.get("description"):

openbb_polymarket/routers/discover.py

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ async def _browse_cards(
197197
total = len(cards)
198198
cards = cards[max(0, offset): max(0, offset) + limit]
199199
for card in cards:
200-
card["outcomes"] = sorted(card["outcomes"], key=lambda o: o["volume_total"], reverse=True)[:4]
200+
card["outcomes"] = sorted(card["outcomes"], key=lambda o: o["probability_pct"], reverse=True)[:4]
201201
return cards, total
202202
return await stats.browse_events(
203203
tag=tag, close_within_days=_days(close_within), sort=sort,
@@ -214,6 +214,7 @@ async def browse_markets(
214214
close_within: str = Query(""),
215215
event_id: str = Query(""),
216216
market_key: str = Query(""),
217+
view: str = Query(""),
217218
reverse: bool = Query(False),
218219
limit: int = Query(40, ge=1, le=150),
219220
offset: int = Query(0, ge=0),
@@ -234,6 +235,12 @@ async def browse_markets(
234235
}
235236
back_qs = urlencode({k: v for k, v in filters.items() if v and v != ALL})
236237

238+
if not raw and view.strip():
239+
return await _event_detail_response(
240+
request, service, event_id=view.strip(), market_key=market_key,
241+
theme=theme, back=back_qs, filters=filters,
242+
)
243+
237244
cards, total = await _browse_cards(
238245
stats,
239246
service,
@@ -281,14 +288,15 @@ async def _event_figure(service: MarketDataService, resolved: dict[str, Any], th
281288
return charts.outcome_history(lines, theme) if lines else None
282289

283290

284-
@router.get("/event_details")
285-
async def event_details(
291+
async def _event_detail_response(
286292
request: Request,
287-
event_id: str = Query(""),
288-
market_key: str = Query(""),
289-
theme: str = Query("dark"),
290-
back: str = Query(""),
291-
service: MarketDataService = Depends(get_service),
293+
service: MarketDataService,
294+
*,
295+
event_id: str,
296+
market_key: str,
297+
theme: str,
298+
back: str,
299+
filters: dict[str, Any] | None = None,
292300
) -> HTMLResponse:
293301
from openbb_polymarket.formatting import parse_market_key
294302

@@ -306,10 +314,25 @@ async def event_details(
306314
history_figure=figure,
307315
poll_url=poll_url,
308316
market_key=market_key,
317+
filters=filters or {},
309318
)
310319
return HTMLResponse(content=html)
311320

312321

322+
@router.get("/event_details")
323+
async def event_details(
324+
request: Request,
325+
event_id: str = Query(""),
326+
market_key: str = Query(""),
327+
theme: str = Query("dark"),
328+
back: str = Query(""),
329+
service: MarketDataService = Depends(get_service),
330+
) -> HTMLResponse:
331+
return await _event_detail_response(
332+
request, service, event_id=event_id, market_key=market_key, theme=theme, back=back,
333+
)
334+
335+
313336
@router.get("/event_chart")
314337
async def event_chart(
315338
event_id: str = Query(""),

openbb_polymarket/routers/events.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
compact_number,
1212
parse_market_key,
1313
timestamp_to_iso,
14+
to_float,
1415
)
1516
from openbb_polymarket.service import MarketDataService, TOP_HISTORY_OUTCOME_COUNT
1617
from openbb_polymarket.stats import EventStatsCache, _outcome
@@ -96,6 +97,8 @@ async def event_outcomes(
9697
return []
9798
resolved = await service.resolve_event(event_id=event_id)
9899
rows = [market_row(m, resolved["event_id"]) for m in resolved["markets"]]
100+
active = [r for r in rows if to_float(r["volume_total"]) > 0 or to_float(r["liquidity"]) > 0]
101+
rows = active or rows
99102
rows.sort(key=lambda row: (row["volume_24h"], row["volume_total"], row["probability_pct"]), reverse=True)
100103
return [{field: row.get(field) for field in _OUTCOME_FIELDS} for row in rows]
101104

openbb_polymarket/static/js/browse.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -117,14 +117,17 @@
117117
function intFmt(p) { return p.value == null ? "" : Number(p.value).toLocaleString(); }
118118
function pctFmt(p) { return p.value == null ? "" : Number(p.value).toFixed(0) + "%"; }
119119
function eventUrl(id, mk) {
120-
var u = CFG.base + "/event_details?event_id=" + encodeURIComponent(id) + "&theme=" + encodeURIComponent(CFG.theme || "dark");
120+
var u = CFG.base + "/browse_markets?view=" + encodeURIComponent(id);
121121
if (mk) u += "&market_key=" + encodeURIComponent(mk);
122-
if (CFG.back) u += "&back=" + encodeURIComponent(CFG.back);
122+
if (CFG.back) u += "&" + CFG.back;
123123
return u;
124124
}
125+
function selectEvent(id, mk) {
126+
emitWidgetParams({ event_id: id, market_key: mk || "", view: id });
127+
}
125128
function selectAndOpen(id, mk) {
126129
if (!id) return;
127-
emitWidgetParams({ event_id: id, market_key: mk || "" });
130+
selectEvent(id, mk);
128131
window.location.href = eventUrl(id, mk);
129132
}
130133
function buildGrid() {
@@ -179,6 +182,6 @@
179182
document.addEventListener("click", function (event) {
180183
var a = event.target && event.target.closest ? event.target.closest("a.event[data-event-id]") : null;
181184
if (!a) return;
182-
emitWidgetParams({ event_id: a.getAttribute("data-event-id"), market_key: a.getAttribute("data-market-key") || "" });
185+
selectEvent(a.getAttribute("data-event-id"), a.getAttribute("data-market-key") || "");
183186
});
184187
})();

openbb_polymarket/static/js/event_page.js

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,58 @@
55
catch (e) { return fallback; }
66
}
77
var EVCFG = readJson("ev-cfg", {});
8+
var FILTERS = EVCFG.filters || {};
9+
var FILTER_KEYS = ["tag", "search", "sort", "close_within", "reverse", "limit", "offset"];
10+
var host = window.top || window.parent;
11+
12+
function emit(params) {
13+
if (host !== window) host.postMessage({ type: "openbb:widget-params:update", params: params }, "*");
14+
}
15+
16+
function listUrl(overrides) {
17+
var qs = new URLSearchParams();
18+
FILTER_KEYS.forEach(function (k) {
19+
var v = overrides && overrides[k] != null ? overrides[k] : FILTERS[k];
20+
if (v != null && String(v) !== "") qs.set(k, String(v));
21+
});
22+
if (EVCFG.theme) qs.set("theme", EVCFG.theme);
23+
return "/browse_markets?" + qs.toString();
24+
}
25+
26+
if (EVCFG.event_id) {
27+
emit({ event_id: EVCFG.event_id, market_key: EVCFG.market_key || "", view: EVCFG.event_id });
28+
}
29+
30+
var backLink = document.querySelector("a.back");
31+
if (backLink) {
32+
backLink.addEventListener("click", function () { emit({ view: "" }); });
33+
}
34+
35+
window.addEventListener("message", function (event) {
36+
var d = event.data;
37+
if (!d || typeof d !== "object" || d.type !== "openbb-params-update") return;
38+
var raw = d.params || d.payload || d.data || d.values || {};
39+
var incoming = {};
40+
if (Array.isArray(raw)) {
41+
raw.forEach(function (p) { incoming[p.paramName || p.name] = p.value; });
42+
} else {
43+
Object.keys(raw).forEach(function (k) {
44+
var v = raw[k];
45+
incoming[k] = (v && typeof v === "object" && "value" in v) ? v.value : v;
46+
});
47+
}
48+
var overrides = {}, changed = false;
49+
FILTER_KEYS.forEach(function (k) {
50+
if (incoming[k] == null) return;
51+
var s = String(incoming[k]);
52+
if (s !== String(FILTERS[k] == null ? "" : FILTERS[k])) { overrides[k] = s; changed = true; }
53+
});
54+
if (changed) {
55+
emit({ view: "" });
56+
window.location.href = listUrl(overrides);
57+
}
58+
});
59+
860
document.querySelectorAll(".ts-d").forEach(function (el) {
961
var ms = Number(el.getAttribute("data-ts")); if (!ms) return;
1062
el.textContent = (el.getAttribute("data-prefix") || "")

openbb_polymarket/stats.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,7 @@ async def browse_events(
330330
cards = []
331331
for event in page:
332332
outcomes = sorted(
333-
event["outcomes"], key=lambda o: to_float(o["volume_total"]), reverse=True
333+
event["outcomes"], key=lambda o: to_float(o["probability_pct"]), reverse=True
334334
)[:outcomes_per_event]
335335
cards.append({**event, "outcomes": outcomes})
336336
return cards, total

widgets.json

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,14 @@
207207
"event_id": "$event_id",
208208
"market_key": "$market_key"
209209
}
210+
},
211+
{
212+
"paramName": "view",
213+
"type": "text",
214+
"label": "View",
215+
"description": "Event the browser is currently showing. Set only by clicking a card; never grouped, so an event selected elsewhere cannot redirect the browser.",
216+
"value": "",
217+
"show": false
210218
}
211219
],
212220
"storage": {
@@ -1169,4 +1177,4 @@
11691177
}
11701178
}
11711179
}
1172-
}
1180+
}

0 commit comments

Comments
 (0)