MediaWiki:Common.js: Difference between revisions
Jump to navigation
Jump to search
Content deleted Content added
No edit summary |
No edit summary |
||
| Line 88: | Line 88: | ||
(visibleCount === 1 ? '' : 's') |
(visibleCount === 1 ? '' : 's') |
||
: rows.length + ' benchmark results'; |
: rows.length + ' benchmark results'; |
||
clearButton.hidden = query === ''; |
|||
} |
|||
input.addEventListener('input', filterRows); |
|||
clearButton.addEventListener('click', function () { |
|||
input.value = ''; |
|||
filterRows(); |
|||
input.focus(); |
|||
}); |
|||
filterRows(); |
|||
}); |
|||
}); |
|||
/* Add live search to Example Model Catalogue tables */ |
|||
mw.hook('wikipage.content').add(function ($content) { |
|||
'use strict'; |
|||
$content.find('.example-model-results-table').each(function () { |
|||
var table = this; |
|||
if (table.dataset.exampleSearchInitialised === 'true') { |
|||
return; |
|||
} |
|||
table.dataset.exampleSearchInitialised = 'true'; |
|||
/* Create a wrapper that follows the table's natural width */ |
|||
var tableBlock = document.createElement('div'); |
|||
tableBlock.className = 'example-model-table-block'; |
|||
table.parentNode.insertBefore(tableBlock, table); |
|||
tableBlock.appendChild(table); |
|||
var controls = document.createElement('div'); |
|||
controls.className = 'example-model-table-controls'; |
|||
var searchWrapper = document.createElement('div'); |
|||
searchWrapper.className = 'example-model-table-search'; |
|||
var input = document.createElement('input'); |
|||
input.type = 'search'; |
|||
input.className = 'example-model-search-input'; |
|||
input.placeholder = |
|||
'Search model category, description, or model name'; |
|||
input.setAttribute( |
|||
'aria-label', |
|||
'Search Example Model Catalogue' |
|||
); |
|||
var clearButton = document.createElement('button'); |
|||
clearButton.type = 'button'; |
|||
clearButton.className = 'example-model-search-clear'; |
|||
clearButton.textContent = 'Clear'; |
|||
var resultCount = document.createElement('div'); |
|||
resultCount.className = 'example-model-result-count'; |
|||
resultCount.setAttribute('aria-live', 'polite'); |
|||
searchWrapper.appendChild(input); |
|||
searchWrapper.appendChild(clearButton); |
|||
controls.appendChild(searchWrapper); |
|||
controls.appendChild(resultCount); |
|||
tableBlock.insertBefore(controls, table); |
|||
var rows = Array.from( |
|||
table.querySelectorAll('tr') |
|||
).filter(function (row) { |
|||
return row.querySelectorAll('td').length > 0; |
|||
}); |
|||
function normaliseText(value) { |
|||
return value |
|||
.toLocaleLowerCase() |
|||
.replace(/\s+/g, ' ') |
|||
.trim(); |
|||
} |
|||
function filterRows() { |
|||
var query = normaliseText(input.value); |
|||
var visibleCount = 0; |
|||
rows.forEach(function (row) { |
|||
var matches = |
|||
query === '' || |
|||
normaliseText(row.textContent).includes(query); |
|||
row.hidden = !matches; |
|||
if (matches) { |
|||
visibleCount += 1; |
|||
} |
|||
}); |
|||
resultCount.textContent = query |
|||
? visibleCount + |
|||
' matching model' + |
|||
(visibleCount === 1 ? '' : 's') |
|||
: rows.length + ' example models'; |
|||
clearButton.hidden = query === ''; |
clearButton.hidden = query === ''; |
||
Revision as of 13:21, 14 July 2026
/* Any JavaScript here will be loaded for all users on every page load. */
/* Add live search to hardware benchmark tables */
mw.hook('wikipage.content').add(function ($content) {
'use strict';
$content.find('.benchmark-results-table').each(function () {
var table = this;
if (table.dataset.searchInitialised === 'true') {
return;
}
table.dataset.searchInitialised = 'true';
/* Create a wrapper that follows the table's natural width */
var tableBlock = document.createElement('div');
tableBlock.className = 'benchmark-table-block';
table.parentNode.insertBefore(tableBlock, table);
tableBlock.appendChild(table);
var controls = document.createElement('div');
controls.className = 'benchmark-table-controls';
var searchWrapper = document.createElement('div');
searchWrapper.className = 'benchmark-table-search';
var input = document.createElement('input');
input.type = 'search';
input.className = 'benchmark-search-input';
input.placeholder =
'Search processor, system name, RAM, or benchmark result';
input.setAttribute(
'aria-label',
'Search benchmark results'
);
var clearButton = document.createElement('button');
clearButton.type = 'button';
clearButton.className = 'benchmark-search-clear';
clearButton.textContent = 'Clear';
var resultCount = document.createElement('div');
resultCount.className = 'benchmark-result-count';
resultCount.setAttribute('aria-live', 'polite');
searchWrapper.appendChild(input);
searchWrapper.appendChild(clearButton);
controls.appendChild(searchWrapper);
controls.appendChild(resultCount);
tableBlock.insertBefore(controls, table);
var rows = Array.from(
table.querySelectorAll('tr')
).filter(function (row) {
return row.querySelectorAll('td').length > 0;
});
function normaliseText(value) {
return value
.toLocaleLowerCase()
.replace(/\s+/g, ' ')
.trim();
}
function filterRows() {
var query = normaliseText(input.value);
var visibleCount = 0;
rows.forEach(function (row) {
var matches =
query === '' ||
normaliseText(row.textContent).includes(query);
row.hidden = !matches;
if (matches) {
visibleCount += 1;
}
});
resultCount.textContent = query
? visibleCount +
' matching result' +
(visibleCount === 1 ? '' : 's')
: rows.length + ' benchmark results';
clearButton.hidden = query === '';
}
input.addEventListener('input', filterRows);
clearButton.addEventListener('click', function () {
input.value = '';
filterRows();
input.focus();
});
filterRows();
});
});
/* Add live search to Example Model Catalogue tables */
mw.hook('wikipage.content').add(function ($content) {
'use strict';
$content.find('.example-model-results-table').each(function () {
var table = this;
if (table.dataset.exampleSearchInitialised === 'true') {
return;
}
table.dataset.exampleSearchInitialised = 'true';
/* Create a wrapper that follows the table's natural width */
var tableBlock = document.createElement('div');
tableBlock.className = 'example-model-table-block';
table.parentNode.insertBefore(tableBlock, table);
tableBlock.appendChild(table);
var controls = document.createElement('div');
controls.className = 'example-model-table-controls';
var searchWrapper = document.createElement('div');
searchWrapper.className = 'example-model-table-search';
var input = document.createElement('input');
input.type = 'search';
input.className = 'example-model-search-input';
input.placeholder =
'Search model category, description, or model name';
input.setAttribute(
'aria-label',
'Search Example Model Catalogue'
);
var clearButton = document.createElement('button');
clearButton.type = 'button';
clearButton.className = 'example-model-search-clear';
clearButton.textContent = 'Clear';
var resultCount = document.createElement('div');
resultCount.className = 'example-model-result-count';
resultCount.setAttribute('aria-live', 'polite');
searchWrapper.appendChild(input);
searchWrapper.appendChild(clearButton);
controls.appendChild(searchWrapper);
controls.appendChild(resultCount);
tableBlock.insertBefore(controls, table);
var rows = Array.from(
table.querySelectorAll('tr')
).filter(function (row) {
return row.querySelectorAll('td').length > 0;
});
function normaliseText(value) {
return value
.toLocaleLowerCase()
.replace(/\s+/g, ' ')
.trim();
}
function filterRows() {
var query = normaliseText(input.value);
var visibleCount = 0;
rows.forEach(function (row) {
var matches =
query === '' ||
normaliseText(row.textContent).includes(query);
row.hidden = !matches;
if (matches) {
visibleCount += 1;
}
});
resultCount.textContent = query
? visibleCount +
' matching model' +
(visibleCount === 1 ? '' : 's')
: rows.length + ' example models';
clearButton.hidden = query === '';
}
input.addEventListener('input', filterRows);
clearButton.addEventListener('click', function () {
input.value = '';
filterRows();
input.focus();
});
filterRows();
});
});