Add Direct URL Anchors for Individual Models
#235
by appvoid - opened
- index.html +19 -4
index.html
CHANGED
|
@@ -2297,6 +2297,10 @@
|
|
| 2297 |
return models.filter(m => !m.type);
|
| 2298 |
}
|
| 2299 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2300 |
function getFilteredModels(models = MODELS, filter = activeFilter) {
|
| 2301 |
let arr = getModelEntries(models);
|
| 2302 |
if (filter === '<3M') arr = arr.filter(m => m.params && m.params < 3000000);
|
|
@@ -2632,7 +2636,7 @@ function getFilteredModels(models = MODELS, filter = activeFilter) {
|
|
| 2632 |
const inCompare = compareSet.has(m.name);
|
| 2633 |
|
| 2634 |
return `
|
| 2635 |
-
<tr>
|
| 2636 |
<td class="td-compare"><button class="compare-toggle ${inCompare ? 'active' : ''}" onclick="toggleCompare('${encodeURIComponent(m.name)}')" title="${inCompare ? 'Remove from comparison' : 'Add to comparison'}" aria-pressed="${inCompare}">${inCompare ? '−' : '+'}</button></td>
|
| 2637 |
<td class="td-rank">${rank}</td>
|
| 2638 |
<td class="td-model"><a class="${categoryLeaders.has(m.name) ? 'category-leader' : ''}" title="${getCategoryLeaderTitle(categoryLeaders.get(m.name))}" href="${m.links.card}" target="_blank">${m.name}</a>${cutoffTag}<span class="model-org"><a href="${org.url}" target="_blank">${org.name}</a> · ${m.paramsDisplay}</span></td>
|
|
@@ -3306,10 +3310,11 @@ function getFilteredModels(models = MODELS, filter = activeFilter) {
|
|
| 3306 |
const href = model.links && model.links.card ? model.links.card : '#';
|
| 3307 |
const score = '<span class="filter-leader-score">' + escapeHtml(formatMetricValue(entry.score, metric, 2)) + '</span>';
|
| 3308 |
const params = escapeHtml(model.paramsDisplay || model.params) + ' params';
|
|
|
|
| 3309 |
const details = showSizeLabel
|
| 3310 |
? '<div class="highlight-leader-footer"><span class="filter-leader-meta"><span class="highlight-leader-org">' + escapeHtml(org.name) + '</span><span class="highlight-leader-params">' + params + '</span></span><div class="highlight-leader-score">' + score + '<span class="size-score-label">Int Index</span></div></div>'
|
| 3311 |
: score + '<span class="filter-leader-meta">' + escapeHtml(org.name) + ' · ' + params + '</span>';
|
| 3312 |
-
return '<article class="filter-leader-card' + (active ? ' active' : '') + '" role="button" tabindex="0" ' +
|
| 3313 |
attribute + '="' + escapeHtml(value) + '" style="--leader-org-color:' + escapeHtml(orgColor) + '" aria-pressed="' + active + '" aria-label="' + escapeHtml(kicker + ': ' + model.name) + '">' +
|
| 3314 |
'<span class="filter-leader-kicker"><span>' + escapeHtml(kicker) + '</span></span>' +
|
| 3315 |
'<a class="filter-leader-name" href="' + escapeHtml(href) + '" target="_blank" rel="noopener noreferrer">' + escapeHtml(model.name) + '</a>' +
|
|
@@ -3370,9 +3375,19 @@ function getFilteredModels(models = MODELS, filter = activeFilter) {
|
|
| 3370 |
if (filterBar) filterObserver.observe(filterBar, { childList: true });
|
| 3371 |
});
|
| 3372 |
|
| 3373 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3374 |
renderFilterLeaders();
|
| 3375 |
})();
|
| 3376 |
</script>
|
| 3377 |
</body>
|
| 3378 |
-
</html>
|
|
|
|
| 2297 |
return models.filter(m => !m.type);
|
| 2298 |
}
|
| 2299 |
|
| 2300 |
+
function modelAnchorId(model) {
|
| 2301 |
+
return `${model.org}-${model.name}`.toLowerCase().replace(/[^a-z0-9._-]+/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, '');
|
| 2302 |
+
}
|
| 2303 |
+
|
| 2304 |
function getFilteredModels(models = MODELS, filter = activeFilter) {
|
| 2305 |
let arr = getModelEntries(models);
|
| 2306 |
if (filter === '<3M') arr = arr.filter(m => m.params && m.params < 3000000);
|
|
|
|
| 2636 |
const inCompare = compareSet.has(m.name);
|
| 2637 |
|
| 2638 |
return `
|
| 2639 |
+
<tr id="${modelAnchorId(m)}">
|
| 2640 |
<td class="td-compare"><button class="compare-toggle ${inCompare ? 'active' : ''}" onclick="toggleCompare('${encodeURIComponent(m.name)}')" title="${inCompare ? 'Remove from comparison' : 'Add to comparison'}" aria-pressed="${inCompare}">${inCompare ? '−' : '+'}</button></td>
|
| 2641 |
<td class="td-rank">${rank}</td>
|
| 2642 |
<td class="td-model"><a class="${categoryLeaders.has(m.name) ? 'category-leader' : ''}" title="${getCategoryLeaderTitle(categoryLeaders.get(m.name))}" href="${m.links.card}" target="_blank">${m.name}</a>${cutoffTag}<span class="model-org"><a href="${org.url}" target="_blank">${org.name}</a> · ${m.paramsDisplay}</span></td>
|
|
|
|
| 3310 |
const href = model.links && model.links.card ? model.links.card : '#';
|
| 3311 |
const score = '<span class="filter-leader-score">' + escapeHtml(formatMetricValue(entry.score, metric, 2)) + '</span>';
|
| 3312 |
const params = escapeHtml(model.paramsDisplay || model.params) + ' params';
|
| 3313 |
+
const cardId = modelAnchorId(model) + '-' + (showSizeLabel ? 'highlight' : attribute === 'data-size-filter' ? 'size' : 'benchmark') + '-' + String(value).toLowerCase().replace(/[^a-z0-9._-]+/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, '');
|
| 3314 |
const details = showSizeLabel
|
| 3315 |
? '<div class="highlight-leader-footer"><span class="filter-leader-meta"><span class="highlight-leader-org">' + escapeHtml(org.name) + '</span><span class="highlight-leader-params">' + params + '</span></span><div class="highlight-leader-score">' + score + '<span class="size-score-label">Int Index</span></div></div>'
|
| 3316 |
: score + '<span class="filter-leader-meta">' + escapeHtml(org.name) + ' · ' + params + '</span>';
|
| 3317 |
+
return '<article class="filter-leader-card' + (active ? ' active' : '') + '" id="' + escapeHtml(cardId) + '" role="button" tabindex="0" ' +
|
| 3318 |
attribute + '="' + escapeHtml(value) + '" style="--leader-org-color:' + escapeHtml(orgColor) + '" aria-pressed="' + active + '" aria-label="' + escapeHtml(kicker + ': ' + model.name) + '">' +
|
| 3319 |
'<span class="filter-leader-kicker"><span>' + escapeHtml(kicker) + '</span></span>' +
|
| 3320 |
'<a class="filter-leader-name" href="' + escapeHtml(href) + '" target="_blank" rel="noopener noreferrer">' + escapeHtml(model.name) + '</a>' +
|
|
|
|
| 3375 |
if (filterBar) filterObserver.observe(filterBar, { childList: true });
|
| 3376 |
});
|
| 3377 |
|
| 3378 |
+
function scrollToModelHash() {
|
| 3379 |
+
let id;
|
| 3380 |
+
try { id = decodeURIComponent(window.location.hash.slice(1)); } catch { return; }
|
| 3381 |
+
if (!id) return;
|
| 3382 |
+
const highlight = Array.from(document.querySelectorAll('#highlight-leader-grid .filter-leader-card[id]')).find(card => card.id.startsWith(id + '-highlight-'));
|
| 3383 |
+
const target = highlight || document.getElementById(id);
|
| 3384 |
+
if (target && (target.matches('.filter-leader-card') || target.matches('#leaderboard-body > tr'))) target.scrollIntoView({ block: 'center' });
|
| 3385 |
+
}
|
| 3386 |
+
|
| 3387 |
+
window.addEventListener('load', function () { renderFilterLeaders(); scrollToModelHash(); });
|
| 3388 |
+
window.addEventListener('hashchange', scrollToModelHash);
|
| 3389 |
renderFilterLeaders();
|
| 3390 |
})();
|
| 3391 |
</script>
|
| 3392 |
</body>
|
| 3393 |
+
</html>
|