Pull to refresh

Используем ResourceLoader в MediaWiki

Reading time2 min
Views2.1K
В MediaWiki, начиная с версии 1.17, появился новый механизм сборки и загрузки стилей и скриптов — ResourceLoader. В этой статье я опишу его использование на примере расширения GoogleCodePrettify, которое добавляет тэг 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);




Смотрите также:
Tags:
Hubs:
Total votes 5: ↑5 and ↓0+5
Comments2

Articles