MediaWiki:Common.js: Difference between revisions

From Rest of What I Know
Rewrite to make listing look better
Retain only mainspace
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
// Reverse sorting for Category:Blog and hide Template:BlogPreload
// Reverse sorting for Category:Blog; hide Template:BlogPreload; pretty link text; skip non-Mainspace
$(document).ready(function() {
$(function() {
     if (mw.config.get('wgCanonicalNamespace') === 'Category' &&
     if (mw.config.get('wgCanonicalNamespace') !== 'Category' ||
         mw.config.get('wgTitle') === 'Blog') {
         mw.config.get('wgTitle') !== 'Blog') return;
       
        var $categoryList = $('#mw-pages');
        if ($categoryList.length) {
            var $items = $categoryList.find('li');


            // Filter out Template:BlogPreload from display
    var $categoryList = $('#mw-pages');
            $items = $items.filter(function() {
    if (!$categoryList.length) return;
                var $a = $(this).find('a').first();
                var linkText = $a.text();
                return linkText !== 'Template:BlogPreload';
            });


            // Rewrite link text from "Blog/2025-09-25/Whatever The Page Is"
    var $items = $categoryList.find('li');
            // to "2025-09-25 Whatever The Page Is"
            $items.each(function() {
                var $a = $(this).find('a').first();
                var text = $a.text(); // e.g. "Blog/2025-09-25/Whatever The Page Is"
                var match = text.match(/^Blog\/(\d{4}-\d{2}-\d{2})\/(.+)$/);
                if (match) {
                    $a.text(match[1] + ' ' + match[2]);
                }
            });


            // Sort remaining items in reverse order by the new text
    $items = $items.filter(function() {
            $items.detach().sort(function(a, b) {
        var $a = $(this).find('a').first();
                return $(b).text().localeCompare($(a).text());
        var titleAttr = ($a.attr('title') || '').replace(/_/g, ' ');
            });


            // Replace the category list with filtered, formatted, sorted items
        // Explicitly drop Template:BlogPreload
            $categoryList.empty().append($items);
        if (titleAttr === 'Template:BlogPreload') return false;
 
        // Ensure it’s a mainspace page: ns=0
        // Use MediaWiki’s title parser
        var ns = mw.Title.newFromText(titleAttr).namespace;
        return ns === 0;
    });
 
    // Rewrite anchor text if matches Blog/YYYY-MM-DD/Title
    $items.each(function() {
        var $a = $(this).find('a').first();
        var titleAttr = ($a.attr('title') || $a.text() || '').replace(/_/g, ' ');
        var m = titleAttr.match(/^Blog\/(\d{4}-\d{2}-\d{2})\/(.+)$/);
        if (m) {
            $a.text(m[1] + ' ' + m[2]);
         }
         }
     }
        // otherwise leave as-is
     });
 
    // Sort by display text, reverse
    $items.detach().sort(function(a, b) {
        var ta = $(a).find('a').first().text();
        var tb = $(b).find('a').first().text();
        return tb.localeCompare(ta);
    });
 
    $categoryList.empty().append($items);
});
});

Latest revision as of 03:55, 23 September 2025

// Reverse sorting for Category:Blog; hide Template:BlogPreload; pretty link text; skip non-Mainspace
$(function() {
    if (mw.config.get('wgCanonicalNamespace') !== 'Category' ||
        mw.config.get('wgTitle') !== 'Blog') return;

    var $categoryList = $('#mw-pages');
    if (!$categoryList.length) return;

    var $items = $categoryList.find('li');

    $items = $items.filter(function() {
        var $a = $(this).find('a').first();
        var titleAttr = ($a.attr('title') || '').replace(/_/g, ' ');

        // Explicitly drop Template:BlogPreload
        if (titleAttr === 'Template:BlogPreload') return false;

        // Ensure it’s a mainspace page: ns=0
        // Use MediaWiki’s title parser
        var ns = mw.Title.newFromText(titleAttr).namespace;
        return ns === 0;
    });

    // Rewrite anchor text if matches Blog/YYYY-MM-DD/Title
    $items.each(function() {
        var $a = $(this).find('a').first();
        var titleAttr = ($a.attr('title') || $a.text() || '').replace(/_/g, ' ');
        var m = titleAttr.match(/^Blog\/(\d{4}-\d{2}-\d{2})\/(.+)$/);
        if (m) {
            $a.text(m[1] + ' ' + m[2]);
        }
        // otherwise leave as-is
    });

    // Sort by display text, reverse
    $items.detach().sort(function(a, b) {
        var ta = $(a).find('a').first().text();
        var tb = $(b).find('a').first().text();
        return tb.localeCompare(ta);
    });

    $categoryList.empty().append($items);
});