jQuery для MediaWiki

Материал из свободной русской энциклопедии «Традиция»
Перейти к навигации Перейти к поиску

jQuery для MediaWiki (jQuery.php) — расширение MediaWiki, добавляющее вызов кода библиотеки jQuery (из файла MediaWiki:jQuery.js) непосредственно в заголовок HTML-документа каждой страницы вики (то есть между <head> и </head>).

Присутствие jQuery является необходимым для того, чтобы к моменту исполнения заданных администраторами скриптов MediaWiki (прежде всего MediaWiki:Common.js) функции jQuery (прежде всего $()) были доступными для употребления. (Если бы функция importScript() использовалась вместо расширения, то тогда библиотека jQuery становилась бы доступною только после загрузки всей страницы.)

Соответственно, расширение позволяет откладывать исполнение скриптов, имеющих дело с обработкою страницы вики, не до того момента (onload), когда вся страница окажется закачанною из Сети, а только до того момента ($(…)), когда код страницы поступит из Сети полностью — и не дожидаться иллюстраций.

Замечания о совместимости[править | править код]

  • В MediaWiki 1.16.x существует механизм загрузки библиотеки jQuery, запускаемый некоторыми расширениями и задействующий более старую версию этой библиотеки (1.3.2), входящую в состав движка MediaWiki и не снабжённую плагинами. Расширение «jQuery для MediaWiki» выкусывает эту старую версию, чтобы не создавать проблем совместимости.
  • В MediaWiki 1.17 существует на порядок более сложный механизм ResourceLoader, предназначенный для автоматической подгрузки скриптов с учётом их взаимных зависимостей. Библиотека jQuery версии 1.4.2 входит в число скриптов, автоматически подгружаемых. Несмотря на это, расширение «jQuery для MediaWiki» загружает свою версию jQuery раньше, чем ResourceLoader, и этим, по-видимому, предотвращает её замещение старой версией.
  • В MediaWiki 1.18 появился hook под названием «ResourceLoaderGetStartupModules», на основании которого Timo Tijhof сочинил расширение Local_jQuery. Его следует использовать в MediaWiki 1.18 и дальнейших версий вместо расширения «jQuery для MediaWiki».

Код расширения[править | править код]

<?php
/*
 * jQuery.php - Adds jQuery script to the MediaWiki <head> . . . </head> 
 * @author Mithgol the Webmaster
 * @version 0.2
 * @copyright Copyright (C) 2010 Mithgol the Webmaster
 * @license The MIT License - http://www.opensource.org/licenses/mit-license.php
 * ---------------------------------------------------------------------------------------
 * Copyright (c) 2010 Mithgol the Webmaster
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights to
 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
 * the Software, and to permit persons to whom the Software is furnished to do
 * so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 * OTHER DEALINGS IN THE SOFTWARE.
 * -----------------------------------------------------------------------
 * Version notes:
 *    version 0.2:
 *       erase MediaWiki's internal jQuery call, which lacks plugins
 *    version 0.1:
 *       initial release
 * -----------------------------------------------------------------------
*/

# Confirm MW environment
if (defined('MEDIAWIKI')) {

# Credits
$wgExtensionCredits['other'][] = array(
    'name'        => 'jQuery',
    'author'      => 'Mithgol the Webmaster',
    'url'         => 'http://traditio.ru/wiki/JQuery_%D0%B4%D0%BB%D1%8F_MediaWiki',
    'description' => 'Adds jQuery to the list of scripts (HEAD element).',
    'version'     => '0.2'
);

function jQueryMyHook( &$output, &$skin ) {
   $output->mScripts = "\t\t".
                       '<script type="text/javascript" src="/w/index.php?title=MediaWiki:jQuery.js&amp;action=raw&amp;ctype=text/javascript"></script>'.
                       "\n" . preg_replace('/<script src="\/w\/skins\/common\/jquery\.min\.js\?\d+"><\/script>/', '<!-- jQuery double, erased -->', $output->mScripts);
   return true;
}

$wgHooks['BeforePageDisplay'][] = 'jQueryMyHook';

} # End MW Environment wrapper
?>