В 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.