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, '&quot;') + '">' + 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();
        }
    });
});