MediaWiki Webサイトで読みやすいため、現在の安定バージョン(1.16.x)のラインには組み込みのjQueryライブラリが付属しており、そのコードは
「skins / common / jquery.min.js」にあります。 これは、比較的古いバージョン(2009年2月にリリースされた1.3.2)のjQueryであり、バグの1つを克服するためにわずかにパッチが適用され、互換モード
(「 noConflict()) 」 。 このjQueryコードにはプラグインが含まれておらず、本質的にオプションであり、MediaWikiコードに
$ wgOut-> includeJQuery()メソッドの呼び出しが含まれている場合にのみページに接続します。
UsabilityInitiative拡張機能には、
「UsabilityInitiative.hooks.php」ファイルの128行目でそのような呼び出しが含まれているため、UsabilityInitiative拡張機能がWikiに接続されると、jQueryが一部のスキン(Vectorなど)に表示されます。
wiki技術者、つまり直接アクセス(SSHなど)およびwiki設定(LocalSettings.php)を変更できる機能を備えたMediaWikiサーバーの管理
者の観点から、MediaWiki拡張機能を再インストールし、他の同様のアクションを実行することをお勧めします。
MediaWiki 1.16.x wikiが前の段落で述べた状況を改善
しようとするのはどのような状況ですか? この願望を実現するために
ウィキのテクニックを操作する最も適切な方法は何ですか?
この欲求の最初の衝動は、jQueryがデフォルトで設定されているページコード内にあることの不便さを自然に、そしてほぼ避けられない形で実現することです。 すべての
ウィキ技術者は、十分な余暇があれば、遅かれ早かれ、
関数 $( ...
)のシンプルさとパワーが、ウィキ用のスクリプトを書く管理者に
常に与えられていれば、確実にはるかにコンパクトな
JSコードを生み出すことを理解し
ます前者より。 たとえば
、2011年5月22日付のロシア語版ウィキペディア
の 「MediaWiki:Common.js」ページをご覧ください。 その中にどの機能コードがあるのか簡単にわかります:
function editZeroSection(){ var body = document.getElementById('bodyContent') if (!body) return var h2s = body.getElementsByTagName('H2') var h2 = h2s[0] if (!h2) return if (h2.parentNode.id == 'toctitle') h2 = h2s[1] if (!h2) return var span = h2.firstChild if (!span || span.className != 'editsection') return var zero = span.cloneNode(true) body.insertBefore(zero, body.firstChild) var a = zero.getElementsByTagName('a')[0] if (a.href.indexOf('§ion=T') == -1 ) a.title = a.title.replace(/:.*$/,': 0') else a.title = ' : 0' a.setAttribute('href', wgScript + '?title='+encodeURIComponent(wgPageName) + '&action=edit§ion=0') }
jQueryファンは、このライブラリが関数の作成者
をgetElementById() およびgetElementsByTagName()に頼る必要性から完全に救い、他のメソッドやフィールドの短縮版を提供する方法をよく知っています。 しかし、そのような関数は複数あります。 Wikiなどではありません。たとえば
、2011年5月28日付けの「Absurdopedia」
のページ「MediaWiki:Common.js」
のバージョンでは、同様の煩わしさを簡単に見ることができます。
公式の指示に従い 、LocalSettings.phpファイルに適切なコードを追加することにより
、wiki技術者がjQueryがページコードに表示されることを確認したとします。
// Include jQuery function wfIncludeJQuery() { global $wgOut; $wgOut->includeJQuery(); } $wgExtensionFunctions[] = 'wfIncludeJQuery';
「MediaWiki:Common.js」ページを編集する権限を持つWiki管理者は、jQueryのローカル関数の書き換えを開始し、
addOnloadHook( ... )の代わりに
$( ... )などを使用しました。 将来、このプロセスを待つ2つの障害は何ですか?
まず、jQueryの歴史に精通すると、
バージョン1.3.2 (少し上で述べたように)がかなり前に-
すでに2009年2月に登場したことが明らかになります。 Habrahabr
jQueryブログの定期的な読者は、過去2年にわたってライブラリの開発がどれほど偉大で重要であったかを語る必要はありません。 他のすべての人のために、バージョン1.4.3の
アニメーションアクセラレーション 、バージョン1.5の新しい
遅延インターフェイス
([ 1 ]、[ 2 ]) 、バージョン1.5.1の
IE9の完全サポート、および
14ページの全般的なバージョン1.4の変更の例を示し
ます。出発します。
第二に、既存のスクリプト
のjQベースのフレームワークへの転送がほとんど完了していない
ため、 wiki管理者は、自動化(スクリプティング)wikiの可能性が
広がることを自然に考えます。 簡単な方法(「コピー&ペースト」)を使用してサイトに印象的な大幅な改善をすぐに提供できるjQueryプラグインなどの素晴らしいツールに慣れるのは、ほぼ必然です。 たとえば、
jQuery.ScrollTo とjQuery.LocalScrollを追加するだけで、簡単なスクリプトを使用して、すぐに
すべてのページ内ハイパーリンクに壮大なページスクロールアニメーションを提供できます。
$(function(){ $.localScroll({ hash: true, onAfter: function(target){ location = '#' + ( target.id || target.name ); } }); });
自動目次を備えたMediaWikiエンジンWikiの場合、このような動作の改善は非常に貴重です。
この段階では、イベントの過程で、新しいバージョンのjQueryライブラリとすべての必要なプラグインの両方を含むファイル(何よりも、サーバーへの余分なリクエストに時間を浪費しない
ように
1つのファイル)を作成するために、容赦なく
wikiをプッシュしてい
ます 。
skins / common / jquery.min.jsはそのようなファイルの役割に
適していますか? それはありそうもない、そして2つの理由で。
まず、 ご存じのとおり 、MediaWikiの新しいバージョンへの移行(バージョン1.16.xからバージョン
1.16.x + 1への変更も
含む)には 、古いファイルの上に新しいファイル
を書き込む
ことが含まれます-更新のわずかな不注意がファイル
「スキン/共通/jquery.min.js」は、MediaWikiに同梱されているjQueryバージョン(1.3.2、プラグインなし)で再度置き換えられます。
第二に、 jQueryとプラグインの更新を
wikiテクニックに任せて、このために
wikiサーバーへの直接アクセス
を必要とする
ことはまったく論理的で
はありません。他の多くのMediaWiki javascript(前述の「MediaWiki:Common.js )管理者は誰でもwiki自体のインターフェースを介して編集できます。さらに、バージョン管理と編集の違いを表示するための便利な組み込みシステムを備えています。 特定のウィキに適切なすべてのプラグインとともに、より論理的でjQueryであり、「MediaWiki:jQuery.js」という名前のページに配置するが、落ち着くことがわかります。
そのような配置は技術的に達成可能ですか? はい、かなり達成可能です。 そのためには、ファイル「LocalSettings.php」から、前の段階で追加された
includeJQuery()メソッドへの呼び出しでコードを削除し、代わりにスクリプト「MediaWiki:jQuery.js」の接続を可能にするMediaWiki拡張に呼び出しを接続します。 、はい、さらに、
includeJQuery()メソッドの呼び出しが他の拡張機能
からまだ来
ている場合は、スクリプト
「skins / common / jquery.min.js」の呼び出しを
噛みます。
「MediaWiki:jQuery.js」を各ウィキページに接続するMediaWiki拡張コードを作成するタスクは、長い間解決されました。その答え(コード)は次のとおりです(MITライセンスを含む)。
<?php # 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&action=raw&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 ?>
バイトファイル
「skins / common / jquery.min.js」では、MediaWikiが
「?」を追加する方法と、スクリプトのURLに
数字を追加することに注意してください。
ファイル「MediaWiki:jQuery.js」に入力する場合、jQuery名形式の
「skins / common / jquery.min.js」との後方互換性を提供することが適切です。 そのためには、「MediaWiki:jQuery.js」ファイルに次のコードを追加するだけで十分です。
/* MediaWiki: * 1) /skins/common/edit.js * 2) /skins/common/preview.js * , jQuery $j. * : */ $j=$;
明らかに、この同義語はjQueryライブラリコード自体の後に作成されることを願っています。
上記の拡張は、2010年にロシアの
ウィキ百科事典 「Tradition」で導入され、実際にその適合性を完全に証明することができました。 MediaWikiでjQueryを使用することで可能になるスクリプトによって作成された改善点とアメニティの一部は、おそらくHabrahabrの個別のブログ投稿に値しますが、私の現在の話は終わりです。