В MediaWiki, начиная с версии 1.17, появился новый механизм сборки и загрузки стилей и скриптов — ResourceLoader. В этой статье я опишу его использование на примере расширения GoogleCodePrettify, которое добавляет тэг
Всем авторам расширений настоятельно рекомендуется использовать новый механизм взамен устаревших
Для начала определим модуль ресурсов для загрузки:
Теперь при загрузке парсера Wiki-разметки обработаем тэг syntaxhighlight:
И, наконец, добавим нужные стили и скрипты при необходимости:
Сборку стилей и скриптов ResourceLoader возьмёт на себя. Обратите внимание, что при наличии опции debug=1 в query string он отдаст стили и скрипты «как есть».
Да, чуть не забыл. Вот как выглядит скрипт
Смотрите также:
syntaxhighlight в разметку MediaWiki.Всем авторам расширений настоятельно рекомендуется использовать новый механизм взамен устаревших
addScript etc.Для начала определим модуль ресурсов для загрузки:
$wgResourceModules['ext.GoogleCodePrettify'] = array( 'localBasePath' => dirname(__FILE__), 'remoteExtPath' => 'GoogleCodePrettify', 'styles' => array('google-code-prettify/prettify.css'), 'scripts' => array('google-code-prettify/prettify.js', 'init.js') );
Теперь при загрузке парсера Wiki-разметки обработаем тэг syntaxhighlight:
// Register parser hook $wgHooks['ParserFirstCallInit'][] = 'efGoogleCodePrettify_Setup'; /** * Register parser hook */ function efGoogleCodePrettify_Setup( &$parser ) { $parser->setHook('syntaxhighlight', array('GoogleCodePrettify', 'parserHook')); return true; } class GoogleCodePrettify { private static $prettified = false; public static function parserHook($text, $args = array(), $parser) { self::$prettified = true; return "<pre class=\"prettyprint\">$text</pre>"; }
И, наконец, добавим нужные стили и скрипты при необходимости:
// Register before display hook $wgHooks['BeforePageDisplay'][] = 'GoogleCodePrettify::beforePageDisplay'; # в классе public static function beforePageDisplay(&$wgOut, &$sk) { if (self::$prettified) { $wgOut->addModules('ext.GoogleCodePrettify'); } // Continue return true; }
Сборку стилей и скриптов ResourceLoader возьмёт на себя. Обратите внимание, что при наличии опции debug=1 в query string он отдаст стили и скрипты «как есть».
Да, чуть не забыл. Вот как выглядит скрипт
init.js:(function($, window) { $(window.document).ready(function() { window.prettyPrint(); }); })(window.jQuery, window);
Смотрите также:
- Репозиторий проекта на GitHub;
- Библиотека Google Code Prettify;
- Документация ResourceLoader;
- Другой пример простого расширения с использованием ResourceLoader: MediaWiki-MashaJS.
