MediaWiki: как указать расширению загружать mediawiki.js и mediawiki.base.js?

Я пытаюсь поддерживать заброшенное расширение MediaWiki, но понял, что это не так просто.

Я разветвил его на github https://github.com/slim16165/Semantic-MediaWiki-Graph и попытался заставить MW загрузить базовый javascript, который определяет JS mw.util

PHP-код

$wgOut->addModules(['mediawiki', 'mediawiki.base', 'mw.util']);
//$wgOut->addScriptFile("{$wgScriptPath}/resources/src/mediawiki.base/mediawiki.base.js");
 $wgOut->addScriptFile("{$wgScriptPath}/extensions/SemanticMediaWikiGraph/includes/js/d3_v4.min.js");
 $wgOut->addScriptFile("{$wgScriptPath}/extensions/SemanticMediaWikiGraph/includes/js/utility.js");
 $wgOut->addScriptFile("{$wgScriptPath}/extensions/SemanticMediaWikiGraph/includes/js/app.js");

JS-ошибка

jquery-3.6.3.js:4114 jQuery.Deferred exception: mw is not defined ReferenceError: mw is not defined
    at HTMLDocument.<anonymous> (https://www.tematichedigenere.com/extensions/SemanticMediaWikiGraph/includes/js/utility.js:3:5)
    at mightThrow (https://code.jquery.com/jquery-3.6.3.js:3830:29)
    at process (https://code.jquery.com/jquery-3.6.3.js:3898:12) undefined

Тестирование расширения на моей вики: ссылка на тестовую страницу

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
59
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Эти модули всегда загружены. Код, вероятно, запускается слишком рано. В идеале вы должны переписать расширение для использования модулей ResourceLoader и объявить зависимость от mediawiki.util; менее идеально, вы можете просто обернуть сценарии в обработчик загрузки, чтобы они выполнялись после того, как все остальное.

Большое спасибо за ответ. Я только что понял, что способ, которым я пытался загрузить свой скрипт, предназначался только для внутреннего использования, теперь я пытаюсь загрузить их с помощью ResourceLoader, но он тоже не работает... Я собирался открыть новый вопрос: «В расширении MediaWiki в файле PHP, который определяет класс, расширяющий SpecialPage, я добавляю в глобальную переменную $wgOut пользовательский модуль, но он не загружается через вызов load.php»

Revious 26.12.2022 01:13

Я только что понял, что предыдущий автор каким-то образом включил файлы js в модуль github.com/slim16165/Semantic-MediaWiki-Graph/blob/main/… не достаточно ли их загрузить?

Revious 26.12.2022 01:17

@Revious, вероятно, стоит отдельного вопроса, потому что это трудно обсуждать в комментариях, но да, нормальный шаблон заключается в том, что вы определяете модуль, а затем используете $wgOut->addModule(). См. mediawiki.org/wiki/ResourceLoader/…

Tgr 27.12.2022 05:16

Другие вопросы по теме