MediaWiki:Common.js
注意: 保存後、変更を確認するにはブラウザーのキャッシュを消去する必要がある場合があります。
- Firefox / Safari: Shift を押しながら 再読み込み をクリックするか、Ctrl-F5 または Ctrl-R を押してください (Mac では ⌘-R)
- Google Chrome: Ctrl-Shift-R を押してください (Mac では ⌘-Shift-R)
- Internet Explorer: Ctrl を押しながら 最新の情報に更新 をクリックするか、Ctrl-F5 を押してください
- Opera: メニュー → 設定 (Mac では Opera → 環境設定) に移動し、プライバシーとセキュリティ → 閲覧データを消去 → キャッシュされた画像およびファイル からキャッシュをクリアしてください。
// <source lang="javascript"> /* ここに書いたスクリプトは全ての外装に反映されます */ typeof mw != 'undefined' && (function() { /* mw に依存する部分の始まり */ // wgから始まるグローバル変数をローカル変数とする var wgPageName = mw.config.get('wgPageName'); var wgIsArticle = mw.config.get('wgIsArticle'); var wgAction = mw.config.get('wgAction'); var wgNamespaceNumber = mw.config.get('wgNamespaceNumber'); /** &withJS= URL parameter, &withCSS= URL parameter ******* * [[en:MediaWiki:Common.js]] より。MediaWiki空間に置かれているスクリプトまたはスタイルシートを * [[Special:Mypage/vector.js]]または[[Special:Mypage/vector.css]]を編集しないで体験できるようにする */ mw.loader.using(['mediawiki.util', 'mediawiki.notify']).done( function () { var extraCSS = mw.util.getParamValue( 'withCSS' ), extraJS = mw.util.getParamValue( 'withJS' ); if ( extraCSS ) { if ( extraCSS.match( /^MediaWiki:[^&<>=%#]*\.css$/ ) ) { importStylesheet( extraCSS ); } else { mw.notify( 'MediaWiki 名前空間のページのみ許可されています。', { title: 'withCSS パラメータの値が不正です' } ); } } if ( extraJS ) { if ( extraJS.match( /^MediaWiki:[^&<>=%#]*\.js$/ ) ) { importScript( extraJS ); } else { mw.notify( 'MediaWiki 名前空間のページのみ許可されています。', { title: 'withJS パラメータの値が不正です' } ); } } }); /* * [[特別:検索]]に外部検索サイト選択用のプルダウンメニューをつける */ if (wgPageName == '特別:検索') { importScript('MediaWiki:Common.js/SpecialSearchEnhanced.js'); } /** * Test if an element has a certain class * @deprecated: Use $(element).hasClass() instead. */ mw.log.deprecate( window, 'hasClass', function ( element, className ) { return $( element ).hasClass( className ); }, 'Use jQuery.hasClass() instead' ); /** * Collapsible tables ********************************************************* * * Description: Allows tables to be collapsed, showing only the header. See * [[Wikipedia:NavFrame]]. * Maintainers: [[User:R. Koot]] */ window.autoCollapse = 2; window.collapseCaption = "隠す"; window.expandCaption = "表示"; window.collapseTable = function ( tableIndex ) { var Button = document.getElementById( 'collapseButton' + tableIndex ); var Table = document.getElementById( 'collapsibleTable' + tableIndex ); if ( !Table || !Button ) { return false; } var Rows = Table.rows; var i; if ( Button.firstChild.data === collapseCaption ) { for ( i = 1; i < Rows.length; i++ ) { Rows[i].style.display = 'none'; } Button.firstChild.data = expandCaption; } else { for ( i = 1; i < Rows.length; i++ ) { Rows[i].style.display = Rows[0].style.display; } Button.firstChild.data = collapseCaption; } }; window.createCollapseButtons = function() { var tableIndex = 0; var NavigationBoxes = {}; var Tables = document.getElementsByTagName( 'table' ); var i; function handleButtonLink( index, e ) { window.collapseTable( index ); e.preventDefault(); } for ( i = 0; i < Tables.length; i++ ) { if ( $( Tables[i] ).hasClass( 'collapsible' ) ) { /* only add button and increment count if there is a header row to work with */ var HeaderRow = Tables[i].getElementsByTagName( 'tr' )[0]; if ( !HeaderRow ) continue; var Header = HeaderRow.getElementsByTagName( 'th' )[0]; if ( !Header ) continue; NavigationBoxes[ tableIndex ] = Tables[i]; Tables[i].setAttribute( 'id', 'collapsibleTable' + tableIndex ); var Button = document.createElement( 'span' ); var ButtonLink = document.createElement( 'a' ); var ButtonText = document.createTextNode( collapseCaption ); Button.className = 'collapseButton'; /* Styles are declared in Common.css */ ButtonLink.style.color = Header.style.color; ButtonLink.setAttribute( 'id', 'collapseButton' + tableIndex ); ButtonLink.setAttribute( 'href', '#' ); $( ButtonLink ).on( 'click', $.proxy( handleButtonLink, ButtonLink, tableIndex ) ); ButtonLink.appendChild( ButtonText ); Button.appendChild( document.createTextNode( '[' ) ); Button.appendChild( ButtonLink ); Button.appendChild( document.createTextNode( ']' ) ); Header.insertBefore( Button, Header.firstChild ); tableIndex++; } } for ( i = 0; i < tableIndex; i++ ) { if ( $( NavigationBoxes[i] ).hasClass( 'collapsed' ) || ( tableIndex >= autoCollapse && $( NavigationBoxes[i] ).hasClass( 'autocollapse' ) ) ) { window.collapseTable( i ); } else if ( $( NavigationBoxes[i] ).hasClass ( 'innercollapse' ) ) { var element = NavigationBoxes[i]; while ((element = element.parentNode)) { if ( $( element ).hasClass( 'outercollapse' ) ) { window.collapseTable ( i ); break; } } } } }; // mw.hook( 'wikipage.content' ).add( createCollapseButtons ); $(createCollapseButtons); // 応急処置 /** Dynamic Navigation Bars (experimental) ************************************* * * Description: See [[Wikipedia:NavFrame]]. * Maintainers: UNMAINTAINED */ // set up the words in your language window.NavigationBarHide = '[' + collapseCaption + ']'; window.NavigationBarShow = '[' + expandCaption + ']'; // set up max count of Navigation Bars on page, // if there are more, all will be hidden window.NavigationBarShowDefault = 0; // all bars will be hidden // NavigationBarShowDefault = 1; // on pages with more than 1 bar all bars will be hidden //var NavigationBarShowDefault = autoCollapse; // shows and hides content and picture (if available) of navigation bars // Parameters: // indexNavigationBar: the index of navigation bar to be toggled window.toggleNavigationBar = function(indexNavigationBar) { var NavToggle = document.getElementById("NavToggle" + indexNavigationBar); var NavFrame = document.getElementById("NavFrame" + indexNavigationBar); if (!NavFrame || !NavToggle) { return false; } // if shown now if (NavToggle.firstChild.data == NavigationBarHide) { for ( var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) { if ( $( NavChild ).hasClass( 'NavPic' ) ) { NavChild.style.display = 'none'; } if ( $( NavChild ).hasClass( 'NavContent') ) { NavChild.style.display = 'none'; } } NavToggle.firstChild.data = NavigationBarShow; // if hidden now } else if (NavToggle.firstChild.data == NavigationBarShow) { for ( var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) { if ( $( NavChild ).hasClass( 'NavPic')) { NavChild.style.display = 'block'; } if ( $( NavChild ).hasClass( 'NavContent')) { NavChild.style.display = 'block'; } } NavToggle.firstChild.data = NavigationBarHide; } }; // adds show/hide-button to navigation bars window.createNavigationBarToggleButton = function() { var indexNavigationBar = 0; // iterate over all < div >-elements var divs = document.getElementsByTagName("div"); for( var i=0; NavFrame = divs[i]; i++ ) { // if found a navigation bar if ($(NavFrame).hasClass("NavFrame")) { indexNavigationBar++; var NavToggle = document.createElement("a"); NavToggle.className = 'NavToggle'; NavToggle.setAttribute('id', 'NavToggle' + indexNavigationBar); NavToggle.setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');'); var NavToggleText = document.createTextNode(NavigationBarHide); NavToggle.appendChild(NavToggleText); // Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked) for( var j=0; j < NavFrame.childNodes.length; j++ ) { if ($(NavFrame.childNodes[j]).hasClass("NavHead")) { NavFrame.childNodes[j].appendChild(NavToggle); } } NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar); } } // if more Navigation Bars found than Default: hide all if (NavigationBarShowDefault < indexNavigationBar) { for( var i=1; i<=indexNavigationBar; i++ ) { toggleNavigationBar(i); } } }; $( createNavigationBarToggleButton ); // 記事名チェッカ if( // 検査は標準名前空間の記事に対してのみ行う。 mw.config.get('wgNamespaceNumber') === 0 && // 検査は利用者が新規作成または編集しようとしたときにのみ行う。 (mw.config.get('wgAction') == 'edit' || mw.config.get('wgAction') == 'submit') ) { mw.loader.load(mw.config.get('wgScript') + '?title=MediaWiki:Common.js/titleChecker.js&action=raw&ctype=text/javascript'); } /** Magic editintros **************************************************** * * Description: 特定カテゴリの記事の編集画面にヘッダテンプレートを表示する * (編集リンクに "&editintro=Template:hogehoge" を付加する) * Maintainers: [[利用者:Cpro]] */ mw.loader.using(['mediawiki.util']).done(function() { // カテゴリ名と表示テンプレートの対応テーブル。名前空間は書かない。 var CATEGORY_EDITINTRO_TABLE = { '存命人物': 'BLP editintro' , '学校記事': '学校記事 editintro' /* , 'カテゴリ名': 'テンプレート名' */ }; //編集・節節編集リンクにeditintro引数を追加する(VisualEditorを除く) function addEditIntro(templateName) { $('#ca-edit a, .mw-editsection a[class!=mw-editsection-visualeditor]').each(function() { this.href += '&editintro=' + mw.util.wikiUrlencode(templateName); }); } if (mw.config.get('wgNamespaceNumber') === 0) { $(function(){ var cats = mw.config.get('wgCategories'); if(!cats) return; for(var i = 0; i < cats.length; i++) { var ei = CATEGORY_EDITINTRO_TABLE[cats[i]]; if(ei) { addEditIntro('Template:' + ei); return; } } }); } }); // 検索ボックス入力時の全角・半角文字正規化 importScript('MediaWiki:Common.js/NormalizeCharWidth.js'); /* * 拡張型折りたたみ要素(EnhancedCollapsibleElements) * 説明書:[[ヘルプ:拡張型折りたたみ可能要素]] */ importScript('MediaWiki:EnhancedCollapsibleElements.js'); /* == Username replace function == * Originally by [[uncyclopedia:User:Splaka|Splaka]], updated by same. * <span class="insertusername"></span> の中身を利用者名で置き換える * window.disableUsernameReplace = true; で無効 * * [[Wikipedia:管理者への立候補/利用者名抽出機能の設定方法]]を参照 */ window.disableUsernameReplace = false; $(function() { var userName = mw.config.get('wgUserName'); if(window.disableUsernameReplace || userName === null) return; $('span.insertusername').each(function(i, span) { for(var j = 0; j < span.childNodes.length; j++) { var node = span.childNodes[j]; if(node.nodeType == 3) { //span内で最初のテキストノードを探し利用者名で置換する node.nodeValue = userName; break; } } }); }); /* mw に依存する部分の終わり */ }()); // </source>