Project:Support desk

About this board

Welcome to the MediaWiki Support desk, where you can ask MediaWiki questions!

(Read this message in a different language)

See also

Before you post

Post a new question

  1. To help us answer your questions, please indicate which versions you are using, as found on your wiki's Special:Version page:
    • MediaWiki version
    • PHP version
    • Database type and version
  2. Please include the web address (URL) to your wiki if possible. It's often easier for us to identify the source of the problem if we can see the error directly.
  3. To start a new thread, click "Start a new topic".

Uncaught TypeError: url.indexOf is not a function

Gaon12 (talkcontribs)

When you go to my MediaWiki site (, I get this error in the console.

Uncaught TypeError: url.indexOf is not a function

    at jQuery.fn.load (load.php?lang=ko&modules=ext.EnhanceMarkup.scripts%7Cjquery%2Coojs-ui-core%2Coojs-ui-widgets%7Cjquery.ui%7Coojs-ui.styles.icons-editing-advanced&skin=liberty&version=8mj0p:846:335)

    at <anonymous>:10:577

    at domEval (load.php?lang=ko&modules=startup&only=scripts&raw=1&skin=liberty:10:692)

    at runScript (load.php?lang=ko&modules=startup&only=scripts&raw=1&skin=liberty:12:439)

    at execute (load.php?lang=ko&modules=startup&only=scripts&raw=1&skin=liberty:13:489)

    at doPropagation (load.php?lang=ko&modules=startup&only=scripts&raw=1&skin=liberty:6:492)

jQuery.fn.load @ load.php?lang=ko&modules=ext.EnhanceMarkup.scripts%7Cjquery%2Coojs-ui-core%2Coojs-ui-widgets%7Cjquery.ui%7Coojs-ui.styles.icons-editing-advanced&skin=liberty&version=8mj0p:846

(anonymous) @ VM1451:10

domEval @ load.php?lang=ko&modules=startup&only=scripts&raw=1&skin=liberty:10

runScript @ load.php?lang=ko&modules=startup&only=scripts&raw=1&skin=liberty:12

execute @ load.php?lang=ko&modules=startup&only=scripts&raw=1&skin=liberty:13

doPropagation @ load.php?lang=ko&modules=startup&only=scripts&raw=1&skin=liberty:6

requestIdleCallback (async)

setAndPropagate @ load.php?lang=ko&modules=startup&only=scripts&raw=1&skin=liberty:7

implement @ load.php?lang=ko&modules=startup&only=scripts&raw=1&skin=liberty:18

(anonymous) @ load.php?lang=ko&modules=ext.EnhanceMarkup.scripts%7Cjquery%2Coojs-ui-core%2Coojs-ui-widgets%7Cjquery.ui%7Coojs-ui.styles.icons-editing-advanced&skin=liberty&version=8mj0p:1

I've tried overwriting it with the latest version of the MediaWiki file, I've tried running maintenance/update.php, but it still doesn't go away.

Also, the regex feature of the onParserBeforePreprocess function doesn't work in the extension I'm building, and I don't know why.

public static function onParserBeforePreprocess( &$parser, &$text, &$strip_state ) {
    $text = preg_replace(
        "/\[\*\s+([^ ]+)\s+(.*?)\]/",
        '<ref group="$1">$2</ref>',

    $text = preg_replace(
        "/\[\*\s+([^ ]+)\s*\]/",
        '<ref group="$1" />',

    return true;

How can I solve these problems? Thank you.

TheDJ (talkcontribs)

That should be window.on( 'load', function() { // the code goes here } );. Or just $(function(){ // the code goes here }).

Regarding your hook. It's generally better to explain what you want to achieve, instead of asking why your chosen solution doesn't work. Because quite often it turns out that people are focusing on the incorrect solution to the problem.

Gaon12 (talkcontribs)

@TheDJ Thank you for your reply. I've removed the unnecessary parts from that page and no errors are occurring.

Let me elaborate on the issue with the onParserBeforePreprocess function not working.


    "name": "EnhanceMarkup",
    "description": "Provides enhanced markup functionalities",
    "version": "1.0",
    "author": [
        "Jeong Gaon"
    "url": "",
    "type": "other",
    "license-name": "Apache-2.0",
    "AutoloadClasses": {
        "EnhanceMarkupHooks": "includes/EnhanceMarkupHooks.php"
    "ResourceModules": {
        "ext.EnhanceMarkup.styles": {
            "styles": "resources/ext.EnhanceMarkup.styles.css",
            "localBasePath": "",
            "remoteExtPath": "EnhanceMarkup"
        "ext.EnhanceMarkup.scripts": {
            "scripts": ["resources/ext.EnhanceMarkup.scripts.js", "resources/lib/math.js"],
            "localBasePath": "",
            "remoteExtPath": "EnhanceMarkup"
    "Hooks": {
        "ParserFirstCallInit": "EnhanceMarkupHooks::onParserFirstCallInit",
        "BeforePageDisplay": "EnhanceMarkupHooks::onBeforePageDisplay"
    "manifest_version": 2


class EnhanceMarkupHooks
    public static function onBeforePageDisplay(OutputPage &$out, Skin &$skin)
        return true;

    public static function onParserFirstCallInit(Parser $parser)
        // Register each of your custom parser functions with the parser
        $parser->setHook("random", [self::class, "randomRender"]);

        return true;

    public static function onInternalParseBeforeLinks(Parser &$parser, &$text)
        // - * 4+ == <hr>
        // Replace sequences of 3-9 '*', '-', or '_' with a horizontal rule
        $text = preg_replace('/^([-]{3,9})$/m', "<hr>", $text);

        // [pagecount] show all count of page
        // Replace [pagecount] with the total number of pages
        $text = preg_replace_callback(
            function ($matches) use ($parser) {
                $dbr = wfGetDB(DB_REPLICA);
                $count = $dbr->selectRowCount("page");
                return $count;

        // Replace [*A text] with <ref group="A">text</ref>
        $text = preg_replace(
            "/\[\*\s+([^ ]+)\s+(.*?)\]/",
            '<ref group="$1">$2</ref>',

        // Replace [*A] with <ref group="A" />
        $text = preg_replace(
            "/\[\*\s+([^ ]+)\s*\]/",
            '<ref group="$1" />',

        // Replace [* text] with <ref>text</ref>
        $text = preg_replace("/\[\*\s+(.*?)\]/", '<ref>$1</ref>', $text);

		// Replace [include text] with {{text}}
        $text = preg_replace("/\[\include\s+(.*?)\]/", '{{$1}}', $text);

        // Replace [br] with <br>
        $text = str_replace("[br]", "<br>", $text);

        // Font Size up {{{+1 (content) }}} - Range: 1~5
        $text = preg_replace_callback('/\{\{\{\+([1-5])\s*(.*?)\s*\}\}\}/s', function($matches) {
            return '<span style="font-size:'.(1 + $matches[1]).'em;">'.$matches[2].'</span>';
        }, $text);
        // Font Size down {{{-1 (content) }}} - Range: 1~5
        $text = preg_replace_callback('/\{\{\{-([1-5])\s*(.*?)\s*\}\}\}/s', function($matches) {
            return '<span style="font-size:'.(1 - $matches[1]/10).'em;">'.$matches[2].'</span>';
        }, $text);

        return true;

    // Random
    // <random range="50">True|False</random>
    public static function randomRender(
        array $args,
        Parser $parser,
        PPFrame $frame
    ) {
        // Disable caching

        // Parse the input
        $parts = explode("|", $input);

        // Get the range from args
        $range = isset($args["range"]) ? $args["range"] : 2; // default to 2

        // Generate a random number within the range
        $randomNumber = mt_rand(1, $range);

        // Choose the output based on the random number
        if ($randomNumber <= $range / 2) {
            // If the random number is in the first half of the range, return the first part
            return $parts[0];
        } else {
            // Otherwise, return the second part if it exists, or the first part if it doesn't
            return isset($parts[1]) ? $parts[1] : $parts[0];

Looking at the code, there doesn't seem to be anything particularly wrong with it - if it's supposed to work, typing something like [* texts] within the wiki should generate a footnote called texts, but for some reason it's outputting literally.

Reply to "Uncaught TypeError: url.indexOf is not a function"

Unable to connect to a wiki

DarkraiFerrante (talkcontribs)

Hello, I'm unable to connect to my account on this wiki:

My password doesn't work even though it worked on MediaWiki itself, having tested it.

Thank you in advance for your help.

Reply to "Unable to connect to a wiki"

Adding a CSS class to category page links containing a specific string

Gaon12 (talkcontribs)

Hello MediaWiki community,

I am trying to add a CSS class to links on category pages that contain a specific string (e.g., '@@blur'). I have created a custom MediaWiki extension and tried using several hooks such as onParserBeforeInternalParse, onCategoryPageView, and onBeforePageDisplay. However, I am still unable to successfully add the desired class to the links on the category page.

Here's the code I have tried so far:

class BlurLinksHooks {
  public static function onParserBeforeInternalParse( &$parser, &$text, &$strip_state ) {
    $text = preg_replace_callback('/\[\[(.+?)@@blur\]\]/', function($matches) {
      $linkTitle = $matches[1];
      return "[[$linkTitle|<span class='blur-link'>$linkTitle</span>]]";
    }, $text);
    return true;

  public static function onCategoryPageView(array &$links, CategoryViewer $categoryViewer) {
    $members = $categoryViewer->getMembers();
    foreach ($members as $member) {
        $title = $member->getTitle();
        $link = $title->getFullURL();
        if (strpos($link, '@@blur') !== false) {
            $current_classes = explode(' ', $link['attribs']['class']);
            if (!in_array('blur-link', $current_classes)) {
                $link['attribs']['class'] .= ' blur-link';
            $link = str_replace('@@blur', '', $link);
    return true;

  public static function onBeforePageDisplay( OutputPage &$out, Skin &$skin ) {
    $out->addModules( 'ext.blurLinks' );

It seems like the @@blur string is being removed before I can check for its existence in the category page links. Any suggestions or guidance on how to properly implement this feature would be greatly appreciated. Are there any other hooks that I should be using for this task?

Thank you in advance for your help!

How do I verify what restricted special pages appear on Special:SpecialPages if I don't have access to them?

C.Syde65 (talkcontribs)

I'm currently doing a project that involves separating certain special pages that appear on Special:SpecialPages from certain special pages that don't appear on Special:SpecialPages. The problem is that some of the special pages are ones that I don't have access to. If I'm not mistaken, it is possible to verify what special pages appear on Special:SpecialPages by browsing the repositories of their respective extensions on GitHub. But how do I do that?

The special pages that are on my checklist include the following:

  • Special:DeleteBatch (should appear as 'Delete batch of pages' if it appears on Special:SpecialPages)
  • Special:EditAccount (should appear as 'Edit account' if it appears on Special:SpecialPages)
  • Special:SemanticMediaWiki (pretty sure this one doesn't appear on Special:SpecialPages. I'm pretty sure Special:SMWAdmin is the one that appears instead)

There are a few others that are on my checklist, but the extensions associated with them are not ones that have their own extension pages on this site. Therefore, I need to be able to learn how to read the code in the repositories to avoid having to ask those with access to those pages to check for me.

Reply to "How do I verify what restricted special pages appear on Special:SpecialPages if I don't have access to them?"

upgrade Mediawiki from 1.28 to 1.35

1 (talkcontribs)


I am upgrading Mediawiki from 1.28 to 1.35

I have an issue using the search fonctionality (i cant found page ) and i have message (An error occurred while searching: We were unable to complete your search due to a temporary problem. Please retry later.)

I am using CirrusSearch V1.35 and elastica V 1.35 extensions and i have installed elasticseach V6.5.4

In the upgrading process should i also migrate/upgrade data and index from old elasticserach (2.3.3) and restore it to the new version of elasticsearch or i just install elasticseach 6.5.4 with new settings (new cluster ..) ?

Thanks very much

Reply to "upgrade Mediawiki from 1.28 to 1.35"

Include text in drawio.svg files in Mediawiki search?

Bedtry (talkcontribs)

Is it possible?

Reply to "Include text in drawio.svg files in Mediawiki search?"

Error: Call to a member function getNamespaces() on null

Faulknmd (talkcontribs)


I run a Wiki for an amateur songwriting competition at:

MediaWiki     1.39.3

PHP     8.1.17 (cgi-fcgi)

MySQL     8.0.28-0ubuntu0.20.04.3

ICU     60.2

It stopped working properly a few weeks ago, so I upgraded from MediaWiki 1.26.3 to 1.35.10 without problems and everything was fine.

I then came back to it on Friday in order to upgrade further to 1.39.3.

Unfortunately, having done that (incl. running the update script in a browser), some pages now load as they should, whereas many others return "Error: Call to a member function getNamespaces() on null".

For example, the full error report for is as follows:

[ZHNoFVjgJfmtun3AUscyrAAATq4] /wiki/index.php?title=Home_Composed_Song_Contest_1994 Error: Call to a member function getNamespaces() on null


from /home/faulknmd/

#0 /home/faulknmd/ wfHtml5MediatorParse(string, array, Parser, PPFrame_Hash)

#1 /home/faulknmd/ Parser->extensionSubstitution(array, PPFrame_Hash, boolean)

#2 /home/faulknmd/ PPFrame_Hash->expand(PPNode_Hash_Tree, integer)

#3 /home/faulknmd/ Parser->replaceVariables(string)

#4 /home/faulknmd/ Parser->internalParse(string)

#5 /home/faulknmd/ Parser->parse(string, Title, ParserOptions, boolean, boolean, integer)

#6 /home/faulknmd/ WikitextContentHandler->fillParserOutput(WikitextContent, MediaWiki\Content\Renderer\ContentParseParams, ParserOutput)

#7 /home/faulknmd/ ContentHandler->getParserOutput(WikitextContent, MediaWiki\Content\Renderer\ContentParseParams)

#8 /home/faulknmd/ MediaWiki\Content\Renderer\ContentRenderer->getParserOutput(WikitextContent, Title, integer, ParserOptions, boolean)

#9 /home/faulknmd/ MediaWiki\Revision\RenderedRevision->getSlotParserOutputUncached(WikitextContent, boolean)

#10 /home/faulknmd/ MediaWiki\Revision\RenderedRevision->getSlotParserOutput(string, array)

#11 /home/faulknmd/ MediaWiki\Revision\RevisionRenderer->combineSlotOutput(MediaWiki\Revision\RenderedRevision, array)

#12 [internal function]: MediaWiki\Revision\RevisionRenderer->MediaWiki\Revision\{closure}(MediaWiki\Revision\RenderedRevision, array)

#13 /home/faulknmd/ call_user_func(Closure, MediaWiki\Revision\RenderedRevision, array)

#14 /home/faulknmd/ MediaWiki\Revision\RenderedRevision->getRevisionParserOutput()

#15 /home/faulknmd/ PoolWorkArticleView->renderRevision()

#16 /home/faulknmd/ PoolWorkArticleViewCurrent->doWork()

#17 /home/faulknmd/ PoolCounterWork->execute()

#18 /home/faulknmd/ MediaWiki\Page\ParserOutputAccess->getParserOutput(WikiPage, ParserOptions, MediaWiki\Revision\RevisionStoreRecord, integer)

#19 /home/faulknmd/ Article->generateContentOutput(User, ParserOptions, integer, OutputPage, array)

#20 /home/faulknmd/ Article->view()

#21 /home/faulknmd/ ViewAction->show()

#22 /home/faulknmd/ MediaWiki->performAction(Article, Title)

#23 /home/faulknmd/ MediaWiki->performRequest()

#24 /home/faulknmd/ MediaWiki->main()

#25 /home/faulknmd/ MediaWiki->run()

#26 /home/faulknmd/ wfIndexMain()

#27 {main}

Whereas pages like this are working fine, for example:

Can anyone give me any ideas as to why this might have happened and how it could be fixed? Thanks!


Bawolff (talkcontribs)

Sounds like a bug in Html5mediator extension. Maybe the extension isn't compatible with 1.39, or maybe it needs to be updated to a new version.

Faulknmd (talkcontribs)

Thank you! Html5mediator is indeed no longer supported, which is a bummer, but there we go.

I've removed it and the problematic pages do at least work again now, albeit with the Html5mediator code showing, so that's certainly a big step forward.

Unfortunately the supported alternatives (e.g. MP3MediaHandler, TimedMediaHandler) don't seem to allow the embedding of externally hosted audio files, which is what I was using Html5mediator for, so I guess I can look forward to a lot of time spent uploading mp3s in my near future...

Nevertheless, the biggest part of the problem is solved, so thanks again for that!


Reply to "Error: Call to a member function getNamespaces() on null" (talkcontribs)

I was looking for a workflow on the MediaWiki instance.

There should be editors and Approvers, Approvers should be able to receive with in wiki notifications when there are new page creations or page edits from editors, and there should be warnings displayed on pages saying page is under review and once the Approvers approve the page or edit it be normal.

Catch here is there will be multiple editor and Approver groups, like Editor1, Editor2 and Approver1 and Approver2.

Will be happy to provide any additional inputs if needed.

Bawolff (talkcontribs)
Reply to "Approval Mechanism"

how to retrieve the image descriptions texts from Commons ?

Wladek92 (talkcontribs)

Hi all, In -> rather than redefining an ALT for the images of the gallery, I would like to retrieve the descriptions already translated on Commons. This way the translation work in centralized and done once only. For example for first image -> , I would like to get the FR text from the description/fr:

|'''description'''={{en|1=Section Translation is surfaced on mobile when switching into languages where the content is not available yet so that users can translate it.}}
{{'''fr'''|1=La traduction de section est disponible sur les mobiles lorsque l'on passe à des langues pour lesquelles le contenu n'est pas encore disponible ce qui permet au utilisateurs de le traduire.}}
|author=[[User:Pginer-WMF|Pau Giner]]
|other versions=

Is that possible ? Thanks. Christian 🇫🇷 FR (talk) 13:23, 29 May 2023 (UTC)

Bawolff (talkcontribs)
TheDJ (talkcontribs)
Reply to "how to retrieve the image descriptions texts from Commons ?"
2003:EE:713:7BF7:E1E4:B6C3:7A09:831 (talkcontribs)
Reply to "Template"