MediaWiki 1.16.xエンジンに組み込まれたjQueryライブラリーを無効にし、更新、更新された新しいWiki管理者に置き換えます





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 /* * jQuery.php - Adds jQuery script to the <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&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の個別のブログ投稿に値しますが、私の現在の話は終わりです。



All Articles