Pull to refresh

Вышел движок MediaWiki 1.17. Моё расширение, подменяющее jQuery, по-прежнему работоспособно в нём. Но в будущем (для MediaWiki 1.18) появится более элегантное решение. 

Reading time 3 min
Views 1.2K
22 июня 2011 года Фондом Викимедиа выпущена в свет очередная стабильная версия движка MediaWiki — версия 1.17. Соответствующую новость на английском языке вы без труда найдёте в рассылке mediawiki-announce, снабжённую гиперссылками на подробный список изменений и инструкции по апгрейду.

Одной из основных (и даже ключевых) новостей этой версии стало появление и внедрение уникального движка ResourceLoader, целью которого является автоматическая сборка «ресурсов» (конгломератов джаваскрипта и CSS, из которых собирается один общий файл CSS и один общий файл джаваскриптов) с учётом их взаимной зависимости (например, jQuery UI зависит от jQuery) и с последующей минификацией. Два ресурса, содержащие служебные скрипты MediaWiki и библиотеку jQuery 1.4.2, подключаются автоматически в любом случае.

Те из вас, кто хочет использовать более новую версию jQuery, по-прежнему могут для этого воспользоваться тем моим способом и расширением, о котором я рассказывал 12 дней назад вот в этом же блоге. Как ни странно, мне не пришлось переменить ни буквы в его коде PHP для обеспечения работоспособности в MediaWiki 1.17 — это приятная удача, несмотря на то, что (в силу сложности ResourceLoader) прежняя возможность несложно «выкусить» вызов библиотеки jQuery, встроенной в MediaWiki, исчезла совершенно. Так что теперь моё расширение «побеждает» всего лишь потому, что вставляет вызов новой jQuery чуть раньше, чем ResourceLoader начинает грузить старую. По-видимому, библиотека jQuery 1.4.2 достаточно разумна для того, чтобы не подменять новую версию себя самóй. Однако печально, что теперь (в отличие от 1.16) моё расширение не позволяет загрузить одну версию jQuery (свою) вместо другой (встроенной в движок): в 1.17 они грузятся совместно, что неэкономно.

Сразу предупрежу, что по мере адаптации к ResourceLoader некоторые расширения и компоненты MediaWiki наверняка научатся (а некоторые и ужé научились) полагаться на ту (старую) версию jQuery, которая встроена в движок MediaWiki — и при заметном обновлении jQuery многие из них непременно отвалятся. В частности, следующая версия (MediaWiki 1.18) будет поставляться (согласно странице о jQuery в её вики) с не особенно обновлённую библиотекою jQuery (версия 1.4.4 вместо версии 1.4.2, идущей в MediaWiki 1.7) — а всё потому, что UploadWizard подох при попытке обновить jQuery до версии 1.5.2, будучи не совместим с новым поведением функции $.ajax(), так что jQuery поневоле откатили обратно до 1.4.4. Имейте в виду это происшествие, если пожелаете поместить на страницу «MediaWiki:jQuery.js» чрезмерно новую версию этой популярной джаваскриптовой библиотеки.

Ко всему этому надо прибавить (и прибавлю), что любителям использовать обновлённую библиотеку jQuery в MediaWiki 1.18 моё расширение не понадобится. В этой дальнейшей версии MediaWiki, к счастью, появилась новая точка привязки ResourceLoaderGetStartupModules, на которую можно навесить PHP-скрипт, изящно подменяющий jQuery изнутри ResourceLoader. Вчера вечером и сегодня ночью разработчик Timo Tijhof (это тот самый, который по псевдонимом Krinkle навесил флаг «inspected» на дифф о ResourceLoaderGetStartupModules) любезно согласился по моей просьбе сочинить расширение, задействующее эту возможность — так что в дальнейшем его расширение «Local jQuery» можно (и нужно, нужно!) будет непременно использовать вместо моего, использовать сразу после перехода на MediaWiki 1.18, так как оно экономит на объёме кода, вызывая одну версию jQuery вместо другой (а не одну за другой, как мне пришлось поступить в 1.17).

Напоследок немного о грустном.

Метод $wgParser->disableCache(), который в MediaWiki 1.16 работал прекрасно, вызывает в MediaWiki 1.17 падение PHP в состояние «Fatal Error: Call to a member function setCacheTime() on a non-object» в модуле /includes/parser/Parser.php (что указывает на некоторую недодуманность логики этого метода в новой версии). В частности, от этого пострадало расширение EmbedVideo, которое придумал Jim R. Wilson в 2007 году и которое затем долго допиливали да апгрейдили я и Александр Машин. Сейчас оно используется в Традиции, Викиреальности и Циклопедии. Метод пришлось просто закомментировать — в конце концов, медиапроигрыватели можно ведь и разрешить кэшировать — но страшно подумать, какие костыли придётся придумывать авторам тех расширений, в которых отсутствие кэширования итоговой страницы принципиально необходимо.
Tags:
Hubs:
-9
Comments 0
Comments Leave a comment

Articles