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

    В 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);
    




    Смотрите также:
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 2

      +2
      К этой статье не помешает гиперссылка, ведущая к описанию ResourceLoader на сайте MediaWiki.
        +1
        Спасибо, добавлю :)

      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

      Самое читаемое