MediaWiki:CollectionSearch.js
Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
$(function() {
// 1. Inject the HTML
$('.collection-tool-inject-search').each(function() {
var catName = $(this).attr('data-category');
var scopesRaw = $(this).attr('data-scopes');
var selectHtml = '';
if (scopesRaw) {
selectHtml += '<select class="col-search-scope">';
selectHtml += '<option value="ALL">All</option>';
var scopes = scopesRaw.split(';');
for (var i = 0; i < scopes.length; i++) {
var parts = scopes[i].split(':');
if (parts.length === 2) {
var label = parts[0].trim();
var targetCat = parts[1].trim();
selectHtml += '<option value="' + targetCat.replace(/"/g, '"') + '">' + label + '</option>';
}
}
selectHtml += '</select>';
}
$(this).addClass('collection-tool-input-group').html(
selectHtml +
'<input type="text" class="col-search-input" data-category="' + catName + '" placeholder="Keywords..." autocomplete="off">' +
'<button class="col-search-btn">Search</button>'
);
});
$('.collection-tool-inject-issue').each(function() {
var prefix = $(this).attr('data-prefix');
$(this).addClass('collection-tool-input-group').html(
'<input type="number" class="col-issue-input" data-prefix="' + prefix + '" placeholder="e.g. 127" min="1">' +
'<button class="col-issue-btn">Go</button>'
);
});
// 2. Search Logic
$('.col-search-btn').on('click', function() {
var $container = $(this).parent();
var $input = $container.find('.col-search-input');
var $select = $container.find('.col-search-scope');
var query = $input.val().trim();
var defaultCat = $input.attr('data-category');
if (query) {
var searchQuery = '';
if ($select.length) {
var selectedVal = $select.val();
if (selectedVal === 'ALL') {
searchQuery = 'deepcat:"' + defaultCat + '" ' + query;
} else {
searchQuery = 'incategory:"' + selectedVal + '" ' + query;
}
} else {
searchQuery = 'incategory:"' + defaultCat + '" ' + query;
}
window.location.href = mw.util.getUrl('Special:MediaSearch') + '?search=' + encodeURIComponent(searchQuery);
}
});
// 3. Jump to Issue Logic
$('.col-issue-btn').on('click', function() {
var $input = $(this).siblings('.col-issue-input');
var issueNum = $input.val().trim();
var prefix = $input.attr('data-prefix');
if (issueNum && prefix) {
var targetCategory = 'Category:' + prefix + ' ' + issueNum;
window.location.href = mw.util.getUrl(targetCategory);
}
});
// 4. Enter key support
$('.col-search-input, .col-issue-input').on('keypress', function(e) {
if (e.which === 13) {
$(this).siblings('button').click();
}
});
});