( ! ) Notice: Use of undefined constant NS_LANGWIKI_BOARD_ACG - assumed 'NS_LANGWIKI_BOARD_ACG' in C:\server\langwiki\LocalSettings.php on line 855
Call Stack
#TimeMemoryFunctionLocation
10.0003256576{main}( )...\api.php:0
20.0005279912require( 'C:\server\langwiki\includes\WebStart.php' )...\api.php:38
30.01693255560require_once( 'C:\server\langwiki\LocalSettings.php' )...\WebStart.php:124

( ! ) Notice: Use of undefined constant NS_LANGWIKI_BOARD_ACG_TALK - assumed 'NS_LANGWIKI_BOARD_ACG_TALK' in C:\server\langwiki\LocalSettings.php on line 856
Call Stack
#TimeMemoryFunctionLocation
10.0003256576{main}( )...\api.php:0
20.0005279912require( 'C:\server\langwiki\includes\WebStart.php' )...\api.php:38
30.01693255560require_once( 'C:\server\langwiki\LocalSettings.php' )...\WebStart.php:124
https://langwiki.org/api.php?action=feedcontributions&user=Admin&feedformat=atom 语言维基 - 用户贡献 [zh] 2024-03-29T05:39:08Z 用户贡献 MediaWiki 1.28.0 https://langwiki.org/index.php?title=%E8%AF%AD%E8%A8%80%E7%BB%B4%E5%9F%BA:%E6%B1%89%E5%AD%97%E8%AF%8D%E6%BA%90%E7%A0%94%E7%A9%B6&diff=3267 语言维基:汉字词源研究 2020-01-03T02:01:44Z <p>Admin:</p> <hr /> <div>本词表可以由注册用户在线编辑,请双击数据格进行添加和修改。感谢大家贡献力量!<br /> &lt;div id=&quot;spreadsheet_search_hanzi_source&quot;&gt;&lt;/div&gt;<br /> &lt;spreadsheet sheet=&quot;0&quot; file=&quot;hanyuciyuan-2019.xlsx&quot; /&gt;</div> Admin https://langwiki.org/index.php?title=MediaWiki:Common.js&diff=3266 MediaWiki:Common.js 2020-01-03T02:00:27Z <p>Admin:</p> <hr /> <div>/* 这里的任何JavaScript将为所有用户在每次页面载入时加载。 */<br /> <br /> /**<br /> * Keep code in MediaWiki:Common.js to a minimum as it is unconditionally<br /> * loaded for all users on every wiki page. If possible create a gadget that is<br /> * enabled by default instead of adding it here (since gadgets are fully<br /> * optimized ResourceLoader modules with possibility to add dependencies etc.)<br /> *<br /> * Since Common.js isn't a gadget, there is no place to declare its<br /> * dependencies, so we have to lazy load them with mw.loader.using on demand and<br /> * then execute the rest in the callback. In most cases these dependencies will<br /> * be loaded (or loading) already and the callback will not be delayed. In case a<br /> * dependency hasn't arrived yet it'll make sure those are loaded before this.<br /> */<br /> <br /> /* global mw, $ */<br /> /* jshint strict:false, browser:true */<br /> <br /> mw.loader.using( ['mediawiki.user', 'mediawiki.util', 'mediawiki.notify', 'jquery.client'] ).done( function () {<br /> /* Begin of mw.loader.using callback */<br /> <br /> /**<br /> * Main Page layout fixes<br /> *<br /> * Description: Adds an additional link to the complete list of languages available.<br /> * Maintainers: [[User:AzaToth]], [[User:R. Koot]], [[User:Alex Smotrov]]<br /> */<br /> if ( mw.config.get( 'wgPageName' ) === 'Main_Page' || mw.config.get( 'wgPageName' ) === 'Talk:Main_Page' ) {<br /> $( function () {<br /> mw.util.addPortletLink( 'p-lang', '//meta.wikimedia.org/wiki/List_of_Wikipedias',<br /> 'Complete list', 'interwiki-completelist', 'Complete list of Wikipedias' );<br /> } );<br /> }<br /> <br /> /**<br /> * Redirect User:Name/skin.js and skin.css to the current skin's pages<br /> * (unless the 'skin' page really exists)<br /> * @source: http://www.mediawiki.org/wiki/Snippets/Redirect_skin.js<br /> * @rev: 2<br /> */<br /> if ( mw.config.get( 'wgArticleId' ) === 0 &amp;&amp; mw.config.get( 'wgNamespaceNumber' ) === 2 ) {<br /> var titleParts = mw.config.get( 'wgPageName' ).split( '/' );<br /> /* Make sure there was a part before and after the slash<br /> and that the latter is 'skin.js' or 'skin.css' */<br /> if ( titleParts.length == 2 ) {<br /> var userSkinPage = titleParts.shift() + '/' + mw.config.get( 'skin' );<br /> if ( titleParts.slice( -1 ) == 'skin.js' ) {<br /> window.location.href = mw.util.getUrl( userSkinPage + '.js' );<br /> } else if ( titleParts.slice( -1 ) == 'skin.css' ) {<br /> window.location.href = mw.util.getUrl( userSkinPage + '.css' );<br /> }<br /> }<br /> }<br /> <br /> /**<br /> * Map addPortletLink to mw.util<br /> * @deprecated: Use mw.util.addPortletLink instead.<br /> */<br /> mw.log.deprecate( window, 'addPortletLink', mw.util.addPortletLink, 'Use mw.util.addPortletLink instead' );<br /> <br /> /**<br /> * Extract a URL parameter from the current URL<br /> * @deprecated: Use mw.util.getParamValue with proper escaping<br /> */<br /> mw.log.deprecate( window, 'getURLParamValue', mw.util.getParamValue, 'Use mw.util.getParamValue instead' );<br /> <br /> /**<br /> * Test if an element has a certain class<br /> * @deprecated: Use $(element).hasClass() instead.<br /> */<br /> mw.log.deprecate( window, 'hasClass', function ( element, className ) {<br /> return $( element ).hasClass( className );<br /> }, 'Use jQuery.hasClass() instead' );<br /> <br /> /**<br /> * @source www.mediawiki.org/wiki/Snippets/Load_JS_and_CSS_by_URL<br /> * @rev 6<br /> */<br /> var extraCSS = mw.util.getParamValue( 'withCSS' ),<br /> extraJS = mw.util.getParamValue( 'withJS' );<br /> <br /> if ( extraCSS ) {<br /> if ( extraCSS.match( /^MediaWiki:[^&amp;&lt;&gt;=%#]*\.css$/ ) ) {<br /> mw.loader.load( '/w/index.php?title=' + extraCSS + '&amp;action=raw&amp;ctype=text/css', 'text/css' );<br /> } else {<br /> mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withCSS value' } );<br /> }<br /> }<br /> <br /> if ( extraJS ) {<br /> if ( extraJS.match( /^MediaWiki:[^&amp;&lt;&gt;=%#]*\.js$/ ) ) {<br /> mw.loader.load( '/w/index.php?title=' + extraJS + '&amp;action=raw&amp;ctype=text/javascript' );<br /> } else {<br /> mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withJS value' } );<br /> }<br /> }<br /> <br /> /**<br /> * WikiMiniAtlas<br /> *<br /> * Description: WikiMiniAtlas is a popup click and drag world map.<br /> * This script causes all of our coordinate links to display the WikiMiniAtlas popup button.<br /> * The script itself is located on meta because it is used by many projects.<br /> * See [[Meta:WikiMiniAtlas]] for more information.<br /> * Maintainers: [[User:Dschwen]]<br /> */<br /> ( function () {<br /> var require_wikiminiatlas = false;<br /> var coord_filter = /geohack/;<br /> $( function () {<br /> $( 'a.external.text' ).each( function( key, link ) {<br /> if ( link.href &amp;&amp; coord_filter.exec( link.href ) ) {<br /> require_wikiminiatlas = true;<br /> // break from loop<br /> return false;<br /> }<br /> } );<br /> if ( $( 'div.kmldata' ).length ) {<br /> require_wikiminiatlas = true;<br /> }<br /> if ( require_wikiminiatlas ) {<br /> mw.loader.load( '//meta.wikimedia.org/w/index.php?title=MediaWiki:Wikiminiatlas.js&amp;action=raw&amp;ctype=text/javascript' );<br /> }<br /> } );<br /> } )();<br /> <br /> /**<br /> * Collapsible tables<br /> *<br /> * Allows tables to be collapsed, showing only the header. See [[Help:Collapsing]].<br /> *<br /> * @version 2.0.3 (2014-03-14)<br /> * @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-collapsibleTables.js<br /> * @author [[User:R. Koot]]<br /> * @author [[User:Krinkle]]<br /> * @deprecated Since MediaWiki 1.20: Use class=&quot;mw-collapsible&quot; instead which<br /> * is supported in MediaWiki core.<br /> */<br /> <br /> var autoCollapse = 2;<br /> var collapseCaption = 'hide';<br /> var expandCaption = 'show';<br /> var tableIndex = 0;<br /> <br /> function collapseTable( tableIndex ) {<br /> var Button = document.getElementById( 'collapseButton' + tableIndex );<br /> var Table = document.getElementById( 'collapsibleTable' + tableIndex );<br /> <br /> if ( !Table || !Button ) {<br /> return false;<br /> }<br /> <br /> var Rows = Table.rows;<br /> var i;<br /> var $row0 = $(Rows[0]);<br /> <br /> if ( Button.firstChild.data === collapseCaption ) {<br /> for ( i = 1; i &lt; Rows.length; i++ ) {<br /> Rows[i].style.display = 'none';<br /> }<br /> Button.firstChild.data = expandCaption;<br /> } else {<br /> for ( i = 1; i &lt; Rows.length; i++ ) {<br /> Rows[i].style.display = $row0.css( 'display' );<br /> }<br /> Button.firstChild.data = collapseCaption;<br /> }<br /> }<br /> <br /> function createClickHandler( tableIndex ) {<br /> return function ( e ) {<br /> e.preventDefault();<br /> collapseTable( tableIndex );<br /> };<br /> }<br /> <br /> function createCollapseButtons( $content ) {<br /> var NavigationBoxes = {};<br /> var $Tables = $content.find( 'table' );<br /> var i;<br /> <br /> $Tables.each( function( i, table ) {<br /> if ( $(table).hasClass( 'collapsible' ) ) {<br /> <br /> /* only add button and increment count if there is a header row to work with */<br /> var HeaderRow = table.getElementsByTagName( 'tr' )[0];<br /> if ( !HeaderRow ) {<br /> return;<br /> }<br /> var Header = table.getElementsByTagName( 'th' )[0];<br /> if ( !Header ) {<br /> return;<br /> }<br /> <br /> NavigationBoxes[ tableIndex ] = table;<br /> table.setAttribute( 'id', 'collapsibleTable' + tableIndex );<br /> <br /> var Button = document.createElement( 'span' );<br /> var ButtonLink = document.createElement( 'a' );<br /> var ButtonText = document.createTextNode( collapseCaption );<br /> // Styles are declared in [[MediaWiki:Common.css]]<br /> Button.className = 'collapseButton';<br /> <br /> ButtonLink.style.color = Header.style.color;<br /> ButtonLink.setAttribute( 'id', 'collapseButton' + tableIndex );<br /> ButtonLink.setAttribute( 'href', '#' );<br /> $( ButtonLink ).on( 'click', createClickHandler( tableIndex ) );<br /> ButtonLink.appendChild( ButtonText );<br /> <br /> Button.appendChild( document.createTextNode( '[' ) );<br /> Button.appendChild( ButtonLink );<br /> Button.appendChild( document.createTextNode( ']' ) );<br /> <br /> Header.insertBefore( Button, Header.firstChild );<br /> tableIndex++;<br /> }<br /> } );<br /> <br /> for ( i = 0; i &lt; tableIndex; i++ ) {<br /> if ( $( NavigationBoxes[i] ).hasClass( 'collapsed' ) ||<br /> ( tableIndex &gt;= autoCollapse &amp;&amp; $( NavigationBoxes[i] ).hasClass( 'autocollapse' ) )<br /> ) {<br /> collapseTable( i );<br /> }<br /> else if ( $( NavigationBoxes[i] ).hasClass ( 'innercollapse' ) ) {<br /> var element = NavigationBoxes[i];<br /> while ((element = element.parentNode)) {<br /> if ( $( element ).hasClass( 'outercollapse' ) ) {<br /> collapseTable ( i );<br /> break;<br /> }<br /> }<br /> }<br /> }<br /> }<br /> <br /> mw.hook( 'wikipage.content' ).add( createCollapseButtons );<br /> <br /> /**<br /> * Add support to mw-collapsible for autocollapse, innercollapse and outercollapse<br /> *<br /> * Maintainers: TheDJ<br /> */<br /> function mwCollapsibleSetup( $collapsibleContent ) {<br /> var $element,<br /> autoCollapseThreshold = 2;<br /> $.each( $collapsibleContent, function (index, element) {<br /> $element = $( element );<br /> if ( index &gt; autoCollapseThreshold &amp;&amp; $element.hasClass( 'autocollapse' ) ) {<br /> $element.data( 'mw-collapsible' ).collapse();<br /> } else if ( $element.hasClass( 'innercollapse' ) ) {<br /> if ( $element.parents( '.outercollapse' ).length &gt; 0 ) {<br /> $element.data( 'mw-collapsible' ).collapse();<br /> }<br /> }<br /> } );<br /> }<br /> <br /> mw.hook( 'wikipage.collapsibleContent' ).add( mwCollapsibleSetup );<br /> <br /> /**<br /> * Dynamic Navigation Bars (experimental)<br /> *<br /> * Description: See [[Wikipedia:NavFrame]].<br /> * Maintainers: UNMAINTAINED<br /> */<br /> <br /> /* set up the words in your language */<br /> var NavigationBarHide = '[' + collapseCaption + ']';<br /> var NavigationBarShow = '[' + expandCaption + ']';<br /> var indexNavigationBar = 0;<br /> <br /> /**<br /> * Shows and hides content and picture (if available) of navigation bars<br /> * Parameters:<br /> * indexNavigationBar: the index of navigation bar to be toggled<br /> **/<br /> window.toggleNavigationBar = function ( indexNavigationBar, event ) {<br /> var NavToggle = document.getElementById( 'NavToggle' + indexNavigationBar );<br /> var NavFrame = document.getElementById( 'NavFrame' + indexNavigationBar );<br /> var NavChild;<br /> <br /> if ( !NavFrame || !NavToggle ) {<br /> return false;<br /> }<br /> <br /> /* if shown now */<br /> if ( NavToggle.firstChild.data === NavigationBarHide ) {<br /> for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavContent' ) || $( NavChild ).hasClass( 'NavPic' ) ) {<br /> NavChild.style.display = 'none';<br /> }<br /> }<br /> NavToggle.firstChild.data = NavigationBarShow;<br /> <br /> /* if hidden now */<br /> } else if ( NavToggle.firstChild.data === NavigationBarShow ) {<br /> for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavContent' ) || $( NavChild ).hasClass( 'NavPic' ) ) {<br /> NavChild.style.display = 'block';<br /> }<br /> }<br /> NavToggle.firstChild.data = NavigationBarHide;<br /> }<br /> <br /> event.preventDefault();<br /> };<br /> <br /> /* adds show/hide-button to navigation bars */<br /> function createNavigationBarToggleButton( $content ) {<br /> var NavChild;<br /> /* iterate over all &lt; div &gt;-elements */<br /> var $divs = $content.find( 'div' );<br /> $divs.each( function ( i, NavFrame ) {<br /> /* if found a navigation bar */<br /> if ( $( NavFrame ).hasClass( 'NavFrame' ) ) {<br /> <br /> indexNavigationBar++;<br /> var NavToggle = document.createElement( 'a' );<br /> NavToggle.className = 'NavToggle';<br /> NavToggle.setAttribute( 'id', 'NavToggle' + indexNavigationBar );<br /> NavToggle.setAttribute( 'href', '#' );<br /> $( NavToggle ).on( 'click', $.proxy( window.toggleNavigationBar, window, indexNavigationBar ) );<br /> <br /> var isCollapsed = $( NavFrame ).hasClass( 'collapsed' );<br /> /**<br /> * Check if any children are already hidden. This loop is here for backwards compatibility:<br /> * the old way of making NavFrames start out collapsed was to manually add style=&quot;display:none&quot;<br /> * to all the NavPic/NavContent elements. Since this was bad for accessibility (no way to make<br /> * the content visible without JavaScript support), the new recommended way is to add the class<br /> * &quot;collapsed&quot; to the NavFrame itself, just like with collapsible tables.<br /> */<br /> for ( NavChild = NavFrame.firstChild; NavChild != null &amp;&amp; !isCollapsed; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavPic' ) || $( NavChild ).hasClass( 'NavContent' ) ) {<br /> if ( NavChild.style.display === 'none' ) {<br /> isCollapsed = true;<br /> }<br /> }<br /> }<br /> if ( isCollapsed ) {<br /> for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavPic' ) || $( NavChild ).hasClass( 'NavContent' ) ) {<br /> NavChild.style.display = 'none';<br /> }<br /> }<br /> }<br /> var NavToggleText = document.createTextNode( isCollapsed ? NavigationBarShow : NavigationBarHide );<br /> NavToggle.appendChild( NavToggleText );<br /> <br /> /* Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked) */<br /> for( var j = 0; j &lt; NavFrame.childNodes.length; j++ ) {<br /> if ( $( NavFrame.childNodes[j] ).hasClass( 'NavHead' ) ) {<br /> NavToggle.style.color = NavFrame.childNodes[j].style.color;<br /> NavFrame.childNodes[j].appendChild( NavToggle );<br /> }<br /> }<br /> NavFrame.setAttribute( 'id', 'NavFrame' + indexNavigationBar );<br /> }<br /> } );<br /> }<br /> <br /> mw.hook( 'wikipage.content' ).add( createNavigationBarToggleButton );<br /> <br /> /**<br /> * Uploadwizard_newusers<br /> * Switches in a message for non-autoconfirmed users at [[Wikipedia:Upload]]<br /> *<br /> * Maintainers: [[User:Krimpet]]<br /> */<br /> function uploadwizard_newusers() {<br /> if ( mw.config.get( 'wgNamespaceNumber' ) === 4 &amp;&amp; mw.config.get( 'wgTitle' ) === 'Upload' &amp;&amp; mw.config.get( 'wgAction' ) === 'view' ) {<br /> var oldDiv = document.getElementById( 'autoconfirmedusers' ),<br /> newDiv = document.getElementById( 'newusers' );<br /> if ( oldDiv &amp;&amp; newDiv ) {<br /> var userGroups = mw.config.get( 'wgUserGroups' );<br /> if ( userGroups ) {<br /> for ( var i = 0; i &lt; userGroups.length; i++ ) {<br /> if ( userGroups[i] === 'autoconfirmed' ) {<br /> oldDiv.style.display = 'block';<br /> newDiv.style.display = 'none';<br /> return;<br /> }<br /> }<br /> }<br /> oldDiv.style.display = 'none';<br /> newDiv.style.display = 'block';<br /> return;<br /> }<br /> }<br /> }<br /> <br /> $(uploadwizard_newusers);<br /> <br /> /**<br /> * Magic editintros ****************************************************<br /> *<br /> * Description: Adds editintros on disambiguation pages and BLP pages.<br /> * Maintainers: [[User:RockMFR]]<br /> */<br /> function addEditIntro( name ) {<br /> $( '.mw-editsection, #ca-edit' ).find( 'a' ).each( function ( i, el ) {<br /> el.href = $( this ).attr( 'href' ) + '&amp;editintro=' + name;<br /> } );<br /> }<br /> <br /> if ( mw.config.get( 'wgNamespaceNumber' ) === 0 ) {<br /> $( function () {<br /> if ( document.getElementById( 'disambigbox' ) ) {<br /> addEditIntro( 'Template:Disambig_editintro' );<br /> }<br /> } );<br /> <br /> $( function () {<br /> var cats = mw.config.get('wgCategories');<br /> if ( !cats ) {<br /> return;<br /> }<br /> if ( $.inArray( 'Living people', cats ) !== -1 || $.inArray( 'Possibly living people', cats ) !== -1 ) {<br /> addEditIntro( 'Template:BLP_editintro' );<br /> }<br /> } );<br /> }<br /> <br /> /* End of mw.loader.using callback */<br /> } );<br /> <br /> <br /> /* Define functions for showing/hiding language-specific text blocks */<br /> function hide_by_css_class(clzName) {<br /> document.getElementsByClassName(clzName)[0].style.visibility = 'hidden';<br /> }<br /> <br /> function show_by_css_class(clzName) {<br /> document.getElementsByClassName(clzName)[0].style.visibility = 'visible';<br /> }<br /> <br /> $(function() {<br /> var lang_sel_html = &quot;&lt;div&gt;&lt;div style=\&quot;display:inline;\&quot; onclick=\&quot;hide_by_css_class('lang_zh'); show_by_css_class('lang_en');\&quot;&gt;EN&lt;/div&gt; | &quot; +<br /> &quot;&lt;div style=\&quot;display:inline;\&quot; onclick=\&quot;hide_by_css_class('lang_en'); show_by_css_class('lang_zh');\&quot;&gt;ZH&lt;/div&gt; | &quot; +<br /> &quot;&lt;div style=\&quot;display:inline;\&quot; onclick=\&quot;show_by_css_class('lang_en'); show_by_css_class('lang_zh');\&quot;&gt;Both&lt;/div&gt;&quot;+<br /> &quot;&lt;/div&gt;&quot;;<br /> <br /> $('#lang_sel_enzh').html(lang_sel_html);<br /> });<br /> <br /> $(function() {<br /> var new_html = &quot;查找汉字(输入后回车):&lt;input type=\&quot;text\&quot; id=\&quot;hanzi_key\&quot; onchange=\&quot;last_spreadsheet.jumpToRow(0,this.value)\&quot;&gt;&lt;/input&gt;&quot;;<br /> <br /> $('#spreadsheet_search_hanzi_source').html(new_html);<br /> });</div> Admin https://langwiki.org/index.php?title=MediaWiki:Common.js&diff=3265 MediaWiki:Common.js 2020-01-03T01:58:30Z <p>Admin:</p> <hr /> <div>/* 这里的任何JavaScript将为所有用户在每次页面载入时加载。 */<br /> <br /> /**<br /> * Keep code in MediaWiki:Common.js to a minimum as it is unconditionally<br /> * loaded for all users on every wiki page. If possible create a gadget that is<br /> * enabled by default instead of adding it here (since gadgets are fully<br /> * optimized ResourceLoader modules with possibility to add dependencies etc.)<br /> *<br /> * Since Common.js isn't a gadget, there is no place to declare its<br /> * dependencies, so we have to lazy load them with mw.loader.using on demand and<br /> * then execute the rest in the callback. In most cases these dependencies will<br /> * be loaded (or loading) already and the callback will not be delayed. In case a<br /> * dependency hasn't arrived yet it'll make sure those are loaded before this.<br /> */<br /> <br /> /* global mw, $ */<br /> /* jshint strict:false, browser:true */<br /> <br /> mw.loader.using( ['mediawiki.user', 'mediawiki.util', 'mediawiki.notify', 'jquery.client'] ).done( function () {<br /> /* Begin of mw.loader.using callback */<br /> <br /> /**<br /> * Main Page layout fixes<br /> *<br /> * Description: Adds an additional link to the complete list of languages available.<br /> * Maintainers: [[User:AzaToth]], [[User:R. Koot]], [[User:Alex Smotrov]]<br /> */<br /> if ( mw.config.get( 'wgPageName' ) === 'Main_Page' || mw.config.get( 'wgPageName' ) === 'Talk:Main_Page' ) {<br /> $( function () {<br /> mw.util.addPortletLink( 'p-lang', '//meta.wikimedia.org/wiki/List_of_Wikipedias',<br /> 'Complete list', 'interwiki-completelist', 'Complete list of Wikipedias' );<br /> } );<br /> }<br /> <br /> /**<br /> * Redirect User:Name/skin.js and skin.css to the current skin's pages<br /> * (unless the 'skin' page really exists)<br /> * @source: http://www.mediawiki.org/wiki/Snippets/Redirect_skin.js<br /> * @rev: 2<br /> */<br /> if ( mw.config.get( 'wgArticleId' ) === 0 &amp;&amp; mw.config.get( 'wgNamespaceNumber' ) === 2 ) {<br /> var titleParts = mw.config.get( 'wgPageName' ).split( '/' );<br /> /* Make sure there was a part before and after the slash<br /> and that the latter is 'skin.js' or 'skin.css' */<br /> if ( titleParts.length == 2 ) {<br /> var userSkinPage = titleParts.shift() + '/' + mw.config.get( 'skin' );<br /> if ( titleParts.slice( -1 ) == 'skin.js' ) {<br /> window.location.href = mw.util.getUrl( userSkinPage + '.js' );<br /> } else if ( titleParts.slice( -1 ) == 'skin.css' ) {<br /> window.location.href = mw.util.getUrl( userSkinPage + '.css' );<br /> }<br /> }<br /> }<br /> <br /> /**<br /> * Map addPortletLink to mw.util<br /> * @deprecated: Use mw.util.addPortletLink instead.<br /> */<br /> mw.log.deprecate( window, 'addPortletLink', mw.util.addPortletLink, 'Use mw.util.addPortletLink instead' );<br /> <br /> /**<br /> * Extract a URL parameter from the current URL<br /> * @deprecated: Use mw.util.getParamValue with proper escaping<br /> */<br /> mw.log.deprecate( window, 'getURLParamValue', mw.util.getParamValue, 'Use mw.util.getParamValue instead' );<br /> <br /> /**<br /> * Test if an element has a certain class<br /> * @deprecated: Use $(element).hasClass() instead.<br /> */<br /> mw.log.deprecate( window, 'hasClass', function ( element, className ) {<br /> return $( element ).hasClass( className );<br /> }, 'Use jQuery.hasClass() instead' );<br /> <br /> /**<br /> * @source www.mediawiki.org/wiki/Snippets/Load_JS_and_CSS_by_URL<br /> * @rev 6<br /> */<br /> var extraCSS = mw.util.getParamValue( 'withCSS' ),<br /> extraJS = mw.util.getParamValue( 'withJS' );<br /> <br /> if ( extraCSS ) {<br /> if ( extraCSS.match( /^MediaWiki:[^&amp;&lt;&gt;=%#]*\.css$/ ) ) {<br /> mw.loader.load( '/w/index.php?title=' + extraCSS + '&amp;action=raw&amp;ctype=text/css', 'text/css' );<br /> } else {<br /> mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withCSS value' } );<br /> }<br /> }<br /> <br /> if ( extraJS ) {<br /> if ( extraJS.match( /^MediaWiki:[^&amp;&lt;&gt;=%#]*\.js$/ ) ) {<br /> mw.loader.load( '/w/index.php?title=' + extraJS + '&amp;action=raw&amp;ctype=text/javascript' );<br /> } else {<br /> mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withJS value' } );<br /> }<br /> }<br /> <br /> /**<br /> * WikiMiniAtlas<br /> *<br /> * Description: WikiMiniAtlas is a popup click and drag world map.<br /> * This script causes all of our coordinate links to display the WikiMiniAtlas popup button.<br /> * The script itself is located on meta because it is used by many projects.<br /> * See [[Meta:WikiMiniAtlas]] for more information.<br /> * Maintainers: [[User:Dschwen]]<br /> */<br /> ( function () {<br /> var require_wikiminiatlas = false;<br /> var coord_filter = /geohack/;<br /> $( function () {<br /> $( 'a.external.text' ).each( function( key, link ) {<br /> if ( link.href &amp;&amp; coord_filter.exec( link.href ) ) {<br /> require_wikiminiatlas = true;<br /> // break from loop<br /> return false;<br /> }<br /> } );<br /> if ( $( 'div.kmldata' ).length ) {<br /> require_wikiminiatlas = true;<br /> }<br /> if ( require_wikiminiatlas ) {<br /> mw.loader.load( '//meta.wikimedia.org/w/index.php?title=MediaWiki:Wikiminiatlas.js&amp;action=raw&amp;ctype=text/javascript' );<br /> }<br /> } );<br /> } )();<br /> <br /> /**<br /> * Collapsible tables<br /> *<br /> * Allows tables to be collapsed, showing only the header. See [[Help:Collapsing]].<br /> *<br /> * @version 2.0.3 (2014-03-14)<br /> * @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-collapsibleTables.js<br /> * @author [[User:R. Koot]]<br /> * @author [[User:Krinkle]]<br /> * @deprecated Since MediaWiki 1.20: Use class=&quot;mw-collapsible&quot; instead which<br /> * is supported in MediaWiki core.<br /> */<br /> <br /> var autoCollapse = 2;<br /> var collapseCaption = 'hide';<br /> var expandCaption = 'show';<br /> var tableIndex = 0;<br /> <br /> function collapseTable( tableIndex ) {<br /> var Button = document.getElementById( 'collapseButton' + tableIndex );<br /> var Table = document.getElementById( 'collapsibleTable' + tableIndex );<br /> <br /> if ( !Table || !Button ) {<br /> return false;<br /> }<br /> <br /> var Rows = Table.rows;<br /> var i;<br /> var $row0 = $(Rows[0]);<br /> <br /> if ( Button.firstChild.data === collapseCaption ) {<br /> for ( i = 1; i &lt; Rows.length; i++ ) {<br /> Rows[i].style.display = 'none';<br /> }<br /> Button.firstChild.data = expandCaption;<br /> } else {<br /> for ( i = 1; i &lt; Rows.length; i++ ) {<br /> Rows[i].style.display = $row0.css( 'display' );<br /> }<br /> Button.firstChild.data = collapseCaption;<br /> }<br /> }<br /> <br /> function createClickHandler( tableIndex ) {<br /> return function ( e ) {<br /> e.preventDefault();<br /> collapseTable( tableIndex );<br /> };<br /> }<br /> <br /> function createCollapseButtons( $content ) {<br /> var NavigationBoxes = {};<br /> var $Tables = $content.find( 'table' );<br /> var i;<br /> <br /> $Tables.each( function( i, table ) {<br /> if ( $(table).hasClass( 'collapsible' ) ) {<br /> <br /> /* only add button and increment count if there is a header row to work with */<br /> var HeaderRow = table.getElementsByTagName( 'tr' )[0];<br /> if ( !HeaderRow ) {<br /> return;<br /> }<br /> var Header = table.getElementsByTagName( 'th' )[0];<br /> if ( !Header ) {<br /> return;<br /> }<br /> <br /> NavigationBoxes[ tableIndex ] = table;<br /> table.setAttribute( 'id', 'collapsibleTable' + tableIndex );<br /> <br /> var Button = document.createElement( 'span' );<br /> var ButtonLink = document.createElement( 'a' );<br /> var ButtonText = document.createTextNode( collapseCaption );<br /> // Styles are declared in [[MediaWiki:Common.css]]<br /> Button.className = 'collapseButton';<br /> <br /> ButtonLink.style.color = Header.style.color;<br /> ButtonLink.setAttribute( 'id', 'collapseButton' + tableIndex );<br /> ButtonLink.setAttribute( 'href', '#' );<br /> $( ButtonLink ).on( 'click', createClickHandler( tableIndex ) );<br /> ButtonLink.appendChild( ButtonText );<br /> <br /> Button.appendChild( document.createTextNode( '[' ) );<br /> Button.appendChild( ButtonLink );<br /> Button.appendChild( document.createTextNode( ']' ) );<br /> <br /> Header.insertBefore( Button, Header.firstChild );<br /> tableIndex++;<br /> }<br /> } );<br /> <br /> for ( i = 0; i &lt; tableIndex; i++ ) {<br /> if ( $( NavigationBoxes[i] ).hasClass( 'collapsed' ) ||<br /> ( tableIndex &gt;= autoCollapse &amp;&amp; $( NavigationBoxes[i] ).hasClass( 'autocollapse' ) )<br /> ) {<br /> collapseTable( i );<br /> }<br /> else if ( $( NavigationBoxes[i] ).hasClass ( 'innercollapse' ) ) {<br /> var element = NavigationBoxes[i];<br /> while ((element = element.parentNode)) {<br /> if ( $( element ).hasClass( 'outercollapse' ) ) {<br /> collapseTable ( i );<br /> break;<br /> }<br /> }<br /> }<br /> }<br /> }<br /> <br /> mw.hook( 'wikipage.content' ).add( createCollapseButtons );<br /> <br /> /**<br /> * Add support to mw-collapsible for autocollapse, innercollapse and outercollapse<br /> *<br /> * Maintainers: TheDJ<br /> */<br /> function mwCollapsibleSetup( $collapsibleContent ) {<br /> var $element,<br /> autoCollapseThreshold = 2;<br /> $.each( $collapsibleContent, function (index, element) {<br /> $element = $( element );<br /> if ( index &gt; autoCollapseThreshold &amp;&amp; $element.hasClass( 'autocollapse' ) ) {<br /> $element.data( 'mw-collapsible' ).collapse();<br /> } else if ( $element.hasClass( 'innercollapse' ) ) {<br /> if ( $element.parents( '.outercollapse' ).length &gt; 0 ) {<br /> $element.data( 'mw-collapsible' ).collapse();<br /> }<br /> }<br /> } );<br /> }<br /> <br /> mw.hook( 'wikipage.collapsibleContent' ).add( mwCollapsibleSetup );<br /> <br /> /**<br /> * Dynamic Navigation Bars (experimental)<br /> *<br /> * Description: See [[Wikipedia:NavFrame]].<br /> * Maintainers: UNMAINTAINED<br /> */<br /> <br /> /* set up the words in your language */<br /> var NavigationBarHide = '[' + collapseCaption + ']';<br /> var NavigationBarShow = '[' + expandCaption + ']';<br /> var indexNavigationBar = 0;<br /> <br /> /**<br /> * Shows and hides content and picture (if available) of navigation bars<br /> * Parameters:<br /> * indexNavigationBar: the index of navigation bar to be toggled<br /> **/<br /> window.toggleNavigationBar = function ( indexNavigationBar, event ) {<br /> var NavToggle = document.getElementById( 'NavToggle' + indexNavigationBar );<br /> var NavFrame = document.getElementById( 'NavFrame' + indexNavigationBar );<br /> var NavChild;<br /> <br /> if ( !NavFrame || !NavToggle ) {<br /> return false;<br /> }<br /> <br /> /* if shown now */<br /> if ( NavToggle.firstChild.data === NavigationBarHide ) {<br /> for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavContent' ) || $( NavChild ).hasClass( 'NavPic' ) ) {<br /> NavChild.style.display = 'none';<br /> }<br /> }<br /> NavToggle.firstChild.data = NavigationBarShow;<br /> <br /> /* if hidden now */<br /> } else if ( NavToggle.firstChild.data === NavigationBarShow ) {<br /> for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavContent' ) || $( NavChild ).hasClass( 'NavPic' ) ) {<br /> NavChild.style.display = 'block';<br /> }<br /> }<br /> NavToggle.firstChild.data = NavigationBarHide;<br /> }<br /> <br /> event.preventDefault();<br /> };<br /> <br /> /* adds show/hide-button to navigation bars */<br /> function createNavigationBarToggleButton( $content ) {<br /> var NavChild;<br /> /* iterate over all &lt; div &gt;-elements */<br /> var $divs = $content.find( 'div' );<br /> $divs.each( function ( i, NavFrame ) {<br /> /* if found a navigation bar */<br /> if ( $( NavFrame ).hasClass( 'NavFrame' ) ) {<br /> <br /> indexNavigationBar++;<br /> var NavToggle = document.createElement( 'a' );<br /> NavToggle.className = 'NavToggle';<br /> NavToggle.setAttribute( 'id', 'NavToggle' + indexNavigationBar );<br /> NavToggle.setAttribute( 'href', '#' );<br /> $( NavToggle ).on( 'click', $.proxy( window.toggleNavigationBar, window, indexNavigationBar ) );<br /> <br /> var isCollapsed = $( NavFrame ).hasClass( 'collapsed' );<br /> /**<br /> * Check if any children are already hidden. This loop is here for backwards compatibility:<br /> * the old way of making NavFrames start out collapsed was to manually add style=&quot;display:none&quot;<br /> * to all the NavPic/NavContent elements. Since this was bad for accessibility (no way to make<br /> * the content visible without JavaScript support), the new recommended way is to add the class<br /> * &quot;collapsed&quot; to the NavFrame itself, just like with collapsible tables.<br /> */<br /> for ( NavChild = NavFrame.firstChild; NavChild != null &amp;&amp; !isCollapsed; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavPic' ) || $( NavChild ).hasClass( 'NavContent' ) ) {<br /> if ( NavChild.style.display === 'none' ) {<br /> isCollapsed = true;<br /> }<br /> }<br /> }<br /> if ( isCollapsed ) {<br /> for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavPic' ) || $( NavChild ).hasClass( 'NavContent' ) ) {<br /> NavChild.style.display = 'none';<br /> }<br /> }<br /> }<br /> var NavToggleText = document.createTextNode( isCollapsed ? NavigationBarShow : NavigationBarHide );<br /> NavToggle.appendChild( NavToggleText );<br /> <br /> /* Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked) */<br /> for( var j = 0; j &lt; NavFrame.childNodes.length; j++ ) {<br /> if ( $( NavFrame.childNodes[j] ).hasClass( 'NavHead' ) ) {<br /> NavToggle.style.color = NavFrame.childNodes[j].style.color;<br /> NavFrame.childNodes[j].appendChild( NavToggle );<br /> }<br /> }<br /> NavFrame.setAttribute( 'id', 'NavFrame' + indexNavigationBar );<br /> }<br /> } );<br /> }<br /> <br /> mw.hook( 'wikipage.content' ).add( createNavigationBarToggleButton );<br /> <br /> /**<br /> * Uploadwizard_newusers<br /> * Switches in a message for non-autoconfirmed users at [[Wikipedia:Upload]]<br /> *<br /> * Maintainers: [[User:Krimpet]]<br /> */<br /> function uploadwizard_newusers() {<br /> if ( mw.config.get( 'wgNamespaceNumber' ) === 4 &amp;&amp; mw.config.get( 'wgTitle' ) === 'Upload' &amp;&amp; mw.config.get( 'wgAction' ) === 'view' ) {<br /> var oldDiv = document.getElementById( 'autoconfirmedusers' ),<br /> newDiv = document.getElementById( 'newusers' );<br /> if ( oldDiv &amp;&amp; newDiv ) {<br /> var userGroups = mw.config.get( 'wgUserGroups' );<br /> if ( userGroups ) {<br /> for ( var i = 0; i &lt; userGroups.length; i++ ) {<br /> if ( userGroups[i] === 'autoconfirmed' ) {<br /> oldDiv.style.display = 'block';<br /> newDiv.style.display = 'none';<br /> return;<br /> }<br /> }<br /> }<br /> oldDiv.style.display = 'none';<br /> newDiv.style.display = 'block';<br /> return;<br /> }<br /> }<br /> }<br /> <br /> $(uploadwizard_newusers);<br /> <br /> /**<br /> * Magic editintros ****************************************************<br /> *<br /> * Description: Adds editintros on disambiguation pages and BLP pages.<br /> * Maintainers: [[User:RockMFR]]<br /> */<br /> function addEditIntro( name ) {<br /> $( '.mw-editsection, #ca-edit' ).find( 'a' ).each( function ( i, el ) {<br /> el.href = $( this ).attr( 'href' ) + '&amp;editintro=' + name;<br /> } );<br /> }<br /> <br /> if ( mw.config.get( 'wgNamespaceNumber' ) === 0 ) {<br /> $( function () {<br /> if ( document.getElementById( 'disambigbox' ) ) {<br /> addEditIntro( 'Template:Disambig_editintro' );<br /> }<br /> } );<br /> <br /> $( function () {<br /> var cats = mw.config.get('wgCategories');<br /> if ( !cats ) {<br /> return;<br /> }<br /> if ( $.inArray( 'Living people', cats ) !== -1 || $.inArray( 'Possibly living people', cats ) !== -1 ) {<br /> addEditIntro( 'Template:BLP_editintro' );<br /> }<br /> } );<br /> }<br /> <br /> /* End of mw.loader.using callback */<br /> } );<br /> <br /> <br /> /* Define functions for showing/hiding language-specific text blocks */<br /> function hide_by_css_class(clzName) {<br /> document.getElementsByClassName(clzName)[0].style.visibility = 'hidden';<br /> }<br /> <br /> function show_by_css_class(clzName) {<br /> document.getElementsByClassName(clzName)[0].style.visibility = 'visible';<br /> }<br /> <br /> $(function() {<br /> var lang_sel_html = &quot;&lt;div&gt;&lt;div style=\&quot;display:inline;\&quot; onclick=\&quot;hide_by_css_class('lang_zh'); show_by_css_class('lang_en');\&quot;&gt;EN&lt;/div&gt; | &quot; +<br /> &quot;&lt;div style=\&quot;display:inline;\&quot; onclick=\&quot;hide_by_css_class('lang_en'); show_by_css_class('lang_zh');\&quot;&gt;ZH&lt;/div&gt; | &quot; +<br /> &quot;&lt;div style=\&quot;display:inline;\&quot; onclick=\&quot;show_by_css_class('lang_en'); show_by_css_class('lang_zh');\&quot;&gt;Both&lt;/div&gt;&quot;+<br /> &quot;&lt;/div&gt;&quot;;<br /> <br /> $('#lang_sel_enzh').html(lang_sel_html);<br /> });<br /> <br /> $(function() {<br /> var new_html = &quot;查找汉字(输入后回车):&lt;input type=\&quot;text\&quot; name=\&quot;hanzi\&quot; onchange=\&quot;alert('value of name field is changed')\&quot;&gt;&lt;/input&gt;&quot;;<br /> <br /> $('#spreadsheet_search_hanzi_source').html(new_html);<br /> });</div> Admin https://langwiki.org/index.php?title=MediaWiki:Common.js&diff=3264 MediaWiki:Common.js 2020-01-03T01:57:23Z <p>Admin:</p> <hr /> <div>/* 这里的任何JavaScript将为所有用户在每次页面载入时加载。 */<br /> <br /> /**<br /> * Keep code in MediaWiki:Common.js to a minimum as it is unconditionally<br /> * loaded for all users on every wiki page. If possible create a gadget that is<br /> * enabled by default instead of adding it here (since gadgets are fully<br /> * optimized ResourceLoader modules with possibility to add dependencies etc.)<br /> *<br /> * Since Common.js isn't a gadget, there is no place to declare its<br /> * dependencies, so we have to lazy load them with mw.loader.using on demand and<br /> * then execute the rest in the callback. In most cases these dependencies will<br /> * be loaded (or loading) already and the callback will not be delayed. In case a<br /> * dependency hasn't arrived yet it'll make sure those are loaded before this.<br /> */<br /> <br /> /* global mw, $ */<br /> /* jshint strict:false, browser:true */<br /> <br /> mw.loader.using( ['mediawiki.user', 'mediawiki.util', 'mediawiki.notify', 'jquery.client'] ).done( function () {<br /> /* Begin of mw.loader.using callback */<br /> <br /> /**<br /> * Main Page layout fixes<br /> *<br /> * Description: Adds an additional link to the complete list of languages available.<br /> * Maintainers: [[User:AzaToth]], [[User:R. Koot]], [[User:Alex Smotrov]]<br /> */<br /> if ( mw.config.get( 'wgPageName' ) === 'Main_Page' || mw.config.get( 'wgPageName' ) === 'Talk:Main_Page' ) {<br /> $( function () {<br /> mw.util.addPortletLink( 'p-lang', '//meta.wikimedia.org/wiki/List_of_Wikipedias',<br /> 'Complete list', 'interwiki-completelist', 'Complete list of Wikipedias' );<br /> } );<br /> }<br /> <br /> /**<br /> * Redirect User:Name/skin.js and skin.css to the current skin's pages<br /> * (unless the 'skin' page really exists)<br /> * @source: http://www.mediawiki.org/wiki/Snippets/Redirect_skin.js<br /> * @rev: 2<br /> */<br /> if ( mw.config.get( 'wgArticleId' ) === 0 &amp;&amp; mw.config.get( 'wgNamespaceNumber' ) === 2 ) {<br /> var titleParts = mw.config.get( 'wgPageName' ).split( '/' );<br /> /* Make sure there was a part before and after the slash<br /> and that the latter is 'skin.js' or 'skin.css' */<br /> if ( titleParts.length == 2 ) {<br /> var userSkinPage = titleParts.shift() + '/' + mw.config.get( 'skin' );<br /> if ( titleParts.slice( -1 ) == 'skin.js' ) {<br /> window.location.href = mw.util.getUrl( userSkinPage + '.js' );<br /> } else if ( titleParts.slice( -1 ) == 'skin.css' ) {<br /> window.location.href = mw.util.getUrl( userSkinPage + '.css' );<br /> }<br /> }<br /> }<br /> <br /> /**<br /> * Map addPortletLink to mw.util<br /> * @deprecated: Use mw.util.addPortletLink instead.<br /> */<br /> mw.log.deprecate( window, 'addPortletLink', mw.util.addPortletLink, 'Use mw.util.addPortletLink instead' );<br /> <br /> /**<br /> * Extract a URL parameter from the current URL<br /> * @deprecated: Use mw.util.getParamValue with proper escaping<br /> */<br /> mw.log.deprecate( window, 'getURLParamValue', mw.util.getParamValue, 'Use mw.util.getParamValue instead' );<br /> <br /> /**<br /> * Test if an element has a certain class<br /> * @deprecated: Use $(element).hasClass() instead.<br /> */<br /> mw.log.deprecate( window, 'hasClass', function ( element, className ) {<br /> return $( element ).hasClass( className );<br /> }, 'Use jQuery.hasClass() instead' );<br /> <br /> /**<br /> * @source www.mediawiki.org/wiki/Snippets/Load_JS_and_CSS_by_URL<br /> * @rev 6<br /> */<br /> var extraCSS = mw.util.getParamValue( 'withCSS' ),<br /> extraJS = mw.util.getParamValue( 'withJS' );<br /> <br /> if ( extraCSS ) {<br /> if ( extraCSS.match( /^MediaWiki:[^&amp;&lt;&gt;=%#]*\.css$/ ) ) {<br /> mw.loader.load( '/w/index.php?title=' + extraCSS + '&amp;action=raw&amp;ctype=text/css', 'text/css' );<br /> } else {<br /> mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withCSS value' } );<br /> }<br /> }<br /> <br /> if ( extraJS ) {<br /> if ( extraJS.match( /^MediaWiki:[^&amp;&lt;&gt;=%#]*\.js$/ ) ) {<br /> mw.loader.load( '/w/index.php?title=' + extraJS + '&amp;action=raw&amp;ctype=text/javascript' );<br /> } else {<br /> mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withJS value' } );<br /> }<br /> }<br /> <br /> /**<br /> * WikiMiniAtlas<br /> *<br /> * Description: WikiMiniAtlas is a popup click and drag world map.<br /> * This script causes all of our coordinate links to display the WikiMiniAtlas popup button.<br /> * The script itself is located on meta because it is used by many projects.<br /> * See [[Meta:WikiMiniAtlas]] for more information.<br /> * Maintainers: [[User:Dschwen]]<br /> */<br /> ( function () {<br /> var require_wikiminiatlas = false;<br /> var coord_filter = /geohack/;<br /> $( function () {<br /> $( 'a.external.text' ).each( function( key, link ) {<br /> if ( link.href &amp;&amp; coord_filter.exec( link.href ) ) {<br /> require_wikiminiatlas = true;<br /> // break from loop<br /> return false;<br /> }<br /> } );<br /> if ( $( 'div.kmldata' ).length ) {<br /> require_wikiminiatlas = true;<br /> }<br /> if ( require_wikiminiatlas ) {<br /> mw.loader.load( '//meta.wikimedia.org/w/index.php?title=MediaWiki:Wikiminiatlas.js&amp;action=raw&amp;ctype=text/javascript' );<br /> }<br /> } );<br /> } )();<br /> <br /> /**<br /> * Collapsible tables<br /> *<br /> * Allows tables to be collapsed, showing only the header. See [[Help:Collapsing]].<br /> *<br /> * @version 2.0.3 (2014-03-14)<br /> * @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-collapsibleTables.js<br /> * @author [[User:R. Koot]]<br /> * @author [[User:Krinkle]]<br /> * @deprecated Since MediaWiki 1.20: Use class=&quot;mw-collapsible&quot; instead which<br /> * is supported in MediaWiki core.<br /> */<br /> <br /> var autoCollapse = 2;<br /> var collapseCaption = 'hide';<br /> var expandCaption = 'show';<br /> var tableIndex = 0;<br /> <br /> function collapseTable( tableIndex ) {<br /> var Button = document.getElementById( 'collapseButton' + tableIndex );<br /> var Table = document.getElementById( 'collapsibleTable' + tableIndex );<br /> <br /> if ( !Table || !Button ) {<br /> return false;<br /> }<br /> <br /> var Rows = Table.rows;<br /> var i;<br /> var $row0 = $(Rows[0]);<br /> <br /> if ( Button.firstChild.data === collapseCaption ) {<br /> for ( i = 1; i &lt; Rows.length; i++ ) {<br /> Rows[i].style.display = 'none';<br /> }<br /> Button.firstChild.data = expandCaption;<br /> } else {<br /> for ( i = 1; i &lt; Rows.length; i++ ) {<br /> Rows[i].style.display = $row0.css( 'display' );<br /> }<br /> Button.firstChild.data = collapseCaption;<br /> }<br /> }<br /> <br /> function createClickHandler( tableIndex ) {<br /> return function ( e ) {<br /> e.preventDefault();<br /> collapseTable( tableIndex );<br /> };<br /> }<br /> <br /> function createCollapseButtons( $content ) {<br /> var NavigationBoxes = {};<br /> var $Tables = $content.find( 'table' );<br /> var i;<br /> <br /> $Tables.each( function( i, table ) {<br /> if ( $(table).hasClass( 'collapsible' ) ) {<br /> <br /> /* only add button and increment count if there is a header row to work with */<br /> var HeaderRow = table.getElementsByTagName( 'tr' )[0];<br /> if ( !HeaderRow ) {<br /> return;<br /> }<br /> var Header = table.getElementsByTagName( 'th' )[0];<br /> if ( !Header ) {<br /> return;<br /> }<br /> <br /> NavigationBoxes[ tableIndex ] = table;<br /> table.setAttribute( 'id', 'collapsibleTable' + tableIndex );<br /> <br /> var Button = document.createElement( 'span' );<br /> var ButtonLink = document.createElement( 'a' );<br /> var ButtonText = document.createTextNode( collapseCaption );<br /> // Styles are declared in [[MediaWiki:Common.css]]<br /> Button.className = 'collapseButton';<br /> <br /> ButtonLink.style.color = Header.style.color;<br /> ButtonLink.setAttribute( 'id', 'collapseButton' + tableIndex );<br /> ButtonLink.setAttribute( 'href', '#' );<br /> $( ButtonLink ).on( 'click', createClickHandler( tableIndex ) );<br /> ButtonLink.appendChild( ButtonText );<br /> <br /> Button.appendChild( document.createTextNode( '[' ) );<br /> Button.appendChild( ButtonLink );<br /> Button.appendChild( document.createTextNode( ']' ) );<br /> <br /> Header.insertBefore( Button, Header.firstChild );<br /> tableIndex++;<br /> }<br /> } );<br /> <br /> for ( i = 0; i &lt; tableIndex; i++ ) {<br /> if ( $( NavigationBoxes[i] ).hasClass( 'collapsed' ) ||<br /> ( tableIndex &gt;= autoCollapse &amp;&amp; $( NavigationBoxes[i] ).hasClass( 'autocollapse' ) )<br /> ) {<br /> collapseTable( i );<br /> }<br /> else if ( $( NavigationBoxes[i] ).hasClass ( 'innercollapse' ) ) {<br /> var element = NavigationBoxes[i];<br /> while ((element = element.parentNode)) {<br /> if ( $( element ).hasClass( 'outercollapse' ) ) {<br /> collapseTable ( i );<br /> break;<br /> }<br /> }<br /> }<br /> }<br /> }<br /> <br /> mw.hook( 'wikipage.content' ).add( createCollapseButtons );<br /> <br /> /**<br /> * Add support to mw-collapsible for autocollapse, innercollapse and outercollapse<br /> *<br /> * Maintainers: TheDJ<br /> */<br /> function mwCollapsibleSetup( $collapsibleContent ) {<br /> var $element,<br /> autoCollapseThreshold = 2;<br /> $.each( $collapsibleContent, function (index, element) {<br /> $element = $( element );<br /> if ( index &gt; autoCollapseThreshold &amp;&amp; $element.hasClass( 'autocollapse' ) ) {<br /> $element.data( 'mw-collapsible' ).collapse();<br /> } else if ( $element.hasClass( 'innercollapse' ) ) {<br /> if ( $element.parents( '.outercollapse' ).length &gt; 0 ) {<br /> $element.data( 'mw-collapsible' ).collapse();<br /> }<br /> }<br /> } );<br /> }<br /> <br /> mw.hook( 'wikipage.collapsibleContent' ).add( mwCollapsibleSetup );<br /> <br /> /**<br /> * Dynamic Navigation Bars (experimental)<br /> *<br /> * Description: See [[Wikipedia:NavFrame]].<br /> * Maintainers: UNMAINTAINED<br /> */<br /> <br /> /* set up the words in your language */<br /> var NavigationBarHide = '[' + collapseCaption + ']';<br /> var NavigationBarShow = '[' + expandCaption + ']';<br /> var indexNavigationBar = 0;<br /> <br /> /**<br /> * Shows and hides content and picture (if available) of navigation bars<br /> * Parameters:<br /> * indexNavigationBar: the index of navigation bar to be toggled<br /> **/<br /> window.toggleNavigationBar = function ( indexNavigationBar, event ) {<br /> var NavToggle = document.getElementById( 'NavToggle' + indexNavigationBar );<br /> var NavFrame = document.getElementById( 'NavFrame' + indexNavigationBar );<br /> var NavChild;<br /> <br /> if ( !NavFrame || !NavToggle ) {<br /> return false;<br /> }<br /> <br /> /* if shown now */<br /> if ( NavToggle.firstChild.data === NavigationBarHide ) {<br /> for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavContent' ) || $( NavChild ).hasClass( 'NavPic' ) ) {<br /> NavChild.style.display = 'none';<br /> }<br /> }<br /> NavToggle.firstChild.data = NavigationBarShow;<br /> <br /> /* if hidden now */<br /> } else if ( NavToggle.firstChild.data === NavigationBarShow ) {<br /> for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavContent' ) || $( NavChild ).hasClass( 'NavPic' ) ) {<br /> NavChild.style.display = 'block';<br /> }<br /> }<br /> NavToggle.firstChild.data = NavigationBarHide;<br /> }<br /> <br /> event.preventDefault();<br /> };<br /> <br /> /* adds show/hide-button to navigation bars */<br /> function createNavigationBarToggleButton( $content ) {<br /> var NavChild;<br /> /* iterate over all &lt; div &gt;-elements */<br /> var $divs = $content.find( 'div' );<br /> $divs.each( function ( i, NavFrame ) {<br /> /* if found a navigation bar */<br /> if ( $( NavFrame ).hasClass( 'NavFrame' ) ) {<br /> <br /> indexNavigationBar++;<br /> var NavToggle = document.createElement( 'a' );<br /> NavToggle.className = 'NavToggle';<br /> NavToggle.setAttribute( 'id', 'NavToggle' + indexNavigationBar );<br /> NavToggle.setAttribute( 'href', '#' );<br /> $( NavToggle ).on( 'click', $.proxy( window.toggleNavigationBar, window, indexNavigationBar ) );<br /> <br /> var isCollapsed = $( NavFrame ).hasClass( 'collapsed' );<br /> /**<br /> * Check if any children are already hidden. This loop is here for backwards compatibility:<br /> * the old way of making NavFrames start out collapsed was to manually add style=&quot;display:none&quot;<br /> * to all the NavPic/NavContent elements. Since this was bad for accessibility (no way to make<br /> * the content visible without JavaScript support), the new recommended way is to add the class<br /> * &quot;collapsed&quot; to the NavFrame itself, just like with collapsible tables.<br /> */<br /> for ( NavChild = NavFrame.firstChild; NavChild != null &amp;&amp; !isCollapsed; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavPic' ) || $( NavChild ).hasClass( 'NavContent' ) ) {<br /> if ( NavChild.style.display === 'none' ) {<br /> isCollapsed = true;<br /> }<br /> }<br /> }<br /> if ( isCollapsed ) {<br /> for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavPic' ) || $( NavChild ).hasClass( 'NavContent' ) ) {<br /> NavChild.style.display = 'none';<br /> }<br /> }<br /> }<br /> var NavToggleText = document.createTextNode( isCollapsed ? NavigationBarShow : NavigationBarHide );<br /> NavToggle.appendChild( NavToggleText );<br /> <br /> /* Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked) */<br /> for( var j = 0; j &lt; NavFrame.childNodes.length; j++ ) {<br /> if ( $( NavFrame.childNodes[j] ).hasClass( 'NavHead' ) ) {<br /> NavToggle.style.color = NavFrame.childNodes[j].style.color;<br /> NavFrame.childNodes[j].appendChild( NavToggle );<br /> }<br /> }<br /> NavFrame.setAttribute( 'id', 'NavFrame' + indexNavigationBar );<br /> }<br /> } );<br /> }<br /> <br /> mw.hook( 'wikipage.content' ).add( createNavigationBarToggleButton );<br /> <br /> /**<br /> * Uploadwizard_newusers<br /> * Switches in a message for non-autoconfirmed users at [[Wikipedia:Upload]]<br /> *<br /> * Maintainers: [[User:Krimpet]]<br /> */<br /> function uploadwizard_newusers() {<br /> if ( mw.config.get( 'wgNamespaceNumber' ) === 4 &amp;&amp; mw.config.get( 'wgTitle' ) === 'Upload' &amp;&amp; mw.config.get( 'wgAction' ) === 'view' ) {<br /> var oldDiv = document.getElementById( 'autoconfirmedusers' ),<br /> newDiv = document.getElementById( 'newusers' );<br /> if ( oldDiv &amp;&amp; newDiv ) {<br /> var userGroups = mw.config.get( 'wgUserGroups' );<br /> if ( userGroups ) {<br /> for ( var i = 0; i &lt; userGroups.length; i++ ) {<br /> if ( userGroups[i] === 'autoconfirmed' ) {<br /> oldDiv.style.display = 'block';<br /> newDiv.style.display = 'none';<br /> return;<br /> }<br /> }<br /> }<br /> oldDiv.style.display = 'none';<br /> newDiv.style.display = 'block';<br /> return;<br /> }<br /> }<br /> }<br /> <br /> $(uploadwizard_newusers);<br /> <br /> /**<br /> * Magic editintros ****************************************************<br /> *<br /> * Description: Adds editintros on disambiguation pages and BLP pages.<br /> * Maintainers: [[User:RockMFR]]<br /> */<br /> function addEditIntro( name ) {<br /> $( '.mw-editsection, #ca-edit' ).find( 'a' ).each( function ( i, el ) {<br /> el.href = $( this ).attr( 'href' ) + '&amp;editintro=' + name;<br /> } );<br /> }<br /> <br /> if ( mw.config.get( 'wgNamespaceNumber' ) === 0 ) {<br /> $( function () {<br /> if ( document.getElementById( 'disambigbox' ) ) {<br /> addEditIntro( 'Template:Disambig_editintro' );<br /> }<br /> } );<br /> <br /> $( function () {<br /> var cats = mw.config.get('wgCategories');<br /> if ( !cats ) {<br /> return;<br /> }<br /> if ( $.inArray( 'Living people', cats ) !== -1 || $.inArray( 'Possibly living people', cats ) !== -1 ) {<br /> addEditIntro( 'Template:BLP_editintro' );<br /> }<br /> } );<br /> }<br /> <br /> /* End of mw.loader.using callback */<br /> } );<br /> <br /> <br /> /* Define functions for showing/hiding language-specific text blocks */<br /> function hide_by_css_class(clzName) {<br /> document.getElementsByClassName(clzName)[0].style.visibility = 'hidden';<br /> }<br /> <br /> function show_by_css_class(clzName) {<br /> document.getElementsByClassName(clzName)[0].style.visibility = 'visible';<br /> }<br /> <br /> $(function() {<br /> var lang_sel_html = &quot;&lt;div&gt;&lt;div style=\&quot;display:inline;\&quot; onclick=\&quot;hide_by_css_class('lang_zh'); show_by_css_class('lang_en');\&quot;&gt;EN&lt;/div&gt; | &quot; +<br /> &quot;&lt;div style=\&quot;display:inline;\&quot; onclick=\&quot;hide_by_css_class('lang_en'); show_by_css_class('lang_zh');\&quot;&gt;ZH&lt;/div&gt; | &quot; +<br /> &quot;&lt;div style=\&quot;display:inline;\&quot; onclick=\&quot;show_by_css_class('lang_en'); show_by_css_class('lang_zh');\&quot;&gt;Both&lt;/div&gt;&quot;+<br /> &quot;&lt;/div&gt;&quot;;<br /> <br /> $('#lang_sel_enzh').html(lang_sel_html);<br /> });<br /> <br /> $(function() {<br /> var new_html = &quot;&lt;input type=\&quot;text\&quot; name=\&quot;hanzi\&quot; onchange=\&quot;alert('value of name field is changed')\&quot;&gt;&lt;/input&gt;&quot;;<br /> <br /> $('#spreadsheet_search_hanzi_source').html(new_html);<br /> });</div> Admin https://langwiki.org/index.php?title=MediaWiki:Common.js&diff=3263 MediaWiki:Common.js 2020-01-03T01:56:32Z <p>Admin:</p> <hr /> <div>/* 这里的任何JavaScript将为所有用户在每次页面载入时加载。 */<br /> <br /> /**<br /> * Keep code in MediaWiki:Common.js to a minimum as it is unconditionally<br /> * loaded for all users on every wiki page. If possible create a gadget that is<br /> * enabled by default instead of adding it here (since gadgets are fully<br /> * optimized ResourceLoader modules with possibility to add dependencies etc.)<br /> *<br /> * Since Common.js isn't a gadget, there is no place to declare its<br /> * dependencies, so we have to lazy load them with mw.loader.using on demand and<br /> * then execute the rest in the callback. In most cases these dependencies will<br /> * be loaded (or loading) already and the callback will not be delayed. In case a<br /> * dependency hasn't arrived yet it'll make sure those are loaded before this.<br /> */<br /> <br /> /* global mw, $ */<br /> /* jshint strict:false, browser:true */<br /> <br /> mw.loader.using( ['mediawiki.user', 'mediawiki.util', 'mediawiki.notify', 'jquery.client'] ).done( function () {<br /> /* Begin of mw.loader.using callback */<br /> <br /> /**<br /> * Main Page layout fixes<br /> *<br /> * Description: Adds an additional link to the complete list of languages available.<br /> * Maintainers: [[User:AzaToth]], [[User:R. Koot]], [[User:Alex Smotrov]]<br /> */<br /> if ( mw.config.get( 'wgPageName' ) === 'Main_Page' || mw.config.get( 'wgPageName' ) === 'Talk:Main_Page' ) {<br /> $( function () {<br /> mw.util.addPortletLink( 'p-lang', '//meta.wikimedia.org/wiki/List_of_Wikipedias',<br /> 'Complete list', 'interwiki-completelist', 'Complete list of Wikipedias' );<br /> } );<br /> }<br /> <br /> /**<br /> * Redirect User:Name/skin.js and skin.css to the current skin's pages<br /> * (unless the 'skin' page really exists)<br /> * @source: http://www.mediawiki.org/wiki/Snippets/Redirect_skin.js<br /> * @rev: 2<br /> */<br /> if ( mw.config.get( 'wgArticleId' ) === 0 &amp;&amp; mw.config.get( 'wgNamespaceNumber' ) === 2 ) {<br /> var titleParts = mw.config.get( 'wgPageName' ).split( '/' );<br /> /* Make sure there was a part before and after the slash<br /> and that the latter is 'skin.js' or 'skin.css' */<br /> if ( titleParts.length == 2 ) {<br /> var userSkinPage = titleParts.shift() + '/' + mw.config.get( 'skin' );<br /> if ( titleParts.slice( -1 ) == 'skin.js' ) {<br /> window.location.href = mw.util.getUrl( userSkinPage + '.js' );<br /> } else if ( titleParts.slice( -1 ) == 'skin.css' ) {<br /> window.location.href = mw.util.getUrl( userSkinPage + '.css' );<br /> }<br /> }<br /> }<br /> <br /> /**<br /> * Map addPortletLink to mw.util<br /> * @deprecated: Use mw.util.addPortletLink instead.<br /> */<br /> mw.log.deprecate( window, 'addPortletLink', mw.util.addPortletLink, 'Use mw.util.addPortletLink instead' );<br /> <br /> /**<br /> * Extract a URL parameter from the current URL<br /> * @deprecated: Use mw.util.getParamValue with proper escaping<br /> */<br /> mw.log.deprecate( window, 'getURLParamValue', mw.util.getParamValue, 'Use mw.util.getParamValue instead' );<br /> <br /> /**<br /> * Test if an element has a certain class<br /> * @deprecated: Use $(element).hasClass() instead.<br /> */<br /> mw.log.deprecate( window, 'hasClass', function ( element, className ) {<br /> return $( element ).hasClass( className );<br /> }, 'Use jQuery.hasClass() instead' );<br /> <br /> /**<br /> * @source www.mediawiki.org/wiki/Snippets/Load_JS_and_CSS_by_URL<br /> * @rev 6<br /> */<br /> var extraCSS = mw.util.getParamValue( 'withCSS' ),<br /> extraJS = mw.util.getParamValue( 'withJS' );<br /> <br /> if ( extraCSS ) {<br /> if ( extraCSS.match( /^MediaWiki:[^&amp;&lt;&gt;=%#]*\.css$/ ) ) {<br /> mw.loader.load( '/w/index.php?title=' + extraCSS + '&amp;action=raw&amp;ctype=text/css', 'text/css' );<br /> } else {<br /> mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withCSS value' } );<br /> }<br /> }<br /> <br /> if ( extraJS ) {<br /> if ( extraJS.match( /^MediaWiki:[^&amp;&lt;&gt;=%#]*\.js$/ ) ) {<br /> mw.loader.load( '/w/index.php?title=' + extraJS + '&amp;action=raw&amp;ctype=text/javascript' );<br /> } else {<br /> mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withJS value' } );<br /> }<br /> }<br /> <br /> /**<br /> * WikiMiniAtlas<br /> *<br /> * Description: WikiMiniAtlas is a popup click and drag world map.<br /> * This script causes all of our coordinate links to display the WikiMiniAtlas popup button.<br /> * The script itself is located on meta because it is used by many projects.<br /> * See [[Meta:WikiMiniAtlas]] for more information.<br /> * Maintainers: [[User:Dschwen]]<br /> */<br /> ( function () {<br /> var require_wikiminiatlas = false;<br /> var coord_filter = /geohack/;<br /> $( function () {<br /> $( 'a.external.text' ).each( function( key, link ) {<br /> if ( link.href &amp;&amp; coord_filter.exec( link.href ) ) {<br /> require_wikiminiatlas = true;<br /> // break from loop<br /> return false;<br /> }<br /> } );<br /> if ( $( 'div.kmldata' ).length ) {<br /> require_wikiminiatlas = true;<br /> }<br /> if ( require_wikiminiatlas ) {<br /> mw.loader.load( '//meta.wikimedia.org/w/index.php?title=MediaWiki:Wikiminiatlas.js&amp;action=raw&amp;ctype=text/javascript' );<br /> }<br /> } );<br /> } )();<br /> <br /> /**<br /> * Collapsible tables<br /> *<br /> * Allows tables to be collapsed, showing only the header. See [[Help:Collapsing]].<br /> *<br /> * @version 2.0.3 (2014-03-14)<br /> * @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-collapsibleTables.js<br /> * @author [[User:R. Koot]]<br /> * @author [[User:Krinkle]]<br /> * @deprecated Since MediaWiki 1.20: Use class=&quot;mw-collapsible&quot; instead which<br /> * is supported in MediaWiki core.<br /> */<br /> <br /> var autoCollapse = 2;<br /> var collapseCaption = 'hide';<br /> var expandCaption = 'show';<br /> var tableIndex = 0;<br /> <br /> function collapseTable( tableIndex ) {<br /> var Button = document.getElementById( 'collapseButton' + tableIndex );<br /> var Table = document.getElementById( 'collapsibleTable' + tableIndex );<br /> <br /> if ( !Table || !Button ) {<br /> return false;<br /> }<br /> <br /> var Rows = Table.rows;<br /> var i;<br /> var $row0 = $(Rows[0]);<br /> <br /> if ( Button.firstChild.data === collapseCaption ) {<br /> for ( i = 1; i &lt; Rows.length; i++ ) {<br /> Rows[i].style.display = 'none';<br /> }<br /> Button.firstChild.data = expandCaption;<br /> } else {<br /> for ( i = 1; i &lt; Rows.length; i++ ) {<br /> Rows[i].style.display = $row0.css( 'display' );<br /> }<br /> Button.firstChild.data = collapseCaption;<br /> }<br /> }<br /> <br /> function createClickHandler( tableIndex ) {<br /> return function ( e ) {<br /> e.preventDefault();<br /> collapseTable( tableIndex );<br /> };<br /> }<br /> <br /> function createCollapseButtons( $content ) {<br /> var NavigationBoxes = {};<br /> var $Tables = $content.find( 'table' );<br /> var i;<br /> <br /> $Tables.each( function( i, table ) {<br /> if ( $(table).hasClass( 'collapsible' ) ) {<br /> <br /> /* only add button and increment count if there is a header row to work with */<br /> var HeaderRow = table.getElementsByTagName( 'tr' )[0];<br /> if ( !HeaderRow ) {<br /> return;<br /> }<br /> var Header = table.getElementsByTagName( 'th' )[0];<br /> if ( !Header ) {<br /> return;<br /> }<br /> <br /> NavigationBoxes[ tableIndex ] = table;<br /> table.setAttribute( 'id', 'collapsibleTable' + tableIndex );<br /> <br /> var Button = document.createElement( 'span' );<br /> var ButtonLink = document.createElement( 'a' );<br /> var ButtonText = document.createTextNode( collapseCaption );<br /> // Styles are declared in [[MediaWiki:Common.css]]<br /> Button.className = 'collapseButton';<br /> <br /> ButtonLink.style.color = Header.style.color;<br /> ButtonLink.setAttribute( 'id', 'collapseButton' + tableIndex );<br /> ButtonLink.setAttribute( 'href', '#' );<br /> $( ButtonLink ).on( 'click', createClickHandler( tableIndex ) );<br /> ButtonLink.appendChild( ButtonText );<br /> <br /> Button.appendChild( document.createTextNode( '[' ) );<br /> Button.appendChild( ButtonLink );<br /> Button.appendChild( document.createTextNode( ']' ) );<br /> <br /> Header.insertBefore( Button, Header.firstChild );<br /> tableIndex++;<br /> }<br /> } );<br /> <br /> for ( i = 0; i &lt; tableIndex; i++ ) {<br /> if ( $( NavigationBoxes[i] ).hasClass( 'collapsed' ) ||<br /> ( tableIndex &gt;= autoCollapse &amp;&amp; $( NavigationBoxes[i] ).hasClass( 'autocollapse' ) )<br /> ) {<br /> collapseTable( i );<br /> }<br /> else if ( $( NavigationBoxes[i] ).hasClass ( 'innercollapse' ) ) {<br /> var element = NavigationBoxes[i];<br /> while ((element = element.parentNode)) {<br /> if ( $( element ).hasClass( 'outercollapse' ) ) {<br /> collapseTable ( i );<br /> break;<br /> }<br /> }<br /> }<br /> }<br /> }<br /> <br /> mw.hook( 'wikipage.content' ).add( createCollapseButtons );<br /> <br /> /**<br /> * Add support to mw-collapsible for autocollapse, innercollapse and outercollapse<br /> *<br /> * Maintainers: TheDJ<br /> */<br /> function mwCollapsibleSetup( $collapsibleContent ) {<br /> var $element,<br /> autoCollapseThreshold = 2;<br /> $.each( $collapsibleContent, function (index, element) {<br /> $element = $( element );<br /> if ( index &gt; autoCollapseThreshold &amp;&amp; $element.hasClass( 'autocollapse' ) ) {<br /> $element.data( 'mw-collapsible' ).collapse();<br /> } else if ( $element.hasClass( 'innercollapse' ) ) {<br /> if ( $element.parents( '.outercollapse' ).length &gt; 0 ) {<br /> $element.data( 'mw-collapsible' ).collapse();<br /> }<br /> }<br /> } );<br /> }<br /> <br /> mw.hook( 'wikipage.collapsibleContent' ).add( mwCollapsibleSetup );<br /> <br /> /**<br /> * Dynamic Navigation Bars (experimental)<br /> *<br /> * Description: See [[Wikipedia:NavFrame]].<br /> * Maintainers: UNMAINTAINED<br /> */<br /> <br /> /* set up the words in your language */<br /> var NavigationBarHide = '[' + collapseCaption + ']';<br /> var NavigationBarShow = '[' + expandCaption + ']';<br /> var indexNavigationBar = 0;<br /> <br /> /**<br /> * Shows and hides content and picture (if available) of navigation bars<br /> * Parameters:<br /> * indexNavigationBar: the index of navigation bar to be toggled<br /> **/<br /> window.toggleNavigationBar = function ( indexNavigationBar, event ) {<br /> var NavToggle = document.getElementById( 'NavToggle' + indexNavigationBar );<br /> var NavFrame = document.getElementById( 'NavFrame' + indexNavigationBar );<br /> var NavChild;<br /> <br /> if ( !NavFrame || !NavToggle ) {<br /> return false;<br /> }<br /> <br /> /* if shown now */<br /> if ( NavToggle.firstChild.data === NavigationBarHide ) {<br /> for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavContent' ) || $( NavChild ).hasClass( 'NavPic' ) ) {<br /> NavChild.style.display = 'none';<br /> }<br /> }<br /> NavToggle.firstChild.data = NavigationBarShow;<br /> <br /> /* if hidden now */<br /> } else if ( NavToggle.firstChild.data === NavigationBarShow ) {<br /> for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavContent' ) || $( NavChild ).hasClass( 'NavPic' ) ) {<br /> NavChild.style.display = 'block';<br /> }<br /> }<br /> NavToggle.firstChild.data = NavigationBarHide;<br /> }<br /> <br /> event.preventDefault();<br /> };<br /> <br /> /* adds show/hide-button to navigation bars */<br /> function createNavigationBarToggleButton( $content ) {<br /> var NavChild;<br /> /* iterate over all &lt; div &gt;-elements */<br /> var $divs = $content.find( 'div' );<br /> $divs.each( function ( i, NavFrame ) {<br /> /* if found a navigation bar */<br /> if ( $( NavFrame ).hasClass( 'NavFrame' ) ) {<br /> <br /> indexNavigationBar++;<br /> var NavToggle = document.createElement( 'a' );<br /> NavToggle.className = 'NavToggle';<br /> NavToggle.setAttribute( 'id', 'NavToggle' + indexNavigationBar );<br /> NavToggle.setAttribute( 'href', '#' );<br /> $( NavToggle ).on( 'click', $.proxy( window.toggleNavigationBar, window, indexNavigationBar ) );<br /> <br /> var isCollapsed = $( NavFrame ).hasClass( 'collapsed' );<br /> /**<br /> * Check if any children are already hidden. This loop is here for backwards compatibility:<br /> * the old way of making NavFrames start out collapsed was to manually add style=&quot;display:none&quot;<br /> * to all the NavPic/NavContent elements. Since this was bad for accessibility (no way to make<br /> * the content visible without JavaScript support), the new recommended way is to add the class<br /> * &quot;collapsed&quot; to the NavFrame itself, just like with collapsible tables.<br /> */<br /> for ( NavChild = NavFrame.firstChild; NavChild != null &amp;&amp; !isCollapsed; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavPic' ) || $( NavChild ).hasClass( 'NavContent' ) ) {<br /> if ( NavChild.style.display === 'none' ) {<br /> isCollapsed = true;<br /> }<br /> }<br /> }<br /> if ( isCollapsed ) {<br /> for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavPic' ) || $( NavChild ).hasClass( 'NavContent' ) ) {<br /> NavChild.style.display = 'none';<br /> }<br /> }<br /> }<br /> var NavToggleText = document.createTextNode( isCollapsed ? NavigationBarShow : NavigationBarHide );<br /> NavToggle.appendChild( NavToggleText );<br /> <br /> /* Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked) */<br /> for( var j = 0; j &lt; NavFrame.childNodes.length; j++ ) {<br /> if ( $( NavFrame.childNodes[j] ).hasClass( 'NavHead' ) ) {<br /> NavToggle.style.color = NavFrame.childNodes[j].style.color;<br /> NavFrame.childNodes[j].appendChild( NavToggle );<br /> }<br /> }<br /> NavFrame.setAttribute( 'id', 'NavFrame' + indexNavigationBar );<br /> }<br /> } );<br /> }<br /> <br /> mw.hook( 'wikipage.content' ).add( createNavigationBarToggleButton );<br /> <br /> /**<br /> * Uploadwizard_newusers<br /> * Switches in a message for non-autoconfirmed users at [[Wikipedia:Upload]]<br /> *<br /> * Maintainers: [[User:Krimpet]]<br /> */<br /> function uploadwizard_newusers() {<br /> if ( mw.config.get( 'wgNamespaceNumber' ) === 4 &amp;&amp; mw.config.get( 'wgTitle' ) === 'Upload' &amp;&amp; mw.config.get( 'wgAction' ) === 'view' ) {<br /> var oldDiv = document.getElementById( 'autoconfirmedusers' ),<br /> newDiv = document.getElementById( 'newusers' );<br /> if ( oldDiv &amp;&amp; newDiv ) {<br /> var userGroups = mw.config.get( 'wgUserGroups' );<br /> if ( userGroups ) {<br /> for ( var i = 0; i &lt; userGroups.length; i++ ) {<br /> if ( userGroups[i] === 'autoconfirmed' ) {<br /> oldDiv.style.display = 'block';<br /> newDiv.style.display = 'none';<br /> return;<br /> }<br /> }<br /> }<br /> oldDiv.style.display = 'none';<br /> newDiv.style.display = 'block';<br /> return;<br /> }<br /> }<br /> }<br /> <br /> $(uploadwizard_newusers);<br /> <br /> /**<br /> * Magic editintros ****************************************************<br /> *<br /> * Description: Adds editintros on disambiguation pages and BLP pages.<br /> * Maintainers: [[User:RockMFR]]<br /> */<br /> function addEditIntro( name ) {<br /> $( '.mw-editsection, #ca-edit' ).find( 'a' ).each( function ( i, el ) {<br /> el.href = $( this ).attr( 'href' ) + '&amp;editintro=' + name;<br /> } );<br /> }<br /> <br /> if ( mw.config.get( 'wgNamespaceNumber' ) === 0 ) {<br /> $( function () {<br /> if ( document.getElementById( 'disambigbox' ) ) {<br /> addEditIntro( 'Template:Disambig_editintro' );<br /> }<br /> } );<br /> <br /> $( function () {<br /> var cats = mw.config.get('wgCategories');<br /> if ( !cats ) {<br /> return;<br /> }<br /> if ( $.inArray( 'Living people', cats ) !== -1 || $.inArray( 'Possibly living people', cats ) !== -1 ) {<br /> addEditIntro( 'Template:BLP_editintro' );<br /> }<br /> } );<br /> }<br /> <br /> /* End of mw.loader.using callback */<br /> } );<br /> <br /> <br /> /* Define functions for showing/hiding language-specific text blocks */<br /> function hide_by_css_class(clzName) {<br /> document.getElementsByClassName(clzName)[0].style.visibility = 'hidden';<br /> }<br /> <br /> function show_by_css_class(clzName) {<br /> document.getElementsByClassName(clzName)[0].style.visibility = 'visible';<br /> }<br /> <br /> $(function() {<br /> var lang_sel_html = &quot;&lt;div&gt;&lt;div style=\&quot;display:inline;\&quot; onclick=\&quot;hide_by_css_class('lang_zh'); show_by_css_class('lang_en');\&quot;&gt;EN&lt;/div&gt; | &quot; +<br /> &quot;&lt;div style=\&quot;display:inline;\&quot; onclick=\&quot;hide_by_css_class('lang_en'); show_by_css_class('lang_zh');\&quot;&gt;ZH&lt;/div&gt; | &quot; +<br /> &quot;&lt;div style=\&quot;display:inline;\&quot; onclick=\&quot;show_by_css_class('lang_en'); show_by_css_class('lang_zh');\&quot;&gt;Both&lt;/div&gt;&quot;+<br /> &quot;&lt;/div&gt;&quot;;<br /> <br /> $('#lang_sel_enzh').html(lang_sel_html);<br /> });<br /> <br /> $(function() {<br /> //var new_html = &quot;&lt;input type=\&quot;text\&quot; name=\&quot;hanzi\&quot; onchange=\&quot;alert('value of name field is changed')\&quot;&gt;&quot;;<br /> var new_html = &quot;test1111&quot;;<br /> <br /> $('#spreadsheet_search_hanzi_source').html(new_html);<br /> });</div> Admin https://langwiki.org/index.php?title=%E8%AF%AD%E8%A8%80%E7%BB%B4%E5%9F%BA:%E6%B1%89%E5%AD%97%E8%AF%8D%E6%BA%90%E7%A0%94%E7%A9%B6&diff=3262 语言维基:汉字词源研究 2020-01-03T01:53:19Z <p>Admin:</p> <hr /> <div>本词表可以由注册用户在线编辑,请双击数据格进行添加和修改。感谢大家贡献力量!<br /> &lt;div id=&quot;spreadsheet_search_hanzi_source&quot;&gt;&lt;/div&gt;&lt;br&gt;<br /> &lt;spreadsheet sheet=&quot;0&quot; file=&quot;hanyuciyuan-2019.xlsx&quot; /&gt;</div> Admin https://langwiki.org/index.php?title=MediaWiki:Common.js&diff=3261 MediaWiki:Common.js 2020-01-03T01:51:42Z <p>Admin:</p> <hr /> <div>/* 这里的任何JavaScript将为所有用户在每次页面载入时加载。 */<br /> <br /> /**<br /> * Keep code in MediaWiki:Common.js to a minimum as it is unconditionally<br /> * loaded for all users on every wiki page. If possible create a gadget that is<br /> * enabled by default instead of adding it here (since gadgets are fully<br /> * optimized ResourceLoader modules with possibility to add dependencies etc.)<br /> *<br /> * Since Common.js isn't a gadget, there is no place to declare its<br /> * dependencies, so we have to lazy load them with mw.loader.using on demand and<br /> * then execute the rest in the callback. In most cases these dependencies will<br /> * be loaded (or loading) already and the callback will not be delayed. In case a<br /> * dependency hasn't arrived yet it'll make sure those are loaded before this.<br /> */<br /> <br /> /* global mw, $ */<br /> /* jshint strict:false, browser:true */<br /> <br /> mw.loader.using( ['mediawiki.user', 'mediawiki.util', 'mediawiki.notify', 'jquery.client'] ).done( function () {<br /> /* Begin of mw.loader.using callback */<br /> <br /> /**<br /> * Main Page layout fixes<br /> *<br /> * Description: Adds an additional link to the complete list of languages available.<br /> * Maintainers: [[User:AzaToth]], [[User:R. Koot]], [[User:Alex Smotrov]]<br /> */<br /> if ( mw.config.get( 'wgPageName' ) === 'Main_Page' || mw.config.get( 'wgPageName' ) === 'Talk:Main_Page' ) {<br /> $( function () {<br /> mw.util.addPortletLink( 'p-lang', '//meta.wikimedia.org/wiki/List_of_Wikipedias',<br /> 'Complete list', 'interwiki-completelist', 'Complete list of Wikipedias' );<br /> } );<br /> }<br /> <br /> /**<br /> * Redirect User:Name/skin.js and skin.css to the current skin's pages<br /> * (unless the 'skin' page really exists)<br /> * @source: http://www.mediawiki.org/wiki/Snippets/Redirect_skin.js<br /> * @rev: 2<br /> */<br /> if ( mw.config.get( 'wgArticleId' ) === 0 &amp;&amp; mw.config.get( 'wgNamespaceNumber' ) === 2 ) {<br /> var titleParts = mw.config.get( 'wgPageName' ).split( '/' );<br /> /* Make sure there was a part before and after the slash<br /> and that the latter is 'skin.js' or 'skin.css' */<br /> if ( titleParts.length == 2 ) {<br /> var userSkinPage = titleParts.shift() + '/' + mw.config.get( 'skin' );<br /> if ( titleParts.slice( -1 ) == 'skin.js' ) {<br /> window.location.href = mw.util.getUrl( userSkinPage + '.js' );<br /> } else if ( titleParts.slice( -1 ) == 'skin.css' ) {<br /> window.location.href = mw.util.getUrl( userSkinPage + '.css' );<br /> }<br /> }<br /> }<br /> <br /> /**<br /> * Map addPortletLink to mw.util<br /> * @deprecated: Use mw.util.addPortletLink instead.<br /> */<br /> mw.log.deprecate( window, 'addPortletLink', mw.util.addPortletLink, 'Use mw.util.addPortletLink instead' );<br /> <br /> /**<br /> * Extract a URL parameter from the current URL<br /> * @deprecated: Use mw.util.getParamValue with proper escaping<br /> */<br /> mw.log.deprecate( window, 'getURLParamValue', mw.util.getParamValue, 'Use mw.util.getParamValue instead' );<br /> <br /> /**<br /> * Test if an element has a certain class<br /> * @deprecated: Use $(element).hasClass() instead.<br /> */<br /> mw.log.deprecate( window, 'hasClass', function ( element, className ) {<br /> return $( element ).hasClass( className );<br /> }, 'Use jQuery.hasClass() instead' );<br /> <br /> /**<br /> * @source www.mediawiki.org/wiki/Snippets/Load_JS_and_CSS_by_URL<br /> * @rev 6<br /> */<br /> var extraCSS = mw.util.getParamValue( 'withCSS' ),<br /> extraJS = mw.util.getParamValue( 'withJS' );<br /> <br /> if ( extraCSS ) {<br /> if ( extraCSS.match( /^MediaWiki:[^&amp;&lt;&gt;=%#]*\.css$/ ) ) {<br /> mw.loader.load( '/w/index.php?title=' + extraCSS + '&amp;action=raw&amp;ctype=text/css', 'text/css' );<br /> } else {<br /> mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withCSS value' } );<br /> }<br /> }<br /> <br /> if ( extraJS ) {<br /> if ( extraJS.match( /^MediaWiki:[^&amp;&lt;&gt;=%#]*\.js$/ ) ) {<br /> mw.loader.load( '/w/index.php?title=' + extraJS + '&amp;action=raw&amp;ctype=text/javascript' );<br /> } else {<br /> mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withJS value' } );<br /> }<br /> }<br /> <br /> /**<br /> * WikiMiniAtlas<br /> *<br /> * Description: WikiMiniAtlas is a popup click and drag world map.<br /> * This script causes all of our coordinate links to display the WikiMiniAtlas popup button.<br /> * The script itself is located on meta because it is used by many projects.<br /> * See [[Meta:WikiMiniAtlas]] for more information.<br /> * Maintainers: [[User:Dschwen]]<br /> */<br /> ( function () {<br /> var require_wikiminiatlas = false;<br /> var coord_filter = /geohack/;<br /> $( function () {<br /> $( 'a.external.text' ).each( function( key, link ) {<br /> if ( link.href &amp;&amp; coord_filter.exec( link.href ) ) {<br /> require_wikiminiatlas = true;<br /> // break from loop<br /> return false;<br /> }<br /> } );<br /> if ( $( 'div.kmldata' ).length ) {<br /> require_wikiminiatlas = true;<br /> }<br /> if ( require_wikiminiatlas ) {<br /> mw.loader.load( '//meta.wikimedia.org/w/index.php?title=MediaWiki:Wikiminiatlas.js&amp;action=raw&amp;ctype=text/javascript' );<br /> }<br /> } );<br /> } )();<br /> <br /> /**<br /> * Collapsible tables<br /> *<br /> * Allows tables to be collapsed, showing only the header. See [[Help:Collapsing]].<br /> *<br /> * @version 2.0.3 (2014-03-14)<br /> * @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-collapsibleTables.js<br /> * @author [[User:R. Koot]]<br /> * @author [[User:Krinkle]]<br /> * @deprecated Since MediaWiki 1.20: Use class=&quot;mw-collapsible&quot; instead which<br /> * is supported in MediaWiki core.<br /> */<br /> <br /> var autoCollapse = 2;<br /> var collapseCaption = 'hide';<br /> var expandCaption = 'show';<br /> var tableIndex = 0;<br /> <br /> function collapseTable( tableIndex ) {<br /> var Button = document.getElementById( 'collapseButton' + tableIndex );<br /> var Table = document.getElementById( 'collapsibleTable' + tableIndex );<br /> <br /> if ( !Table || !Button ) {<br /> return false;<br /> }<br /> <br /> var Rows = Table.rows;<br /> var i;<br /> var $row0 = $(Rows[0]);<br /> <br /> if ( Button.firstChild.data === collapseCaption ) {<br /> for ( i = 1; i &lt; Rows.length; i++ ) {<br /> Rows[i].style.display = 'none';<br /> }<br /> Button.firstChild.data = expandCaption;<br /> } else {<br /> for ( i = 1; i &lt; Rows.length; i++ ) {<br /> Rows[i].style.display = $row0.css( 'display' );<br /> }<br /> Button.firstChild.data = collapseCaption;<br /> }<br /> }<br /> <br /> function createClickHandler( tableIndex ) {<br /> return function ( e ) {<br /> e.preventDefault();<br /> collapseTable( tableIndex );<br /> };<br /> }<br /> <br /> function createCollapseButtons( $content ) {<br /> var NavigationBoxes = {};<br /> var $Tables = $content.find( 'table' );<br /> var i;<br /> <br /> $Tables.each( function( i, table ) {<br /> if ( $(table).hasClass( 'collapsible' ) ) {<br /> <br /> /* only add button and increment count if there is a header row to work with */<br /> var HeaderRow = table.getElementsByTagName( 'tr' )[0];<br /> if ( !HeaderRow ) {<br /> return;<br /> }<br /> var Header = table.getElementsByTagName( 'th' )[0];<br /> if ( !Header ) {<br /> return;<br /> }<br /> <br /> NavigationBoxes[ tableIndex ] = table;<br /> table.setAttribute( 'id', 'collapsibleTable' + tableIndex );<br /> <br /> var Button = document.createElement( 'span' );<br /> var ButtonLink = document.createElement( 'a' );<br /> var ButtonText = document.createTextNode( collapseCaption );<br /> // Styles are declared in [[MediaWiki:Common.css]]<br /> Button.className = 'collapseButton';<br /> <br /> ButtonLink.style.color = Header.style.color;<br /> ButtonLink.setAttribute( 'id', 'collapseButton' + tableIndex );<br /> ButtonLink.setAttribute( 'href', '#' );<br /> $( ButtonLink ).on( 'click', createClickHandler( tableIndex ) );<br /> ButtonLink.appendChild( ButtonText );<br /> <br /> Button.appendChild( document.createTextNode( '[' ) );<br /> Button.appendChild( ButtonLink );<br /> Button.appendChild( document.createTextNode( ']' ) );<br /> <br /> Header.insertBefore( Button, Header.firstChild );<br /> tableIndex++;<br /> }<br /> } );<br /> <br /> for ( i = 0; i &lt; tableIndex; i++ ) {<br /> if ( $( NavigationBoxes[i] ).hasClass( 'collapsed' ) ||<br /> ( tableIndex &gt;= autoCollapse &amp;&amp; $( NavigationBoxes[i] ).hasClass( 'autocollapse' ) )<br /> ) {<br /> collapseTable( i );<br /> }<br /> else if ( $( NavigationBoxes[i] ).hasClass ( 'innercollapse' ) ) {<br /> var element = NavigationBoxes[i];<br /> while ((element = element.parentNode)) {<br /> if ( $( element ).hasClass( 'outercollapse' ) ) {<br /> collapseTable ( i );<br /> break;<br /> }<br /> }<br /> }<br /> }<br /> }<br /> <br /> mw.hook( 'wikipage.content' ).add( createCollapseButtons );<br /> <br /> /**<br /> * Add support to mw-collapsible for autocollapse, innercollapse and outercollapse<br /> *<br /> * Maintainers: TheDJ<br /> */<br /> function mwCollapsibleSetup( $collapsibleContent ) {<br /> var $element,<br /> autoCollapseThreshold = 2;<br /> $.each( $collapsibleContent, function (index, element) {<br /> $element = $( element );<br /> if ( index &gt; autoCollapseThreshold &amp;&amp; $element.hasClass( 'autocollapse' ) ) {<br /> $element.data( 'mw-collapsible' ).collapse();<br /> } else if ( $element.hasClass( 'innercollapse' ) ) {<br /> if ( $element.parents( '.outercollapse' ).length &gt; 0 ) {<br /> $element.data( 'mw-collapsible' ).collapse();<br /> }<br /> }<br /> } );<br /> }<br /> <br /> mw.hook( 'wikipage.collapsibleContent' ).add( mwCollapsibleSetup );<br /> <br /> /**<br /> * Dynamic Navigation Bars (experimental)<br /> *<br /> * Description: See [[Wikipedia:NavFrame]].<br /> * Maintainers: UNMAINTAINED<br /> */<br /> <br /> /* set up the words in your language */<br /> var NavigationBarHide = '[' + collapseCaption + ']';<br /> var NavigationBarShow = '[' + expandCaption + ']';<br /> var indexNavigationBar = 0;<br /> <br /> /**<br /> * Shows and hides content and picture (if available) of navigation bars<br /> * Parameters:<br /> * indexNavigationBar: the index of navigation bar to be toggled<br /> **/<br /> window.toggleNavigationBar = function ( indexNavigationBar, event ) {<br /> var NavToggle = document.getElementById( 'NavToggle' + indexNavigationBar );<br /> var NavFrame = document.getElementById( 'NavFrame' + indexNavigationBar );<br /> var NavChild;<br /> <br /> if ( !NavFrame || !NavToggle ) {<br /> return false;<br /> }<br /> <br /> /* if shown now */<br /> if ( NavToggle.firstChild.data === NavigationBarHide ) {<br /> for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavContent' ) || $( NavChild ).hasClass( 'NavPic' ) ) {<br /> NavChild.style.display = 'none';<br /> }<br /> }<br /> NavToggle.firstChild.data = NavigationBarShow;<br /> <br /> /* if hidden now */<br /> } else if ( NavToggle.firstChild.data === NavigationBarShow ) {<br /> for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavContent' ) || $( NavChild ).hasClass( 'NavPic' ) ) {<br /> NavChild.style.display = 'block';<br /> }<br /> }<br /> NavToggle.firstChild.data = NavigationBarHide;<br /> }<br /> <br /> event.preventDefault();<br /> };<br /> <br /> /* adds show/hide-button to navigation bars */<br /> function createNavigationBarToggleButton( $content ) {<br /> var NavChild;<br /> /* iterate over all &lt; div &gt;-elements */<br /> var $divs = $content.find( 'div' );<br /> $divs.each( function ( i, NavFrame ) {<br /> /* if found a navigation bar */<br /> if ( $( NavFrame ).hasClass( 'NavFrame' ) ) {<br /> <br /> indexNavigationBar++;<br /> var NavToggle = document.createElement( 'a' );<br /> NavToggle.className = 'NavToggle';<br /> NavToggle.setAttribute( 'id', 'NavToggle' + indexNavigationBar );<br /> NavToggle.setAttribute( 'href', '#' );<br /> $( NavToggle ).on( 'click', $.proxy( window.toggleNavigationBar, window, indexNavigationBar ) );<br /> <br /> var isCollapsed = $( NavFrame ).hasClass( 'collapsed' );<br /> /**<br /> * Check if any children are already hidden. This loop is here for backwards compatibility:<br /> * the old way of making NavFrames start out collapsed was to manually add style=&quot;display:none&quot;<br /> * to all the NavPic/NavContent elements. Since this was bad for accessibility (no way to make<br /> * the content visible without JavaScript support), the new recommended way is to add the class<br /> * &quot;collapsed&quot; to the NavFrame itself, just like with collapsible tables.<br /> */<br /> for ( NavChild = NavFrame.firstChild; NavChild != null &amp;&amp; !isCollapsed; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavPic' ) || $( NavChild ).hasClass( 'NavContent' ) ) {<br /> if ( NavChild.style.display === 'none' ) {<br /> isCollapsed = true;<br /> }<br /> }<br /> }<br /> if ( isCollapsed ) {<br /> for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavPic' ) || $( NavChild ).hasClass( 'NavContent' ) ) {<br /> NavChild.style.display = 'none';<br /> }<br /> }<br /> }<br /> var NavToggleText = document.createTextNode( isCollapsed ? NavigationBarShow : NavigationBarHide );<br /> NavToggle.appendChild( NavToggleText );<br /> <br /> /* Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked) */<br /> for( var j = 0; j &lt; NavFrame.childNodes.length; j++ ) {<br /> if ( $( NavFrame.childNodes[j] ).hasClass( 'NavHead' ) ) {<br /> NavToggle.style.color = NavFrame.childNodes[j].style.color;<br /> NavFrame.childNodes[j].appendChild( NavToggle );<br /> }<br /> }<br /> NavFrame.setAttribute( 'id', 'NavFrame' + indexNavigationBar );<br /> }<br /> } );<br /> }<br /> <br /> mw.hook( 'wikipage.content' ).add( createNavigationBarToggleButton );<br /> <br /> /**<br /> * Uploadwizard_newusers<br /> * Switches in a message for non-autoconfirmed users at [[Wikipedia:Upload]]<br /> *<br /> * Maintainers: [[User:Krimpet]]<br /> */<br /> function uploadwizard_newusers() {<br /> if ( mw.config.get( 'wgNamespaceNumber' ) === 4 &amp;&amp; mw.config.get( 'wgTitle' ) === 'Upload' &amp;&amp; mw.config.get( 'wgAction' ) === 'view' ) {<br /> var oldDiv = document.getElementById( 'autoconfirmedusers' ),<br /> newDiv = document.getElementById( 'newusers' );<br /> if ( oldDiv &amp;&amp; newDiv ) {<br /> var userGroups = mw.config.get( 'wgUserGroups' );<br /> if ( userGroups ) {<br /> for ( var i = 0; i &lt; userGroups.length; i++ ) {<br /> if ( userGroups[i] === 'autoconfirmed' ) {<br /> oldDiv.style.display = 'block';<br /> newDiv.style.display = 'none';<br /> return;<br /> }<br /> }<br /> }<br /> oldDiv.style.display = 'none';<br /> newDiv.style.display = 'block';<br /> return;<br /> }<br /> }<br /> }<br /> <br /> $(uploadwizard_newusers);<br /> <br /> /**<br /> * Magic editintros ****************************************************<br /> *<br /> * Description: Adds editintros on disambiguation pages and BLP pages.<br /> * Maintainers: [[User:RockMFR]]<br /> */<br /> function addEditIntro( name ) {<br /> $( '.mw-editsection, #ca-edit' ).find( 'a' ).each( function ( i, el ) {<br /> el.href = $( this ).attr( 'href' ) + '&amp;editintro=' + name;<br /> } );<br /> }<br /> <br /> if ( mw.config.get( 'wgNamespaceNumber' ) === 0 ) {<br /> $( function () {<br /> if ( document.getElementById( 'disambigbox' ) ) {<br /> addEditIntro( 'Template:Disambig_editintro' );<br /> }<br /> } );<br /> <br /> $( function () {<br /> var cats = mw.config.get('wgCategories');<br /> if ( !cats ) {<br /> return;<br /> }<br /> if ( $.inArray( 'Living people', cats ) !== -1 || $.inArray( 'Possibly living people', cats ) !== -1 ) {<br /> addEditIntro( 'Template:BLP_editintro' );<br /> }<br /> } );<br /> }<br /> <br /> /* End of mw.loader.using callback */<br /> } );<br /> <br /> <br /> /* Define functions for showing/hiding language-specific text blocks */<br /> function hide_by_css_class(clzName) {<br /> document.getElementsByClassName(clzName)[0].style.visibility = 'hidden';<br /> }<br /> <br /> function show_by_css_class(clzName) {<br /> document.getElementsByClassName(clzName)[0].style.visibility = 'visible';<br /> }<br /> <br /> $(function() {<br /> var lang_sel_html = &quot;&lt;div&gt;&lt;div style=\&quot;display:inline;\&quot; onclick=\&quot;hide_by_css_class('lang_zh'); show_by_css_class('lang_en');\&quot;&gt;EN&lt;/div&gt; | &quot; +<br /> &quot;&lt;div style=\&quot;display:inline;\&quot; onclick=\&quot;hide_by_css_class('lang_en'); show_by_css_class('lang_zh');\&quot;&gt;ZH&lt;/div&gt; | &quot; +<br /> &quot;&lt;div style=\&quot;display:inline;\&quot; onclick=\&quot;show_by_css_class('lang_en'); show_by_css_class('lang_zh');\&quot;&gt;Both&lt;/div&gt;&quot;+<br /> &quot;&lt;/div&gt;&quot;;<br /> <br /> $('#lang_sel_enzh').html(lang_sel_html);<br /> });<br /> <br /> $(function() {<br /> var new_html = &quot;&lt;input type=\&quot;text\&quot; name=\&quot;hanzi\&quot; onchange=\&quot;alert('value of name field is changed')\&quot;&gt;&quot;;<br /> <br /> $('#spreadsheet_search_hanzi_source').html(new_html);<br /> });</div> Admin https://langwiki.org/index.php?title=MediaWiki:Common.js&diff=3260 MediaWiki:Common.js 2020-01-03T01:50:49Z <p>Admin:</p> <hr /> <div>/* 这里的任何JavaScript将为所有用户在每次页面载入时加载。 */<br /> <br /> /**<br /> * Keep code in MediaWiki:Common.js to a minimum as it is unconditionally<br /> * loaded for all users on every wiki page. If possible create a gadget that is<br /> * enabled by default instead of adding it here (since gadgets are fully<br /> * optimized ResourceLoader modules with possibility to add dependencies etc.)<br /> *<br /> * Since Common.js isn't a gadget, there is no place to declare its<br /> * dependencies, so we have to lazy load them with mw.loader.using on demand and<br /> * then execute the rest in the callback. In most cases these dependencies will<br /> * be loaded (or loading) already and the callback will not be delayed. In case a<br /> * dependency hasn't arrived yet it'll make sure those are loaded before this.<br /> */<br /> <br /> /* global mw, $ */<br /> /* jshint strict:false, browser:true */<br /> <br /> mw.loader.using( ['mediawiki.user', 'mediawiki.util', 'mediawiki.notify', 'jquery.client'] ).done( function () {<br /> /* Begin of mw.loader.using callback */<br /> <br /> /**<br /> * Main Page layout fixes<br /> *<br /> * Description: Adds an additional link to the complete list of languages available.<br /> * Maintainers: [[User:AzaToth]], [[User:R. Koot]], [[User:Alex Smotrov]]<br /> */<br /> if ( mw.config.get( 'wgPageName' ) === 'Main_Page' || mw.config.get( 'wgPageName' ) === 'Talk:Main_Page' ) {<br /> $( function () {<br /> mw.util.addPortletLink( 'p-lang', '//meta.wikimedia.org/wiki/List_of_Wikipedias',<br /> 'Complete list', 'interwiki-completelist', 'Complete list of Wikipedias' );<br /> } );<br /> }<br /> <br /> /**<br /> * Redirect User:Name/skin.js and skin.css to the current skin's pages<br /> * (unless the 'skin' page really exists)<br /> * @source: http://www.mediawiki.org/wiki/Snippets/Redirect_skin.js<br /> * @rev: 2<br /> */<br /> if ( mw.config.get( 'wgArticleId' ) === 0 &amp;&amp; mw.config.get( 'wgNamespaceNumber' ) === 2 ) {<br /> var titleParts = mw.config.get( 'wgPageName' ).split( '/' );<br /> /* Make sure there was a part before and after the slash<br /> and that the latter is 'skin.js' or 'skin.css' */<br /> if ( titleParts.length == 2 ) {<br /> var userSkinPage = titleParts.shift() + '/' + mw.config.get( 'skin' );<br /> if ( titleParts.slice( -1 ) == 'skin.js' ) {<br /> window.location.href = mw.util.getUrl( userSkinPage + '.js' );<br /> } else if ( titleParts.slice( -1 ) == 'skin.css' ) {<br /> window.location.href = mw.util.getUrl( userSkinPage + '.css' );<br /> }<br /> }<br /> }<br /> <br /> /**<br /> * Map addPortletLink to mw.util<br /> * @deprecated: Use mw.util.addPortletLink instead.<br /> */<br /> mw.log.deprecate( window, 'addPortletLink', mw.util.addPortletLink, 'Use mw.util.addPortletLink instead' );<br /> <br /> /**<br /> * Extract a URL parameter from the current URL<br /> * @deprecated: Use mw.util.getParamValue with proper escaping<br /> */<br /> mw.log.deprecate( window, 'getURLParamValue', mw.util.getParamValue, 'Use mw.util.getParamValue instead' );<br /> <br /> /**<br /> * Test if an element has a certain class<br /> * @deprecated: Use $(element).hasClass() instead.<br /> */<br /> mw.log.deprecate( window, 'hasClass', function ( element, className ) {<br /> return $( element ).hasClass( className );<br /> }, 'Use jQuery.hasClass() instead' );<br /> <br /> /**<br /> * @source www.mediawiki.org/wiki/Snippets/Load_JS_and_CSS_by_URL<br /> * @rev 6<br /> */<br /> var extraCSS = mw.util.getParamValue( 'withCSS' ),<br /> extraJS = mw.util.getParamValue( 'withJS' );<br /> <br /> if ( extraCSS ) {<br /> if ( extraCSS.match( /^MediaWiki:[^&amp;&lt;&gt;=%#]*\.css$/ ) ) {<br /> mw.loader.load( '/w/index.php?title=' + extraCSS + '&amp;action=raw&amp;ctype=text/css', 'text/css' );<br /> } else {<br /> mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withCSS value' } );<br /> }<br /> }<br /> <br /> if ( extraJS ) {<br /> if ( extraJS.match( /^MediaWiki:[^&amp;&lt;&gt;=%#]*\.js$/ ) ) {<br /> mw.loader.load( '/w/index.php?title=' + extraJS + '&amp;action=raw&amp;ctype=text/javascript' );<br /> } else {<br /> mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withJS value' } );<br /> }<br /> }<br /> <br /> /**<br /> * WikiMiniAtlas<br /> *<br /> * Description: WikiMiniAtlas is a popup click and drag world map.<br /> * This script causes all of our coordinate links to display the WikiMiniAtlas popup button.<br /> * The script itself is located on meta because it is used by many projects.<br /> * See [[Meta:WikiMiniAtlas]] for more information.<br /> * Maintainers: [[User:Dschwen]]<br /> */<br /> ( function () {<br /> var require_wikiminiatlas = false;<br /> var coord_filter = /geohack/;<br /> $( function () {<br /> $( 'a.external.text' ).each( function( key, link ) {<br /> if ( link.href &amp;&amp; coord_filter.exec( link.href ) ) {<br /> require_wikiminiatlas = true;<br /> // break from loop<br /> return false;<br /> }<br /> } );<br /> if ( $( 'div.kmldata' ).length ) {<br /> require_wikiminiatlas = true;<br /> }<br /> if ( require_wikiminiatlas ) {<br /> mw.loader.load( '//meta.wikimedia.org/w/index.php?title=MediaWiki:Wikiminiatlas.js&amp;action=raw&amp;ctype=text/javascript' );<br /> }<br /> } );<br /> } )();<br /> <br /> /**<br /> * Collapsible tables<br /> *<br /> * Allows tables to be collapsed, showing only the header. See [[Help:Collapsing]].<br /> *<br /> * @version 2.0.3 (2014-03-14)<br /> * @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-collapsibleTables.js<br /> * @author [[User:R. Koot]]<br /> * @author [[User:Krinkle]]<br /> * @deprecated Since MediaWiki 1.20: Use class=&quot;mw-collapsible&quot; instead which<br /> * is supported in MediaWiki core.<br /> */<br /> <br /> var autoCollapse = 2;<br /> var collapseCaption = 'hide';<br /> var expandCaption = 'show';<br /> var tableIndex = 0;<br /> <br /> function collapseTable( tableIndex ) {<br /> var Button = document.getElementById( 'collapseButton' + tableIndex );<br /> var Table = document.getElementById( 'collapsibleTable' + tableIndex );<br /> <br /> if ( !Table || !Button ) {<br /> return false;<br /> }<br /> <br /> var Rows = Table.rows;<br /> var i;<br /> var $row0 = $(Rows[0]);<br /> <br /> if ( Button.firstChild.data === collapseCaption ) {<br /> for ( i = 1; i &lt; Rows.length; i++ ) {<br /> Rows[i].style.display = 'none';<br /> }<br /> Button.firstChild.data = expandCaption;<br /> } else {<br /> for ( i = 1; i &lt; Rows.length; i++ ) {<br /> Rows[i].style.display = $row0.css( 'display' );<br /> }<br /> Button.firstChild.data = collapseCaption;<br /> }<br /> }<br /> <br /> function createClickHandler( tableIndex ) {<br /> return function ( e ) {<br /> e.preventDefault();<br /> collapseTable( tableIndex );<br /> };<br /> }<br /> <br /> function createCollapseButtons( $content ) {<br /> var NavigationBoxes = {};<br /> var $Tables = $content.find( 'table' );<br /> var i;<br /> <br /> $Tables.each( function( i, table ) {<br /> if ( $(table).hasClass( 'collapsible' ) ) {<br /> <br /> /* only add button and increment count if there is a header row to work with */<br /> var HeaderRow = table.getElementsByTagName( 'tr' )[0];<br /> if ( !HeaderRow ) {<br /> return;<br /> }<br /> var Header = table.getElementsByTagName( 'th' )[0];<br /> if ( !Header ) {<br /> return;<br /> }<br /> <br /> NavigationBoxes[ tableIndex ] = table;<br /> table.setAttribute( 'id', 'collapsibleTable' + tableIndex );<br /> <br /> var Button = document.createElement( 'span' );<br /> var ButtonLink = document.createElement( 'a' );<br /> var ButtonText = document.createTextNode( collapseCaption );<br /> // Styles are declared in [[MediaWiki:Common.css]]<br /> Button.className = 'collapseButton';<br /> <br /> ButtonLink.style.color = Header.style.color;<br /> ButtonLink.setAttribute( 'id', 'collapseButton' + tableIndex );<br /> ButtonLink.setAttribute( 'href', '#' );<br /> $( ButtonLink ).on( 'click', createClickHandler( tableIndex ) );<br /> ButtonLink.appendChild( ButtonText );<br /> <br /> Button.appendChild( document.createTextNode( '[' ) );<br /> Button.appendChild( ButtonLink );<br /> Button.appendChild( document.createTextNode( ']' ) );<br /> <br /> Header.insertBefore( Button, Header.firstChild );<br /> tableIndex++;<br /> }<br /> } );<br /> <br /> for ( i = 0; i &lt; tableIndex; i++ ) {<br /> if ( $( NavigationBoxes[i] ).hasClass( 'collapsed' ) ||<br /> ( tableIndex &gt;= autoCollapse &amp;&amp; $( NavigationBoxes[i] ).hasClass( 'autocollapse' ) )<br /> ) {<br /> collapseTable( i );<br /> }<br /> else if ( $( NavigationBoxes[i] ).hasClass ( 'innercollapse' ) ) {<br /> var element = NavigationBoxes[i];<br /> while ((element = element.parentNode)) {<br /> if ( $( element ).hasClass( 'outercollapse' ) ) {<br /> collapseTable ( i );<br /> break;<br /> }<br /> }<br /> }<br /> }<br /> }<br /> <br /> mw.hook( 'wikipage.content' ).add( createCollapseButtons );<br /> <br /> /**<br /> * Add support to mw-collapsible for autocollapse, innercollapse and outercollapse<br /> *<br /> * Maintainers: TheDJ<br /> */<br /> function mwCollapsibleSetup( $collapsibleContent ) {<br /> var $element,<br /> autoCollapseThreshold = 2;<br /> $.each( $collapsibleContent, function (index, element) {<br /> $element = $( element );<br /> if ( index &gt; autoCollapseThreshold &amp;&amp; $element.hasClass( 'autocollapse' ) ) {<br /> $element.data( 'mw-collapsible' ).collapse();<br /> } else if ( $element.hasClass( 'innercollapse' ) ) {<br /> if ( $element.parents( '.outercollapse' ).length &gt; 0 ) {<br /> $element.data( 'mw-collapsible' ).collapse();<br /> }<br /> }<br /> } );<br /> }<br /> <br /> mw.hook( 'wikipage.collapsibleContent' ).add( mwCollapsibleSetup );<br /> <br /> /**<br /> * Dynamic Navigation Bars (experimental)<br /> *<br /> * Description: See [[Wikipedia:NavFrame]].<br /> * Maintainers: UNMAINTAINED<br /> */<br /> <br /> /* set up the words in your language */<br /> var NavigationBarHide = '[' + collapseCaption + ']';<br /> var NavigationBarShow = '[' + expandCaption + ']';<br /> var indexNavigationBar = 0;<br /> <br /> /**<br /> * Shows and hides content and picture (if available) of navigation bars<br /> * Parameters:<br /> * indexNavigationBar: the index of navigation bar to be toggled<br /> **/<br /> window.toggleNavigationBar = function ( indexNavigationBar, event ) {<br /> var NavToggle = document.getElementById( 'NavToggle' + indexNavigationBar );<br /> var NavFrame = document.getElementById( 'NavFrame' + indexNavigationBar );<br /> var NavChild;<br /> <br /> if ( !NavFrame || !NavToggle ) {<br /> return false;<br /> }<br /> <br /> /* if shown now */<br /> if ( NavToggle.firstChild.data === NavigationBarHide ) {<br /> for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavContent' ) || $( NavChild ).hasClass( 'NavPic' ) ) {<br /> NavChild.style.display = 'none';<br /> }<br /> }<br /> NavToggle.firstChild.data = NavigationBarShow;<br /> <br /> /* if hidden now */<br /> } else if ( NavToggle.firstChild.data === NavigationBarShow ) {<br /> for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavContent' ) || $( NavChild ).hasClass( 'NavPic' ) ) {<br /> NavChild.style.display = 'block';<br /> }<br /> }<br /> NavToggle.firstChild.data = NavigationBarHide;<br /> }<br /> <br /> event.preventDefault();<br /> };<br /> <br /> /* adds show/hide-button to navigation bars */<br /> function createNavigationBarToggleButton( $content ) {<br /> var NavChild;<br /> /* iterate over all &lt; div &gt;-elements */<br /> var $divs = $content.find( 'div' );<br /> $divs.each( function ( i, NavFrame ) {<br /> /* if found a navigation bar */<br /> if ( $( NavFrame ).hasClass( 'NavFrame' ) ) {<br /> <br /> indexNavigationBar++;<br /> var NavToggle = document.createElement( 'a' );<br /> NavToggle.className = 'NavToggle';<br /> NavToggle.setAttribute( 'id', 'NavToggle' + indexNavigationBar );<br /> NavToggle.setAttribute( 'href', '#' );<br /> $( NavToggle ).on( 'click', $.proxy( window.toggleNavigationBar, window, indexNavigationBar ) );<br /> <br /> var isCollapsed = $( NavFrame ).hasClass( 'collapsed' );<br /> /**<br /> * Check if any children are already hidden. This loop is here for backwards compatibility:<br /> * the old way of making NavFrames start out collapsed was to manually add style=&quot;display:none&quot;<br /> * to all the NavPic/NavContent elements. Since this was bad for accessibility (no way to make<br /> * the content visible without JavaScript support), the new recommended way is to add the class<br /> * &quot;collapsed&quot; to the NavFrame itself, just like with collapsible tables.<br /> */<br /> for ( NavChild = NavFrame.firstChild; NavChild != null &amp;&amp; !isCollapsed; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavPic' ) || $( NavChild ).hasClass( 'NavContent' ) ) {<br /> if ( NavChild.style.display === 'none' ) {<br /> isCollapsed = true;<br /> }<br /> }<br /> }<br /> if ( isCollapsed ) {<br /> for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavPic' ) || $( NavChild ).hasClass( 'NavContent' ) ) {<br /> NavChild.style.display = 'none';<br /> }<br /> }<br /> }<br /> var NavToggleText = document.createTextNode( isCollapsed ? NavigationBarShow : NavigationBarHide );<br /> NavToggle.appendChild( NavToggleText );<br /> <br /> /* Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked) */<br /> for( var j = 0; j &lt; NavFrame.childNodes.length; j++ ) {<br /> if ( $( NavFrame.childNodes[j] ).hasClass( 'NavHead' ) ) {<br /> NavToggle.style.color = NavFrame.childNodes[j].style.color;<br /> NavFrame.childNodes[j].appendChild( NavToggle );<br /> }<br /> }<br /> NavFrame.setAttribute( 'id', 'NavFrame' + indexNavigationBar );<br /> }<br /> } );<br /> }<br /> <br /> mw.hook( 'wikipage.content' ).add( createNavigationBarToggleButton );<br /> <br /> /**<br /> * Uploadwizard_newusers<br /> * Switches in a message for non-autoconfirmed users at [[Wikipedia:Upload]]<br /> *<br /> * Maintainers: [[User:Krimpet]]<br /> */<br /> function uploadwizard_newusers() {<br /> if ( mw.config.get( 'wgNamespaceNumber' ) === 4 &amp;&amp; mw.config.get( 'wgTitle' ) === 'Upload' &amp;&amp; mw.config.get( 'wgAction' ) === 'view' ) {<br /> var oldDiv = document.getElementById( 'autoconfirmedusers' ),<br /> newDiv = document.getElementById( 'newusers' );<br /> if ( oldDiv &amp;&amp; newDiv ) {<br /> var userGroups = mw.config.get( 'wgUserGroups' );<br /> if ( userGroups ) {<br /> for ( var i = 0; i &lt; userGroups.length; i++ ) {<br /> if ( userGroups[i] === 'autoconfirmed' ) {<br /> oldDiv.style.display = 'block';<br /> newDiv.style.display = 'none';<br /> return;<br /> }<br /> }<br /> }<br /> oldDiv.style.display = 'none';<br /> newDiv.style.display = 'block';<br /> return;<br /> }<br /> }<br /> }<br /> <br /> $(uploadwizard_newusers);<br /> <br /> /**<br /> * Magic editintros ****************************************************<br /> *<br /> * Description: Adds editintros on disambiguation pages and BLP pages.<br /> * Maintainers: [[User:RockMFR]]<br /> */<br /> function addEditIntro( name ) {<br /> $( '.mw-editsection, #ca-edit' ).find( 'a' ).each( function ( i, el ) {<br /> el.href = $( this ).attr( 'href' ) + '&amp;editintro=' + name;<br /> } );<br /> }<br /> <br /> if ( mw.config.get( 'wgNamespaceNumber' ) === 0 ) {<br /> $( function () {<br /> if ( document.getElementById( 'disambigbox' ) ) {<br /> addEditIntro( 'Template:Disambig_editintro' );<br /> }<br /> } );<br /> <br /> $( function () {<br /> var cats = mw.config.get('wgCategories');<br /> if ( !cats ) {<br /> return;<br /> }<br /> if ( $.inArray( 'Living people', cats ) !== -1 || $.inArray( 'Possibly living people', cats ) !== -1 ) {<br /> addEditIntro( 'Template:BLP_editintro' );<br /> }<br /> } );<br /> }<br /> <br /> /* End of mw.loader.using callback */<br /> } );<br /> <br /> <br /> /* Define functions for showing/hiding language-specific text blocks */<br /> function hide_by_css_class(clzName) {<br /> document.getElementsByClassName(clzName)[0].style.visibility = 'hidden';<br /> }<br /> <br /> function show_by_css_class(clzName) {<br /> document.getElementsByClassName(clzName)[0].style.visibility = 'visible';<br /> }<br /> <br /> $(function() {<br /> var lang_sel_html = &quot;&lt;div&gt;&lt;div style=\&quot;display:inline;\&quot; onclick=\&quot;hide_by_css_class('lang_zh'); show_by_css_class('lang_en');\&quot;&gt;EN&lt;/div&gt; | &quot; +<br /> &quot;&lt;div style=\&quot;display:inline;\&quot; onclick=\&quot;hide_by_css_class('lang_en'); show_by_css_class('lang_zh');\&quot;&gt;ZH&lt;/div&gt; | &quot; +<br /> &quot;&lt;div style=\&quot;display:inline;\&quot; onclick=\&quot;show_by_css_class('lang_en'); show_by_css_class('lang_zh');\&quot;&gt;Both&lt;/div&gt;&quot;+<br /> &quot;&lt;/div&gt;&quot;;<br /> <br /> $('#lang_sel_enzh').html(lang_sel_html);<br /> });<br /> <br /> $(function() {<br /> var new_html = &quot;&lt;input type=&quot;text&quot; name=&quot;hanzi&quot; onchange=&quot;alert('value of name field is changed')&quot;&gt;&quot;;<br /> <br /> $('#spreadsheet_search_1').html(new_html);<br /> });</div> Admin https://langwiki.org/index.php?title=Home&diff=3259 Home 2020-01-02T22:30:27Z <p>Admin:</p> <hr /> <div>&lt;center&gt;[[File:Langwiki-logo.png|link=语言维基首页]]<br /> <br /> &lt;big&gt;'''Langwiki 语言维基'''&lt;/big&gt;<br /> <br /> {| class=&quot;wikitable&quot; style=&quot;text-align: center;&quot;<br /> | colspan=&quot;2&quot; |'''Select Your Language 语言选择'''<br /> |-<br /> | [[Langwiki|English&lt;br&gt;(under construction)]] || [[语言维基首页|中文&lt;br&gt;(当前推荐入口)]]<br /> |}<br /> '''Active Projects 活跃志愿者项目'''<br /> <br /> [[语言爱好者统一码|古文字编码和字体整理]]<br /> <br /> [[古诗文中古音标注步骤|古诗文中古音标注]] 💰<br /> <br /> [[语言维基:汉字词源研究|汉字词源研究]] 🆕<br /> <br /> 满文标注 https://langwiki.org/tools/annotator/&lt;nowiki/&gt;{{langwiki-tool-cn}}</div> Admin https://langwiki.org/index.php?title=%E8%AF%AD%E8%A8%80%E7%BB%B4%E5%9F%BA:%E6%B1%89%E5%AD%97%E8%AF%8D%E6%BA%90%E7%A0%94%E7%A9%B6&diff=3258 语言维基:汉字词源研究 2020-01-02T22:25:03Z <p>Admin:</p> <hr /> <div>本词表可以由注册用户在线编辑,请双击数据格进行添加和修改。感谢大家贡献力量!<br /> <br /> &lt;spreadsheet sheet=&quot;0&quot; file=&quot;hanyuciyuan-2019.xlsx&quot; /&gt;</div> Admin https://langwiki.org/index.php?title=%E8%AF%AD%E8%A8%80%E7%BB%B4%E5%9F%BA:SpreadsheetTest&diff=3255 语言维基:SpreadsheetTest 2020-01-02T22:03:00Z <p>Admin:</p> <hr /> <div>&lt;spreadsheet sheet=&quot;0&quot; file=&quot;langwiki-test.xlsx&quot; /&gt;</div> Admin https://langwiki.org/index.php?title=Home&diff=3254 Home 2020-01-02T01:12:03Z <p>Admin:</p> <hr /> <div>&lt;center&gt;[[File:Langwiki-logo.png|link=语言维基首页]]<br /> <br /> &lt;big&gt;'''Langwiki 语言维基'''&lt;/big&gt;<br /> <br /> {| class=&quot;wikitable&quot; style=&quot;text-align: center;&quot;<br /> | colspan=&quot;2&quot; |'''Select Your Language 语言选择'''<br /> |-<br /> | [[Langwiki|English&lt;br&gt;(under construction)]] || [[语言维基首页|中文&lt;br&gt;(当前推荐入口)]]<br /> |}<br /> '''Active Projects 活跃志愿者项目'''<br /> <br /> [[语言爱好者统一码|古文字编码和字体整理]]<br /> <br /> [[古诗文中古音标注步骤|古诗文中古音标注]] 💰<br /> <br /> 满文标注 https://langwiki.org/tools/annotator/&lt;nowiki/&gt;{{langwiki-tool-cn}}</div> Admin https://langwiki.org/index.php?title=%E6%BB%A1%E8%AF%AD&diff=3207 满语 2019-12-02T20:21:14Z <p>Admin:</p> <hr /> <div>== 消歧义页 ==<br /> * [[满语 首页]] 满语学习资料<br /> <br /> * [[满语 词条]] 满语词条概念<br /> [[Category:满洲语]]</div> Admin https://langwiki.org/index.php?title=%E6%BB%A1%E8%AF%AD&diff=3206 满语 2019-12-02T20:20:46Z <p>Admin:</p> <hr /> <div>消歧义页<br /> <br /> [[满语 首页]] 满语学习资料<br /> [[满语 词条]] 满语词条概念<br /> <br /> [[Category:满洲语]]</div> Admin https://langwiki.org/index.php?title=%E6%BB%A1%E8%AF%AD_%E8%AF%8D%E6%9D%A1&diff=3205 满语 词条 2019-12-02T20:19:21Z <p>Admin:创建页面,内容为“'''满语'''属于阿尔泰语系通古斯语族,是满族的传统语言。满语是古代女真语的一个继承者,曾...”</p> <hr /> <div>'''满语'''属于[[阿尔泰语系]][[通古斯语族]],是满族的传统语言。满语是古代[[女真语]]的一个[[语言的继承关系|继承者]],曾是[[清朝]]的国语,留下大量历史文献,后来逐渐衰微,现为[[濒危语言]]。满语的[[文字系统]]使用[[满文字母]],乃是对[[传统蒙古文字母]]进行了少量的改动而成。基本[[语序]]为[[主-宾-谓]],属于[[黏着语]]。</div> Admin https://langwiki.org/index.php?title=Template:MainPage/ltc/content-r1&diff=3204 Template:MainPage/ltc/content-r1 2019-12-02T20:17:52Z <p>Admin:</p> <hr /> <div>[[File:Pu I's English book with Manchu.png|thumb|center|溥仪学习英文用的本子,上面用满文标注了发音。|link=满语_首页]]<br /> <br /> 昔日大清之国语,今日却濒临灭绝。让我们一窥这门神秘语言的真实面貌。<br /> <br /> 我们提供了免费的满语教程,开放的在线满文图书馆和权威的清代御製满文辞书。我们的计划是提供足够的资源,使零基础的学习者可以由此打好满语的基础,而有一定基础的人可以继续提高。<br /> <br /> &lt;center&gt;[[满语_首页|了解更多]]&lt;/center&gt;</div> Admin https://langwiki.org/index.php?title=%E6%BB%A1%E8%AF%AD%EF%BC%88%E5%8E%9F%EF%BC%89&diff=3203 满语(原) 2019-12-02T20:14:20Z <p>Admin:Admin移动页面满语(原)至满语 首页:用于入口页面</p> <hr /> <div>#重定向 [[满语 首页]]</div> Admin https://langwiki.org/index.php?title=%E6%BB%A1%E8%AF%AD_%E9%A6%96%E9%A1%B5&diff=3202 满语 首页 2019-12-02T20:14:19Z <p>Admin:Admin移动页面满语(原)至满语 首页:用于入口页面</p> <hr /> <div>{{UseFont|Manchu}}<br /> {{MainPageLayout<br /> |lang=mnc-zh<br /> |border-color = #a7d7f9&lt;!--#DD2211 udmurt red--&gt;<br /> |bgcolor = #C6DEFE<br /> |bgimage = Bluebg rounded.png<br /> |bgimage2 = Bluebg rounded2.png<br /> |middot-color = #6495ed&lt;!--#DD2211 udmurt red--&gt;<br /> |know-pic = PL_Wiki_CzyWiesz_ikona.svg<br /> |news-pic = PL_Wiki_Aktualnosci_ikona.svg<br /> |today-pic = PL_Wiki_Kalendarium_ikona.svg<br /> |fa-pic = HSUtvald.svg<br /> |ga-pic = HSBra.svg<br /> |potd-pic = PL_Wiki_InM_ikona.svg<br /> |flists-pic = RU Wiki FLP icon.svg<br /> |cotw-pic = Text-x-generic with pencil-2.svg<br /> |wiki-pic = W-circle.svg<br /> |turk-wiki-pic = HSWPedia.svg<br /> |wmprj-pic = Wikimedia-logo-circle.svg<br /> |enc-pic = Nuvola apps bookcase Icône HS.svg<br /> |h1=intro-left<br /> |h2=intro-center<br /> |h3=intro-right<br /> |h4=<br /> |l1=l1<br /> |l2=l2<br /> |r1=r1<br /> |r2=r2<br /> |ws=MainPage/mnc-zh/section-plus1<br /> |f1=plus2<br /> |f2=plus3<br /> |f3=plus4<br /> }}<br /> <br /> [[Category:满洲语]]</div> Admin https://langwiki.org/index.php?title=%E6%BB%A1%E8%AF%AD&diff=3201 满语 2019-12-02T20:12:39Z <p>Admin:恢复Afakū(讨论)的编辑至Pawmot的最后版本</p> <hr /> <div>{{UseFont|Manchu}}<br /> {{MainPageLayout<br /> |lang=mnc-zh<br /> |border-color = #a7d7f9&lt;!--#DD2211 udmurt red--&gt;<br /> |bgcolor = #C6DEFE<br /> |bgimage = Bluebg rounded.png<br /> |bgimage2 = Bluebg rounded2.png<br /> |middot-color = #6495ed&lt;!--#DD2211 udmurt red--&gt;<br /> |know-pic = PL_Wiki_CzyWiesz_ikona.svg<br /> |news-pic = PL_Wiki_Aktualnosci_ikona.svg<br /> |today-pic = PL_Wiki_Kalendarium_ikona.svg<br /> |fa-pic = HSUtvald.svg<br /> |ga-pic = HSBra.svg<br /> |potd-pic = PL_Wiki_InM_ikona.svg<br /> |flists-pic = RU Wiki FLP icon.svg<br /> |cotw-pic = Text-x-generic with pencil-2.svg<br /> |wiki-pic = W-circle.svg<br /> |turk-wiki-pic = HSWPedia.svg<br /> |wmprj-pic = Wikimedia-logo-circle.svg<br /> |enc-pic = Nuvola apps bookcase Icône HS.svg<br /> |h1=intro-left<br /> |h2=intro-center<br /> |h3=intro-right<br /> |h4=<br /> |l1=l1<br /> |l2=l2<br /> |r1=r1<br /> |r2=r2<br /> |ws=MainPage/mnc-zh/section-plus1<br /> |f1=plus2<br /> |f2=plus3<br /> |f3=plus4<br /> }}<br /> <br /> [[Category:满洲语]]</div> Admin https://langwiki.org/index.php?title=%E8%AF%AD%E8%A8%80%E7%BB%B4%E5%9F%BA:%E6%B5%8B%E8%AF%95&diff=3160 语言维基:测试 2019-11-25T05:27:22Z <p>Admin:</p> <hr /> <div>&lt;div id=&quot;lang_sel_enzh&quot;&gt;&lt;/div&gt;<br /> <br /> 【双语对照】<br /> &lt;div class=&quot;lang_en&quot;&gt;Los Angeles is a popular city for tourism.&lt;/div&gt;<br /> &lt;div class=&quot;lang_zh&quot;&gt;洛杉矶是一个时尚的旅游城市。&lt;/div&gt;</div> Admin https://langwiki.org/index.php?title=MediaWiki:Common.js&diff=3159 MediaWiki:Common.js 2019-11-25T05:26:25Z <p>Admin:</p> <hr /> <div>/* 这里的任何JavaScript将为所有用户在每次页面载入时加载。 */<br /> <br /> /**<br /> * Keep code in MediaWiki:Common.js to a minimum as it is unconditionally<br /> * loaded for all users on every wiki page. If possible create a gadget that is<br /> * enabled by default instead of adding it here (since gadgets are fully<br /> * optimized ResourceLoader modules with possibility to add dependencies etc.)<br /> *<br /> * Since Common.js isn't a gadget, there is no place to declare its<br /> * dependencies, so we have to lazy load them with mw.loader.using on demand and<br /> * then execute the rest in the callback. In most cases these dependencies will<br /> * be loaded (or loading) already and the callback will not be delayed. In case a<br /> * dependency hasn't arrived yet it'll make sure those are loaded before this.<br /> */<br /> <br /> /* global mw, $ */<br /> /* jshint strict:false, browser:true */<br /> <br /> mw.loader.using( ['mediawiki.user', 'mediawiki.util', 'mediawiki.notify', 'jquery.client'] ).done( function () {<br /> /* Begin of mw.loader.using callback */<br /> <br /> /**<br /> * Main Page layout fixes<br /> *<br /> * Description: Adds an additional link to the complete list of languages available.<br /> * Maintainers: [[User:AzaToth]], [[User:R. Koot]], [[User:Alex Smotrov]]<br /> */<br /> if ( mw.config.get( 'wgPageName' ) === 'Main_Page' || mw.config.get( 'wgPageName' ) === 'Talk:Main_Page' ) {<br /> $( function () {<br /> mw.util.addPortletLink( 'p-lang', '//meta.wikimedia.org/wiki/List_of_Wikipedias',<br /> 'Complete list', 'interwiki-completelist', 'Complete list of Wikipedias' );<br /> } );<br /> }<br /> <br /> /**<br /> * Redirect User:Name/skin.js and skin.css to the current skin's pages<br /> * (unless the 'skin' page really exists)<br /> * @source: http://www.mediawiki.org/wiki/Snippets/Redirect_skin.js<br /> * @rev: 2<br /> */<br /> if ( mw.config.get( 'wgArticleId' ) === 0 &amp;&amp; mw.config.get( 'wgNamespaceNumber' ) === 2 ) {<br /> var titleParts = mw.config.get( 'wgPageName' ).split( '/' );<br /> /* Make sure there was a part before and after the slash<br /> and that the latter is 'skin.js' or 'skin.css' */<br /> if ( titleParts.length == 2 ) {<br /> var userSkinPage = titleParts.shift() + '/' + mw.config.get( 'skin' );<br /> if ( titleParts.slice( -1 ) == 'skin.js' ) {<br /> window.location.href = mw.util.getUrl( userSkinPage + '.js' );<br /> } else if ( titleParts.slice( -1 ) == 'skin.css' ) {<br /> window.location.href = mw.util.getUrl( userSkinPage + '.css' );<br /> }<br /> }<br /> }<br /> <br /> /**<br /> * Map addPortletLink to mw.util<br /> * @deprecated: Use mw.util.addPortletLink instead.<br /> */<br /> mw.log.deprecate( window, 'addPortletLink', mw.util.addPortletLink, 'Use mw.util.addPortletLink instead' );<br /> <br /> /**<br /> * Extract a URL parameter from the current URL<br /> * @deprecated: Use mw.util.getParamValue with proper escaping<br /> */<br /> mw.log.deprecate( window, 'getURLParamValue', mw.util.getParamValue, 'Use mw.util.getParamValue instead' );<br /> <br /> /**<br /> * Test if an element has a certain class<br /> * @deprecated: Use $(element).hasClass() instead.<br /> */<br /> mw.log.deprecate( window, 'hasClass', function ( element, className ) {<br /> return $( element ).hasClass( className );<br /> }, 'Use jQuery.hasClass() instead' );<br /> <br /> /**<br /> * @source www.mediawiki.org/wiki/Snippets/Load_JS_and_CSS_by_URL<br /> * @rev 6<br /> */<br /> var extraCSS = mw.util.getParamValue( 'withCSS' ),<br /> extraJS = mw.util.getParamValue( 'withJS' );<br /> <br /> if ( extraCSS ) {<br /> if ( extraCSS.match( /^MediaWiki:[^&amp;&lt;&gt;=%#]*\.css$/ ) ) {<br /> mw.loader.load( '/w/index.php?title=' + extraCSS + '&amp;action=raw&amp;ctype=text/css', 'text/css' );<br /> } else {<br /> mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withCSS value' } );<br /> }<br /> }<br /> <br /> if ( extraJS ) {<br /> if ( extraJS.match( /^MediaWiki:[^&amp;&lt;&gt;=%#]*\.js$/ ) ) {<br /> mw.loader.load( '/w/index.php?title=' + extraJS + '&amp;action=raw&amp;ctype=text/javascript' );<br /> } else {<br /> mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withJS value' } );<br /> }<br /> }<br /> <br /> /**<br /> * WikiMiniAtlas<br /> *<br /> * Description: WikiMiniAtlas is a popup click and drag world map.<br /> * This script causes all of our coordinate links to display the WikiMiniAtlas popup button.<br /> * The script itself is located on meta because it is used by many projects.<br /> * See [[Meta:WikiMiniAtlas]] for more information.<br /> * Maintainers: [[User:Dschwen]]<br /> */<br /> ( function () {<br /> var require_wikiminiatlas = false;<br /> var coord_filter = /geohack/;<br /> $( function () {<br /> $( 'a.external.text' ).each( function( key, link ) {<br /> if ( link.href &amp;&amp; coord_filter.exec( link.href ) ) {<br /> require_wikiminiatlas = true;<br /> // break from loop<br /> return false;<br /> }<br /> } );<br /> if ( $( 'div.kmldata' ).length ) {<br /> require_wikiminiatlas = true;<br /> }<br /> if ( require_wikiminiatlas ) {<br /> mw.loader.load( '//meta.wikimedia.org/w/index.php?title=MediaWiki:Wikiminiatlas.js&amp;action=raw&amp;ctype=text/javascript' );<br /> }<br /> } );<br /> } )();<br /> <br /> /**<br /> * Collapsible tables<br /> *<br /> * Allows tables to be collapsed, showing only the header. See [[Help:Collapsing]].<br /> *<br /> * @version 2.0.3 (2014-03-14)<br /> * @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-collapsibleTables.js<br /> * @author [[User:R. Koot]]<br /> * @author [[User:Krinkle]]<br /> * @deprecated Since MediaWiki 1.20: Use class=&quot;mw-collapsible&quot; instead which<br /> * is supported in MediaWiki core.<br /> */<br /> <br /> var autoCollapse = 2;<br /> var collapseCaption = 'hide';<br /> var expandCaption = 'show';<br /> var tableIndex = 0;<br /> <br /> function collapseTable( tableIndex ) {<br /> var Button = document.getElementById( 'collapseButton' + tableIndex );<br /> var Table = document.getElementById( 'collapsibleTable' + tableIndex );<br /> <br /> if ( !Table || !Button ) {<br /> return false;<br /> }<br /> <br /> var Rows = Table.rows;<br /> var i;<br /> var $row0 = $(Rows[0]);<br /> <br /> if ( Button.firstChild.data === collapseCaption ) {<br /> for ( i = 1; i &lt; Rows.length; i++ ) {<br /> Rows[i].style.display = 'none';<br /> }<br /> Button.firstChild.data = expandCaption;<br /> } else {<br /> for ( i = 1; i &lt; Rows.length; i++ ) {<br /> Rows[i].style.display = $row0.css( 'display' );<br /> }<br /> Button.firstChild.data = collapseCaption;<br /> }<br /> }<br /> <br /> function createClickHandler( tableIndex ) {<br /> return function ( e ) {<br /> e.preventDefault();<br /> collapseTable( tableIndex );<br /> };<br /> }<br /> <br /> function createCollapseButtons( $content ) {<br /> var NavigationBoxes = {};<br /> var $Tables = $content.find( 'table' );<br /> var i;<br /> <br /> $Tables.each( function( i, table ) {<br /> if ( $(table).hasClass( 'collapsible' ) ) {<br /> <br /> /* only add button and increment count if there is a header row to work with */<br /> var HeaderRow = table.getElementsByTagName( 'tr' )[0];<br /> if ( !HeaderRow ) {<br /> return;<br /> }<br /> var Header = table.getElementsByTagName( 'th' )[0];<br /> if ( !Header ) {<br /> return;<br /> }<br /> <br /> NavigationBoxes[ tableIndex ] = table;<br /> table.setAttribute( 'id', 'collapsibleTable' + tableIndex );<br /> <br /> var Button = document.createElement( 'span' );<br /> var ButtonLink = document.createElement( 'a' );<br /> var ButtonText = document.createTextNode( collapseCaption );<br /> // Styles are declared in [[MediaWiki:Common.css]]<br /> Button.className = 'collapseButton';<br /> <br /> ButtonLink.style.color = Header.style.color;<br /> ButtonLink.setAttribute( 'id', 'collapseButton' + tableIndex );<br /> ButtonLink.setAttribute( 'href', '#' );<br /> $( ButtonLink ).on( 'click', createClickHandler( tableIndex ) );<br /> ButtonLink.appendChild( ButtonText );<br /> <br /> Button.appendChild( document.createTextNode( '[' ) );<br /> Button.appendChild( ButtonLink );<br /> Button.appendChild( document.createTextNode( ']' ) );<br /> <br /> Header.insertBefore( Button, Header.firstChild );<br /> tableIndex++;<br /> }<br /> } );<br /> <br /> for ( i = 0; i &lt; tableIndex; i++ ) {<br /> if ( $( NavigationBoxes[i] ).hasClass( 'collapsed' ) ||<br /> ( tableIndex &gt;= autoCollapse &amp;&amp; $( NavigationBoxes[i] ).hasClass( 'autocollapse' ) )<br /> ) {<br /> collapseTable( i );<br /> }<br /> else if ( $( NavigationBoxes[i] ).hasClass ( 'innercollapse' ) ) {<br /> var element = NavigationBoxes[i];<br /> while ((element = element.parentNode)) {<br /> if ( $( element ).hasClass( 'outercollapse' ) ) {<br /> collapseTable ( i );<br /> break;<br /> }<br /> }<br /> }<br /> }<br /> }<br /> <br /> mw.hook( 'wikipage.content' ).add( createCollapseButtons );<br /> <br /> /**<br /> * Add support to mw-collapsible for autocollapse, innercollapse and outercollapse<br /> *<br /> * Maintainers: TheDJ<br /> */<br /> function mwCollapsibleSetup( $collapsibleContent ) {<br /> var $element,<br /> autoCollapseThreshold = 2;<br /> $.each( $collapsibleContent, function (index, element) {<br /> $element = $( element );<br /> if ( index &gt; autoCollapseThreshold &amp;&amp; $element.hasClass( 'autocollapse' ) ) {<br /> $element.data( 'mw-collapsible' ).collapse();<br /> } else if ( $element.hasClass( 'innercollapse' ) ) {<br /> if ( $element.parents( '.outercollapse' ).length &gt; 0 ) {<br /> $element.data( 'mw-collapsible' ).collapse();<br /> }<br /> }<br /> } );<br /> }<br /> <br /> mw.hook( 'wikipage.collapsibleContent' ).add( mwCollapsibleSetup );<br /> <br /> /**<br /> * Dynamic Navigation Bars (experimental)<br /> *<br /> * Description: See [[Wikipedia:NavFrame]].<br /> * Maintainers: UNMAINTAINED<br /> */<br /> <br /> /* set up the words in your language */<br /> var NavigationBarHide = '[' + collapseCaption + ']';<br /> var NavigationBarShow = '[' + expandCaption + ']';<br /> var indexNavigationBar = 0;<br /> <br /> /**<br /> * Shows and hides content and picture (if available) of navigation bars<br /> * Parameters:<br /> * indexNavigationBar: the index of navigation bar to be toggled<br /> **/<br /> window.toggleNavigationBar = function ( indexNavigationBar, event ) {<br /> var NavToggle = document.getElementById( 'NavToggle' + indexNavigationBar );<br /> var NavFrame = document.getElementById( 'NavFrame' + indexNavigationBar );<br /> var NavChild;<br /> <br /> if ( !NavFrame || !NavToggle ) {<br /> return false;<br /> }<br /> <br /> /* if shown now */<br /> if ( NavToggle.firstChild.data === NavigationBarHide ) {<br /> for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavContent' ) || $( NavChild ).hasClass( 'NavPic' ) ) {<br /> NavChild.style.display = 'none';<br /> }<br /> }<br /> NavToggle.firstChild.data = NavigationBarShow;<br /> <br /> /* if hidden now */<br /> } else if ( NavToggle.firstChild.data === NavigationBarShow ) {<br /> for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavContent' ) || $( NavChild ).hasClass( 'NavPic' ) ) {<br /> NavChild.style.display = 'block';<br /> }<br /> }<br /> NavToggle.firstChild.data = NavigationBarHide;<br /> }<br /> <br /> event.preventDefault();<br /> };<br /> <br /> /* adds show/hide-button to navigation bars */<br /> function createNavigationBarToggleButton( $content ) {<br /> var NavChild;<br /> /* iterate over all &lt; div &gt;-elements */<br /> var $divs = $content.find( 'div' );<br /> $divs.each( function ( i, NavFrame ) {<br /> /* if found a navigation bar */<br /> if ( $( NavFrame ).hasClass( 'NavFrame' ) ) {<br /> <br /> indexNavigationBar++;<br /> var NavToggle = document.createElement( 'a' );<br /> NavToggle.className = 'NavToggle';<br /> NavToggle.setAttribute( 'id', 'NavToggle' + indexNavigationBar );<br /> NavToggle.setAttribute( 'href', '#' );<br /> $( NavToggle ).on( 'click', $.proxy( window.toggleNavigationBar, window, indexNavigationBar ) );<br /> <br /> var isCollapsed = $( NavFrame ).hasClass( 'collapsed' );<br /> /**<br /> * Check if any children are already hidden. This loop is here for backwards compatibility:<br /> * the old way of making NavFrames start out collapsed was to manually add style=&quot;display:none&quot;<br /> * to all the NavPic/NavContent elements. Since this was bad for accessibility (no way to make<br /> * the content visible without JavaScript support), the new recommended way is to add the class<br /> * &quot;collapsed&quot; to the NavFrame itself, just like with collapsible tables.<br /> */<br /> for ( NavChild = NavFrame.firstChild; NavChild != null &amp;&amp; !isCollapsed; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavPic' ) || $( NavChild ).hasClass( 'NavContent' ) ) {<br /> if ( NavChild.style.display === 'none' ) {<br /> isCollapsed = true;<br /> }<br /> }<br /> }<br /> if ( isCollapsed ) {<br /> for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavPic' ) || $( NavChild ).hasClass( 'NavContent' ) ) {<br /> NavChild.style.display = 'none';<br /> }<br /> }<br /> }<br /> var NavToggleText = document.createTextNode( isCollapsed ? NavigationBarShow : NavigationBarHide );<br /> NavToggle.appendChild( NavToggleText );<br /> <br /> /* Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked) */<br /> for( var j = 0; j &lt; NavFrame.childNodes.length; j++ ) {<br /> if ( $( NavFrame.childNodes[j] ).hasClass( 'NavHead' ) ) {<br /> NavToggle.style.color = NavFrame.childNodes[j].style.color;<br /> NavFrame.childNodes[j].appendChild( NavToggle );<br /> }<br /> }<br /> NavFrame.setAttribute( 'id', 'NavFrame' + indexNavigationBar );<br /> }<br /> } );<br /> }<br /> <br /> mw.hook( 'wikipage.content' ).add( createNavigationBarToggleButton );<br /> <br /> /**<br /> * Uploadwizard_newusers<br /> * Switches in a message for non-autoconfirmed users at [[Wikipedia:Upload]]<br /> *<br /> * Maintainers: [[User:Krimpet]]<br /> */<br /> function uploadwizard_newusers() {<br /> if ( mw.config.get( 'wgNamespaceNumber' ) === 4 &amp;&amp; mw.config.get( 'wgTitle' ) === 'Upload' &amp;&amp; mw.config.get( 'wgAction' ) === 'view' ) {<br /> var oldDiv = document.getElementById( 'autoconfirmedusers' ),<br /> newDiv = document.getElementById( 'newusers' );<br /> if ( oldDiv &amp;&amp; newDiv ) {<br /> var userGroups = mw.config.get( 'wgUserGroups' );<br /> if ( userGroups ) {<br /> for ( var i = 0; i &lt; userGroups.length; i++ ) {<br /> if ( userGroups[i] === 'autoconfirmed' ) {<br /> oldDiv.style.display = 'block';<br /> newDiv.style.display = 'none';<br /> return;<br /> }<br /> }<br /> }<br /> oldDiv.style.display = 'none';<br /> newDiv.style.display = 'block';<br /> return;<br /> }<br /> }<br /> }<br /> <br /> $(uploadwizard_newusers);<br /> <br /> /**<br /> * Magic editintros ****************************************************<br /> *<br /> * Description: Adds editintros on disambiguation pages and BLP pages.<br /> * Maintainers: [[User:RockMFR]]<br /> */<br /> function addEditIntro( name ) {<br /> $( '.mw-editsection, #ca-edit' ).find( 'a' ).each( function ( i, el ) {<br /> el.href = $( this ).attr( 'href' ) + '&amp;editintro=' + name;<br /> } );<br /> }<br /> <br /> if ( mw.config.get( 'wgNamespaceNumber' ) === 0 ) {<br /> $( function () {<br /> if ( document.getElementById( 'disambigbox' ) ) {<br /> addEditIntro( 'Template:Disambig_editintro' );<br /> }<br /> } );<br /> <br /> $( function () {<br /> var cats = mw.config.get('wgCategories');<br /> if ( !cats ) {<br /> return;<br /> }<br /> if ( $.inArray( 'Living people', cats ) !== -1 || $.inArray( 'Possibly living people', cats ) !== -1 ) {<br /> addEditIntro( 'Template:BLP_editintro' );<br /> }<br /> } );<br /> }<br /> <br /> /* End of mw.loader.using callback */<br /> } );<br /> <br /> <br /> /* Define functions for showing/hiding language-specific text blocks */<br /> function hide_by_css_class(clzName) {<br /> document.getElementsByClassName(clzName)[0].style.visibility = 'hidden';<br /> }<br /> <br /> function show_by_css_class(clzName) {<br /> document.getElementsByClassName(clzName)[0].style.visibility = 'visible';<br /> }<br /> <br /> $(function() {<br /> var lang_sel_html = &quot;&lt;div&gt;&lt;div style=\&quot;display:inline;\&quot; onclick=\&quot;hide_by_css_class('lang_zh'); show_by_css_class('lang_en');\&quot;&gt;EN&lt;/div&gt; | &quot; +<br /> &quot;&lt;div style=\&quot;display:inline;\&quot; onclick=\&quot;hide_by_css_class('lang_en'); show_by_css_class('lang_zh');\&quot;&gt;ZH&lt;/div&gt; | &quot; +<br /> &quot;&lt;div style=\&quot;display:inline;\&quot; onclick=\&quot;show_by_css_class('lang_en'); show_by_css_class('lang_zh');\&quot;&gt;Both&lt;/div&gt;&quot;+<br /> &quot;&lt;/div&gt;&quot;;<br /> <br /> $('#lang_sel_enzh').html(lang_sel_html);<br /> });</div> Admin https://langwiki.org/index.php?title=MediaWiki:Common.js&diff=3158 MediaWiki:Common.js 2019-11-25T05:24:09Z <p>Admin:</p> <hr /> <div>/* 这里的任何JavaScript将为所有用户在每次页面载入时加载。 */<br /> <br /> /**<br /> * Keep code in MediaWiki:Common.js to a minimum as it is unconditionally<br /> * loaded for all users on every wiki page. If possible create a gadget that is<br /> * enabled by default instead of adding it here (since gadgets are fully<br /> * optimized ResourceLoader modules with possibility to add dependencies etc.)<br /> *<br /> * Since Common.js isn't a gadget, there is no place to declare its<br /> * dependencies, so we have to lazy load them with mw.loader.using on demand and<br /> * then execute the rest in the callback. In most cases these dependencies will<br /> * be loaded (or loading) already and the callback will not be delayed. In case a<br /> * dependency hasn't arrived yet it'll make sure those are loaded before this.<br /> */<br /> <br /> /* global mw, $ */<br /> /* jshint strict:false, browser:true */<br /> <br /> mw.loader.using( ['mediawiki.user', 'mediawiki.util', 'mediawiki.notify', 'jquery.client'] ).done( function () {<br /> /* Begin of mw.loader.using callback */<br /> <br /> /**<br /> * Main Page layout fixes<br /> *<br /> * Description: Adds an additional link to the complete list of languages available.<br /> * Maintainers: [[User:AzaToth]], [[User:R. Koot]], [[User:Alex Smotrov]]<br /> */<br /> if ( mw.config.get( 'wgPageName' ) === 'Main_Page' || mw.config.get( 'wgPageName' ) === 'Talk:Main_Page' ) {<br /> $( function () {<br /> mw.util.addPortletLink( 'p-lang', '//meta.wikimedia.org/wiki/List_of_Wikipedias',<br /> 'Complete list', 'interwiki-completelist', 'Complete list of Wikipedias' );<br /> } );<br /> }<br /> <br /> /**<br /> * Redirect User:Name/skin.js and skin.css to the current skin's pages<br /> * (unless the 'skin' page really exists)<br /> * @source: http://www.mediawiki.org/wiki/Snippets/Redirect_skin.js<br /> * @rev: 2<br /> */<br /> if ( mw.config.get( 'wgArticleId' ) === 0 &amp;&amp; mw.config.get( 'wgNamespaceNumber' ) === 2 ) {<br /> var titleParts = mw.config.get( 'wgPageName' ).split( '/' );<br /> /* Make sure there was a part before and after the slash<br /> and that the latter is 'skin.js' or 'skin.css' */<br /> if ( titleParts.length == 2 ) {<br /> var userSkinPage = titleParts.shift() + '/' + mw.config.get( 'skin' );<br /> if ( titleParts.slice( -1 ) == 'skin.js' ) {<br /> window.location.href = mw.util.getUrl( userSkinPage + '.js' );<br /> } else if ( titleParts.slice( -1 ) == 'skin.css' ) {<br /> window.location.href = mw.util.getUrl( userSkinPage + '.css' );<br /> }<br /> }<br /> }<br /> <br /> /**<br /> * Map addPortletLink to mw.util<br /> * @deprecated: Use mw.util.addPortletLink instead.<br /> */<br /> mw.log.deprecate( window, 'addPortletLink', mw.util.addPortletLink, 'Use mw.util.addPortletLink instead' );<br /> <br /> /**<br /> * Extract a URL parameter from the current URL<br /> * @deprecated: Use mw.util.getParamValue with proper escaping<br /> */<br /> mw.log.deprecate( window, 'getURLParamValue', mw.util.getParamValue, 'Use mw.util.getParamValue instead' );<br /> <br /> /**<br /> * Test if an element has a certain class<br /> * @deprecated: Use $(element).hasClass() instead.<br /> */<br /> mw.log.deprecate( window, 'hasClass', function ( element, className ) {<br /> return $( element ).hasClass( className );<br /> }, 'Use jQuery.hasClass() instead' );<br /> <br /> /**<br /> * @source www.mediawiki.org/wiki/Snippets/Load_JS_and_CSS_by_URL<br /> * @rev 6<br /> */<br /> var extraCSS = mw.util.getParamValue( 'withCSS' ),<br /> extraJS = mw.util.getParamValue( 'withJS' );<br /> <br /> if ( extraCSS ) {<br /> if ( extraCSS.match( /^MediaWiki:[^&amp;&lt;&gt;=%#]*\.css$/ ) ) {<br /> mw.loader.load( '/w/index.php?title=' + extraCSS + '&amp;action=raw&amp;ctype=text/css', 'text/css' );<br /> } else {<br /> mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withCSS value' } );<br /> }<br /> }<br /> <br /> if ( extraJS ) {<br /> if ( extraJS.match( /^MediaWiki:[^&amp;&lt;&gt;=%#]*\.js$/ ) ) {<br /> mw.loader.load( '/w/index.php?title=' + extraJS + '&amp;action=raw&amp;ctype=text/javascript' );<br /> } else {<br /> mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withJS value' } );<br /> }<br /> }<br /> <br /> /**<br /> * WikiMiniAtlas<br /> *<br /> * Description: WikiMiniAtlas is a popup click and drag world map.<br /> * This script causes all of our coordinate links to display the WikiMiniAtlas popup button.<br /> * The script itself is located on meta because it is used by many projects.<br /> * See [[Meta:WikiMiniAtlas]] for more information.<br /> * Maintainers: [[User:Dschwen]]<br /> */<br /> ( function () {<br /> var require_wikiminiatlas = false;<br /> var coord_filter = /geohack/;<br /> $( function () {<br /> $( 'a.external.text' ).each( function( key, link ) {<br /> if ( link.href &amp;&amp; coord_filter.exec( link.href ) ) {<br /> require_wikiminiatlas = true;<br /> // break from loop<br /> return false;<br /> }<br /> } );<br /> if ( $( 'div.kmldata' ).length ) {<br /> require_wikiminiatlas = true;<br /> }<br /> if ( require_wikiminiatlas ) {<br /> mw.loader.load( '//meta.wikimedia.org/w/index.php?title=MediaWiki:Wikiminiatlas.js&amp;action=raw&amp;ctype=text/javascript' );<br /> }<br /> } );<br /> } )();<br /> <br /> /**<br /> * Collapsible tables<br /> *<br /> * Allows tables to be collapsed, showing only the header. See [[Help:Collapsing]].<br /> *<br /> * @version 2.0.3 (2014-03-14)<br /> * @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-collapsibleTables.js<br /> * @author [[User:R. Koot]]<br /> * @author [[User:Krinkle]]<br /> * @deprecated Since MediaWiki 1.20: Use class=&quot;mw-collapsible&quot; instead which<br /> * is supported in MediaWiki core.<br /> */<br /> <br /> var autoCollapse = 2;<br /> var collapseCaption = 'hide';<br /> var expandCaption = 'show';<br /> var tableIndex = 0;<br /> <br /> function collapseTable( tableIndex ) {<br /> var Button = document.getElementById( 'collapseButton' + tableIndex );<br /> var Table = document.getElementById( 'collapsibleTable' + tableIndex );<br /> <br /> if ( !Table || !Button ) {<br /> return false;<br /> }<br /> <br /> var Rows = Table.rows;<br /> var i;<br /> var $row0 = $(Rows[0]);<br /> <br /> if ( Button.firstChild.data === collapseCaption ) {<br /> for ( i = 1; i &lt; Rows.length; i++ ) {<br /> Rows[i].style.display = 'none';<br /> }<br /> Button.firstChild.data = expandCaption;<br /> } else {<br /> for ( i = 1; i &lt; Rows.length; i++ ) {<br /> Rows[i].style.display = $row0.css( 'display' );<br /> }<br /> Button.firstChild.data = collapseCaption;<br /> }<br /> }<br /> <br /> function createClickHandler( tableIndex ) {<br /> return function ( e ) {<br /> e.preventDefault();<br /> collapseTable( tableIndex );<br /> };<br /> }<br /> <br /> function createCollapseButtons( $content ) {<br /> var NavigationBoxes = {};<br /> var $Tables = $content.find( 'table' );<br /> var i;<br /> <br /> $Tables.each( function( i, table ) {<br /> if ( $(table).hasClass( 'collapsible' ) ) {<br /> <br /> /* only add button and increment count if there is a header row to work with */<br /> var HeaderRow = table.getElementsByTagName( 'tr' )[0];<br /> if ( !HeaderRow ) {<br /> return;<br /> }<br /> var Header = table.getElementsByTagName( 'th' )[0];<br /> if ( !Header ) {<br /> return;<br /> }<br /> <br /> NavigationBoxes[ tableIndex ] = table;<br /> table.setAttribute( 'id', 'collapsibleTable' + tableIndex );<br /> <br /> var Button = document.createElement( 'span' );<br /> var ButtonLink = document.createElement( 'a' );<br /> var ButtonText = document.createTextNode( collapseCaption );<br /> // Styles are declared in [[MediaWiki:Common.css]]<br /> Button.className = 'collapseButton';<br /> <br /> ButtonLink.style.color = Header.style.color;<br /> ButtonLink.setAttribute( 'id', 'collapseButton' + tableIndex );<br /> ButtonLink.setAttribute( 'href', '#' );<br /> $( ButtonLink ).on( 'click', createClickHandler( tableIndex ) );<br /> ButtonLink.appendChild( ButtonText );<br /> <br /> Button.appendChild( document.createTextNode( '[' ) );<br /> Button.appendChild( ButtonLink );<br /> Button.appendChild( document.createTextNode( ']' ) );<br /> <br /> Header.insertBefore( Button, Header.firstChild );<br /> tableIndex++;<br /> }<br /> } );<br /> <br /> for ( i = 0; i &lt; tableIndex; i++ ) {<br /> if ( $( NavigationBoxes[i] ).hasClass( 'collapsed' ) ||<br /> ( tableIndex &gt;= autoCollapse &amp;&amp; $( NavigationBoxes[i] ).hasClass( 'autocollapse' ) )<br /> ) {<br /> collapseTable( i );<br /> }<br /> else if ( $( NavigationBoxes[i] ).hasClass ( 'innercollapse' ) ) {<br /> var element = NavigationBoxes[i];<br /> while ((element = element.parentNode)) {<br /> if ( $( element ).hasClass( 'outercollapse' ) ) {<br /> collapseTable ( i );<br /> break;<br /> }<br /> }<br /> }<br /> }<br /> }<br /> <br /> mw.hook( 'wikipage.content' ).add( createCollapseButtons );<br /> <br /> /**<br /> * Add support to mw-collapsible for autocollapse, innercollapse and outercollapse<br /> *<br /> * Maintainers: TheDJ<br /> */<br /> function mwCollapsibleSetup( $collapsibleContent ) {<br /> var $element,<br /> autoCollapseThreshold = 2;<br /> $.each( $collapsibleContent, function (index, element) {<br /> $element = $( element );<br /> if ( index &gt; autoCollapseThreshold &amp;&amp; $element.hasClass( 'autocollapse' ) ) {<br /> $element.data( 'mw-collapsible' ).collapse();<br /> } else if ( $element.hasClass( 'innercollapse' ) ) {<br /> if ( $element.parents( '.outercollapse' ).length &gt; 0 ) {<br /> $element.data( 'mw-collapsible' ).collapse();<br /> }<br /> }<br /> } );<br /> }<br /> <br /> mw.hook( 'wikipage.collapsibleContent' ).add( mwCollapsibleSetup );<br /> <br /> /**<br /> * Dynamic Navigation Bars (experimental)<br /> *<br /> * Description: See [[Wikipedia:NavFrame]].<br /> * Maintainers: UNMAINTAINED<br /> */<br /> <br /> /* set up the words in your language */<br /> var NavigationBarHide = '[' + collapseCaption + ']';<br /> var NavigationBarShow = '[' + expandCaption + ']';<br /> var indexNavigationBar = 0;<br /> <br /> /**<br /> * Shows and hides content and picture (if available) of navigation bars<br /> * Parameters:<br /> * indexNavigationBar: the index of navigation bar to be toggled<br /> **/<br /> window.toggleNavigationBar = function ( indexNavigationBar, event ) {<br /> var NavToggle = document.getElementById( 'NavToggle' + indexNavigationBar );<br /> var NavFrame = document.getElementById( 'NavFrame' + indexNavigationBar );<br /> var NavChild;<br /> <br /> if ( !NavFrame || !NavToggle ) {<br /> return false;<br /> }<br /> <br /> /* if shown now */<br /> if ( NavToggle.firstChild.data === NavigationBarHide ) {<br /> for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavContent' ) || $( NavChild ).hasClass( 'NavPic' ) ) {<br /> NavChild.style.display = 'none';<br /> }<br /> }<br /> NavToggle.firstChild.data = NavigationBarShow;<br /> <br /> /* if hidden now */<br /> } else if ( NavToggle.firstChild.data === NavigationBarShow ) {<br /> for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavContent' ) || $( NavChild ).hasClass( 'NavPic' ) ) {<br /> NavChild.style.display = 'block';<br /> }<br /> }<br /> NavToggle.firstChild.data = NavigationBarHide;<br /> }<br /> <br /> event.preventDefault();<br /> };<br /> <br /> /* adds show/hide-button to navigation bars */<br /> function createNavigationBarToggleButton( $content ) {<br /> var NavChild;<br /> /* iterate over all &lt; div &gt;-elements */<br /> var $divs = $content.find( 'div' );<br /> $divs.each( function ( i, NavFrame ) {<br /> /* if found a navigation bar */<br /> if ( $( NavFrame ).hasClass( 'NavFrame' ) ) {<br /> <br /> indexNavigationBar++;<br /> var NavToggle = document.createElement( 'a' );<br /> NavToggle.className = 'NavToggle';<br /> NavToggle.setAttribute( 'id', 'NavToggle' + indexNavigationBar );<br /> NavToggle.setAttribute( 'href', '#' );<br /> $( NavToggle ).on( 'click', $.proxy( window.toggleNavigationBar, window, indexNavigationBar ) );<br /> <br /> var isCollapsed = $( NavFrame ).hasClass( 'collapsed' );<br /> /**<br /> * Check if any children are already hidden. This loop is here for backwards compatibility:<br /> * the old way of making NavFrames start out collapsed was to manually add style=&quot;display:none&quot;<br /> * to all the NavPic/NavContent elements. Since this was bad for accessibility (no way to make<br /> * the content visible without JavaScript support), the new recommended way is to add the class<br /> * &quot;collapsed&quot; to the NavFrame itself, just like with collapsible tables.<br /> */<br /> for ( NavChild = NavFrame.firstChild; NavChild != null &amp;&amp; !isCollapsed; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavPic' ) || $( NavChild ).hasClass( 'NavContent' ) ) {<br /> if ( NavChild.style.display === 'none' ) {<br /> isCollapsed = true;<br /> }<br /> }<br /> }<br /> if ( isCollapsed ) {<br /> for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavPic' ) || $( NavChild ).hasClass( 'NavContent' ) ) {<br /> NavChild.style.display = 'none';<br /> }<br /> }<br /> }<br /> var NavToggleText = document.createTextNode( isCollapsed ? NavigationBarShow : NavigationBarHide );<br /> NavToggle.appendChild( NavToggleText );<br /> <br /> /* Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked) */<br /> for( var j = 0; j &lt; NavFrame.childNodes.length; j++ ) {<br /> if ( $( NavFrame.childNodes[j] ).hasClass( 'NavHead' ) ) {<br /> NavToggle.style.color = NavFrame.childNodes[j].style.color;<br /> NavFrame.childNodes[j].appendChild( NavToggle );<br /> }<br /> }<br /> NavFrame.setAttribute( 'id', 'NavFrame' + indexNavigationBar );<br /> }<br /> } );<br /> }<br /> <br /> mw.hook( 'wikipage.content' ).add( createNavigationBarToggleButton );<br /> <br /> /**<br /> * Uploadwizard_newusers<br /> * Switches in a message for non-autoconfirmed users at [[Wikipedia:Upload]]<br /> *<br /> * Maintainers: [[User:Krimpet]]<br /> */<br /> function uploadwizard_newusers() {<br /> if ( mw.config.get( 'wgNamespaceNumber' ) === 4 &amp;&amp; mw.config.get( 'wgTitle' ) === 'Upload' &amp;&amp; mw.config.get( 'wgAction' ) === 'view' ) {<br /> var oldDiv = document.getElementById( 'autoconfirmedusers' ),<br /> newDiv = document.getElementById( 'newusers' );<br /> if ( oldDiv &amp;&amp; newDiv ) {<br /> var userGroups = mw.config.get( 'wgUserGroups' );<br /> if ( userGroups ) {<br /> for ( var i = 0; i &lt; userGroups.length; i++ ) {<br /> if ( userGroups[i] === 'autoconfirmed' ) {<br /> oldDiv.style.display = 'block';<br /> newDiv.style.display = 'none';<br /> return;<br /> }<br /> }<br /> }<br /> oldDiv.style.display = 'none';<br /> newDiv.style.display = 'block';<br /> return;<br /> }<br /> }<br /> }<br /> <br /> $(uploadwizard_newusers);<br /> <br /> /**<br /> * Magic editintros ****************************************************<br /> *<br /> * Description: Adds editintros on disambiguation pages and BLP pages.<br /> * Maintainers: [[User:RockMFR]]<br /> */<br /> function addEditIntro( name ) {<br /> $( '.mw-editsection, #ca-edit' ).find( 'a' ).each( function ( i, el ) {<br /> el.href = $( this ).attr( 'href' ) + '&amp;editintro=' + name;<br /> } );<br /> }<br /> <br /> if ( mw.config.get( 'wgNamespaceNumber' ) === 0 ) {<br /> $( function () {<br /> if ( document.getElementById( 'disambigbox' ) ) {<br /> addEditIntro( 'Template:Disambig_editintro' );<br /> }<br /> } );<br /> <br /> $( function () {<br /> var cats = mw.config.get('wgCategories');<br /> if ( !cats ) {<br /> return;<br /> }<br /> if ( $.inArray( 'Living people', cats ) !== -1 || $.inArray( 'Possibly living people', cats ) !== -1 ) {<br /> addEditIntro( 'Template:BLP_editintro' );<br /> }<br /> } );<br /> }<br /> <br /> /* End of mw.loader.using callback */<br /> } );<br /> <br /> <br /> /* Define functions for showing/hiding language-specific text blocks */<br /> function hide_by_css_class(clzName) {<br /> document.getElementsByClassName(clzName)[0].style.visibility = 'hidden';<br /> }<br /> <br /> function show_by_css_class(clzName) {<br /> document.getElementsByClassName(clzName)[0].style.visibility = 'visible';<br /> }<br /> <br /> $(function() {<br /> var lang_sel_html = &quot;&lt;div&gt;&lt;div style=\&quot;display:inline;\&quot; onclick=\&quot;hide_by_css_class('lang_en'); show_by_css_class('lang_zh');\&quot;&gt;EN&lt;/div&gt; | &quot; +<br /> &quot;&lt;div style=\&quot;display:inline;\&quot; onclick=\&quot;hide_by_css_class('lang_zh'); show_by_css_class('lang_en');\&quot;&gt;ZH&lt;/div&gt; | &quot; +<br /> &quot;&lt;div style=\&quot;display:inline;\&quot; onclick=\&quot;show_by_css_class('lang_en'); show_by_css_class('lang_zh');\&quot;&gt;Both&lt;/div&gt;&quot;+<br /> &quot;&lt;/div&gt;&quot;;<br /> <br /> $('#lang_sel_enzh').html(lang_sel_html);<br /> });</div> Admin https://langwiki.org/index.php?title=MediaWiki:Common.js&diff=3157 MediaWiki:Common.js 2019-11-25T05:23:19Z <p>Admin:</p> <hr /> <div>/* 这里的任何JavaScript将为所有用户在每次页面载入时加载。 */<br /> <br /> /**<br /> * Keep code in MediaWiki:Common.js to a minimum as it is unconditionally<br /> * loaded for all users on every wiki page. If possible create a gadget that is<br /> * enabled by default instead of adding it here (since gadgets are fully<br /> * optimized ResourceLoader modules with possibility to add dependencies etc.)<br /> *<br /> * Since Common.js isn't a gadget, there is no place to declare its<br /> * dependencies, so we have to lazy load them with mw.loader.using on demand and<br /> * then execute the rest in the callback. In most cases these dependencies will<br /> * be loaded (or loading) already and the callback will not be delayed. In case a<br /> * dependency hasn't arrived yet it'll make sure those are loaded before this.<br /> */<br /> <br /> /* global mw, $ */<br /> /* jshint strict:false, browser:true */<br /> <br /> mw.loader.using( ['mediawiki.user', 'mediawiki.util', 'mediawiki.notify', 'jquery.client'] ).done( function () {<br /> /* Begin of mw.loader.using callback */<br /> <br /> /**<br /> * Main Page layout fixes<br /> *<br /> * Description: Adds an additional link to the complete list of languages available.<br /> * Maintainers: [[User:AzaToth]], [[User:R. Koot]], [[User:Alex Smotrov]]<br /> */<br /> if ( mw.config.get( 'wgPageName' ) === 'Main_Page' || mw.config.get( 'wgPageName' ) === 'Talk:Main_Page' ) {<br /> $( function () {<br /> mw.util.addPortletLink( 'p-lang', '//meta.wikimedia.org/wiki/List_of_Wikipedias',<br /> 'Complete list', 'interwiki-completelist', 'Complete list of Wikipedias' );<br /> } );<br /> }<br /> <br /> /**<br /> * Redirect User:Name/skin.js and skin.css to the current skin's pages<br /> * (unless the 'skin' page really exists)<br /> * @source: http://www.mediawiki.org/wiki/Snippets/Redirect_skin.js<br /> * @rev: 2<br /> */<br /> if ( mw.config.get( 'wgArticleId' ) === 0 &amp;&amp; mw.config.get( 'wgNamespaceNumber' ) === 2 ) {<br /> var titleParts = mw.config.get( 'wgPageName' ).split( '/' );<br /> /* Make sure there was a part before and after the slash<br /> and that the latter is 'skin.js' or 'skin.css' */<br /> if ( titleParts.length == 2 ) {<br /> var userSkinPage = titleParts.shift() + '/' + mw.config.get( 'skin' );<br /> if ( titleParts.slice( -1 ) == 'skin.js' ) {<br /> window.location.href = mw.util.getUrl( userSkinPage + '.js' );<br /> } else if ( titleParts.slice( -1 ) == 'skin.css' ) {<br /> window.location.href = mw.util.getUrl( userSkinPage + '.css' );<br /> }<br /> }<br /> }<br /> <br /> /**<br /> * Map addPortletLink to mw.util<br /> * @deprecated: Use mw.util.addPortletLink instead.<br /> */<br /> mw.log.deprecate( window, 'addPortletLink', mw.util.addPortletLink, 'Use mw.util.addPortletLink instead' );<br /> <br /> /**<br /> * Extract a URL parameter from the current URL<br /> * @deprecated: Use mw.util.getParamValue with proper escaping<br /> */<br /> mw.log.deprecate( window, 'getURLParamValue', mw.util.getParamValue, 'Use mw.util.getParamValue instead' );<br /> <br /> /**<br /> * Test if an element has a certain class<br /> * @deprecated: Use $(element).hasClass() instead.<br /> */<br /> mw.log.deprecate( window, 'hasClass', function ( element, className ) {<br /> return $( element ).hasClass( className );<br /> }, 'Use jQuery.hasClass() instead' );<br /> <br /> /**<br /> * @source www.mediawiki.org/wiki/Snippets/Load_JS_and_CSS_by_URL<br /> * @rev 6<br /> */<br /> var extraCSS = mw.util.getParamValue( 'withCSS' ),<br /> extraJS = mw.util.getParamValue( 'withJS' );<br /> <br /> if ( extraCSS ) {<br /> if ( extraCSS.match( /^MediaWiki:[^&amp;&lt;&gt;=%#]*\.css$/ ) ) {<br /> mw.loader.load( '/w/index.php?title=' + extraCSS + '&amp;action=raw&amp;ctype=text/css', 'text/css' );<br /> } else {<br /> mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withCSS value' } );<br /> }<br /> }<br /> <br /> if ( extraJS ) {<br /> if ( extraJS.match( /^MediaWiki:[^&amp;&lt;&gt;=%#]*\.js$/ ) ) {<br /> mw.loader.load( '/w/index.php?title=' + extraJS + '&amp;action=raw&amp;ctype=text/javascript' );<br /> } else {<br /> mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withJS value' } );<br /> }<br /> }<br /> <br /> /**<br /> * WikiMiniAtlas<br /> *<br /> * Description: WikiMiniAtlas is a popup click and drag world map.<br /> * This script causes all of our coordinate links to display the WikiMiniAtlas popup button.<br /> * The script itself is located on meta because it is used by many projects.<br /> * See [[Meta:WikiMiniAtlas]] for more information.<br /> * Maintainers: [[User:Dschwen]]<br /> */<br /> ( function () {<br /> var require_wikiminiatlas = false;<br /> var coord_filter = /geohack/;<br /> $( function () {<br /> $( 'a.external.text' ).each( function( key, link ) {<br /> if ( link.href &amp;&amp; coord_filter.exec( link.href ) ) {<br /> require_wikiminiatlas = true;<br /> // break from loop<br /> return false;<br /> }<br /> } );<br /> if ( $( 'div.kmldata' ).length ) {<br /> require_wikiminiatlas = true;<br /> }<br /> if ( require_wikiminiatlas ) {<br /> mw.loader.load( '//meta.wikimedia.org/w/index.php?title=MediaWiki:Wikiminiatlas.js&amp;action=raw&amp;ctype=text/javascript' );<br /> }<br /> } );<br /> } )();<br /> <br /> /**<br /> * Collapsible tables<br /> *<br /> * Allows tables to be collapsed, showing only the header. See [[Help:Collapsing]].<br /> *<br /> * @version 2.0.3 (2014-03-14)<br /> * @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-collapsibleTables.js<br /> * @author [[User:R. Koot]]<br /> * @author [[User:Krinkle]]<br /> * @deprecated Since MediaWiki 1.20: Use class=&quot;mw-collapsible&quot; instead which<br /> * is supported in MediaWiki core.<br /> */<br /> <br /> var autoCollapse = 2;<br /> var collapseCaption = 'hide';<br /> var expandCaption = 'show';<br /> var tableIndex = 0;<br /> <br /> function collapseTable( tableIndex ) {<br /> var Button = document.getElementById( 'collapseButton' + tableIndex );<br /> var Table = document.getElementById( 'collapsibleTable' + tableIndex );<br /> <br /> if ( !Table || !Button ) {<br /> return false;<br /> }<br /> <br /> var Rows = Table.rows;<br /> var i;<br /> var $row0 = $(Rows[0]);<br /> <br /> if ( Button.firstChild.data === collapseCaption ) {<br /> for ( i = 1; i &lt; Rows.length; i++ ) {<br /> Rows[i].style.display = 'none';<br /> }<br /> Button.firstChild.data = expandCaption;<br /> } else {<br /> for ( i = 1; i &lt; Rows.length; i++ ) {<br /> Rows[i].style.display = $row0.css( 'display' );<br /> }<br /> Button.firstChild.data = collapseCaption;<br /> }<br /> }<br /> <br /> function createClickHandler( tableIndex ) {<br /> return function ( e ) {<br /> e.preventDefault();<br /> collapseTable( tableIndex );<br /> };<br /> }<br /> <br /> function createCollapseButtons( $content ) {<br /> var NavigationBoxes = {};<br /> var $Tables = $content.find( 'table' );<br /> var i;<br /> <br /> $Tables.each( function( i, table ) {<br /> if ( $(table).hasClass( 'collapsible' ) ) {<br /> <br /> /* only add button and increment count if there is a header row to work with */<br /> var HeaderRow = table.getElementsByTagName( 'tr' )[0];<br /> if ( !HeaderRow ) {<br /> return;<br /> }<br /> var Header = table.getElementsByTagName( 'th' )[0];<br /> if ( !Header ) {<br /> return;<br /> }<br /> <br /> NavigationBoxes[ tableIndex ] = table;<br /> table.setAttribute( 'id', 'collapsibleTable' + tableIndex );<br /> <br /> var Button = document.createElement( 'span' );<br /> var ButtonLink = document.createElement( 'a' );<br /> var ButtonText = document.createTextNode( collapseCaption );<br /> // Styles are declared in [[MediaWiki:Common.css]]<br /> Button.className = 'collapseButton';<br /> <br /> ButtonLink.style.color = Header.style.color;<br /> ButtonLink.setAttribute( 'id', 'collapseButton' + tableIndex );<br /> ButtonLink.setAttribute( 'href', '#' );<br /> $( ButtonLink ).on( 'click', createClickHandler( tableIndex ) );<br /> ButtonLink.appendChild( ButtonText );<br /> <br /> Button.appendChild( document.createTextNode( '[' ) );<br /> Button.appendChild( ButtonLink );<br /> Button.appendChild( document.createTextNode( ']' ) );<br /> <br /> Header.insertBefore( Button, Header.firstChild );<br /> tableIndex++;<br /> }<br /> } );<br /> <br /> for ( i = 0; i &lt; tableIndex; i++ ) {<br /> if ( $( NavigationBoxes[i] ).hasClass( 'collapsed' ) ||<br /> ( tableIndex &gt;= autoCollapse &amp;&amp; $( NavigationBoxes[i] ).hasClass( 'autocollapse' ) )<br /> ) {<br /> collapseTable( i );<br /> }<br /> else if ( $( NavigationBoxes[i] ).hasClass ( 'innercollapse' ) ) {<br /> var element = NavigationBoxes[i];<br /> while ((element = element.parentNode)) {<br /> if ( $( element ).hasClass( 'outercollapse' ) ) {<br /> collapseTable ( i );<br /> break;<br /> }<br /> }<br /> }<br /> }<br /> }<br /> <br /> mw.hook( 'wikipage.content' ).add( createCollapseButtons );<br /> <br /> /**<br /> * Add support to mw-collapsible for autocollapse, innercollapse and outercollapse<br /> *<br /> * Maintainers: TheDJ<br /> */<br /> function mwCollapsibleSetup( $collapsibleContent ) {<br /> var $element,<br /> autoCollapseThreshold = 2;<br /> $.each( $collapsibleContent, function (index, element) {<br /> $element = $( element );<br /> if ( index &gt; autoCollapseThreshold &amp;&amp; $element.hasClass( 'autocollapse' ) ) {<br /> $element.data( 'mw-collapsible' ).collapse();<br /> } else if ( $element.hasClass( 'innercollapse' ) ) {<br /> if ( $element.parents( '.outercollapse' ).length &gt; 0 ) {<br /> $element.data( 'mw-collapsible' ).collapse();<br /> }<br /> }<br /> } );<br /> }<br /> <br /> mw.hook( 'wikipage.collapsibleContent' ).add( mwCollapsibleSetup );<br /> <br /> /**<br /> * Dynamic Navigation Bars (experimental)<br /> *<br /> * Description: See [[Wikipedia:NavFrame]].<br /> * Maintainers: UNMAINTAINED<br /> */<br /> <br /> /* set up the words in your language */<br /> var NavigationBarHide = '[' + collapseCaption + ']';<br /> var NavigationBarShow = '[' + expandCaption + ']';<br /> var indexNavigationBar = 0;<br /> <br /> /**<br /> * Shows and hides content and picture (if available) of navigation bars<br /> * Parameters:<br /> * indexNavigationBar: the index of navigation bar to be toggled<br /> **/<br /> window.toggleNavigationBar = function ( indexNavigationBar, event ) {<br /> var NavToggle = document.getElementById( 'NavToggle' + indexNavigationBar );<br /> var NavFrame = document.getElementById( 'NavFrame' + indexNavigationBar );<br /> var NavChild;<br /> <br /> if ( !NavFrame || !NavToggle ) {<br /> return false;<br /> }<br /> <br /> /* if shown now */<br /> if ( NavToggle.firstChild.data === NavigationBarHide ) {<br /> for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavContent' ) || $( NavChild ).hasClass( 'NavPic' ) ) {<br /> NavChild.style.display = 'none';<br /> }<br /> }<br /> NavToggle.firstChild.data = NavigationBarShow;<br /> <br /> /* if hidden now */<br /> } else if ( NavToggle.firstChild.data === NavigationBarShow ) {<br /> for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavContent' ) || $( NavChild ).hasClass( 'NavPic' ) ) {<br /> NavChild.style.display = 'block';<br /> }<br /> }<br /> NavToggle.firstChild.data = NavigationBarHide;<br /> }<br /> <br /> event.preventDefault();<br /> };<br /> <br /> /* adds show/hide-button to navigation bars */<br /> function createNavigationBarToggleButton( $content ) {<br /> var NavChild;<br /> /* iterate over all &lt; div &gt;-elements */<br /> var $divs = $content.find( 'div' );<br /> $divs.each( function ( i, NavFrame ) {<br /> /* if found a navigation bar */<br /> if ( $( NavFrame ).hasClass( 'NavFrame' ) ) {<br /> <br /> indexNavigationBar++;<br /> var NavToggle = document.createElement( 'a' );<br /> NavToggle.className = 'NavToggle';<br /> NavToggle.setAttribute( 'id', 'NavToggle' + indexNavigationBar );<br /> NavToggle.setAttribute( 'href', '#' );<br /> $( NavToggle ).on( 'click', $.proxy( window.toggleNavigationBar, window, indexNavigationBar ) );<br /> <br /> var isCollapsed = $( NavFrame ).hasClass( 'collapsed' );<br /> /**<br /> * Check if any children are already hidden. This loop is here for backwards compatibility:<br /> * the old way of making NavFrames start out collapsed was to manually add style=&quot;display:none&quot;<br /> * to all the NavPic/NavContent elements. Since this was bad for accessibility (no way to make<br /> * the content visible without JavaScript support), the new recommended way is to add the class<br /> * &quot;collapsed&quot; to the NavFrame itself, just like with collapsible tables.<br /> */<br /> for ( NavChild = NavFrame.firstChild; NavChild != null &amp;&amp; !isCollapsed; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavPic' ) || $( NavChild ).hasClass( 'NavContent' ) ) {<br /> if ( NavChild.style.display === 'none' ) {<br /> isCollapsed = true;<br /> }<br /> }<br /> }<br /> if ( isCollapsed ) {<br /> for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavPic' ) || $( NavChild ).hasClass( 'NavContent' ) ) {<br /> NavChild.style.display = 'none';<br /> }<br /> }<br /> }<br /> var NavToggleText = document.createTextNode( isCollapsed ? NavigationBarShow : NavigationBarHide );<br /> NavToggle.appendChild( NavToggleText );<br /> <br /> /* Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked) */<br /> for( var j = 0; j &lt; NavFrame.childNodes.length; j++ ) {<br /> if ( $( NavFrame.childNodes[j] ).hasClass( 'NavHead' ) ) {<br /> NavToggle.style.color = NavFrame.childNodes[j].style.color;<br /> NavFrame.childNodes[j].appendChild( NavToggle );<br /> }<br /> }<br /> NavFrame.setAttribute( 'id', 'NavFrame' + indexNavigationBar );<br /> }<br /> } );<br /> }<br /> <br /> mw.hook( 'wikipage.content' ).add( createNavigationBarToggleButton );<br /> <br /> /**<br /> * Uploadwizard_newusers<br /> * Switches in a message for non-autoconfirmed users at [[Wikipedia:Upload]]<br /> *<br /> * Maintainers: [[User:Krimpet]]<br /> */<br /> function uploadwizard_newusers() {<br /> if ( mw.config.get( 'wgNamespaceNumber' ) === 4 &amp;&amp; mw.config.get( 'wgTitle' ) === 'Upload' &amp;&amp; mw.config.get( 'wgAction' ) === 'view' ) {<br /> var oldDiv = document.getElementById( 'autoconfirmedusers' ),<br /> newDiv = document.getElementById( 'newusers' );<br /> if ( oldDiv &amp;&amp; newDiv ) {<br /> var userGroups = mw.config.get( 'wgUserGroups' );<br /> if ( userGroups ) {<br /> for ( var i = 0; i &lt; userGroups.length; i++ ) {<br /> if ( userGroups[i] === 'autoconfirmed' ) {<br /> oldDiv.style.display = 'block';<br /> newDiv.style.display = 'none';<br /> return;<br /> }<br /> }<br /> }<br /> oldDiv.style.display = 'none';<br /> newDiv.style.display = 'block';<br /> return;<br /> }<br /> }<br /> }<br /> <br /> $(uploadwizard_newusers);<br /> <br /> /**<br /> * Magic editintros ****************************************************<br /> *<br /> * Description: Adds editintros on disambiguation pages and BLP pages.<br /> * Maintainers: [[User:RockMFR]]<br /> */<br /> function addEditIntro( name ) {<br /> $( '.mw-editsection, #ca-edit' ).find( 'a' ).each( function ( i, el ) {<br /> el.href = $( this ).attr( 'href' ) + '&amp;editintro=' + name;<br /> } );<br /> }<br /> <br /> if ( mw.config.get( 'wgNamespaceNumber' ) === 0 ) {<br /> $( function () {<br /> if ( document.getElementById( 'disambigbox' ) ) {<br /> addEditIntro( 'Template:Disambig_editintro' );<br /> }<br /> } );<br /> <br /> $( function () {<br /> var cats = mw.config.get('wgCategories');<br /> if ( !cats ) {<br /> return;<br /> }<br /> if ( $.inArray( 'Living people', cats ) !== -1 || $.inArray( 'Possibly living people', cats ) !== -1 ) {<br /> addEditIntro( 'Template:BLP_editintro' );<br /> }<br /> } );<br /> }<br /> <br /> /* End of mw.loader.using callback */<br /> } );<br /> <br /> <br /> /* Define functions for showing/hiding language-specific text blocks */<br /> function hide_by_css_class(clzName) {<br /> document.getElementsByClassName(clzName)[0].style.visibility = 'hidden';<br /> }<br /> <br /> function show_by_css_class(clzName) {<br /> document.getElementsByClassName(clzName)[0].style.visibility = 'visible';<br /> }<br /> <br /> $(function() {<br /> var lang_sel_html = &quot;&lt;div onclick=\&quot;hide_by_css_class('lang_en'); show_by_css_class('lang_zh');\&quot;&gt;EN&lt;/div&gt;|&quot; +<br /> &quot;&lt;div style=\&quot;display:inline;\&quot; onclick=\&quot;hide_by_css_class('lang_zh'); show_by_css_class('lang_en');\&quot;&gt;ZH&lt;/div&gt;|&quot; +<br /> &quot;&lt;div style=\&quot;display:inline;\&quot; onclick=\&quot;show_by_css_class('lang_en'); show_by_css_class('lang_zh');\&quot;&gt;Both&lt;/div&gt;&quot;;<br /> <br /> $('#lang_sel_enzh').html(lang_sel_html);<br /> });</div> Admin https://langwiki.org/index.php?title=%E8%AF%AD%E8%A8%80%E7%BB%B4%E5%9F%BA:%E6%B5%8B%E8%AF%95&diff=3156 语言维基:测试 2019-11-25T05:22:15Z <p>Admin:</p> <hr /> <div>&lt;div id=&quot;lang_sel_enzh&quot;&gt;&lt;/div&gt;<br /> <br /> 可视化编辑测试<br /> <br /> NodeJS 10 + Parsoid 测试<br /> <br /> 再次编辑可视化页面<br /> <br /> &lt;div class=&quot;lang_en&quot;&gt;Los Angeles is a popular city for tourism.&lt;/div&gt;<br /> <br /> &lt;div class=&quot;lang_zh&quot;&gt;洛杉矶是一个时尚的旅游城市。&lt;/div&gt;</div> Admin https://langwiki.org/index.php?title=%E8%AF%AD%E8%A8%80%E7%BB%B4%E5%9F%BA:%E6%B5%8B%E8%AF%95&diff=3155 语言维基:测试 2019-11-25T05:22:00Z <p>Admin:</p> <hr /> <div>&lt;div id=&quot;lang_sel_enzh&quot;/&gt;<br /> <br /> 可视化编辑测试<br /> <br /> NodeJS 10 + Parsoid 测试<br /> <br /> 再次编辑可视化页面<br /> <br /> &lt;div class=&quot;lang_en&quot;&gt;Los Angeles is a popular city for tourism.&lt;/div&gt;<br /> <br /> &lt;div class=&quot;lang_zh&quot;&gt;洛杉矶是一个时尚的旅游城市。&lt;/div&gt;</div> Admin https://langwiki.org/index.php?title=%E8%AF%AD%E8%A8%80%E7%BB%B4%E5%9F%BA:%E6%B5%8B%E8%AF%95&diff=3154 语言维基:测试 2019-11-25T05:21:10Z <p>Admin:</p> <hr /> <div>&lt;div id=&quot;lang_sel_enzh&quot;&gt;<br /> <br /> 可视化编辑测试<br /> <br /> NodeJS 10 + Parsoid 测试<br /> <br /> 再次编辑可视化页面<br /> <br /> &lt;div class=&quot;lang_en&quot;&gt;Los Angeles is a popular city for tourism.&lt;/div&gt;<br /> <br /> &lt;div class=&quot;lang_zh&quot;&gt;洛杉矶是一个时尚的旅游城市。&lt;/div&gt;</div> Admin https://langwiki.org/index.php?title=%E8%AF%AD%E8%A8%80%E7%BB%B4%E5%9F%BA:%E6%B5%8B%E8%AF%95&diff=3153 语言维基:测试 2019-11-25T05:20:38Z <p>Admin:</p> <hr /> <div>&lt;div&gt;<br /> &lt;div onclick=&quot;hide_by_css_class('lang_en'); show_by_css_class('lang_zh');&quot;&gt;Show EN&lt;/div&gt;<br /> &lt;div onclick=&quot;hide_by_css_class('lang_zh'); show_by_css_class('lang_en');&quot;&gt;Show ZH&lt;/div&gt;<br /> &lt;div onclick=&quot;show_by_css_class('lang_en'); show_by_css_class('lang_zh');&quot;&gt;Show Both&lt;/div&gt;<br /> &lt;/div&gt;<br /> <br /> 可视化编辑测试<br /> <br /> NodeJS 10 + Parsoid 测试<br /> <br /> 再次编辑可视化页面<br /> <br /> &lt;div class=&quot;lang_en&quot;&gt;Los Angeles is a popular city for tourism.&lt;/div&gt;<br /> <br /> &lt;div class=&quot;lang_zh&quot;&gt;洛杉矶是一个时尚的旅游城市。&lt;/div&gt;</div> Admin https://langwiki.org/index.php?title=%E8%AF%AD%E8%A8%80%E7%BB%B4%E5%9F%BA:%E6%B5%8B%E8%AF%95&diff=3152 语言维基:测试 2019-11-25T05:19:56Z <p>Admin:</p> <hr /> <div>&lt;div&gt;<br /> &lt;div onclick=&quot;hide_by_css_class('lang_en'); show_by_css_class('lang_zh');&quot;&gt;&lt;a href=&quot;#&quot;&gt;EN&lt;/a&gt;&lt;/div&gt;<br /> &lt;div onclick=&quot;hide_by_css_class('lang_zh'); show_by_css_class('lang_en');&quot;&gt;&lt;a href=&quot;#&quot;&gt;ZH&lt;/a&gt;&lt;/div&gt;<br /> &lt;div onclick=&quot;show_by_css_class('lang_en'); show_by_css_class('lang_zh');&quot;&gt;&lt;a href=&quot;#&quot;&gt;Both&lt;/a&gt;&lt;/div&gt;<br /> &lt;/div&gt;<br /> <br /> 可视化编辑测试<br /> <br /> NodeJS 10 + Parsoid 测试<br /> <br /> 再次编辑可视化页面<br /> <br /> &lt;div class=&quot;lang_en&quot;&gt;Los Angeles is a popular city for tourism.&lt;/div&gt;<br /> <br /> &lt;div class=&quot;lang_zh&quot;&gt;洛杉矶是一个时尚的旅游城市。&lt;/div&gt;</div> Admin https://langwiki.org/index.php?title=MediaWiki:Common.js&diff=3151 MediaWiki:Common.js 2019-11-25T05:18:32Z <p>Admin:</p> <hr /> <div>/* 这里的任何JavaScript将为所有用户在每次页面载入时加载。 */<br /> <br /> /**<br /> * Keep code in MediaWiki:Common.js to a minimum as it is unconditionally<br /> * loaded for all users on every wiki page. If possible create a gadget that is<br /> * enabled by default instead of adding it here (since gadgets are fully<br /> * optimized ResourceLoader modules with possibility to add dependencies etc.)<br /> *<br /> * Since Common.js isn't a gadget, there is no place to declare its<br /> * dependencies, so we have to lazy load them with mw.loader.using on demand and<br /> * then execute the rest in the callback. In most cases these dependencies will<br /> * be loaded (or loading) already and the callback will not be delayed. In case a<br /> * dependency hasn't arrived yet it'll make sure those are loaded before this.<br /> */<br /> <br /> /* global mw, $ */<br /> /* jshint strict:false, browser:true */<br /> <br /> mw.loader.using( ['mediawiki.user', 'mediawiki.util', 'mediawiki.notify', 'jquery.client'] ).done( function () {<br /> /* Begin of mw.loader.using callback */<br /> <br /> /**<br /> * Main Page layout fixes<br /> *<br /> * Description: Adds an additional link to the complete list of languages available.<br /> * Maintainers: [[User:AzaToth]], [[User:R. Koot]], [[User:Alex Smotrov]]<br /> */<br /> if ( mw.config.get( 'wgPageName' ) === 'Main_Page' || mw.config.get( 'wgPageName' ) === 'Talk:Main_Page' ) {<br /> $( function () {<br /> mw.util.addPortletLink( 'p-lang', '//meta.wikimedia.org/wiki/List_of_Wikipedias',<br /> 'Complete list', 'interwiki-completelist', 'Complete list of Wikipedias' );<br /> } );<br /> }<br /> <br /> /**<br /> * Redirect User:Name/skin.js and skin.css to the current skin's pages<br /> * (unless the 'skin' page really exists)<br /> * @source: http://www.mediawiki.org/wiki/Snippets/Redirect_skin.js<br /> * @rev: 2<br /> */<br /> if ( mw.config.get( 'wgArticleId' ) === 0 &amp;&amp; mw.config.get( 'wgNamespaceNumber' ) === 2 ) {<br /> var titleParts = mw.config.get( 'wgPageName' ).split( '/' );<br /> /* Make sure there was a part before and after the slash<br /> and that the latter is 'skin.js' or 'skin.css' */<br /> if ( titleParts.length == 2 ) {<br /> var userSkinPage = titleParts.shift() + '/' + mw.config.get( 'skin' );<br /> if ( titleParts.slice( -1 ) == 'skin.js' ) {<br /> window.location.href = mw.util.getUrl( userSkinPage + '.js' );<br /> } else if ( titleParts.slice( -1 ) == 'skin.css' ) {<br /> window.location.href = mw.util.getUrl( userSkinPage + '.css' );<br /> }<br /> }<br /> }<br /> <br /> /**<br /> * Map addPortletLink to mw.util<br /> * @deprecated: Use mw.util.addPortletLink instead.<br /> */<br /> mw.log.deprecate( window, 'addPortletLink', mw.util.addPortletLink, 'Use mw.util.addPortletLink instead' );<br /> <br /> /**<br /> * Extract a URL parameter from the current URL<br /> * @deprecated: Use mw.util.getParamValue with proper escaping<br /> */<br /> mw.log.deprecate( window, 'getURLParamValue', mw.util.getParamValue, 'Use mw.util.getParamValue instead' );<br /> <br /> /**<br /> * Test if an element has a certain class<br /> * @deprecated: Use $(element).hasClass() instead.<br /> */<br /> mw.log.deprecate( window, 'hasClass', function ( element, className ) {<br /> return $( element ).hasClass( className );<br /> }, 'Use jQuery.hasClass() instead' );<br /> <br /> /**<br /> * @source www.mediawiki.org/wiki/Snippets/Load_JS_and_CSS_by_URL<br /> * @rev 6<br /> */<br /> var extraCSS = mw.util.getParamValue( 'withCSS' ),<br /> extraJS = mw.util.getParamValue( 'withJS' );<br /> <br /> if ( extraCSS ) {<br /> if ( extraCSS.match( /^MediaWiki:[^&amp;&lt;&gt;=%#]*\.css$/ ) ) {<br /> mw.loader.load( '/w/index.php?title=' + extraCSS + '&amp;action=raw&amp;ctype=text/css', 'text/css' );<br /> } else {<br /> mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withCSS value' } );<br /> }<br /> }<br /> <br /> if ( extraJS ) {<br /> if ( extraJS.match( /^MediaWiki:[^&amp;&lt;&gt;=%#]*\.js$/ ) ) {<br /> mw.loader.load( '/w/index.php?title=' + extraJS + '&amp;action=raw&amp;ctype=text/javascript' );<br /> } else {<br /> mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withJS value' } );<br /> }<br /> }<br /> <br /> /**<br /> * WikiMiniAtlas<br /> *<br /> * Description: WikiMiniAtlas is a popup click and drag world map.<br /> * This script causes all of our coordinate links to display the WikiMiniAtlas popup button.<br /> * The script itself is located on meta because it is used by many projects.<br /> * See [[Meta:WikiMiniAtlas]] for more information.<br /> * Maintainers: [[User:Dschwen]]<br /> */<br /> ( function () {<br /> var require_wikiminiatlas = false;<br /> var coord_filter = /geohack/;<br /> $( function () {<br /> $( 'a.external.text' ).each( function( key, link ) {<br /> if ( link.href &amp;&amp; coord_filter.exec( link.href ) ) {<br /> require_wikiminiatlas = true;<br /> // break from loop<br /> return false;<br /> }<br /> } );<br /> if ( $( 'div.kmldata' ).length ) {<br /> require_wikiminiatlas = true;<br /> }<br /> if ( require_wikiminiatlas ) {<br /> mw.loader.load( '//meta.wikimedia.org/w/index.php?title=MediaWiki:Wikiminiatlas.js&amp;action=raw&amp;ctype=text/javascript' );<br /> }<br /> } );<br /> } )();<br /> <br /> /**<br /> * Collapsible tables<br /> *<br /> * Allows tables to be collapsed, showing only the header. See [[Help:Collapsing]].<br /> *<br /> * @version 2.0.3 (2014-03-14)<br /> * @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-collapsibleTables.js<br /> * @author [[User:R. Koot]]<br /> * @author [[User:Krinkle]]<br /> * @deprecated Since MediaWiki 1.20: Use class=&quot;mw-collapsible&quot; instead which<br /> * is supported in MediaWiki core.<br /> */<br /> <br /> var autoCollapse = 2;<br /> var collapseCaption = 'hide';<br /> var expandCaption = 'show';<br /> var tableIndex = 0;<br /> <br /> function collapseTable( tableIndex ) {<br /> var Button = document.getElementById( 'collapseButton' + tableIndex );<br /> var Table = document.getElementById( 'collapsibleTable' + tableIndex );<br /> <br /> if ( !Table || !Button ) {<br /> return false;<br /> }<br /> <br /> var Rows = Table.rows;<br /> var i;<br /> var $row0 = $(Rows[0]);<br /> <br /> if ( Button.firstChild.data === collapseCaption ) {<br /> for ( i = 1; i &lt; Rows.length; i++ ) {<br /> Rows[i].style.display = 'none';<br /> }<br /> Button.firstChild.data = expandCaption;<br /> } else {<br /> for ( i = 1; i &lt; Rows.length; i++ ) {<br /> Rows[i].style.display = $row0.css( 'display' );<br /> }<br /> Button.firstChild.data = collapseCaption;<br /> }<br /> }<br /> <br /> function createClickHandler( tableIndex ) {<br /> return function ( e ) {<br /> e.preventDefault();<br /> collapseTable( tableIndex );<br /> };<br /> }<br /> <br /> function createCollapseButtons( $content ) {<br /> var NavigationBoxes = {};<br /> var $Tables = $content.find( 'table' );<br /> var i;<br /> <br /> $Tables.each( function( i, table ) {<br /> if ( $(table).hasClass( 'collapsible' ) ) {<br /> <br /> /* only add button and increment count if there is a header row to work with */<br /> var HeaderRow = table.getElementsByTagName( 'tr' )[0];<br /> if ( !HeaderRow ) {<br /> return;<br /> }<br /> var Header = table.getElementsByTagName( 'th' )[0];<br /> if ( !Header ) {<br /> return;<br /> }<br /> <br /> NavigationBoxes[ tableIndex ] = table;<br /> table.setAttribute( 'id', 'collapsibleTable' + tableIndex );<br /> <br /> var Button = document.createElement( 'span' );<br /> var ButtonLink = document.createElement( 'a' );<br /> var ButtonText = document.createTextNode( collapseCaption );<br /> // Styles are declared in [[MediaWiki:Common.css]]<br /> Button.className = 'collapseButton';<br /> <br /> ButtonLink.style.color = Header.style.color;<br /> ButtonLink.setAttribute( 'id', 'collapseButton' + tableIndex );<br /> ButtonLink.setAttribute( 'href', '#' );<br /> $( ButtonLink ).on( 'click', createClickHandler( tableIndex ) );<br /> ButtonLink.appendChild( ButtonText );<br /> <br /> Button.appendChild( document.createTextNode( '[' ) );<br /> Button.appendChild( ButtonLink );<br /> Button.appendChild( document.createTextNode( ']' ) );<br /> <br /> Header.insertBefore( Button, Header.firstChild );<br /> tableIndex++;<br /> }<br /> } );<br /> <br /> for ( i = 0; i &lt; tableIndex; i++ ) {<br /> if ( $( NavigationBoxes[i] ).hasClass( 'collapsed' ) ||<br /> ( tableIndex &gt;= autoCollapse &amp;&amp; $( NavigationBoxes[i] ).hasClass( 'autocollapse' ) )<br /> ) {<br /> collapseTable( i );<br /> }<br /> else if ( $( NavigationBoxes[i] ).hasClass ( 'innercollapse' ) ) {<br /> var element = NavigationBoxes[i];<br /> while ((element = element.parentNode)) {<br /> if ( $( element ).hasClass( 'outercollapse' ) ) {<br /> collapseTable ( i );<br /> break;<br /> }<br /> }<br /> }<br /> }<br /> }<br /> <br /> mw.hook( 'wikipage.content' ).add( createCollapseButtons );<br /> <br /> /**<br /> * Add support to mw-collapsible for autocollapse, innercollapse and outercollapse<br /> *<br /> * Maintainers: TheDJ<br /> */<br /> function mwCollapsibleSetup( $collapsibleContent ) {<br /> var $element,<br /> autoCollapseThreshold = 2;<br /> $.each( $collapsibleContent, function (index, element) {<br /> $element = $( element );<br /> if ( index &gt; autoCollapseThreshold &amp;&amp; $element.hasClass( 'autocollapse' ) ) {<br /> $element.data( 'mw-collapsible' ).collapse();<br /> } else if ( $element.hasClass( 'innercollapse' ) ) {<br /> if ( $element.parents( '.outercollapse' ).length &gt; 0 ) {<br /> $element.data( 'mw-collapsible' ).collapse();<br /> }<br /> }<br /> } );<br /> }<br /> <br /> mw.hook( 'wikipage.collapsibleContent' ).add( mwCollapsibleSetup );<br /> <br /> /**<br /> * Dynamic Navigation Bars (experimental)<br /> *<br /> * Description: See [[Wikipedia:NavFrame]].<br /> * Maintainers: UNMAINTAINED<br /> */<br /> <br /> /* set up the words in your language */<br /> var NavigationBarHide = '[' + collapseCaption + ']';<br /> var NavigationBarShow = '[' + expandCaption + ']';<br /> var indexNavigationBar = 0;<br /> <br /> /**<br /> * Shows and hides content and picture (if available) of navigation bars<br /> * Parameters:<br /> * indexNavigationBar: the index of navigation bar to be toggled<br /> **/<br /> window.toggleNavigationBar = function ( indexNavigationBar, event ) {<br /> var NavToggle = document.getElementById( 'NavToggle' + indexNavigationBar );<br /> var NavFrame = document.getElementById( 'NavFrame' + indexNavigationBar );<br /> var NavChild;<br /> <br /> if ( !NavFrame || !NavToggle ) {<br /> return false;<br /> }<br /> <br /> /* if shown now */<br /> if ( NavToggle.firstChild.data === NavigationBarHide ) {<br /> for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavContent' ) || $( NavChild ).hasClass( 'NavPic' ) ) {<br /> NavChild.style.display = 'none';<br /> }<br /> }<br /> NavToggle.firstChild.data = NavigationBarShow;<br /> <br /> /* if hidden now */<br /> } else if ( NavToggle.firstChild.data === NavigationBarShow ) {<br /> for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavContent' ) || $( NavChild ).hasClass( 'NavPic' ) ) {<br /> NavChild.style.display = 'block';<br /> }<br /> }<br /> NavToggle.firstChild.data = NavigationBarHide;<br /> }<br /> <br /> event.preventDefault();<br /> };<br /> <br /> /* adds show/hide-button to navigation bars */<br /> function createNavigationBarToggleButton( $content ) {<br /> var NavChild;<br /> /* iterate over all &lt; div &gt;-elements */<br /> var $divs = $content.find( 'div' );<br /> $divs.each( function ( i, NavFrame ) {<br /> /* if found a navigation bar */<br /> if ( $( NavFrame ).hasClass( 'NavFrame' ) ) {<br /> <br /> indexNavigationBar++;<br /> var NavToggle = document.createElement( 'a' );<br /> NavToggle.className = 'NavToggle';<br /> NavToggle.setAttribute( 'id', 'NavToggle' + indexNavigationBar );<br /> NavToggle.setAttribute( 'href', '#' );<br /> $( NavToggle ).on( 'click', $.proxy( window.toggleNavigationBar, window, indexNavigationBar ) );<br /> <br /> var isCollapsed = $( NavFrame ).hasClass( 'collapsed' );<br /> /**<br /> * Check if any children are already hidden. This loop is here for backwards compatibility:<br /> * the old way of making NavFrames start out collapsed was to manually add style=&quot;display:none&quot;<br /> * to all the NavPic/NavContent elements. Since this was bad for accessibility (no way to make<br /> * the content visible without JavaScript support), the new recommended way is to add the class<br /> * &quot;collapsed&quot; to the NavFrame itself, just like with collapsible tables.<br /> */<br /> for ( NavChild = NavFrame.firstChild; NavChild != null &amp;&amp; !isCollapsed; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavPic' ) || $( NavChild ).hasClass( 'NavContent' ) ) {<br /> if ( NavChild.style.display === 'none' ) {<br /> isCollapsed = true;<br /> }<br /> }<br /> }<br /> if ( isCollapsed ) {<br /> for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavPic' ) || $( NavChild ).hasClass( 'NavContent' ) ) {<br /> NavChild.style.display = 'none';<br /> }<br /> }<br /> }<br /> var NavToggleText = document.createTextNode( isCollapsed ? NavigationBarShow : NavigationBarHide );<br /> NavToggle.appendChild( NavToggleText );<br /> <br /> /* Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked) */<br /> for( var j = 0; j &lt; NavFrame.childNodes.length; j++ ) {<br /> if ( $( NavFrame.childNodes[j] ).hasClass( 'NavHead' ) ) {<br /> NavToggle.style.color = NavFrame.childNodes[j].style.color;<br /> NavFrame.childNodes[j].appendChild( NavToggle );<br /> }<br /> }<br /> NavFrame.setAttribute( 'id', 'NavFrame' + indexNavigationBar );<br /> }<br /> } );<br /> }<br /> <br /> mw.hook( 'wikipage.content' ).add( createNavigationBarToggleButton );<br /> <br /> /**<br /> * Uploadwizard_newusers<br /> * Switches in a message for non-autoconfirmed users at [[Wikipedia:Upload]]<br /> *<br /> * Maintainers: [[User:Krimpet]]<br /> */<br /> function uploadwizard_newusers() {<br /> if ( mw.config.get( 'wgNamespaceNumber' ) === 4 &amp;&amp; mw.config.get( 'wgTitle' ) === 'Upload' &amp;&amp; mw.config.get( 'wgAction' ) === 'view' ) {<br /> var oldDiv = document.getElementById( 'autoconfirmedusers' ),<br /> newDiv = document.getElementById( 'newusers' );<br /> if ( oldDiv &amp;&amp; newDiv ) {<br /> var userGroups = mw.config.get( 'wgUserGroups' );<br /> if ( userGroups ) {<br /> for ( var i = 0; i &lt; userGroups.length; i++ ) {<br /> if ( userGroups[i] === 'autoconfirmed' ) {<br /> oldDiv.style.display = 'block';<br /> newDiv.style.display = 'none';<br /> return;<br /> }<br /> }<br /> }<br /> oldDiv.style.display = 'none';<br /> newDiv.style.display = 'block';<br /> return;<br /> }<br /> }<br /> }<br /> <br /> $(uploadwizard_newusers);<br /> <br /> /**<br /> * Magic editintros ****************************************************<br /> *<br /> * Description: Adds editintros on disambiguation pages and BLP pages.<br /> * Maintainers: [[User:RockMFR]]<br /> */<br /> function addEditIntro( name ) {<br /> $( '.mw-editsection, #ca-edit' ).find( 'a' ).each( function ( i, el ) {<br /> el.href = $( this ).attr( 'href' ) + '&amp;editintro=' + name;<br /> } );<br /> }<br /> <br /> if ( mw.config.get( 'wgNamespaceNumber' ) === 0 ) {<br /> $( function () {<br /> if ( document.getElementById( 'disambigbox' ) ) {<br /> addEditIntro( 'Template:Disambig_editintro' );<br /> }<br /> } );<br /> <br /> $( function () {<br /> var cats = mw.config.get('wgCategories');<br /> if ( !cats ) {<br /> return;<br /> }<br /> if ( $.inArray( 'Living people', cats ) !== -1 || $.inArray( 'Possibly living people', cats ) !== -1 ) {<br /> addEditIntro( 'Template:BLP_editintro' );<br /> }<br /> } );<br /> }<br /> <br /> /* End of mw.loader.using callback */<br /> } );<br /> <br /> <br /> /* Define functions for showing/hiding language-specific text blocks */<br /> function hide_by_css_class(clzName) {<br /> document.getElementsByClassName(clzName)[0].style.visibility = 'hidden';<br /> }<br /> <br /> function show_by_css_class(clzName) {<br /> document.getElementsByClassName(clzName)[0].style.visibility = 'visible';<br /> }<br /> <br /> $(function() {<br /> var lang_sel_html = &quot;&lt;div onclick=\&quot;hide_by_css_class('lang_en'); show_by_css_class('lang_zh');\&quot;&gt;EN&lt;/div&gt;|&quot; +<br /> &quot;&lt;div onclick=\&quot;hide_by_css_class('lang_zh'); show_by_css_class('lang_en');\&quot;&gt;ZH&lt;/div&gt;|&quot; +<br /> &quot;&lt;div onclick=\&quot;show_by_css_class('lang_en'); show_by_css_class('lang_zh');\&quot;&gt;Both&lt;/div&gt;&quot;;<br /> <br /> $('#lang_sel_enzh').html(lang_sel_html);<br /> });</div> Admin https://langwiki.org/index.php?title=MediaWiki:Common.js&diff=3150 MediaWiki:Common.js 2019-11-25T05:17:38Z <p>Admin:</p> <hr /> <div>/* 这里的任何JavaScript将为所有用户在每次页面载入时加载。 */<br /> <br /> /**<br /> * Keep code in MediaWiki:Common.js to a minimum as it is unconditionally<br /> * loaded for all users on every wiki page. If possible create a gadget that is<br /> * enabled by default instead of adding it here (since gadgets are fully<br /> * optimized ResourceLoader modules with possibility to add dependencies etc.)<br /> *<br /> * Since Common.js isn't a gadget, there is no place to declare its<br /> * dependencies, so we have to lazy load them with mw.loader.using on demand and<br /> * then execute the rest in the callback. In most cases these dependencies will<br /> * be loaded (or loading) already and the callback will not be delayed. In case a<br /> * dependency hasn't arrived yet it'll make sure those are loaded before this.<br /> */<br /> <br /> /* global mw, $ */<br /> /* jshint strict:false, browser:true */<br /> <br /> mw.loader.using( ['mediawiki.user', 'mediawiki.util', 'mediawiki.notify', 'jquery.client'] ).done( function () {<br /> /* Begin of mw.loader.using callback */<br /> <br /> /**<br /> * Main Page layout fixes<br /> *<br /> * Description: Adds an additional link to the complete list of languages available.<br /> * Maintainers: [[User:AzaToth]], [[User:R. Koot]], [[User:Alex Smotrov]]<br /> */<br /> if ( mw.config.get( 'wgPageName' ) === 'Main_Page' || mw.config.get( 'wgPageName' ) === 'Talk:Main_Page' ) {<br /> $( function () {<br /> mw.util.addPortletLink( 'p-lang', '//meta.wikimedia.org/wiki/List_of_Wikipedias',<br /> 'Complete list', 'interwiki-completelist', 'Complete list of Wikipedias' );<br /> } );<br /> }<br /> <br /> /**<br /> * Redirect User:Name/skin.js and skin.css to the current skin's pages<br /> * (unless the 'skin' page really exists)<br /> * @source: http://www.mediawiki.org/wiki/Snippets/Redirect_skin.js<br /> * @rev: 2<br /> */<br /> if ( mw.config.get( 'wgArticleId' ) === 0 &amp;&amp; mw.config.get( 'wgNamespaceNumber' ) === 2 ) {<br /> var titleParts = mw.config.get( 'wgPageName' ).split( '/' );<br /> /* Make sure there was a part before and after the slash<br /> and that the latter is 'skin.js' or 'skin.css' */<br /> if ( titleParts.length == 2 ) {<br /> var userSkinPage = titleParts.shift() + '/' + mw.config.get( 'skin' );<br /> if ( titleParts.slice( -1 ) == 'skin.js' ) {<br /> window.location.href = mw.util.getUrl( userSkinPage + '.js' );<br /> } else if ( titleParts.slice( -1 ) == 'skin.css' ) {<br /> window.location.href = mw.util.getUrl( userSkinPage + '.css' );<br /> }<br /> }<br /> }<br /> <br /> /**<br /> * Map addPortletLink to mw.util<br /> * @deprecated: Use mw.util.addPortletLink instead.<br /> */<br /> mw.log.deprecate( window, 'addPortletLink', mw.util.addPortletLink, 'Use mw.util.addPortletLink instead' );<br /> <br /> /**<br /> * Extract a URL parameter from the current URL<br /> * @deprecated: Use mw.util.getParamValue with proper escaping<br /> */<br /> mw.log.deprecate( window, 'getURLParamValue', mw.util.getParamValue, 'Use mw.util.getParamValue instead' );<br /> <br /> /**<br /> * Test if an element has a certain class<br /> * @deprecated: Use $(element).hasClass() instead.<br /> */<br /> mw.log.deprecate( window, 'hasClass', function ( element, className ) {<br /> return $( element ).hasClass( className );<br /> }, 'Use jQuery.hasClass() instead' );<br /> <br /> /**<br /> * @source www.mediawiki.org/wiki/Snippets/Load_JS_and_CSS_by_URL<br /> * @rev 6<br /> */<br /> var extraCSS = mw.util.getParamValue( 'withCSS' ),<br /> extraJS = mw.util.getParamValue( 'withJS' );<br /> <br /> if ( extraCSS ) {<br /> if ( extraCSS.match( /^MediaWiki:[^&amp;&lt;&gt;=%#]*\.css$/ ) ) {<br /> mw.loader.load( '/w/index.php?title=' + extraCSS + '&amp;action=raw&amp;ctype=text/css', 'text/css' );<br /> } else {<br /> mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withCSS value' } );<br /> }<br /> }<br /> <br /> if ( extraJS ) {<br /> if ( extraJS.match( /^MediaWiki:[^&amp;&lt;&gt;=%#]*\.js$/ ) ) {<br /> mw.loader.load( '/w/index.php?title=' + extraJS + '&amp;action=raw&amp;ctype=text/javascript' );<br /> } else {<br /> mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withJS value' } );<br /> }<br /> }<br /> <br /> /**<br /> * WikiMiniAtlas<br /> *<br /> * Description: WikiMiniAtlas is a popup click and drag world map.<br /> * This script causes all of our coordinate links to display the WikiMiniAtlas popup button.<br /> * The script itself is located on meta because it is used by many projects.<br /> * See [[Meta:WikiMiniAtlas]] for more information.<br /> * Maintainers: [[User:Dschwen]]<br /> */<br /> ( function () {<br /> var require_wikiminiatlas = false;<br /> var coord_filter = /geohack/;<br /> $( function () {<br /> $( 'a.external.text' ).each( function( key, link ) {<br /> if ( link.href &amp;&amp; coord_filter.exec( link.href ) ) {<br /> require_wikiminiatlas = true;<br /> // break from loop<br /> return false;<br /> }<br /> } );<br /> if ( $( 'div.kmldata' ).length ) {<br /> require_wikiminiatlas = true;<br /> }<br /> if ( require_wikiminiatlas ) {<br /> mw.loader.load( '//meta.wikimedia.org/w/index.php?title=MediaWiki:Wikiminiatlas.js&amp;action=raw&amp;ctype=text/javascript' );<br /> }<br /> } );<br /> } )();<br /> <br /> /**<br /> * Collapsible tables<br /> *<br /> * Allows tables to be collapsed, showing only the header. See [[Help:Collapsing]].<br /> *<br /> * @version 2.0.3 (2014-03-14)<br /> * @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-collapsibleTables.js<br /> * @author [[User:R. Koot]]<br /> * @author [[User:Krinkle]]<br /> * @deprecated Since MediaWiki 1.20: Use class=&quot;mw-collapsible&quot; instead which<br /> * is supported in MediaWiki core.<br /> */<br /> <br /> var autoCollapse = 2;<br /> var collapseCaption = 'hide';<br /> var expandCaption = 'show';<br /> var tableIndex = 0;<br /> <br /> function collapseTable( tableIndex ) {<br /> var Button = document.getElementById( 'collapseButton' + tableIndex );<br /> var Table = document.getElementById( 'collapsibleTable' + tableIndex );<br /> <br /> if ( !Table || !Button ) {<br /> return false;<br /> }<br /> <br /> var Rows = Table.rows;<br /> var i;<br /> var $row0 = $(Rows[0]);<br /> <br /> if ( Button.firstChild.data === collapseCaption ) {<br /> for ( i = 1; i &lt; Rows.length; i++ ) {<br /> Rows[i].style.display = 'none';<br /> }<br /> Button.firstChild.data = expandCaption;<br /> } else {<br /> for ( i = 1; i &lt; Rows.length; i++ ) {<br /> Rows[i].style.display = $row0.css( 'display' );<br /> }<br /> Button.firstChild.data = collapseCaption;<br /> }<br /> }<br /> <br /> function createClickHandler( tableIndex ) {<br /> return function ( e ) {<br /> e.preventDefault();<br /> collapseTable( tableIndex );<br /> };<br /> }<br /> <br /> function createCollapseButtons( $content ) {<br /> var NavigationBoxes = {};<br /> var $Tables = $content.find( 'table' );<br /> var i;<br /> <br /> $Tables.each( function( i, table ) {<br /> if ( $(table).hasClass( 'collapsible' ) ) {<br /> <br /> /* only add button and increment count if there is a header row to work with */<br /> var HeaderRow = table.getElementsByTagName( 'tr' )[0];<br /> if ( !HeaderRow ) {<br /> return;<br /> }<br /> var Header = table.getElementsByTagName( 'th' )[0];<br /> if ( !Header ) {<br /> return;<br /> }<br /> <br /> NavigationBoxes[ tableIndex ] = table;<br /> table.setAttribute( 'id', 'collapsibleTable' + tableIndex );<br /> <br /> var Button = document.createElement( 'span' );<br /> var ButtonLink = document.createElement( 'a' );<br /> var ButtonText = document.createTextNode( collapseCaption );<br /> // Styles are declared in [[MediaWiki:Common.css]]<br /> Button.className = 'collapseButton';<br /> <br /> ButtonLink.style.color = Header.style.color;<br /> ButtonLink.setAttribute( 'id', 'collapseButton' + tableIndex );<br /> ButtonLink.setAttribute( 'href', '#' );<br /> $( ButtonLink ).on( 'click', createClickHandler( tableIndex ) );<br /> ButtonLink.appendChild( ButtonText );<br /> <br /> Button.appendChild( document.createTextNode( '[' ) );<br /> Button.appendChild( ButtonLink );<br /> Button.appendChild( document.createTextNode( ']' ) );<br /> <br /> Header.insertBefore( Button, Header.firstChild );<br /> tableIndex++;<br /> }<br /> } );<br /> <br /> for ( i = 0; i &lt; tableIndex; i++ ) {<br /> if ( $( NavigationBoxes[i] ).hasClass( 'collapsed' ) ||<br /> ( tableIndex &gt;= autoCollapse &amp;&amp; $( NavigationBoxes[i] ).hasClass( 'autocollapse' ) )<br /> ) {<br /> collapseTable( i );<br /> }<br /> else if ( $( NavigationBoxes[i] ).hasClass ( 'innercollapse' ) ) {<br /> var element = NavigationBoxes[i];<br /> while ((element = element.parentNode)) {<br /> if ( $( element ).hasClass( 'outercollapse' ) ) {<br /> collapseTable ( i );<br /> break;<br /> }<br /> }<br /> }<br /> }<br /> }<br /> <br /> mw.hook( 'wikipage.content' ).add( createCollapseButtons );<br /> <br /> /**<br /> * Add support to mw-collapsible for autocollapse, innercollapse and outercollapse<br /> *<br /> * Maintainers: TheDJ<br /> */<br /> function mwCollapsibleSetup( $collapsibleContent ) {<br /> var $element,<br /> autoCollapseThreshold = 2;<br /> $.each( $collapsibleContent, function (index, element) {<br /> $element = $( element );<br /> if ( index &gt; autoCollapseThreshold &amp;&amp; $element.hasClass( 'autocollapse' ) ) {<br /> $element.data( 'mw-collapsible' ).collapse();<br /> } else if ( $element.hasClass( 'innercollapse' ) ) {<br /> if ( $element.parents( '.outercollapse' ).length &gt; 0 ) {<br /> $element.data( 'mw-collapsible' ).collapse();<br /> }<br /> }<br /> } );<br /> }<br /> <br /> mw.hook( 'wikipage.collapsibleContent' ).add( mwCollapsibleSetup );<br /> <br /> /**<br /> * Dynamic Navigation Bars (experimental)<br /> *<br /> * Description: See [[Wikipedia:NavFrame]].<br /> * Maintainers: UNMAINTAINED<br /> */<br /> <br /> /* set up the words in your language */<br /> var NavigationBarHide = '[' + collapseCaption + ']';<br /> var NavigationBarShow = '[' + expandCaption + ']';<br /> var indexNavigationBar = 0;<br /> <br /> /**<br /> * Shows and hides content and picture (if available) of navigation bars<br /> * Parameters:<br /> * indexNavigationBar: the index of navigation bar to be toggled<br /> **/<br /> window.toggleNavigationBar = function ( indexNavigationBar, event ) {<br /> var NavToggle = document.getElementById( 'NavToggle' + indexNavigationBar );<br /> var NavFrame = document.getElementById( 'NavFrame' + indexNavigationBar );<br /> var NavChild;<br /> <br /> if ( !NavFrame || !NavToggle ) {<br /> return false;<br /> }<br /> <br /> /* if shown now */<br /> if ( NavToggle.firstChild.data === NavigationBarHide ) {<br /> for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavContent' ) || $( NavChild ).hasClass( 'NavPic' ) ) {<br /> NavChild.style.display = 'none';<br /> }<br /> }<br /> NavToggle.firstChild.data = NavigationBarShow;<br /> <br /> /* if hidden now */<br /> } else if ( NavToggle.firstChild.data === NavigationBarShow ) {<br /> for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavContent' ) || $( NavChild ).hasClass( 'NavPic' ) ) {<br /> NavChild.style.display = 'block';<br /> }<br /> }<br /> NavToggle.firstChild.data = NavigationBarHide;<br /> }<br /> <br /> event.preventDefault();<br /> };<br /> <br /> /* adds show/hide-button to navigation bars */<br /> function createNavigationBarToggleButton( $content ) {<br /> var NavChild;<br /> /* iterate over all &lt; div &gt;-elements */<br /> var $divs = $content.find( 'div' );<br /> $divs.each( function ( i, NavFrame ) {<br /> /* if found a navigation bar */<br /> if ( $( NavFrame ).hasClass( 'NavFrame' ) ) {<br /> <br /> indexNavigationBar++;<br /> var NavToggle = document.createElement( 'a' );<br /> NavToggle.className = 'NavToggle';<br /> NavToggle.setAttribute( 'id', 'NavToggle' + indexNavigationBar );<br /> NavToggle.setAttribute( 'href', '#' );<br /> $( NavToggle ).on( 'click', $.proxy( window.toggleNavigationBar, window, indexNavigationBar ) );<br /> <br /> var isCollapsed = $( NavFrame ).hasClass( 'collapsed' );<br /> /**<br /> * Check if any children are already hidden. This loop is here for backwards compatibility:<br /> * the old way of making NavFrames start out collapsed was to manually add style=&quot;display:none&quot;<br /> * to all the NavPic/NavContent elements. Since this was bad for accessibility (no way to make<br /> * the content visible without JavaScript support), the new recommended way is to add the class<br /> * &quot;collapsed&quot; to the NavFrame itself, just like with collapsible tables.<br /> */<br /> for ( NavChild = NavFrame.firstChild; NavChild != null &amp;&amp; !isCollapsed; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavPic' ) || $( NavChild ).hasClass( 'NavContent' ) ) {<br /> if ( NavChild.style.display === 'none' ) {<br /> isCollapsed = true;<br /> }<br /> }<br /> }<br /> if ( isCollapsed ) {<br /> for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavPic' ) || $( NavChild ).hasClass( 'NavContent' ) ) {<br /> NavChild.style.display = 'none';<br /> }<br /> }<br /> }<br /> var NavToggleText = document.createTextNode( isCollapsed ? NavigationBarShow : NavigationBarHide );<br /> NavToggle.appendChild( NavToggleText );<br /> <br /> /* Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked) */<br /> for( var j = 0; j &lt; NavFrame.childNodes.length; j++ ) {<br /> if ( $( NavFrame.childNodes[j] ).hasClass( 'NavHead' ) ) {<br /> NavToggle.style.color = NavFrame.childNodes[j].style.color;<br /> NavFrame.childNodes[j].appendChild( NavToggle );<br /> }<br /> }<br /> NavFrame.setAttribute( 'id', 'NavFrame' + indexNavigationBar );<br /> }<br /> } );<br /> }<br /> <br /> mw.hook( 'wikipage.content' ).add( createNavigationBarToggleButton );<br /> <br /> /**<br /> * Uploadwizard_newusers<br /> * Switches in a message for non-autoconfirmed users at [[Wikipedia:Upload]]<br /> *<br /> * Maintainers: [[User:Krimpet]]<br /> */<br /> function uploadwizard_newusers() {<br /> if ( mw.config.get( 'wgNamespaceNumber' ) === 4 &amp;&amp; mw.config.get( 'wgTitle' ) === 'Upload' &amp;&amp; mw.config.get( 'wgAction' ) === 'view' ) {<br /> var oldDiv = document.getElementById( 'autoconfirmedusers' ),<br /> newDiv = document.getElementById( 'newusers' );<br /> if ( oldDiv &amp;&amp; newDiv ) {<br /> var userGroups = mw.config.get( 'wgUserGroups' );<br /> if ( userGroups ) {<br /> for ( var i = 0; i &lt; userGroups.length; i++ ) {<br /> if ( userGroups[i] === 'autoconfirmed' ) {<br /> oldDiv.style.display = 'block';<br /> newDiv.style.display = 'none';<br /> return;<br /> }<br /> }<br /> }<br /> oldDiv.style.display = 'none';<br /> newDiv.style.display = 'block';<br /> return;<br /> }<br /> }<br /> }<br /> <br /> $(uploadwizard_newusers);<br /> <br /> /**<br /> * Magic editintros ****************************************************<br /> *<br /> * Description: Adds editintros on disambiguation pages and BLP pages.<br /> * Maintainers: [[User:RockMFR]]<br /> */<br /> function addEditIntro( name ) {<br /> $( '.mw-editsection, #ca-edit' ).find( 'a' ).each( function ( i, el ) {<br /> el.href = $( this ).attr( 'href' ) + '&amp;editintro=' + name;<br /> } );<br /> }<br /> <br /> if ( mw.config.get( 'wgNamespaceNumber' ) === 0 ) {<br /> $( function () {<br /> if ( document.getElementById( 'disambigbox' ) ) {<br /> addEditIntro( 'Template:Disambig_editintro' );<br /> }<br /> } );<br /> <br /> $( function () {<br /> var cats = mw.config.get('wgCategories');<br /> if ( !cats ) {<br /> return;<br /> }<br /> if ( $.inArray( 'Living people', cats ) !== -1 || $.inArray( 'Possibly living people', cats ) !== -1 ) {<br /> addEditIntro( 'Template:BLP_editintro' );<br /> }<br /> } );<br /> }<br /> <br /> /* End of mw.loader.using callback */<br /> } );<br /> <br /> <br /> /* Define functions for showing/hiding language-specific text blocks */<br /> function hide_by_css_class(clzName) {<br /> document.getElementsByClassName(clzName)[0].style.visibility = 'visible';<br /> }<br /> <br /> function show_by_css_class(clzName) {<br /> document.getElementsByClassName(clzName)[0].style.visibility = 'hidden';<br /> }<br /> <br /> $(function() {<br /> var lang_sel_html = &quot;&lt;div onclick=\&quot;hide_by_css_class('lang_en'); show_by_css_class('lang_zh');\&quot;&gt;EN&lt;/div&gt;|&quot; +<br /> &quot;&lt;div onclick=\&quot;hide_by_css_class('lang_zh'); show_by_css_class('lang_en');\&quot;&gt;ZH&lt;/div&gt;|&quot; +<br /> &quot;&lt;div onclick=\&quot;show_by_css_class('lang_en'); show_by_css_class('lang_zh');\&quot;&gt;Both&lt;/div&gt;&quot;;<br /> <br /> $('#lang_sel_enzh').html(lang_sel_html);<br /> });</div> Admin https://langwiki.org/index.php?title=%E8%AF%AD%E8%A8%80%E7%BB%B4%E5%9F%BA:%E6%B5%8B%E8%AF%95&diff=3149 语言维基:测试 2019-11-25T05:15:47Z <p>Admin:</p> <hr /> <div>&lt;div id=&quot;lang_sel_enzh&quot;&gt;---MENU HERE---&lt;/div&gt;<br /> 可视化编辑测试<br /> <br /> NodeJS 10 + Parsoid 测试<br /> <br /> 再次编辑可视化页面<br /> <br /> &lt;div class=&quot;lang_en&quot;&gt;Los Angeles is a popular city for tourism.&lt;/div&gt;<br /> <br /> &lt;div class=&quot;lang_zh&quot;&gt;洛杉矶是一个时尚的旅游城市。&lt;/div&gt;</div> Admin https://langwiki.org/index.php?title=MediaWiki:Common.js&diff=3148 MediaWiki:Common.js 2019-11-25T05:14:08Z <p>Admin:</p> <hr /> <div>/* 这里的任何JavaScript将为所有用户在每次页面载入时加载。 */<br /> <br /> /**<br /> * Keep code in MediaWiki:Common.js to a minimum as it is unconditionally<br /> * loaded for all users on every wiki page. If possible create a gadget that is<br /> * enabled by default instead of adding it here (since gadgets are fully<br /> * optimized ResourceLoader modules with possibility to add dependencies etc.)<br /> *<br /> * Since Common.js isn't a gadget, there is no place to declare its<br /> * dependencies, so we have to lazy load them with mw.loader.using on demand and<br /> * then execute the rest in the callback. In most cases these dependencies will<br /> * be loaded (or loading) already and the callback will not be delayed. In case a<br /> * dependency hasn't arrived yet it'll make sure those are loaded before this.<br /> */<br /> <br /> /* global mw, $ */<br /> /* jshint strict:false, browser:true */<br /> <br /> mw.loader.using( ['mediawiki.user', 'mediawiki.util', 'mediawiki.notify', 'jquery.client'] ).done( function () {<br /> /* Begin of mw.loader.using callback */<br /> <br /> /**<br /> * Main Page layout fixes<br /> *<br /> * Description: Adds an additional link to the complete list of languages available.<br /> * Maintainers: [[User:AzaToth]], [[User:R. Koot]], [[User:Alex Smotrov]]<br /> */<br /> if ( mw.config.get( 'wgPageName' ) === 'Main_Page' || mw.config.get( 'wgPageName' ) === 'Talk:Main_Page' ) {<br /> $( function () {<br /> mw.util.addPortletLink( 'p-lang', '//meta.wikimedia.org/wiki/List_of_Wikipedias',<br /> 'Complete list', 'interwiki-completelist', 'Complete list of Wikipedias' );<br /> } );<br /> }<br /> <br /> /**<br /> * Redirect User:Name/skin.js and skin.css to the current skin's pages<br /> * (unless the 'skin' page really exists)<br /> * @source: http://www.mediawiki.org/wiki/Snippets/Redirect_skin.js<br /> * @rev: 2<br /> */<br /> if ( mw.config.get( 'wgArticleId' ) === 0 &amp;&amp; mw.config.get( 'wgNamespaceNumber' ) === 2 ) {<br /> var titleParts = mw.config.get( 'wgPageName' ).split( '/' );<br /> /* Make sure there was a part before and after the slash<br /> and that the latter is 'skin.js' or 'skin.css' */<br /> if ( titleParts.length == 2 ) {<br /> var userSkinPage = titleParts.shift() + '/' + mw.config.get( 'skin' );<br /> if ( titleParts.slice( -1 ) == 'skin.js' ) {<br /> window.location.href = mw.util.getUrl( userSkinPage + '.js' );<br /> } else if ( titleParts.slice( -1 ) == 'skin.css' ) {<br /> window.location.href = mw.util.getUrl( userSkinPage + '.css' );<br /> }<br /> }<br /> }<br /> <br /> /**<br /> * Map addPortletLink to mw.util<br /> * @deprecated: Use mw.util.addPortletLink instead.<br /> */<br /> mw.log.deprecate( window, 'addPortletLink', mw.util.addPortletLink, 'Use mw.util.addPortletLink instead' );<br /> <br /> /**<br /> * Extract a URL parameter from the current URL<br /> * @deprecated: Use mw.util.getParamValue with proper escaping<br /> */<br /> mw.log.deprecate( window, 'getURLParamValue', mw.util.getParamValue, 'Use mw.util.getParamValue instead' );<br /> <br /> /**<br /> * Test if an element has a certain class<br /> * @deprecated: Use $(element).hasClass() instead.<br /> */<br /> mw.log.deprecate( window, 'hasClass', function ( element, className ) {<br /> return $( element ).hasClass( className );<br /> }, 'Use jQuery.hasClass() instead' );<br /> <br /> /**<br /> * @source www.mediawiki.org/wiki/Snippets/Load_JS_and_CSS_by_URL<br /> * @rev 6<br /> */<br /> var extraCSS = mw.util.getParamValue( 'withCSS' ),<br /> extraJS = mw.util.getParamValue( 'withJS' );<br /> <br /> if ( extraCSS ) {<br /> if ( extraCSS.match( /^MediaWiki:[^&amp;&lt;&gt;=%#]*\.css$/ ) ) {<br /> mw.loader.load( '/w/index.php?title=' + extraCSS + '&amp;action=raw&amp;ctype=text/css', 'text/css' );<br /> } else {<br /> mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withCSS value' } );<br /> }<br /> }<br /> <br /> if ( extraJS ) {<br /> if ( extraJS.match( /^MediaWiki:[^&amp;&lt;&gt;=%#]*\.js$/ ) ) {<br /> mw.loader.load( '/w/index.php?title=' + extraJS + '&amp;action=raw&amp;ctype=text/javascript' );<br /> } else {<br /> mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withJS value' } );<br /> }<br /> }<br /> <br /> /**<br /> * WikiMiniAtlas<br /> *<br /> * Description: WikiMiniAtlas is a popup click and drag world map.<br /> * This script causes all of our coordinate links to display the WikiMiniAtlas popup button.<br /> * The script itself is located on meta because it is used by many projects.<br /> * See [[Meta:WikiMiniAtlas]] for more information.<br /> * Maintainers: [[User:Dschwen]]<br /> */<br /> ( function () {<br /> var require_wikiminiatlas = false;<br /> var coord_filter = /geohack/;<br /> $( function () {<br /> $( 'a.external.text' ).each( function( key, link ) {<br /> if ( link.href &amp;&amp; coord_filter.exec( link.href ) ) {<br /> require_wikiminiatlas = true;<br /> // break from loop<br /> return false;<br /> }<br /> } );<br /> if ( $( 'div.kmldata' ).length ) {<br /> require_wikiminiatlas = true;<br /> }<br /> if ( require_wikiminiatlas ) {<br /> mw.loader.load( '//meta.wikimedia.org/w/index.php?title=MediaWiki:Wikiminiatlas.js&amp;action=raw&amp;ctype=text/javascript' );<br /> }<br /> } );<br /> } )();<br /> <br /> /**<br /> * Collapsible tables<br /> *<br /> * Allows tables to be collapsed, showing only the header. See [[Help:Collapsing]].<br /> *<br /> * @version 2.0.3 (2014-03-14)<br /> * @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-collapsibleTables.js<br /> * @author [[User:R. Koot]]<br /> * @author [[User:Krinkle]]<br /> * @deprecated Since MediaWiki 1.20: Use class=&quot;mw-collapsible&quot; instead which<br /> * is supported in MediaWiki core.<br /> */<br /> <br /> var autoCollapse = 2;<br /> var collapseCaption = 'hide';<br /> var expandCaption = 'show';<br /> var tableIndex = 0;<br /> <br /> function collapseTable( tableIndex ) {<br /> var Button = document.getElementById( 'collapseButton' + tableIndex );<br /> var Table = document.getElementById( 'collapsibleTable' + tableIndex );<br /> <br /> if ( !Table || !Button ) {<br /> return false;<br /> }<br /> <br /> var Rows = Table.rows;<br /> var i;<br /> var $row0 = $(Rows[0]);<br /> <br /> if ( Button.firstChild.data === collapseCaption ) {<br /> for ( i = 1; i &lt; Rows.length; i++ ) {<br /> Rows[i].style.display = 'none';<br /> }<br /> Button.firstChild.data = expandCaption;<br /> } else {<br /> for ( i = 1; i &lt; Rows.length; i++ ) {<br /> Rows[i].style.display = $row0.css( 'display' );<br /> }<br /> Button.firstChild.data = collapseCaption;<br /> }<br /> }<br /> <br /> function createClickHandler( tableIndex ) {<br /> return function ( e ) {<br /> e.preventDefault();<br /> collapseTable( tableIndex );<br /> };<br /> }<br /> <br /> function createCollapseButtons( $content ) {<br /> var NavigationBoxes = {};<br /> var $Tables = $content.find( 'table' );<br /> var i;<br /> <br /> $Tables.each( function( i, table ) {<br /> if ( $(table).hasClass( 'collapsible' ) ) {<br /> <br /> /* only add button and increment count if there is a header row to work with */<br /> var HeaderRow = table.getElementsByTagName( 'tr' )[0];<br /> if ( !HeaderRow ) {<br /> return;<br /> }<br /> var Header = table.getElementsByTagName( 'th' )[0];<br /> if ( !Header ) {<br /> return;<br /> }<br /> <br /> NavigationBoxes[ tableIndex ] = table;<br /> table.setAttribute( 'id', 'collapsibleTable' + tableIndex );<br /> <br /> var Button = document.createElement( 'span' );<br /> var ButtonLink = document.createElement( 'a' );<br /> var ButtonText = document.createTextNode( collapseCaption );<br /> // Styles are declared in [[MediaWiki:Common.css]]<br /> Button.className = 'collapseButton';<br /> <br /> ButtonLink.style.color = Header.style.color;<br /> ButtonLink.setAttribute( 'id', 'collapseButton' + tableIndex );<br /> ButtonLink.setAttribute( 'href', '#' );<br /> $( ButtonLink ).on( 'click', createClickHandler( tableIndex ) );<br /> ButtonLink.appendChild( ButtonText );<br /> <br /> Button.appendChild( document.createTextNode( '[' ) );<br /> Button.appendChild( ButtonLink );<br /> Button.appendChild( document.createTextNode( ']' ) );<br /> <br /> Header.insertBefore( Button, Header.firstChild );<br /> tableIndex++;<br /> }<br /> } );<br /> <br /> for ( i = 0; i &lt; tableIndex; i++ ) {<br /> if ( $( NavigationBoxes[i] ).hasClass( 'collapsed' ) ||<br /> ( tableIndex &gt;= autoCollapse &amp;&amp; $( NavigationBoxes[i] ).hasClass( 'autocollapse' ) )<br /> ) {<br /> collapseTable( i );<br /> }<br /> else if ( $( NavigationBoxes[i] ).hasClass ( 'innercollapse' ) ) {<br /> var element = NavigationBoxes[i];<br /> while ((element = element.parentNode)) {<br /> if ( $( element ).hasClass( 'outercollapse' ) ) {<br /> collapseTable ( i );<br /> break;<br /> }<br /> }<br /> }<br /> }<br /> }<br /> <br /> mw.hook( 'wikipage.content' ).add( createCollapseButtons );<br /> <br /> /**<br /> * Add support to mw-collapsible for autocollapse, innercollapse and outercollapse<br /> *<br /> * Maintainers: TheDJ<br /> */<br /> function mwCollapsibleSetup( $collapsibleContent ) {<br /> var $element,<br /> autoCollapseThreshold = 2;<br /> $.each( $collapsibleContent, function (index, element) {<br /> $element = $( element );<br /> if ( index &gt; autoCollapseThreshold &amp;&amp; $element.hasClass( 'autocollapse' ) ) {<br /> $element.data( 'mw-collapsible' ).collapse();<br /> } else if ( $element.hasClass( 'innercollapse' ) ) {<br /> if ( $element.parents( '.outercollapse' ).length &gt; 0 ) {<br /> $element.data( 'mw-collapsible' ).collapse();<br /> }<br /> }<br /> } );<br /> }<br /> <br /> mw.hook( 'wikipage.collapsibleContent' ).add( mwCollapsibleSetup );<br /> <br /> /**<br /> * Dynamic Navigation Bars (experimental)<br /> *<br /> * Description: See [[Wikipedia:NavFrame]].<br /> * Maintainers: UNMAINTAINED<br /> */<br /> <br /> /* set up the words in your language */<br /> var NavigationBarHide = '[' + collapseCaption + ']';<br /> var NavigationBarShow = '[' + expandCaption + ']';<br /> var indexNavigationBar = 0;<br /> <br /> /**<br /> * Shows and hides content and picture (if available) of navigation bars<br /> * Parameters:<br /> * indexNavigationBar: the index of navigation bar to be toggled<br /> **/<br /> window.toggleNavigationBar = function ( indexNavigationBar, event ) {<br /> var NavToggle = document.getElementById( 'NavToggle' + indexNavigationBar );<br /> var NavFrame = document.getElementById( 'NavFrame' + indexNavigationBar );<br /> var NavChild;<br /> <br /> if ( !NavFrame || !NavToggle ) {<br /> return false;<br /> }<br /> <br /> /* if shown now */<br /> if ( NavToggle.firstChild.data === NavigationBarHide ) {<br /> for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavContent' ) || $( NavChild ).hasClass( 'NavPic' ) ) {<br /> NavChild.style.display = 'none';<br /> }<br /> }<br /> NavToggle.firstChild.data = NavigationBarShow;<br /> <br /> /* if hidden now */<br /> } else if ( NavToggle.firstChild.data === NavigationBarShow ) {<br /> for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavContent' ) || $( NavChild ).hasClass( 'NavPic' ) ) {<br /> NavChild.style.display = 'block';<br /> }<br /> }<br /> NavToggle.firstChild.data = NavigationBarHide;<br /> }<br /> <br /> event.preventDefault();<br /> };<br /> <br /> /* adds show/hide-button to navigation bars */<br /> function createNavigationBarToggleButton( $content ) {<br /> var NavChild;<br /> /* iterate over all &lt; div &gt;-elements */<br /> var $divs = $content.find( 'div' );<br /> $divs.each( function ( i, NavFrame ) {<br /> /* if found a navigation bar */<br /> if ( $( NavFrame ).hasClass( 'NavFrame' ) ) {<br /> <br /> indexNavigationBar++;<br /> var NavToggle = document.createElement( 'a' );<br /> NavToggle.className = 'NavToggle';<br /> NavToggle.setAttribute( 'id', 'NavToggle' + indexNavigationBar );<br /> NavToggle.setAttribute( 'href', '#' );<br /> $( NavToggle ).on( 'click', $.proxy( window.toggleNavigationBar, window, indexNavigationBar ) );<br /> <br /> var isCollapsed = $( NavFrame ).hasClass( 'collapsed' );<br /> /**<br /> * Check if any children are already hidden. This loop is here for backwards compatibility:<br /> * the old way of making NavFrames start out collapsed was to manually add style=&quot;display:none&quot;<br /> * to all the NavPic/NavContent elements. Since this was bad for accessibility (no way to make<br /> * the content visible without JavaScript support), the new recommended way is to add the class<br /> * &quot;collapsed&quot; to the NavFrame itself, just like with collapsible tables.<br /> */<br /> for ( NavChild = NavFrame.firstChild; NavChild != null &amp;&amp; !isCollapsed; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavPic' ) || $( NavChild ).hasClass( 'NavContent' ) ) {<br /> if ( NavChild.style.display === 'none' ) {<br /> isCollapsed = true;<br /> }<br /> }<br /> }<br /> if ( isCollapsed ) {<br /> for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavPic' ) || $( NavChild ).hasClass( 'NavContent' ) ) {<br /> NavChild.style.display = 'none';<br /> }<br /> }<br /> }<br /> var NavToggleText = document.createTextNode( isCollapsed ? NavigationBarShow : NavigationBarHide );<br /> NavToggle.appendChild( NavToggleText );<br /> <br /> /* Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked) */<br /> for( var j = 0; j &lt; NavFrame.childNodes.length; j++ ) {<br /> if ( $( NavFrame.childNodes[j] ).hasClass( 'NavHead' ) ) {<br /> NavToggle.style.color = NavFrame.childNodes[j].style.color;<br /> NavFrame.childNodes[j].appendChild( NavToggle );<br /> }<br /> }<br /> NavFrame.setAttribute( 'id', 'NavFrame' + indexNavigationBar );<br /> }<br /> } );<br /> }<br /> <br /> mw.hook( 'wikipage.content' ).add( createNavigationBarToggleButton );<br /> <br /> /**<br /> * Uploadwizard_newusers<br /> * Switches in a message for non-autoconfirmed users at [[Wikipedia:Upload]]<br /> *<br /> * Maintainers: [[User:Krimpet]]<br /> */<br /> function uploadwizard_newusers() {<br /> if ( mw.config.get( 'wgNamespaceNumber' ) === 4 &amp;&amp; mw.config.get( 'wgTitle' ) === 'Upload' &amp;&amp; mw.config.get( 'wgAction' ) === 'view' ) {<br /> var oldDiv = document.getElementById( 'autoconfirmedusers' ),<br /> newDiv = document.getElementById( 'newusers' );<br /> if ( oldDiv &amp;&amp; newDiv ) {<br /> var userGroups = mw.config.get( 'wgUserGroups' );<br /> if ( userGroups ) {<br /> for ( var i = 0; i &lt; userGroups.length; i++ ) {<br /> if ( userGroups[i] === 'autoconfirmed' ) {<br /> oldDiv.style.display = 'block';<br /> newDiv.style.display = 'none';<br /> return;<br /> }<br /> }<br /> }<br /> oldDiv.style.display = 'none';<br /> newDiv.style.display = 'block';<br /> return;<br /> }<br /> }<br /> }<br /> <br /> $(uploadwizard_newusers);<br /> <br /> /**<br /> * Magic editintros ****************************************************<br /> *<br /> * Description: Adds editintros on disambiguation pages and BLP pages.<br /> * Maintainers: [[User:RockMFR]]<br /> */<br /> function addEditIntro( name ) {<br /> $( '.mw-editsection, #ca-edit' ).find( 'a' ).each( function ( i, el ) {<br /> el.href = $( this ).attr( 'href' ) + '&amp;editintro=' + name;<br /> } );<br /> }<br /> <br /> if ( mw.config.get( 'wgNamespaceNumber' ) === 0 ) {<br /> $( function () {<br /> if ( document.getElementById( 'disambigbox' ) ) {<br /> addEditIntro( 'Template:Disambig_editintro' );<br /> }<br /> } );<br /> <br /> $( function () {<br /> var cats = mw.config.get('wgCategories');<br /> if ( !cats ) {<br /> return;<br /> }<br /> if ( $.inArray( 'Living people', cats ) !== -1 || $.inArray( 'Possibly living people', cats ) !== -1 ) {<br /> addEditIntro( 'Template:BLP_editintro' );<br /> }<br /> } );<br /> }<br /> <br /> /* End of mw.loader.using callback */<br /> } );<br /> <br /> <br /> /* Define functions for showing/hiding language-specific text blocks */<br /> function hide_by_css_class(clzName) {<br /> document.getElementsByClassName('clzName')[0].style.visibility = 'visible';<br /> }<br /> <br /> function show_by_css_class(clzName) {<br /> document.getElementsByClassName('clzName')[0].style.visibility = 'hidden';<br /> }<br /> <br /> $(function() {<br /> console.log( &quot;Common.js ready!&quot; );<br /> var lang_sel_html = &quot;&lt;div onclick=\&quot;hide_by_css_class('lang_en'); show_by_css_class('lang_zh');\&quot;&gt;EN&lt;/div&gt;|&quot; +<br /> &quot;&lt;div onclick=\&quot;hide_by_css_class('lang_zh'); show_by_css_class('lang_en');\&quot;&gt;ZH&lt;/div&gt;|&quot; +<br /> &quot;&lt;div onclick=\&quot;show_by_css_class('lang_en'); show_by_css_class('lang_zh');\&quot;&gt;Both&lt;/div&gt;&quot;;<br /> <br /> $('#lang_sel_enzh').html(lang_sel_html);<br /> });</div> Admin https://langwiki.org/index.php?title=MediaWiki:Common.js&diff=3147 MediaWiki:Common.js 2019-11-25T05:12:24Z <p>Admin:</p> <hr /> <div>/* 这里的任何JavaScript将为所有用户在每次页面载入时加载。 */<br /> <br /> /**<br /> * Keep code in MediaWiki:Common.js to a minimum as it is unconditionally<br /> * loaded for all users on every wiki page. If possible create a gadget that is<br /> * enabled by default instead of adding it here (since gadgets are fully<br /> * optimized ResourceLoader modules with possibility to add dependencies etc.)<br /> *<br /> * Since Common.js isn't a gadget, there is no place to declare its<br /> * dependencies, so we have to lazy load them with mw.loader.using on demand and<br /> * then execute the rest in the callback. In most cases these dependencies will<br /> * be loaded (or loading) already and the callback will not be delayed. In case a<br /> * dependency hasn't arrived yet it'll make sure those are loaded before this.<br /> */<br /> <br /> /* global mw, $ */<br /> /* jshint strict:false, browser:true */<br /> <br /> mw.loader.using( ['mediawiki.user', 'mediawiki.util', 'mediawiki.notify', 'jquery.client'] ).done( function () {<br /> /* Begin of mw.loader.using callback */<br /> <br /> /**<br /> * Main Page layout fixes<br /> *<br /> * Description: Adds an additional link to the complete list of languages available.<br /> * Maintainers: [[User:AzaToth]], [[User:R. Koot]], [[User:Alex Smotrov]]<br /> */<br /> if ( mw.config.get( 'wgPageName' ) === 'Main_Page' || mw.config.get( 'wgPageName' ) === 'Talk:Main_Page' ) {<br /> $( function () {<br /> mw.util.addPortletLink( 'p-lang', '//meta.wikimedia.org/wiki/List_of_Wikipedias',<br /> 'Complete list', 'interwiki-completelist', 'Complete list of Wikipedias' );<br /> } );<br /> }<br /> <br /> /**<br /> * Redirect User:Name/skin.js and skin.css to the current skin's pages<br /> * (unless the 'skin' page really exists)<br /> * @source: http://www.mediawiki.org/wiki/Snippets/Redirect_skin.js<br /> * @rev: 2<br /> */<br /> if ( mw.config.get( 'wgArticleId' ) === 0 &amp;&amp; mw.config.get( 'wgNamespaceNumber' ) === 2 ) {<br /> var titleParts = mw.config.get( 'wgPageName' ).split( '/' );<br /> /* Make sure there was a part before and after the slash<br /> and that the latter is 'skin.js' or 'skin.css' */<br /> if ( titleParts.length == 2 ) {<br /> var userSkinPage = titleParts.shift() + '/' + mw.config.get( 'skin' );<br /> if ( titleParts.slice( -1 ) == 'skin.js' ) {<br /> window.location.href = mw.util.getUrl( userSkinPage + '.js' );<br /> } else if ( titleParts.slice( -1 ) == 'skin.css' ) {<br /> window.location.href = mw.util.getUrl( userSkinPage + '.css' );<br /> }<br /> }<br /> }<br /> <br /> /**<br /> * Map addPortletLink to mw.util<br /> * @deprecated: Use mw.util.addPortletLink instead.<br /> */<br /> mw.log.deprecate( window, 'addPortletLink', mw.util.addPortletLink, 'Use mw.util.addPortletLink instead' );<br /> <br /> /**<br /> * Extract a URL parameter from the current URL<br /> * @deprecated: Use mw.util.getParamValue with proper escaping<br /> */<br /> mw.log.deprecate( window, 'getURLParamValue', mw.util.getParamValue, 'Use mw.util.getParamValue instead' );<br /> <br /> /**<br /> * Test if an element has a certain class<br /> * @deprecated: Use $(element).hasClass() instead.<br /> */<br /> mw.log.deprecate( window, 'hasClass', function ( element, className ) {<br /> return $( element ).hasClass( className );<br /> }, 'Use jQuery.hasClass() instead' );<br /> <br /> /**<br /> * @source www.mediawiki.org/wiki/Snippets/Load_JS_and_CSS_by_URL<br /> * @rev 6<br /> */<br /> var extraCSS = mw.util.getParamValue( 'withCSS' ),<br /> extraJS = mw.util.getParamValue( 'withJS' );<br /> <br /> if ( extraCSS ) {<br /> if ( extraCSS.match( /^MediaWiki:[^&amp;&lt;&gt;=%#]*\.css$/ ) ) {<br /> mw.loader.load( '/w/index.php?title=' + extraCSS + '&amp;action=raw&amp;ctype=text/css', 'text/css' );<br /> } else {<br /> mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withCSS value' } );<br /> }<br /> }<br /> <br /> if ( extraJS ) {<br /> if ( extraJS.match( /^MediaWiki:[^&amp;&lt;&gt;=%#]*\.js$/ ) ) {<br /> mw.loader.load( '/w/index.php?title=' + extraJS + '&amp;action=raw&amp;ctype=text/javascript' );<br /> } else {<br /> mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withJS value' } );<br /> }<br /> }<br /> <br /> /**<br /> * WikiMiniAtlas<br /> *<br /> * Description: WikiMiniAtlas is a popup click and drag world map.<br /> * This script causes all of our coordinate links to display the WikiMiniAtlas popup button.<br /> * The script itself is located on meta because it is used by many projects.<br /> * See [[Meta:WikiMiniAtlas]] for more information.<br /> * Maintainers: [[User:Dschwen]]<br /> */<br /> ( function () {<br /> var require_wikiminiatlas = false;<br /> var coord_filter = /geohack/;<br /> $( function () {<br /> $( 'a.external.text' ).each( function( key, link ) {<br /> if ( link.href &amp;&amp; coord_filter.exec( link.href ) ) {<br /> require_wikiminiatlas = true;<br /> // break from loop<br /> return false;<br /> }<br /> } );<br /> if ( $( 'div.kmldata' ).length ) {<br /> require_wikiminiatlas = true;<br /> }<br /> if ( require_wikiminiatlas ) {<br /> mw.loader.load( '//meta.wikimedia.org/w/index.php?title=MediaWiki:Wikiminiatlas.js&amp;action=raw&amp;ctype=text/javascript' );<br /> }<br /> } );<br /> } )();<br /> <br /> /**<br /> * Collapsible tables<br /> *<br /> * Allows tables to be collapsed, showing only the header. See [[Help:Collapsing]].<br /> *<br /> * @version 2.0.3 (2014-03-14)<br /> * @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-collapsibleTables.js<br /> * @author [[User:R. Koot]]<br /> * @author [[User:Krinkle]]<br /> * @deprecated Since MediaWiki 1.20: Use class=&quot;mw-collapsible&quot; instead which<br /> * is supported in MediaWiki core.<br /> */<br /> <br /> var autoCollapse = 2;<br /> var collapseCaption = 'hide';<br /> var expandCaption = 'show';<br /> var tableIndex = 0;<br /> <br /> function collapseTable( tableIndex ) {<br /> var Button = document.getElementById( 'collapseButton' + tableIndex );<br /> var Table = document.getElementById( 'collapsibleTable' + tableIndex );<br /> <br /> if ( !Table || !Button ) {<br /> return false;<br /> }<br /> <br /> var Rows = Table.rows;<br /> var i;<br /> var $row0 = $(Rows[0]);<br /> <br /> if ( Button.firstChild.data === collapseCaption ) {<br /> for ( i = 1; i &lt; Rows.length; i++ ) {<br /> Rows[i].style.display = 'none';<br /> }<br /> Button.firstChild.data = expandCaption;<br /> } else {<br /> for ( i = 1; i &lt; Rows.length; i++ ) {<br /> Rows[i].style.display = $row0.css( 'display' );<br /> }<br /> Button.firstChild.data = collapseCaption;<br /> }<br /> }<br /> <br /> function createClickHandler( tableIndex ) {<br /> return function ( e ) {<br /> e.preventDefault();<br /> collapseTable( tableIndex );<br /> };<br /> }<br /> <br /> function createCollapseButtons( $content ) {<br /> var NavigationBoxes = {};<br /> var $Tables = $content.find( 'table' );<br /> var i;<br /> <br /> $Tables.each( function( i, table ) {<br /> if ( $(table).hasClass( 'collapsible' ) ) {<br /> <br /> /* only add button and increment count if there is a header row to work with */<br /> var HeaderRow = table.getElementsByTagName( 'tr' )[0];<br /> if ( !HeaderRow ) {<br /> return;<br /> }<br /> var Header = table.getElementsByTagName( 'th' )[0];<br /> if ( !Header ) {<br /> return;<br /> }<br /> <br /> NavigationBoxes[ tableIndex ] = table;<br /> table.setAttribute( 'id', 'collapsibleTable' + tableIndex );<br /> <br /> var Button = document.createElement( 'span' );<br /> var ButtonLink = document.createElement( 'a' );<br /> var ButtonText = document.createTextNode( collapseCaption );<br /> // Styles are declared in [[MediaWiki:Common.css]]<br /> Button.className = 'collapseButton';<br /> <br /> ButtonLink.style.color = Header.style.color;<br /> ButtonLink.setAttribute( 'id', 'collapseButton' + tableIndex );<br /> ButtonLink.setAttribute( 'href', '#' );<br /> $( ButtonLink ).on( 'click', createClickHandler( tableIndex ) );<br /> ButtonLink.appendChild( ButtonText );<br /> <br /> Button.appendChild( document.createTextNode( '[' ) );<br /> Button.appendChild( ButtonLink );<br /> Button.appendChild( document.createTextNode( ']' ) );<br /> <br /> Header.insertBefore( Button, Header.firstChild );<br /> tableIndex++;<br /> }<br /> } );<br /> <br /> for ( i = 0; i &lt; tableIndex; i++ ) {<br /> if ( $( NavigationBoxes[i] ).hasClass( 'collapsed' ) ||<br /> ( tableIndex &gt;= autoCollapse &amp;&amp; $( NavigationBoxes[i] ).hasClass( 'autocollapse' ) )<br /> ) {<br /> collapseTable( i );<br /> }<br /> else if ( $( NavigationBoxes[i] ).hasClass ( 'innercollapse' ) ) {<br /> var element = NavigationBoxes[i];<br /> while ((element = element.parentNode)) {<br /> if ( $( element ).hasClass( 'outercollapse' ) ) {<br /> collapseTable ( i );<br /> break;<br /> }<br /> }<br /> }<br /> }<br /> }<br /> <br /> mw.hook( 'wikipage.content' ).add( createCollapseButtons );<br /> <br /> /**<br /> * Add support to mw-collapsible for autocollapse, innercollapse and outercollapse<br /> *<br /> * Maintainers: TheDJ<br /> */<br /> function mwCollapsibleSetup( $collapsibleContent ) {<br /> var $element,<br /> autoCollapseThreshold = 2;<br /> $.each( $collapsibleContent, function (index, element) {<br /> $element = $( element );<br /> if ( index &gt; autoCollapseThreshold &amp;&amp; $element.hasClass( 'autocollapse' ) ) {<br /> $element.data( 'mw-collapsible' ).collapse();<br /> } else if ( $element.hasClass( 'innercollapse' ) ) {<br /> if ( $element.parents( '.outercollapse' ).length &gt; 0 ) {<br /> $element.data( 'mw-collapsible' ).collapse();<br /> }<br /> }<br /> } );<br /> }<br /> <br /> mw.hook( 'wikipage.collapsibleContent' ).add( mwCollapsibleSetup );<br /> <br /> /**<br /> * Dynamic Navigation Bars (experimental)<br /> *<br /> * Description: See [[Wikipedia:NavFrame]].<br /> * Maintainers: UNMAINTAINED<br /> */<br /> <br /> /* set up the words in your language */<br /> var NavigationBarHide = '[' + collapseCaption + ']';<br /> var NavigationBarShow = '[' + expandCaption + ']';<br /> var indexNavigationBar = 0;<br /> <br /> /**<br /> * Shows and hides content and picture (if available) of navigation bars<br /> * Parameters:<br /> * indexNavigationBar: the index of navigation bar to be toggled<br /> **/<br /> window.toggleNavigationBar = function ( indexNavigationBar, event ) {<br /> var NavToggle = document.getElementById( 'NavToggle' + indexNavigationBar );<br /> var NavFrame = document.getElementById( 'NavFrame' + indexNavigationBar );<br /> var NavChild;<br /> <br /> if ( !NavFrame || !NavToggle ) {<br /> return false;<br /> }<br /> <br /> /* if shown now */<br /> if ( NavToggle.firstChild.data === NavigationBarHide ) {<br /> for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavContent' ) || $( NavChild ).hasClass( 'NavPic' ) ) {<br /> NavChild.style.display = 'none';<br /> }<br /> }<br /> NavToggle.firstChild.data = NavigationBarShow;<br /> <br /> /* if hidden now */<br /> } else if ( NavToggle.firstChild.data === NavigationBarShow ) {<br /> for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavContent' ) || $( NavChild ).hasClass( 'NavPic' ) ) {<br /> NavChild.style.display = 'block';<br /> }<br /> }<br /> NavToggle.firstChild.data = NavigationBarHide;<br /> }<br /> <br /> event.preventDefault();<br /> };<br /> <br /> /* adds show/hide-button to navigation bars */<br /> function createNavigationBarToggleButton( $content ) {<br /> var NavChild;<br /> /* iterate over all &lt; div &gt;-elements */<br /> var $divs = $content.find( 'div' );<br /> $divs.each( function ( i, NavFrame ) {<br /> /* if found a navigation bar */<br /> if ( $( NavFrame ).hasClass( 'NavFrame' ) ) {<br /> <br /> indexNavigationBar++;<br /> var NavToggle = document.createElement( 'a' );<br /> NavToggle.className = 'NavToggle';<br /> NavToggle.setAttribute( 'id', 'NavToggle' + indexNavigationBar );<br /> NavToggle.setAttribute( 'href', '#' );<br /> $( NavToggle ).on( 'click', $.proxy( window.toggleNavigationBar, window, indexNavigationBar ) );<br /> <br /> var isCollapsed = $( NavFrame ).hasClass( 'collapsed' );<br /> /**<br /> * Check if any children are already hidden. This loop is here for backwards compatibility:<br /> * the old way of making NavFrames start out collapsed was to manually add style=&quot;display:none&quot;<br /> * to all the NavPic/NavContent elements. Since this was bad for accessibility (no way to make<br /> * the content visible without JavaScript support), the new recommended way is to add the class<br /> * &quot;collapsed&quot; to the NavFrame itself, just like with collapsible tables.<br /> */<br /> for ( NavChild = NavFrame.firstChild; NavChild != null &amp;&amp; !isCollapsed; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavPic' ) || $( NavChild ).hasClass( 'NavContent' ) ) {<br /> if ( NavChild.style.display === 'none' ) {<br /> isCollapsed = true;<br /> }<br /> }<br /> }<br /> if ( isCollapsed ) {<br /> for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavPic' ) || $( NavChild ).hasClass( 'NavContent' ) ) {<br /> NavChild.style.display = 'none';<br /> }<br /> }<br /> }<br /> var NavToggleText = document.createTextNode( isCollapsed ? NavigationBarShow : NavigationBarHide );<br /> NavToggle.appendChild( NavToggleText );<br /> <br /> /* Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked) */<br /> for( var j = 0; j &lt; NavFrame.childNodes.length; j++ ) {<br /> if ( $( NavFrame.childNodes[j] ).hasClass( 'NavHead' ) ) {<br /> NavToggle.style.color = NavFrame.childNodes[j].style.color;<br /> NavFrame.childNodes[j].appendChild( NavToggle );<br /> }<br /> }<br /> NavFrame.setAttribute( 'id', 'NavFrame' + indexNavigationBar );<br /> }<br /> } );<br /> }<br /> <br /> mw.hook( 'wikipage.content' ).add( createNavigationBarToggleButton );<br /> <br /> /**<br /> * Uploadwizard_newusers<br /> * Switches in a message for non-autoconfirmed users at [[Wikipedia:Upload]]<br /> *<br /> * Maintainers: [[User:Krimpet]]<br /> */<br /> function uploadwizard_newusers() {<br /> if ( mw.config.get( 'wgNamespaceNumber' ) === 4 &amp;&amp; mw.config.get( 'wgTitle' ) === 'Upload' &amp;&amp; mw.config.get( 'wgAction' ) === 'view' ) {<br /> var oldDiv = document.getElementById( 'autoconfirmedusers' ),<br /> newDiv = document.getElementById( 'newusers' );<br /> if ( oldDiv &amp;&amp; newDiv ) {<br /> var userGroups = mw.config.get( 'wgUserGroups' );<br /> if ( userGroups ) {<br /> for ( var i = 0; i &lt; userGroups.length; i++ ) {<br /> if ( userGroups[i] === 'autoconfirmed' ) {<br /> oldDiv.style.display = 'block';<br /> newDiv.style.display = 'none';<br /> return;<br /> }<br /> }<br /> }<br /> oldDiv.style.display = 'none';<br /> newDiv.style.display = 'block';<br /> return;<br /> }<br /> }<br /> }<br /> <br /> $(uploadwizard_newusers);<br /> <br /> /**<br /> * Magic editintros ****************************************************<br /> *<br /> * Description: Adds editintros on disambiguation pages and BLP pages.<br /> * Maintainers: [[User:RockMFR]]<br /> */<br /> function addEditIntro( name ) {<br /> $( '.mw-editsection, #ca-edit' ).find( 'a' ).each( function ( i, el ) {<br /> el.href = $( this ).attr( 'href' ) + '&amp;editintro=' + name;<br /> } );<br /> }<br /> <br /> if ( mw.config.get( 'wgNamespaceNumber' ) === 0 ) {<br /> $( function () {<br /> if ( document.getElementById( 'disambigbox' ) ) {<br /> addEditIntro( 'Template:Disambig_editintro' );<br /> }<br /> } );<br /> <br /> $( function () {<br /> var cats = mw.config.get('wgCategories');<br /> if ( !cats ) {<br /> return;<br /> }<br /> if ( $.inArray( 'Living people', cats ) !== -1 || $.inArray( 'Possibly living people', cats ) !== -1 ) {<br /> addEditIntro( 'Template:BLP_editintro' );<br /> }<br /> } );<br /> }<br /> <br /> /* End of mw.loader.using callback */<br /> } );<br /> <br /> <br /> /* Define functions for showing/hiding language-specific text blocks */<br /> function hide_by_css_class(clzName) {<br /> document.getElementsByClassName('clzName')[0].style.visibility = 'visible';<br /> }<br /> <br /> function show_by_css_class(clzName) {<br /> document.getElementsByClassName('clzName')[0].style.visibility = 'hidden';<br /> }<br /> <br /> $(function () {<br /> var lang_sel_html = &quot;&lt;div onclick=\&quot;hide_by_css_class('lang_en'); show_by_css_class('lang_zh');\&quot;&gt;EN&lt;/div&gt;|&quot; +<br /> &quot;&lt;div onclick=\&quot;hide_by_css_class('lang_zh'); show_by_css_class('lang_en');\&quot;&gt;ZH&lt;/div&gt;|&quot; +<br /> &quot;&lt;div onclick=\&quot;show_by_css_class('lang_en'); show_by_css_class('lang_zh');\&quot;&gt;Both&lt;/div&gt;&quot;;<br /> <br /> $('#lang_sel_enzh').html(lang_sel_html);<br /> }());<br /> <br /> console.log(&quot;Common.js&quot;);</div> Admin https://langwiki.org/index.php?title=%E8%AF%AD%E8%A8%80%E7%BB%B4%E5%9F%BA:%E6%B5%8B%E8%AF%95&diff=3146 语言维基:测试 2019-11-25T05:06:14Z <p>Admin:</p> <hr /> <div>&lt;div name=&quot;lang_sel_enzh&quot;&gt;---MENU HERE---&lt;/div&gt;<br /> 可视化编辑测试<br /> <br /> NodeJS 10 + Parsoid 测试<br /> <br /> 再次编辑可视化页面<br /> <br /> &lt;div class=&quot;lang_en&quot;&gt;Los Angeles is a popular city for tourism.&lt;/div&gt;<br /> <br /> &lt;div class=&quot;lang_zh&quot;&gt;洛杉矶是一个时尚的旅游城市。&lt;/div&gt;</div> Admin https://langwiki.org/index.php?title=MediaWiki:Common.js&diff=3145 MediaWiki:Common.js 2019-11-25T05:05:25Z <p>Admin:</p> <hr /> <div>/* 这里的任何JavaScript将为所有用户在每次页面载入时加载。 */<br /> <br /> /**<br /> * Keep code in MediaWiki:Common.js to a minimum as it is unconditionally<br /> * loaded for all users on every wiki page. If possible create a gadget that is<br /> * enabled by default instead of adding it here (since gadgets are fully<br /> * optimized ResourceLoader modules with possibility to add dependencies etc.)<br /> *<br /> * Since Common.js isn't a gadget, there is no place to declare its<br /> * dependencies, so we have to lazy load them with mw.loader.using on demand and<br /> * then execute the rest in the callback. In most cases these dependencies will<br /> * be loaded (or loading) already and the callback will not be delayed. In case a<br /> * dependency hasn't arrived yet it'll make sure those are loaded before this.<br /> */<br /> <br /> /* global mw, $ */<br /> /* jshint strict:false, browser:true */<br /> <br /> mw.loader.using( ['mediawiki.user', 'mediawiki.util', 'mediawiki.notify', 'jquery.client'] ).done( function () {<br /> /* Begin of mw.loader.using callback */<br /> <br /> /**<br /> * Main Page layout fixes<br /> *<br /> * Description: Adds an additional link to the complete list of languages available.<br /> * Maintainers: [[User:AzaToth]], [[User:R. Koot]], [[User:Alex Smotrov]]<br /> */<br /> if ( mw.config.get( 'wgPageName' ) === 'Main_Page' || mw.config.get( 'wgPageName' ) === 'Talk:Main_Page' ) {<br /> $( function () {<br /> mw.util.addPortletLink( 'p-lang', '//meta.wikimedia.org/wiki/List_of_Wikipedias',<br /> 'Complete list', 'interwiki-completelist', 'Complete list of Wikipedias' );<br /> } );<br /> }<br /> <br /> /**<br /> * Redirect User:Name/skin.js and skin.css to the current skin's pages<br /> * (unless the 'skin' page really exists)<br /> * @source: http://www.mediawiki.org/wiki/Snippets/Redirect_skin.js<br /> * @rev: 2<br /> */<br /> if ( mw.config.get( 'wgArticleId' ) === 0 &amp;&amp; mw.config.get( 'wgNamespaceNumber' ) === 2 ) {<br /> var titleParts = mw.config.get( 'wgPageName' ).split( '/' );<br /> /* Make sure there was a part before and after the slash<br /> and that the latter is 'skin.js' or 'skin.css' */<br /> if ( titleParts.length == 2 ) {<br /> var userSkinPage = titleParts.shift() + '/' + mw.config.get( 'skin' );<br /> if ( titleParts.slice( -1 ) == 'skin.js' ) {<br /> window.location.href = mw.util.getUrl( userSkinPage + '.js' );<br /> } else if ( titleParts.slice( -1 ) == 'skin.css' ) {<br /> window.location.href = mw.util.getUrl( userSkinPage + '.css' );<br /> }<br /> }<br /> }<br /> <br /> /**<br /> * Map addPortletLink to mw.util<br /> * @deprecated: Use mw.util.addPortletLink instead.<br /> */<br /> mw.log.deprecate( window, 'addPortletLink', mw.util.addPortletLink, 'Use mw.util.addPortletLink instead' );<br /> <br /> /**<br /> * Extract a URL parameter from the current URL<br /> * @deprecated: Use mw.util.getParamValue with proper escaping<br /> */<br /> mw.log.deprecate( window, 'getURLParamValue', mw.util.getParamValue, 'Use mw.util.getParamValue instead' );<br /> <br /> /**<br /> * Test if an element has a certain class<br /> * @deprecated: Use $(element).hasClass() instead.<br /> */<br /> mw.log.deprecate( window, 'hasClass', function ( element, className ) {<br /> return $( element ).hasClass( className );<br /> }, 'Use jQuery.hasClass() instead' );<br /> <br /> /**<br /> * @source www.mediawiki.org/wiki/Snippets/Load_JS_and_CSS_by_URL<br /> * @rev 6<br /> */<br /> var extraCSS = mw.util.getParamValue( 'withCSS' ),<br /> extraJS = mw.util.getParamValue( 'withJS' );<br /> <br /> if ( extraCSS ) {<br /> if ( extraCSS.match( /^MediaWiki:[^&amp;&lt;&gt;=%#]*\.css$/ ) ) {<br /> mw.loader.load( '/w/index.php?title=' + extraCSS + '&amp;action=raw&amp;ctype=text/css', 'text/css' );<br /> } else {<br /> mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withCSS value' } );<br /> }<br /> }<br /> <br /> if ( extraJS ) {<br /> if ( extraJS.match( /^MediaWiki:[^&amp;&lt;&gt;=%#]*\.js$/ ) ) {<br /> mw.loader.load( '/w/index.php?title=' + extraJS + '&amp;action=raw&amp;ctype=text/javascript' );<br /> } else {<br /> mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withJS value' } );<br /> }<br /> }<br /> <br /> /**<br /> * WikiMiniAtlas<br /> *<br /> * Description: WikiMiniAtlas is a popup click and drag world map.<br /> * This script causes all of our coordinate links to display the WikiMiniAtlas popup button.<br /> * The script itself is located on meta because it is used by many projects.<br /> * See [[Meta:WikiMiniAtlas]] for more information.<br /> * Maintainers: [[User:Dschwen]]<br /> */<br /> ( function () {<br /> var require_wikiminiatlas = false;<br /> var coord_filter = /geohack/;<br /> $( function () {<br /> $( 'a.external.text' ).each( function( key, link ) {<br /> if ( link.href &amp;&amp; coord_filter.exec( link.href ) ) {<br /> require_wikiminiatlas = true;<br /> // break from loop<br /> return false;<br /> }<br /> } );<br /> if ( $( 'div.kmldata' ).length ) {<br /> require_wikiminiatlas = true;<br /> }<br /> if ( require_wikiminiatlas ) {<br /> mw.loader.load( '//meta.wikimedia.org/w/index.php?title=MediaWiki:Wikiminiatlas.js&amp;action=raw&amp;ctype=text/javascript' );<br /> }<br /> } );<br /> } )();<br /> <br /> /**<br /> * Collapsible tables<br /> *<br /> * Allows tables to be collapsed, showing only the header. See [[Help:Collapsing]].<br /> *<br /> * @version 2.0.3 (2014-03-14)<br /> * @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-collapsibleTables.js<br /> * @author [[User:R. Koot]]<br /> * @author [[User:Krinkle]]<br /> * @deprecated Since MediaWiki 1.20: Use class=&quot;mw-collapsible&quot; instead which<br /> * is supported in MediaWiki core.<br /> */<br /> <br /> var autoCollapse = 2;<br /> var collapseCaption = 'hide';<br /> var expandCaption = 'show';<br /> var tableIndex = 0;<br /> <br /> function collapseTable( tableIndex ) {<br /> var Button = document.getElementById( 'collapseButton' + tableIndex );<br /> var Table = document.getElementById( 'collapsibleTable' + tableIndex );<br /> <br /> if ( !Table || !Button ) {<br /> return false;<br /> }<br /> <br /> var Rows = Table.rows;<br /> var i;<br /> var $row0 = $(Rows[0]);<br /> <br /> if ( Button.firstChild.data === collapseCaption ) {<br /> for ( i = 1; i &lt; Rows.length; i++ ) {<br /> Rows[i].style.display = 'none';<br /> }<br /> Button.firstChild.data = expandCaption;<br /> } else {<br /> for ( i = 1; i &lt; Rows.length; i++ ) {<br /> Rows[i].style.display = $row0.css( 'display' );<br /> }<br /> Button.firstChild.data = collapseCaption;<br /> }<br /> }<br /> <br /> function createClickHandler( tableIndex ) {<br /> return function ( e ) {<br /> e.preventDefault();<br /> collapseTable( tableIndex );<br /> };<br /> }<br /> <br /> function createCollapseButtons( $content ) {<br /> var NavigationBoxes = {};<br /> var $Tables = $content.find( 'table' );<br /> var i;<br /> <br /> $Tables.each( function( i, table ) {<br /> if ( $(table).hasClass( 'collapsible' ) ) {<br /> <br /> /* only add button and increment count if there is a header row to work with */<br /> var HeaderRow = table.getElementsByTagName( 'tr' )[0];<br /> if ( !HeaderRow ) {<br /> return;<br /> }<br /> var Header = table.getElementsByTagName( 'th' )[0];<br /> if ( !Header ) {<br /> return;<br /> }<br /> <br /> NavigationBoxes[ tableIndex ] = table;<br /> table.setAttribute( 'id', 'collapsibleTable' + tableIndex );<br /> <br /> var Button = document.createElement( 'span' );<br /> var ButtonLink = document.createElement( 'a' );<br /> var ButtonText = document.createTextNode( collapseCaption );<br /> // Styles are declared in [[MediaWiki:Common.css]]<br /> Button.className = 'collapseButton';<br /> <br /> ButtonLink.style.color = Header.style.color;<br /> ButtonLink.setAttribute( 'id', 'collapseButton' + tableIndex );<br /> ButtonLink.setAttribute( 'href', '#' );<br /> $( ButtonLink ).on( 'click', createClickHandler( tableIndex ) );<br /> ButtonLink.appendChild( ButtonText );<br /> <br /> Button.appendChild( document.createTextNode( '[' ) );<br /> Button.appendChild( ButtonLink );<br /> Button.appendChild( document.createTextNode( ']' ) );<br /> <br /> Header.insertBefore( Button, Header.firstChild );<br /> tableIndex++;<br /> }<br /> } );<br /> <br /> for ( i = 0; i &lt; tableIndex; i++ ) {<br /> if ( $( NavigationBoxes[i] ).hasClass( 'collapsed' ) ||<br /> ( tableIndex &gt;= autoCollapse &amp;&amp; $( NavigationBoxes[i] ).hasClass( 'autocollapse' ) )<br /> ) {<br /> collapseTable( i );<br /> }<br /> else if ( $( NavigationBoxes[i] ).hasClass ( 'innercollapse' ) ) {<br /> var element = NavigationBoxes[i];<br /> while ((element = element.parentNode)) {<br /> if ( $( element ).hasClass( 'outercollapse' ) ) {<br /> collapseTable ( i );<br /> break;<br /> }<br /> }<br /> }<br /> }<br /> }<br /> <br /> mw.hook( 'wikipage.content' ).add( createCollapseButtons );<br /> <br /> /**<br /> * Add support to mw-collapsible for autocollapse, innercollapse and outercollapse<br /> *<br /> * Maintainers: TheDJ<br /> */<br /> function mwCollapsibleSetup( $collapsibleContent ) {<br /> var $element,<br /> autoCollapseThreshold = 2;<br /> $.each( $collapsibleContent, function (index, element) {<br /> $element = $( element );<br /> if ( index &gt; autoCollapseThreshold &amp;&amp; $element.hasClass( 'autocollapse' ) ) {<br /> $element.data( 'mw-collapsible' ).collapse();<br /> } else if ( $element.hasClass( 'innercollapse' ) ) {<br /> if ( $element.parents( '.outercollapse' ).length &gt; 0 ) {<br /> $element.data( 'mw-collapsible' ).collapse();<br /> }<br /> }<br /> } );<br /> }<br /> <br /> mw.hook( 'wikipage.collapsibleContent' ).add( mwCollapsibleSetup );<br /> <br /> /**<br /> * Dynamic Navigation Bars (experimental)<br /> *<br /> * Description: See [[Wikipedia:NavFrame]].<br /> * Maintainers: UNMAINTAINED<br /> */<br /> <br /> /* set up the words in your language */<br /> var NavigationBarHide = '[' + collapseCaption + ']';<br /> var NavigationBarShow = '[' + expandCaption + ']';<br /> var indexNavigationBar = 0;<br /> <br /> /**<br /> * Shows and hides content and picture (if available) of navigation bars<br /> * Parameters:<br /> * indexNavigationBar: the index of navigation bar to be toggled<br /> **/<br /> window.toggleNavigationBar = function ( indexNavigationBar, event ) {<br /> var NavToggle = document.getElementById( 'NavToggle' + indexNavigationBar );<br /> var NavFrame = document.getElementById( 'NavFrame' + indexNavigationBar );<br /> var NavChild;<br /> <br /> if ( !NavFrame || !NavToggle ) {<br /> return false;<br /> }<br /> <br /> /* if shown now */<br /> if ( NavToggle.firstChild.data === NavigationBarHide ) {<br /> for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavContent' ) || $( NavChild ).hasClass( 'NavPic' ) ) {<br /> NavChild.style.display = 'none';<br /> }<br /> }<br /> NavToggle.firstChild.data = NavigationBarShow;<br /> <br /> /* if hidden now */<br /> } else if ( NavToggle.firstChild.data === NavigationBarShow ) {<br /> for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavContent' ) || $( NavChild ).hasClass( 'NavPic' ) ) {<br /> NavChild.style.display = 'block';<br /> }<br /> }<br /> NavToggle.firstChild.data = NavigationBarHide;<br /> }<br /> <br /> event.preventDefault();<br /> };<br /> <br /> /* adds show/hide-button to navigation bars */<br /> function createNavigationBarToggleButton( $content ) {<br /> var NavChild;<br /> /* iterate over all &lt; div &gt;-elements */<br /> var $divs = $content.find( 'div' );<br /> $divs.each( function ( i, NavFrame ) {<br /> /* if found a navigation bar */<br /> if ( $( NavFrame ).hasClass( 'NavFrame' ) ) {<br /> <br /> indexNavigationBar++;<br /> var NavToggle = document.createElement( 'a' );<br /> NavToggle.className = 'NavToggle';<br /> NavToggle.setAttribute( 'id', 'NavToggle' + indexNavigationBar );<br /> NavToggle.setAttribute( 'href', '#' );<br /> $( NavToggle ).on( 'click', $.proxy( window.toggleNavigationBar, window, indexNavigationBar ) );<br /> <br /> var isCollapsed = $( NavFrame ).hasClass( 'collapsed' );<br /> /**<br /> * Check if any children are already hidden. This loop is here for backwards compatibility:<br /> * the old way of making NavFrames start out collapsed was to manually add style=&quot;display:none&quot;<br /> * to all the NavPic/NavContent elements. Since this was bad for accessibility (no way to make<br /> * the content visible without JavaScript support), the new recommended way is to add the class<br /> * &quot;collapsed&quot; to the NavFrame itself, just like with collapsible tables.<br /> */<br /> for ( NavChild = NavFrame.firstChild; NavChild != null &amp;&amp; !isCollapsed; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavPic' ) || $( NavChild ).hasClass( 'NavContent' ) ) {<br /> if ( NavChild.style.display === 'none' ) {<br /> isCollapsed = true;<br /> }<br /> }<br /> }<br /> if ( isCollapsed ) {<br /> for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavPic' ) || $( NavChild ).hasClass( 'NavContent' ) ) {<br /> NavChild.style.display = 'none';<br /> }<br /> }<br /> }<br /> var NavToggleText = document.createTextNode( isCollapsed ? NavigationBarShow : NavigationBarHide );<br /> NavToggle.appendChild( NavToggleText );<br /> <br /> /* Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked) */<br /> for( var j = 0; j &lt; NavFrame.childNodes.length; j++ ) {<br /> if ( $( NavFrame.childNodes[j] ).hasClass( 'NavHead' ) ) {<br /> NavToggle.style.color = NavFrame.childNodes[j].style.color;<br /> NavFrame.childNodes[j].appendChild( NavToggle );<br /> }<br /> }<br /> NavFrame.setAttribute( 'id', 'NavFrame' + indexNavigationBar );<br /> }<br /> } );<br /> }<br /> <br /> mw.hook( 'wikipage.content' ).add( createNavigationBarToggleButton );<br /> <br /> /**<br /> * Uploadwizard_newusers<br /> * Switches in a message for non-autoconfirmed users at [[Wikipedia:Upload]]<br /> *<br /> * Maintainers: [[User:Krimpet]]<br /> */<br /> function uploadwizard_newusers() {<br /> if ( mw.config.get( 'wgNamespaceNumber' ) === 4 &amp;&amp; mw.config.get( 'wgTitle' ) === 'Upload' &amp;&amp; mw.config.get( 'wgAction' ) === 'view' ) {<br /> var oldDiv = document.getElementById( 'autoconfirmedusers' ),<br /> newDiv = document.getElementById( 'newusers' );<br /> if ( oldDiv &amp;&amp; newDiv ) {<br /> var userGroups = mw.config.get( 'wgUserGroups' );<br /> if ( userGroups ) {<br /> for ( var i = 0; i &lt; userGroups.length; i++ ) {<br /> if ( userGroups[i] === 'autoconfirmed' ) {<br /> oldDiv.style.display = 'block';<br /> newDiv.style.display = 'none';<br /> return;<br /> }<br /> }<br /> }<br /> oldDiv.style.display = 'none';<br /> newDiv.style.display = 'block';<br /> return;<br /> }<br /> }<br /> }<br /> <br /> $(uploadwizard_newusers);<br /> <br /> /**<br /> * Magic editintros ****************************************************<br /> *<br /> * Description: Adds editintros on disambiguation pages and BLP pages.<br /> * Maintainers: [[User:RockMFR]]<br /> */<br /> function addEditIntro( name ) {<br /> $( '.mw-editsection, #ca-edit' ).find( 'a' ).each( function ( i, el ) {<br /> el.href = $( this ).attr( 'href' ) + '&amp;editintro=' + name;<br /> } );<br /> }<br /> <br /> if ( mw.config.get( 'wgNamespaceNumber' ) === 0 ) {<br /> $( function () {<br /> if ( document.getElementById( 'disambigbox' ) ) {<br /> addEditIntro( 'Template:Disambig_editintro' );<br /> }<br /> } );<br /> <br /> $( function () {<br /> var cats = mw.config.get('wgCategories');<br /> if ( !cats ) {<br /> return;<br /> }<br /> if ( $.inArray( 'Living people', cats ) !== -1 || $.inArray( 'Possibly living people', cats ) !== -1 ) {<br /> addEditIntro( 'Template:BLP_editintro' );<br /> }<br /> } );<br /> }<br /> <br /> /* End of mw.loader.using callback */<br /> } );<br /> <br /> <br /> /* Define functions for showing/hiding language-specific text blocks */<br /> function hide_by_css_class(clzName) {<br /> document.getElementsByClassName('clzName')[0].style.visibility = 'visible';<br /> }<br /> <br /> function show_by_css_class(clzName) {<br /> document.getElementsByClassName('clzName')[0].style.visibility = 'hidden';<br /> }<br /> <br /> $(function () {<br /> var lang_sel_html = &quot;&lt;div onclick=\&quot;hide_by_css_class('lang_en'); show_by_css_class('lang_zh');\&quot;&gt;EN&lt;/div&gt;|&quot; +<br /> &quot;&lt;div onclick=\&quot;hide_by_css_class('lang_zh'); show_by_css_class('lang_en');\&quot;&gt;ZH&lt;/div&gt;|&quot; +<br /> &quot;&lt;div onclick=\&quot;show_by_css_class('lang_en'); show_by_css_class('lang_zh');\&quot;&gt;Both&lt;/div&gt;&quot;;<br /> <br /> $('#lang_sel_enzh').html(lang_sel_html);<br /> }());</div> Admin https://langwiki.org/index.php?title=%E8%AF%AD%E8%A8%80%E7%BB%B4%E5%9F%BA:%E6%B5%8B%E8%AF%95&diff=3144 语言维基:测试 2019-11-25T05:01:59Z <p>Admin:</p> <hr /> <div>&lt;div class=&quot;lang_sel_en_zh&quot;&gt;&lt;/div&gt;<br /> 可视化编辑测试<br /> <br /> NodeJS 10 + Parsoid 测试<br /> <br /> 再次编辑可视化页面<br /> <br /> &lt;div class=&quot;lang_en&quot;&gt;Los Angeles is a popular city for tourism.&lt;/div&gt;<br /> <br /> &lt;div class=&quot;lang_zh&quot;&gt;洛杉矶是一个时尚的旅游城市。&lt;/div&gt;</div> Admin https://langwiki.org/index.php?title=MediaWiki:Common.js&diff=3143 MediaWiki:Common.js 2019-11-25T04:57:31Z <p>Admin:Add hide_by_css_class and show_by_css_class</p> <hr /> <div>/* 这里的任何JavaScript将为所有用户在每次页面载入时加载。 */<br /> <br /> /**<br /> * Keep code in MediaWiki:Common.js to a minimum as it is unconditionally<br /> * loaded for all users on every wiki page. If possible create a gadget that is<br /> * enabled by default instead of adding it here (since gadgets are fully<br /> * optimized ResourceLoader modules with possibility to add dependencies etc.)<br /> *<br /> * Since Common.js isn't a gadget, there is no place to declare its<br /> * dependencies, so we have to lazy load them with mw.loader.using on demand and<br /> * then execute the rest in the callback. In most cases these dependencies will<br /> * be loaded (or loading) already and the callback will not be delayed. In case a<br /> * dependency hasn't arrived yet it'll make sure those are loaded before this.<br /> */<br /> <br /> /* global mw, $ */<br /> /* jshint strict:false, browser:true */<br /> <br /> mw.loader.using( ['mediawiki.user', 'mediawiki.util', 'mediawiki.notify', 'jquery.client'] ).done( function () {<br /> /* Begin of mw.loader.using callback */<br /> <br /> /**<br /> * Main Page layout fixes<br /> *<br /> * Description: Adds an additional link to the complete list of languages available.<br /> * Maintainers: [[User:AzaToth]], [[User:R. Koot]], [[User:Alex Smotrov]]<br /> */<br /> if ( mw.config.get( 'wgPageName' ) === 'Main_Page' || mw.config.get( 'wgPageName' ) === 'Talk:Main_Page' ) {<br /> $( function () {<br /> mw.util.addPortletLink( 'p-lang', '//meta.wikimedia.org/wiki/List_of_Wikipedias',<br /> 'Complete list', 'interwiki-completelist', 'Complete list of Wikipedias' );<br /> } );<br /> }<br /> <br /> /**<br /> * Redirect User:Name/skin.js and skin.css to the current skin's pages<br /> * (unless the 'skin' page really exists)<br /> * @source: http://www.mediawiki.org/wiki/Snippets/Redirect_skin.js<br /> * @rev: 2<br /> */<br /> if ( mw.config.get( 'wgArticleId' ) === 0 &amp;&amp; mw.config.get( 'wgNamespaceNumber' ) === 2 ) {<br /> var titleParts = mw.config.get( 'wgPageName' ).split( '/' );<br /> /* Make sure there was a part before and after the slash<br /> and that the latter is 'skin.js' or 'skin.css' */<br /> if ( titleParts.length == 2 ) {<br /> var userSkinPage = titleParts.shift() + '/' + mw.config.get( 'skin' );<br /> if ( titleParts.slice( -1 ) == 'skin.js' ) {<br /> window.location.href = mw.util.getUrl( userSkinPage + '.js' );<br /> } else if ( titleParts.slice( -1 ) == 'skin.css' ) {<br /> window.location.href = mw.util.getUrl( userSkinPage + '.css' );<br /> }<br /> }<br /> }<br /> <br /> /**<br /> * Map addPortletLink to mw.util<br /> * @deprecated: Use mw.util.addPortletLink instead.<br /> */<br /> mw.log.deprecate( window, 'addPortletLink', mw.util.addPortletLink, 'Use mw.util.addPortletLink instead' );<br /> <br /> /**<br /> * Extract a URL parameter from the current URL<br /> * @deprecated: Use mw.util.getParamValue with proper escaping<br /> */<br /> mw.log.deprecate( window, 'getURLParamValue', mw.util.getParamValue, 'Use mw.util.getParamValue instead' );<br /> <br /> /**<br /> * Test if an element has a certain class<br /> * @deprecated: Use $(element).hasClass() instead.<br /> */<br /> mw.log.deprecate( window, 'hasClass', function ( element, className ) {<br /> return $( element ).hasClass( className );<br /> }, 'Use jQuery.hasClass() instead' );<br /> <br /> /**<br /> * @source www.mediawiki.org/wiki/Snippets/Load_JS_and_CSS_by_URL<br /> * @rev 6<br /> */<br /> var extraCSS = mw.util.getParamValue( 'withCSS' ),<br /> extraJS = mw.util.getParamValue( 'withJS' );<br /> <br /> if ( extraCSS ) {<br /> if ( extraCSS.match( /^MediaWiki:[^&amp;&lt;&gt;=%#]*\.css$/ ) ) {<br /> mw.loader.load( '/w/index.php?title=' + extraCSS + '&amp;action=raw&amp;ctype=text/css', 'text/css' );<br /> } else {<br /> mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withCSS value' } );<br /> }<br /> }<br /> <br /> if ( extraJS ) {<br /> if ( extraJS.match( /^MediaWiki:[^&amp;&lt;&gt;=%#]*\.js$/ ) ) {<br /> mw.loader.load( '/w/index.php?title=' + extraJS + '&amp;action=raw&amp;ctype=text/javascript' );<br /> } else {<br /> mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withJS value' } );<br /> }<br /> }<br /> <br /> /**<br /> * WikiMiniAtlas<br /> *<br /> * Description: WikiMiniAtlas is a popup click and drag world map.<br /> * This script causes all of our coordinate links to display the WikiMiniAtlas popup button.<br /> * The script itself is located on meta because it is used by many projects.<br /> * See [[Meta:WikiMiniAtlas]] for more information.<br /> * Maintainers: [[User:Dschwen]]<br /> */<br /> ( function () {<br /> var require_wikiminiatlas = false;<br /> var coord_filter = /geohack/;<br /> $( function () {<br /> $( 'a.external.text' ).each( function( key, link ) {<br /> if ( link.href &amp;&amp; coord_filter.exec( link.href ) ) {<br /> require_wikiminiatlas = true;<br /> // break from loop<br /> return false;<br /> }<br /> } );<br /> if ( $( 'div.kmldata' ).length ) {<br /> require_wikiminiatlas = true;<br /> }<br /> if ( require_wikiminiatlas ) {<br /> mw.loader.load( '//meta.wikimedia.org/w/index.php?title=MediaWiki:Wikiminiatlas.js&amp;action=raw&amp;ctype=text/javascript' );<br /> }<br /> } );<br /> } )();<br /> <br /> /**<br /> * Collapsible tables<br /> *<br /> * Allows tables to be collapsed, showing only the header. See [[Help:Collapsing]].<br /> *<br /> * @version 2.0.3 (2014-03-14)<br /> * @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-collapsibleTables.js<br /> * @author [[User:R. Koot]]<br /> * @author [[User:Krinkle]]<br /> * @deprecated Since MediaWiki 1.20: Use class=&quot;mw-collapsible&quot; instead which<br /> * is supported in MediaWiki core.<br /> */<br /> <br /> var autoCollapse = 2;<br /> var collapseCaption = 'hide';<br /> var expandCaption = 'show';<br /> var tableIndex = 0;<br /> <br /> function collapseTable( tableIndex ) {<br /> var Button = document.getElementById( 'collapseButton' + tableIndex );<br /> var Table = document.getElementById( 'collapsibleTable' + tableIndex );<br /> <br /> if ( !Table || !Button ) {<br /> return false;<br /> }<br /> <br /> var Rows = Table.rows;<br /> var i;<br /> var $row0 = $(Rows[0]);<br /> <br /> if ( Button.firstChild.data === collapseCaption ) {<br /> for ( i = 1; i &lt; Rows.length; i++ ) {<br /> Rows[i].style.display = 'none';<br /> }<br /> Button.firstChild.data = expandCaption;<br /> } else {<br /> for ( i = 1; i &lt; Rows.length; i++ ) {<br /> Rows[i].style.display = $row0.css( 'display' );<br /> }<br /> Button.firstChild.data = collapseCaption;<br /> }<br /> }<br /> <br /> function createClickHandler( tableIndex ) {<br /> return function ( e ) {<br /> e.preventDefault();<br /> collapseTable( tableIndex );<br /> };<br /> }<br /> <br /> function createCollapseButtons( $content ) {<br /> var NavigationBoxes = {};<br /> var $Tables = $content.find( 'table' );<br /> var i;<br /> <br /> $Tables.each( function( i, table ) {<br /> if ( $(table).hasClass( 'collapsible' ) ) {<br /> <br /> /* only add button and increment count if there is a header row to work with */<br /> var HeaderRow = table.getElementsByTagName( 'tr' )[0];<br /> if ( !HeaderRow ) {<br /> return;<br /> }<br /> var Header = table.getElementsByTagName( 'th' )[0];<br /> if ( !Header ) {<br /> return;<br /> }<br /> <br /> NavigationBoxes[ tableIndex ] = table;<br /> table.setAttribute( 'id', 'collapsibleTable' + tableIndex );<br /> <br /> var Button = document.createElement( 'span' );<br /> var ButtonLink = document.createElement( 'a' );<br /> var ButtonText = document.createTextNode( collapseCaption );<br /> // Styles are declared in [[MediaWiki:Common.css]]<br /> Button.className = 'collapseButton';<br /> <br /> ButtonLink.style.color = Header.style.color;<br /> ButtonLink.setAttribute( 'id', 'collapseButton' + tableIndex );<br /> ButtonLink.setAttribute( 'href', '#' );<br /> $( ButtonLink ).on( 'click', createClickHandler( tableIndex ) );<br /> ButtonLink.appendChild( ButtonText );<br /> <br /> Button.appendChild( document.createTextNode( '[' ) );<br /> Button.appendChild( ButtonLink );<br /> Button.appendChild( document.createTextNode( ']' ) );<br /> <br /> Header.insertBefore( Button, Header.firstChild );<br /> tableIndex++;<br /> }<br /> } );<br /> <br /> for ( i = 0; i &lt; tableIndex; i++ ) {<br /> if ( $( NavigationBoxes[i] ).hasClass( 'collapsed' ) ||<br /> ( tableIndex &gt;= autoCollapse &amp;&amp; $( NavigationBoxes[i] ).hasClass( 'autocollapse' ) )<br /> ) {<br /> collapseTable( i );<br /> }<br /> else if ( $( NavigationBoxes[i] ).hasClass ( 'innercollapse' ) ) {<br /> var element = NavigationBoxes[i];<br /> while ((element = element.parentNode)) {<br /> if ( $( element ).hasClass( 'outercollapse' ) ) {<br /> collapseTable ( i );<br /> break;<br /> }<br /> }<br /> }<br /> }<br /> }<br /> <br /> mw.hook( 'wikipage.content' ).add( createCollapseButtons );<br /> <br /> /**<br /> * Add support to mw-collapsible for autocollapse, innercollapse and outercollapse<br /> *<br /> * Maintainers: TheDJ<br /> */<br /> function mwCollapsibleSetup( $collapsibleContent ) {<br /> var $element,<br /> autoCollapseThreshold = 2;<br /> $.each( $collapsibleContent, function (index, element) {<br /> $element = $( element );<br /> if ( index &gt; autoCollapseThreshold &amp;&amp; $element.hasClass( 'autocollapse' ) ) {<br /> $element.data( 'mw-collapsible' ).collapse();<br /> } else if ( $element.hasClass( 'innercollapse' ) ) {<br /> if ( $element.parents( '.outercollapse' ).length &gt; 0 ) {<br /> $element.data( 'mw-collapsible' ).collapse();<br /> }<br /> }<br /> } );<br /> }<br /> <br /> mw.hook( 'wikipage.collapsibleContent' ).add( mwCollapsibleSetup );<br /> <br /> /**<br /> * Dynamic Navigation Bars (experimental)<br /> *<br /> * Description: See [[Wikipedia:NavFrame]].<br /> * Maintainers: UNMAINTAINED<br /> */<br /> <br /> /* set up the words in your language */<br /> var NavigationBarHide = '[' + collapseCaption + ']';<br /> var NavigationBarShow = '[' + expandCaption + ']';<br /> var indexNavigationBar = 0;<br /> <br /> /**<br /> * Shows and hides content and picture (if available) of navigation bars<br /> * Parameters:<br /> * indexNavigationBar: the index of navigation bar to be toggled<br /> **/<br /> window.toggleNavigationBar = function ( indexNavigationBar, event ) {<br /> var NavToggle = document.getElementById( 'NavToggle' + indexNavigationBar );<br /> var NavFrame = document.getElementById( 'NavFrame' + indexNavigationBar );<br /> var NavChild;<br /> <br /> if ( !NavFrame || !NavToggle ) {<br /> return false;<br /> }<br /> <br /> /* if shown now */<br /> if ( NavToggle.firstChild.data === NavigationBarHide ) {<br /> for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavContent' ) || $( NavChild ).hasClass( 'NavPic' ) ) {<br /> NavChild.style.display = 'none';<br /> }<br /> }<br /> NavToggle.firstChild.data = NavigationBarShow;<br /> <br /> /* if hidden now */<br /> } else if ( NavToggle.firstChild.data === NavigationBarShow ) {<br /> for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavContent' ) || $( NavChild ).hasClass( 'NavPic' ) ) {<br /> NavChild.style.display = 'block';<br /> }<br /> }<br /> NavToggle.firstChild.data = NavigationBarHide;<br /> }<br /> <br /> event.preventDefault();<br /> };<br /> <br /> /* adds show/hide-button to navigation bars */<br /> function createNavigationBarToggleButton( $content ) {<br /> var NavChild;<br /> /* iterate over all &lt; div &gt;-elements */<br /> var $divs = $content.find( 'div' );<br /> $divs.each( function ( i, NavFrame ) {<br /> /* if found a navigation bar */<br /> if ( $( NavFrame ).hasClass( 'NavFrame' ) ) {<br /> <br /> indexNavigationBar++;<br /> var NavToggle = document.createElement( 'a' );<br /> NavToggle.className = 'NavToggle';<br /> NavToggle.setAttribute( 'id', 'NavToggle' + indexNavigationBar );<br /> NavToggle.setAttribute( 'href', '#' );<br /> $( NavToggle ).on( 'click', $.proxy( window.toggleNavigationBar, window, indexNavigationBar ) );<br /> <br /> var isCollapsed = $( NavFrame ).hasClass( 'collapsed' );<br /> /**<br /> * Check if any children are already hidden. This loop is here for backwards compatibility:<br /> * the old way of making NavFrames start out collapsed was to manually add style=&quot;display:none&quot;<br /> * to all the NavPic/NavContent elements. Since this was bad for accessibility (no way to make<br /> * the content visible without JavaScript support), the new recommended way is to add the class<br /> * &quot;collapsed&quot; to the NavFrame itself, just like with collapsible tables.<br /> */<br /> for ( NavChild = NavFrame.firstChild; NavChild != null &amp;&amp; !isCollapsed; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavPic' ) || $( NavChild ).hasClass( 'NavContent' ) ) {<br /> if ( NavChild.style.display === 'none' ) {<br /> isCollapsed = true;<br /> }<br /> }<br /> }<br /> if ( isCollapsed ) {<br /> for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {<br /> if ( $( NavChild ).hasClass( 'NavPic' ) || $( NavChild ).hasClass( 'NavContent' ) ) {<br /> NavChild.style.display = 'none';<br /> }<br /> }<br /> }<br /> var NavToggleText = document.createTextNode( isCollapsed ? NavigationBarShow : NavigationBarHide );<br /> NavToggle.appendChild( NavToggleText );<br /> <br /> /* Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked) */<br /> for( var j = 0; j &lt; NavFrame.childNodes.length; j++ ) {<br /> if ( $( NavFrame.childNodes[j] ).hasClass( 'NavHead' ) ) {<br /> NavToggle.style.color = NavFrame.childNodes[j].style.color;<br /> NavFrame.childNodes[j].appendChild( NavToggle );<br /> }<br /> }<br /> NavFrame.setAttribute( 'id', 'NavFrame' + indexNavigationBar );<br /> }<br /> } );<br /> }<br /> <br /> mw.hook( 'wikipage.content' ).add( createNavigationBarToggleButton );<br /> <br /> /**<br /> * Uploadwizard_newusers<br /> * Switches in a message for non-autoconfirmed users at [[Wikipedia:Upload]]<br /> *<br /> * Maintainers: [[User:Krimpet]]<br /> */<br /> function uploadwizard_newusers() {<br /> if ( mw.config.get( 'wgNamespaceNumber' ) === 4 &amp;&amp; mw.config.get( 'wgTitle' ) === 'Upload' &amp;&amp; mw.config.get( 'wgAction' ) === 'view' ) {<br /> var oldDiv = document.getElementById( 'autoconfirmedusers' ),<br /> newDiv = document.getElementById( 'newusers' );<br /> if ( oldDiv &amp;&amp; newDiv ) {<br /> var userGroups = mw.config.get( 'wgUserGroups' );<br /> if ( userGroups ) {<br /> for ( var i = 0; i &lt; userGroups.length; i++ ) {<br /> if ( userGroups[i] === 'autoconfirmed' ) {<br /> oldDiv.style.display = 'block';<br /> newDiv.style.display = 'none';<br /> return;<br /> }<br /> }<br /> }<br /> oldDiv.style.display = 'none';<br /> newDiv.style.display = 'block';<br /> return;<br /> }<br /> }<br /> }<br /> <br /> $(uploadwizard_newusers);<br /> <br /> /**<br /> * Magic editintros ****************************************************<br /> *<br /> * Description: Adds editintros on disambiguation pages and BLP pages.<br /> * Maintainers: [[User:RockMFR]]<br /> */<br /> function addEditIntro( name ) {<br /> $( '.mw-editsection, #ca-edit' ).find( 'a' ).each( function ( i, el ) {<br /> el.href = $( this ).attr( 'href' ) + '&amp;editintro=' + name;<br /> } );<br /> }<br /> <br /> if ( mw.config.get( 'wgNamespaceNumber' ) === 0 ) {<br /> $( function () {<br /> if ( document.getElementById( 'disambigbox' ) ) {<br /> addEditIntro( 'Template:Disambig_editintro' );<br /> }<br /> } );<br /> <br /> $( function () {<br /> var cats = mw.config.get('wgCategories');<br /> if ( !cats ) {<br /> return;<br /> }<br /> if ( $.inArray( 'Living people', cats ) !== -1 || $.inArray( 'Possibly living people', cats ) !== -1 ) {<br /> addEditIntro( 'Template:BLP_editintro' );<br /> }<br /> } );<br /> }<br /> <br /> /* End of mw.loader.using callback */<br /> } );<br /> <br /> <br /> /* Define functions for showing/hiding language-specific text blocks */<br /> function hide_by_css_class(clzName) {<br /> document.getElementsByClassName('clzName')[0].style.visibility = 'visible';<br /> }<br /> <br /> function show_by_css_class(clzName) {<br /> document.getElementsByClassName('clzName')[0].style.visibility = 'hidden';<br /> }</div> Admin https://langwiki.org/index.php?title=%E9%80%9A%E7%94%A8%E5%90%B3%E8%AA%9E%E6%9B%B8%E5%AF%AB%E6%96%B9%E6%A1%88&diff=3031 通用吳語書寫方案 2018-12-09T21:41:03Z <p>Admin:创建页面,内容为“= 概述 = 通過使用漢字-諺文混寫的方式實現現代吳語的書寫。其中諺文專門用來書寫人稱代詞、指示代詞、處所詞、連詞、助...”</p> <hr /> <div>= 概述 =<br /> 通過使用漢字-諺文混寫的方式實現現代吳語的書寫。其中諺文專門用來書寫人稱代詞、指示代詞、處所詞、連詞、助詞、語氣詞和無攷字等場合,其它均用漢字書寫.<br /> <br /> == 漢字的書寫形式 ==<br /> 漢字一般使用傳統漢字書寫,但也可以用通行的簡化字。其它方面與現代漢語沒有特別的差異.<br /> <br /> == 諺文的書寫形式 ==<br /> 諺文主要使用的是Unicode區塊中已經成字的音節,但是仍舊有少部分音節需要使用中世諺文符號,即需要拼合才能成字,對電子設備來說這對設備的安裝字體有較大的要求,如果電子設備內部安裝的字體無法支持中世諺文拼合符號,那麼可能會出現無法顯示的情況,誠然,這個狀況在Windows 8+的系統下能夠較好的設置,Windows 7及更早些的版本對拼合型字體符號顯示比較困難.<br /> <br /> 爲了更好的達到美觀整齊的符號組合,囿於符號數量限制,部分諺文符號的讀法與現代韓語不同.<br /> <br /> == 標點符號 ==<br /> 吳諺文的標點符號略微和大陸的通行文本有出入,句號採用全角實心點,引號採用直排方引號,且一般使用單層引號,如果引號嵌套,則內層爲雙層引號<br /> <br /> == 詞彙問題 ==<br /> 一般通用吳語的詞彙兼收整個吳語區的詞彙,若有同類事物的不同叫法或者稱屬,算入同義詞行列.<br /> <br /> = 音系表記 =<br /> 本音系對應中古漢語的精組細音字聲母聲母和知三章字(大部分)聲母相同,羅馬字方案的-y-是顎音記號,同理,見系的細音字亦標記-y-,本方案不設標準讀法,但給出參考讀法.以及,實際上如果尊重時音的話,是可以tsy-系和ky-系同音處理的,而若尊重滯古音,如百年前音系或者台州等地的音系,可以做讀法上的區別.<br /> <br /> == 聲母系統 ==<br /> {| class=&quot;wikitable&quot;<br /> |部位<br /> |方式<br /> |呼<br /> |字母<br /> |IPA<br /> |表記<br /> |字母<br /> |IPA<br /> |表記<br /> |字母<br /> |IPA<br /> |表記<br /> |-<br /> | rowspan=&quot;3&quot; |喉<br /> | rowspan=&quot;3&quot; |發聲態<br /> |開口<br /> |r<br /> |ɦ<br /> |ᅙᅡ<br /> |h<br /> |h<br /> |ᅙᅡ〮<br /> |q<br /> |ʔ<br /> |ᅙᅡ〯<br /> |-<br /> |齊齒<br /> |ry<br /> |ɦj<br /> |ᅙᅣ<br /> |hy<br /> |hj<br /> |ᅙᅣ〮<br /> |qj<br /> |ʔj<br /> |ᅙᅣ〯<br /> |-<br /> |合口<br /> |rw<br /> |ɦw<br /> |ᅙᅪ<br /> |hw<br /> |hw<br /> |ᅙᅪ〮<br /> |qw<br /> |ʔw<br /> |ᅙᅪ〯<br /> |-<br /> | rowspan=&quot;6&quot; |唇<br /> | rowspan=&quot;2&quot; |塞音<br /> |開口<br /> |b<br /> |pɦ<br /> |바<br /> |ph<br /> |ph<br /> |바〮<br /> |p<br /> |ʔp<br /> |바〯<br /> |-<br /> |齊齒<br /> |by<br /> |pɦj<br /> |뱌<br /> |phy<br /> |phj<br /> |뱌〮<br /> |py<br /> |ʔpj<br /> |뱌〯<br /> |-<br /> | rowspan=&quot;2&quot; |鼻音<br /> |開口<br /> |m<br /> |mɦ<br /> |마<br /> |<br /> |<br /> |<br /> |mh<br /> |ʔm<br /> |마〯<br /> |-<br /> |齊齒<br /> |my<br /> |mɦj<br /> |먀<br /> |<br /> |<br /> |<br /> |mhy<br /> |ʔmj<br /> |먀〯<br /> |-<br /> | rowspan=&quot;2&quot; |擦音<br /> |開口<br /> |v<br /> |fɦ<br /> |ᄫᅡ<br /> |f<br /> |fh<br /> |ᄫᅡ〮<br /> |<br /> |<br /> |<br /> |-<br /> |齊齒<br /> |vy<br /> |fɦj<br /> |ᄫᅣ<br /> |fy<br /> |fhj<br /> |ᄫᅣ〮<br /> |<br /> |<br /> |<br /> |-<br /> | rowspan=&quot;10&quot; |齦<br /> | rowspan=&quot;2&quot; |塞音<br /> |開口<br /> |d<br /> |tɦ<br /> |다<br /> |th<br /> |th<br /> |다〮<br /> |t<br /> |ʔt<br /> |다〯<br /> |-<br /> |齊齒<br /> |dy<br /> |tɦj<br /> |댜<br /> |thy<br /> |thj<br /> |댜〮<br /> |ty<br /> |ʔtj<br /> |댜〯<br /> |-<br /> | rowspan=&quot;2&quot; |鼻音<br /> |開口<br /> |n<br /> |nɦ<br /> |나<br /> |<br /> |<br /> |<br /> |nh<br /> |ʔn<br /> |나〯<br /> |-<br /> |齊齒<br /> |ny<br /> |nɦj<br /> |냐<br /> |<br /> |<br /> |<br /> |nhy<br /> |ʔnj<br /> |냐〯<br /> |-<br /> | rowspan=&quot;2&quot; |邊音<br /> |開口<br /> |l<br /> |lɦ<br /> |라<br /> |<br /> |<br /> |<br /> |lh<br /> |ʔl<br /> |라〯<br /> |-<br /> |齊齒<br /> |ly<br /> |lɦj<br /> |랴<br /> |<br /> |<br /> |<br /> |lhy<br /> |ʔlj<br /> |랴〯<br /> |-<br /> | rowspan=&quot;2&quot; |塞擦音<br /> |開口<br /> |j<br /> |tsɦ<br /> |자<br /> |ch<br /> |tsh<br /> |자〮<br /> |c<br /> |ʔts<br /> |자〯<br /> |-<br /> |齊齒<br /> |jy<br /> |tsɦj<br /> |쟈<br /> |chy<br /> |tshj<br /> |쟈〮<br /> |cy<br /> |ʔtsj<br /> |쟈〯<br /> |-<br /> | rowspan=&quot;2&quot; |擦音<br /> |開口<br /> |z<br /> |sɦ<br /> |사<br /> |s<br /> |sh<br /> |사〮<br /> |<br /> |<br /> |<br /> |-<br /> |齊齒<br /> |zy<br /> |sɦj<br /> |샤<br /> |sy<br /> |shj<br /> |샤〮<br /> |<br /> |<br /> |<br /> |-<br /> | rowspan=&quot;6&quot; |齶<br /> | rowspan=&quot;3&quot; |塞音<br /> |開口<br /> |g<br /> |kɦ<br /> |가<br /> |kh<br /> |kh<br /> |가〮<br /> |k<br /> |ʔk<br /> |가〯<br /> |-<br /> |齊齒<br /> |gy<br /> |kɦj<br /> |갸<br /> |khy<br /> |khj<br /> |갸〮<br /> |ky<br /> |ʔkj<br /> |갸〯<br /> |-<br /> |合口<br /> |gw<br /> |kɦw<br /> |과<br /> |khw<br /> |khw<br /> |과〮<br /> |kw<br /> |ʔkw<br /> |과〯<br /> |-<br /> | rowspan=&quot;3&quot; |鼻音<br /> |開口<br /> |ng<br /> |ŋɦ<br /> |아<br /> |<br /> |<br /> |<br /> |ngh<br /> |ʔŋ<br /> |아〯<br /> |-<br /> |齊齒<br /> |ngy<br /> |ŋɦj<br /> |야<br /> |<br /> |<br /> |<br /> |nghy<br /> |ʔŋj<br /> |야〯<br /> |-<br /> |合口<br /> |ngw<br /> |ŋɦw<br /> |와<br /> |<br /> |<br /> |<br /> |nghw<br /> |ʔŋw<br /> |와〯<br /> |}<br /> 表格中諺文一律用韻母a統一代替所有可拼合元音,僅作表格舉例需要的形式替代.<br /> <br /> == 韻母系統 ==<br /> {| class=&quot;wikitable&quot;<br /> |韻类<br /> |字母<br /> |IPA<br /> |表記<br /> |字母<br /> |IPA<br /> |表記<br /> |字母<br /> |IPA<br /> |表記<br /> |-<br /> | rowspan=&quot;10&quot; |阴<br /> |a<br /> |a<br /> |아<br /> |ya<br /> |ja<br /> |야<br /> |wa<br /> |wa<br /> |와<br /> |-<br /> |e<br /> |ᴇ<br /> |애<br /> |ye<br /> |jᴇ<br /> |얘<br /> |we<br /> |wᴇ<br /> |왜<br /> |-<br /> |o<br /> |o<br /> |어<br /> |yo<br /> |jo<br /> |여<br /> |wo<br /> |wo<br /> |ᄋힰ<br /> |-<br /> |ao<br /> |ɔ<br /> |오<br /> |yao<br /> |jɔ<br /> |요<br /> |<br /> |<br /> |<br /> |-<br /> |eo<br /> |ɤ<br /> |우<br /> |yeo<br /> |jɤ<br /> |유<br /> |<br /> |<br /> |<br /> |-<br /> |ei<br /> |əi<br /> |에<br /> |<br /> |wei<br /> |wᵊi<br /> |ᄋᆀ<br /> |<br /> |<br /> |-<br /> |eu<br /> |əu<br /> |외<br /> |yeu<br /> |jᵊu<br /> |ᄋᆈ<br /> |<br /> |<br /> |<br /> |-<br /> |ư<br /> |ɿ<br /> |위<br /> |yư<br /> |jʮ<br /> |ᄋᆔ<br /> |<br /> |<br /> |<br /> |-<br /> |<br /> |yu<br /> |jy<br /> |의<br /> |u~wu<br /> |u~wu<br /> |이<br /> |<br /> |<br /> |-<br /> |<br /> |i~yi<br /> |i~ji<br /> |으<br /> |<br /> |<br /> |<br /> |<br /> |<br /> |-<br /> | rowspan=&quot;9&quot; |阳<br /> |añ<br /> |æ̃<br /> |암<br /> |<br /> |wañ<br /> |wæ̃<br /> |왐<br /> |<br /> |<br /> |-<br /> |eñ<br /> |ẽ<br /> |앰<br /> |yeñ<br /> |jẽ<br /> |얨<br /> |<br /> |<br /> |<br /> |-<br /> |oñ<br /> |ø̃<br /> |엄<br /> |yoñ<br /> |jø̃<br /> |염<br /> |woñ<br /> |wø̃<br /> |ᄋᅿᆷ<br /> |-<br /> |an<br /> |ãŋ<br /> |안<br /> |yan<br /> |jãŋ<br /> |얀<br /> |wan<br /> |wãŋ<br /> |완<br /> |-<br /> |en<br /> |əŋ<br /> |앤<br /> |yen<br /> |jəŋ~jyəŋ<br /> |얜<br /> |wen<br /> |wəŋ<br /> |왠<br /> |-<br /> |on<br /> |ɔ̃ŋ<br /> |언<br /> |yon<br /> |jɔ̃ŋ<br /> |연<br /> |won<br /> |wɔ̃ŋ<br /> |ᄋᅿᆫ<br /> |-<br /> |un<br /> |uŋ<br /> |인<br /> |yun<br /> |juŋ<br /> |읜<br /> |<br /> |<br /> |<br /> |-<br /> |ưn<br /> |ɿŋ<br /> |윈<br /> |yưn<br /> |jʮŋ<br /> |ᄋᆔᆫ<br /> |<br /> |<br /> |<br /> |-<br /> |<br /> |in~yin<br /> |iŋ~jiŋ<br /> |은<br /> |<br /> |<br /> |<br /> |<br /> |<br /> |-<br /> | rowspan=&quot;9&quot; |入<br /> |ah<br /> |æʔ<br /> |앋<br /> |<br /> |wah<br /> |wæʔ<br /> |왇<br /> |<br /> |<br /> |-<br /> |eh<br /> |eʔ<br /> |앧<br /> |yeh<br /> |jeʔ<br /> |얟<br /> |<br /> |<br /> |<br /> |-<br /> |oh<br /> |øʔ<br /> |얻<br /> |yoh<br /> |jøʔ<br /> |엳<br /> |woh<br /> |wøʔ<br /> |ᄋᅿᆮ<br /> |-<br /> |aq<br /> |aʔ<br /> |악<br /> |yaq<br /> |jaʔ<br /> |약<br /> |waq<br /> |waʔ<br /> |왁<br /> |-<br /> |eq<br /> |əʔ<br /> |액<br /> |yeq<br /> |jəʔ<br /> |얙<br /> |weq<br /> |wəʔ<br /> |왝<br /> |-<br /> |oq<br /> |ɔʔ<br /> |억<br /> |yoq<br /> |jɔʔ<br /> |역<br /> |woq<br /> |wɔʔ<br /> |ᄋᅿᆨ<br /> |-<br /> |uq<br /> |uʔ<br /> |익<br /> |yuq<br /> |juʔ<br /> |읙<br /> |<br /> |<br /> |<br /> |-<br /> |ưq<br /> |ɿʔ<br /> |윅<br /> |yưq<br /> |jʮʔ<br /> |ᄋᆔᆨ<br /> |<br /> |<br /> |<br /> |-<br /> |<br /> |<br /> |<br /> |iq~yiq<br /> |iʔ~jiʔ<br /> |윽<br /> |<br /> |<br /> |<br /> |}<br /> 表格中諺文一律用聲母ng統一代替所有可拼合聲母,僅作表格舉例需要的形式替代.當然本文字系統的諺文部分是不標註聲調的,因爲吳語衆所周知的連讀變調實際上模糊了單字調的實際界限和使用場景.其中,ñ和ư在輸入法中分別使用nn和u'輸入,調值上聲是一般標記/,去聲標記\,以a爲例,a字母的上聲是á,去聲是à,其餘請類推,調值符號標在主要元音上,但輸入法不輸入聲調符號.<br /> <br /> == 聲調系統 ==<br /> 聲調系統和書寫的關係是不大的,因爲文字系統不體現調值,如要推薦的話,推薦使用紹興的四聲八調.<br /> {| class=&quot;wikitable&quot;<br /> !#<br /> !平聲<br /> !上聲<br /> !去聲<br /> !入聲<br /> |-<br /> !陰調<br /> |53<br /> |35<br /> |55<br /> |5<br /> |-<br /> !陽調<br /> |231<br /> |13<br /> |22<br /> |2<br /> |}<br /> <br /> = 輸入法 =<br /> <br /> == 概述 ==<br /> 吳語輸入法是基於RIME輸入平臺開發的碼錶,RIME支持多平臺使用,至於如何安裝時使用,這不是本站需要敘述的事,一如上文所言,ñ和ư在輸入法中分別使用nn和u'輸入,不支持聲調(已設置模糊化).<br /> [[File:通用吴语方案示例.gif|居中|缩略图]]<br /> &lt;center&gt;示例1&lt;/center&gt;<br /> [[File:通用吴语方案示例2.gif|居中|缩略图]]<br /> &lt;center&gt;示例2&lt;/center&gt;<br /> <br /> == 使用方法 ==<br /> 請將下文資源連接中的四個碼錶放入RIME的碼錶文件夾,至少將Ngotsche_Phinqyin輸入法設置爲活動的輸入法,選擇該輸入法以後,即可根據吳語拼音輸入漢字,比較遺憾的的是,由於囿於人力物力等條件,本輸入法只設定了吳語的單字碼錶,詞表掛的是現代漢語普通話的碼錶(RIME中的「八股文」).<br /> <br /> Ngotsche_Phinqyin輸入法的主體是漢字輸入法,如果在輸入過程中,需要輸入諺文,則按下x鍵,即可開啓諺文模式;如果遇到吳語不會讀的漢字,則可以輸入w,使用五筆畫輸入法輸入漢字並反查吳語讀音;也可以使用y鍵,使用拼音輸入法輸入漢字並反查吳語讀音.<br /> <br /> == 相關資源 ==<br /> 點擊下載碼錶資源<br /> <br /> 提取碼:tj1v  解壓碼:5335445<br /> <br /> 點擊下載相關字體資源<br /> <br /> 提取碼:byzl  解壓碼:5335445<br /> <br /> = 後記說明 =<br /> 這個書寫方案的製作並不難,只要有一定的語音學知識,和結構理念,就可以做出來.比較困難的是輸入法碼錶的製作,諺文輸入法是利用php程序循環生成的,而漢字部分則參考了某份excel的宏文件,並修改了部分代碼,然後添加一些其它的東西.中間遇到的最大困難還是輸入法的反查代碼,磕磕碰碰,問了很多的朋友,在這裏還是要表示感謝的.未來暫時不會再做此類東西,如果有人感興趣歡迎推廣這個書寫方案和擴充輸入法碼錶.希望大家一起努力,愛母語,愛鄉音.</div> Admin https://langwiki.org/index.php?title=File:%E9%80%9A%E7%94%A8%E5%90%B4%E8%AF%AD%E6%96%B9%E6%A1%88%E7%A4%BA%E4%BE%8B2.gif&diff=3030 File:通用吴语方案示例2.gif 2018-12-09T21:40:48Z <p>Admin:</p> <hr /> <div>通用吴语方案示例2</div> Admin https://langwiki.org/index.php?title=File:%E9%80%9A%E7%94%A8%E5%90%B4%E8%AF%AD%E6%96%B9%E6%A1%88%E7%A4%BA%E4%BE%8B.gif&diff=3029 File:通用吴语方案示例.gif 2018-12-09T21:40:02Z <p>Admin:</p> <hr /> <div>通用吴语方案示例</div> Admin https://langwiki.org/index.php?title=%E8%AF%AD%E8%A8%80%E7%BB%B4%E5%9F%BA:2018%E5%B9%B4%E8%AF%AD%E8%A8%80%E7%BB%B4%E5%9F%BAQQ%E7%BE%A4%E7%A0%94%E8%AE%A8%E6%88%90%E6%9E%9C%E5%B0%8F%E7%BB%93&diff=3028 语言维基:2018年语言维基QQ群研讨成果小结 2018-11-30T05:52:21Z <p>Admin:</p> <hr /> <div>又临近年终,回顾一下今年本群研讨结果。初步认为有几个收获:<br /> <br /> 1、甲骨文除了象形外,疑似有表音文字特征,一些常用字高度抽象,部分左右结构的字有从右向左拼读的可能。<br /> <br /> 2、通过《方言》发现了战国语言的研究方法,并提出楚语就是高棉语的假说,并且引出一系列有意思的推论。<br /> <br /> 3、推论之一就是上古汉语并未绝迹,反而仍然存在于国内少数民族地区和邻国相近地区。<br /> <br /> 4、从语言学家提出的印度河文明的语言是蒙达语的假说出发,提出商朝部落中有说蒙达语的民族,并将日本北部阿依努语与蒙达语联系起来,在友群收到了同源词证据支持。<br /> <br /> 5、提出用多语系混合模式,解释东亚诸语言的形成。<br /> <br /> 6、提出吴语底层含孟-高棉语,并用这种非声调语言底层,解释连续变调的成因。<br /> <br /> 7、提出闽南语底层是苗瑶语,闽南语是苗瑶语民族汉化结果。<br /> <br /> 8、提出粤语是壮侗民族汉化结果。<br /> <br /> 9、提出客家话是缅语发展而来的汉语方言。<br /> <br /> 10、提出“朕”这个字来源于缅语的“我”(zhendo)。<br /> <br /> 主要贡献者:谢文山<br /> <br /> 欢迎加入语言维基群,参与我们的讨论,以及语言话题的日常聊天沟通。QQ群号: 562374735<br /> <br /> 2018.11.30</div> Admin https://langwiki.org/index.php?title=%E8%AF%AD%E8%A8%80%E7%BB%B4%E5%9F%BA:2018%E5%B9%B4%E8%AF%AD%E8%A8%80%E7%BB%B4%E5%9F%BAQQ%E7%BE%A4%E7%A0%94%E8%AE%A8%E6%88%90%E6%9E%9C%E5%B0%8F%E7%BB%93&diff=3027 语言维基:2018年语言维基QQ群研讨成果小结 2018-11-30T05:52:07Z <p>Admin:创建页面,内容为“又临近年终,回顾一下今年本群研讨结果。初步认为有几个收获: 1、甲骨文除了象形外,疑似有表音文字特征,一些常用字...”</p> <hr /> <div>又临近年终,回顾一下今年本群研讨结果。初步认为有几个收获:<br /> <br /> 1、甲骨文除了象形外,疑似有表音文字特征,一些常用字高度抽象,部分左右结构的字有从右向左拼读的可能。<br /> <br /> 2、通过《方言》发现了战国语言的研究方法,并提出楚语就是高棉语的假说,并且引出一系列有意思的推论。<br /> <br /> 3、推论之一就是上古汉语并未绝迹,反而仍然存在于国内少数民族地区和邻国相近地区。<br /> <br /> 4、从语言学家提出的印度河文明的语言是蒙达语的假说出发,提出商朝部落中有说蒙达语的民族,并将日本北部阿依努语与蒙达语联系起来,在友群收到了同源词证据支持。<br /> <br /> 5、提出用多语系混合模式,解释东亚诸语言的形成。<br /> <br /> 6、提出吴语底层含孟-高棉语,并用这种非声调语言底层,解释连续变调的成因。<br /> <br /> 7、提出闽南语底层是苗瑶语,闽南语是苗瑶语民族汉化结果。<br /> <br /> 8、提出粤语是壮侗民族汉化结果。<br /> <br /> 9、提出客家话是缅语发展而来的汉语方言。10、提出“朕”这个字来源于缅语的“我”(zhendo)。<br /> <br /> 主要贡献者:谢文山<br /> <br /> 欢迎加入语言维基群,参与我们的讨论,以及语言话题的日常聊天沟通。QQ群号: 562374735<br /> <br /> 2018.11.30</div> Admin https://langwiki.org/index.php?title=Template:MainPage/mainzh/section-plus3&diff=3026 Template:MainPage/mainzh/section-plus3 2018-11-30T05:48:33Z <p>Admin:</p> <hr /> <div>&lt;big&gt;'''网站信息|联系我们'''&lt;/big&gt;<br /> * 志愿者信息,点击查看[[langwiki:语言维基志愿者项目|语言维基志愿者项目]]<br /> * [https://t.me/langwiki 点击加入我们的官方Telegram群]。<br /> * [https://jq.qq.com/?_wv=1027&amp;k=45oAAsA 点击加入我们的官方QQ群](您也可以用'''手机QQ'''扫描下面的二维码加群)<br /> <br /> [[File:LangwikiQQgroupQRcode.png|thumb|center]]<br /> <br /> === QQ群主要研讨成果 ===<br /> * [[语言维基:2018年语言维基QQ群研讨成果小结|2018年语言维基QQ群研讨成果小结]]<br /> <br /> === 网站维护日志 ===<br /> *为改善访问速度,我们计划进行服务器软件和部署优化。如有维基优化经验,请加QQ群提供建议。[2017年10月8日]<br /> * 查看[[语言维基更新及维护日志]]。</div> Admin https://langwiki.org/index.php?title=%E6%99%AE%E9%80%9A%E8%AF%9D%E8%B0%9A%E6%96%87%E8%AE%B0%E9%9F%B3%E6%96%B9%E6%A1%88&diff=3025 普通话谚文记音方案 2018-10-25T12:07:45Z <p>Admin:</p> <hr /> <div>本方案旨在用现代韩文表示汉语普通话中的所有音节,包括卷舌音、舌尖音的对立,韩语中没有的双元音,以及声调等等。在此方案中,韩文字母的发音大体遵从韩语的发音,而对于韩语中没有的语音,采用了近似和借代的表示方法。因此,请注意勿按表中规则学习韩文发音。根据下表可以写出普通话不带声调的400多个音节。声调可以采用两种方式标注,一是用Unicode组合字符标注在谚文之上,二是用类似于注音符号的方法标注在谚文字之后。<br /> <br /> 这种普通话拼音方案也称“谚拼音”或者Mangul,输入法方案可以在[https://github.com/nlpguyz/rime-depot/tree/master/dialects 这里下载]。<br /> <br /> === 声母 ===<br /> : {| class=&quot;wikitable&quot;<br /> |+声母排列顺序<br /> !<br /> ! colspan=&quot;4&quot; |唇音<br /> ! colspan=&quot;4&quot; |舌尖音<br /> ! colspan=&quot;3&quot; |舌根音<br /> ! colspan=&quot;3&quot; |舌面音<br /> ! colspan=&quot;4&quot; |卷舌音<br /> ! colspan=&quot;3&quot; |齿龈音<br /> |-<br /> !国际音标<br /> |/p/<br /> |/pʰ/<br /> |/m/<br /> |/f/<br /> |/t/<br /> |/tʰ/<br /> |/n/<br /> |/l/<br /> |/k/<br /> |/kʰ/<br /> |/x/<br /> |/tɕ/<br /> |/tɕʰ/<br /> |/ɕ/<br /> |/ʈʂ/<br /> |/ʈʂʰ/<br /> |/ʂ/<br /> |/ʐ/<br /> |/ts/<br /> |/tsʰ/<br /> |/s/<br /> |-<br /> !汉语拼音<br /> |b<br /> |p<br /> |m<br /> |f<br /> |d<br /> |t<br /> |n<br /> |l<br /> |g<br /> |k<br /> |h<br /> |j<br /> |q<br /> |x<br /> |zh<br /> |ch<br /> |sh<br /> |r<br /> |z<br /> |c<br /> |s<br /> |-<br /> !注音符号<br /> |ㄅ<br /> |ㄆ<br /> |ㄇ<br /> |ㄈ<br /> |ㄉ<br /> |ㄊ<br /> |ㄋ<br /> |ㄌ<br /> |ㄍ<br /> |ㄎ<br /> |ㄏ<br /> |ㄐ<br /> |ㄑ<br /> |ㄒ<br /> |ㄓ<br /> |ㄔ<br /> |ㄕ<br /> |ㄖ<br /> |ㄗ<br /> |ㄘ<br /> |ㄙ<br /> |-<br /> !谚文转注<br /> !ㅂ<br /> !ㅍ<br /> !ㅁ<br /> !ㄲ<br /> !ㄷ<br /> !ㅌ<br /> !ㄴ<br /> !ㄹ<br /> !ㄱ<br /> !ㅋ<br /> !ㅎ<br /> !ㅈ<br /> !ㅊ<br /> !ㅅ<br /> !ㅈ<br /> !ㅊ<br /> !ㅅ<br /> !ㅃ<br /> !ㅉ<br /> !ㄸ<br /> !ㅆ<br /> |} f ㄲ(象形)r ㅃ(象形),c ㄸ 象形。ㅈㅊㅅ在i、ü前读jqx;其他情况读zh、ch、sh。<br /> [[File:韩文字母拼写普通话的最后三个字母.png|缩略图|汉语拼音里的三个韩语中没有的字母R、F、C用象形法表示]]<br /> <br /> <br /> === 韵母 ===<br /> {| class=&quot;wikitable&quot;<br /> |+韵母列表<br /> ! rowspan=&quot;2&quot; |<br /> ! colspan=&quot;4&quot; |开口呼(无介音)<br /> ! colspan=&quot;4&quot; |齐齿呼(介音/i/)<br /> ! colspan=&quot;4&quot; |合口呼(介音/u/)<br /> ! colspan=&quot;4&quot; |撮口呼(介音/y/)<br /> |-<br /> !国际<br /> 音标<br /> !汉语<br /> 拼音<br /> !注音<br /> 符号<br /> !谚文<br /> 转注<br /> !国际<br /> 音标<br /> !汉语<br /> 拼音<br /> !注音<br /> 符号<br /> !谚文<br /> <br /> 转注<br /> !国际<br /> 音标<br /> !汉语<br /> 拼音<br /> !注音<br /> 符号<br /> !谚文<br /> 转注<br /> !国际<br /> 音标<br /> !汉语<br /> 拼音<br /> !注音<br /> 符号<br /> !谚文<br /> <br /> 转注<br /> |-<br /> | rowspan=&quot;3&quot; |开<br /> 韵<br /> 尾<br /> |/a/<br /> |a<br /> |ㄚ<br /> |아<br /> |/ja/<br /> |ia<br /> |ㄧㄚ<br /> |야<br /> |/wa/<br /> |ua<br /> |ㄨㄚ<br /> |와<br /> | colspan=&quot;4&quot; |<br /> |-<br /> |/ɤ/<br /> |e<br /> |ㄜ<br /> |어<br /> |/je/<br /> |ie<br /> |ㄧㄝ<br /> |예<br /> |/wo/<br /> |uo<br /> |ㄨㄛ<br /> |워<br /> |/ɥe/<br /> |üe<br /> |ㄩㄝ<br /> |웨<br /> |-<br /> |/ɔ/<br /> |o<br /> |ㄛ<br /> |오<br /> |/i/<br /> |i<br /> |ㄧ<br /> |이<br /> |/u/<br /> |u<br /> |ㄨ<br /> |우<br /> |/y/<br /> |ü<br /> |ㄩ<br /> |유<br /> |-<br /> |<br /> |/ɿ/、/ʅ/<br /> | -i<br /> |<br /> |으<br /> |<br /> |<br /> |<br /> |<br /> |<br /> |<br /> |<br /> |<br /> |<br /> |<br /> |<br /> |<br /> |-<br /> | rowspan=&quot;5&quot; |元<br /> 音<br /> 韵<br /> 尾<br /> |/ai̯/<br /> |ai<br /> |ㄞ<br /> |애<br /> |/jai̯/<br /> |iai<br /> |ㄧㄞ<br /> |<br /> |/wai̯/<br /> |uai<br /> |ㄨㄞ<br /> |왜<br /> | colspan=&quot;4&quot; |<br /> |-<br /> |/ei̯/<br /> |ei<br /> |ㄟ<br /> |에<br /> | colspan=&quot;4&quot; |<br /> |/wei̯/<br /> |ui<br /> |ㄨㄟ<br /> |위<br /> | colspan=&quot;4&quot; |<br /> |-<br /> |/au̯/<br /> |ao<br /> |ㄠ<br /> |앟<br /> |/jau̯/<br /> |iao<br /> |ㄧㄠ<br /> |얗<br /> | colspan=&quot;4&quot; |<br /> | colspan=&quot;4&quot; |<br /> |-<br /> |/ou̯/<br /> |ou<br /> |ㄡ<br /> |오<br /> |/jou̯/<br /> |iu<br /> |ㄧㄡ<br /> |요<br /> | colspan=&quot;4&quot; |<br /> | colspan=&quot;4&quot; |<br /> |-<br /> |/aɚ̯/<br /> |er<br /> |ㄦ<br /> |얼<br /> | colspan=&quot;4&quot; |<br /> | colspan=&quot;4&quot; |<br /> | colspan=&quot;4&quot; |<br /> |-<br /> | rowspan=&quot;5&quot; |鼻<br /> 音<br /> 韵<br /> 尾<br /> |/an/<br /> |an<br /> |ㄢ<br /> |안<br /> |/jɛn/<br /> |ian<br /> |ㄧㄢ<br /> |옌<br /> |/wan/<br /> |uan<br /> |ㄨㄢ<br /> |완<br /> |/ɥɛn/<br /> |üan<br /> |ㄩㄢ<br /> |왠<br /> |-<br /> |/ən/<br /> |en<br /> |ㄣ<br /> |언<br /> |/in/<br /> |in<br /> |ㄧㄣ<br /> |인<br /> |/wən/<br /> |un<br /> |ㄨㄣ<br /> |운<br /> |/yn/<br /> |ün<br /> |ㄩㄣ<br /> |윤<br /> |-<br /> |/aŋ/<br /> |ang<br /> |ㄤ<br /> |앙<br /> |/jaŋ/<br /> |iang<br /> |ㄧㄤ<br /> |양<br /> |/waŋ/<br /> |uang<br /> |ㄨㄤ<br /> |왕<br /> | colspan=&quot;4&quot; |<br /> |-<br /> |/əŋ/<br /> |eng<br /> |ㄥ<br /> |엉<br /> |/iŋ/<br /> |ing<br /> |ㄧㄥ<br /> |잉<br /> |/wəŋ/<br /> |ueng<br /> |ㄨㄥ<br /> |웅<br /> | colspan=&quot;4&quot; |<br /> |-<br /> |/ʊŋ/<br /> |ong<br /> |ㄨㄥ<br /> |옹<br /> |/jʊŋ/<br /> |iong<br /> |ㄩㄥ<br /> |융<br /> | colspan=&quot;4&quot; |<br /> |}<br /> <br /> zi ci si zhi chi shi ri 音节的元音记作으。</div> Admin https://langwiki.org/index.php?title=%E8%AF%AD%E8%A8%80%E7%BB%B4%E5%9F%BA:%E8%AF%AD%E9%9F%B3%E5%90%88%E6%88%90%E5%BC%80%E5%8F%91%E9%A1%B9%E7%9B%AE&diff=3016 语言维基:语音合成开发项目 2018-07-17T11:48:39Z <p>Admin:</p> <hr /> <div>为了满足语言和音韵爱好者们关于合成方言和古汉语语音的需要,语言维基筹划开发开源的语音合成项目。最终目标是开发出使用IPA输入,能够合成汉语各方言和古汉语语音的开源产品和服务。有鉴于常见语音合成软件的局限性,我们将开发分为以下几个阶段,欢迎大家在Discussion栏提供反馈,或直接参与这个项目。<br /> <br /> === '''第一阶段:掌握基本语音合成技术并掌握语言定制技术''' ===<br /> 软件工具:开源eSpeak-ng多语言语音合成器<br /> <br /> 目标:修复汉语普通话合成功能,并用于基于汉语拼音的语音合成(合成音不局限于当前汉字读音)<br /> <br /> 产品:增强的语言维基版 eSpeak-ng<br /> <br /> === '''第二阶段:定制新语言和方言发音方案''' ===<br /> 软件工具:语言维基版 eSpeak-ng<br /> <br /> 目标:通过eSpeak-ng的定制功能,增加所需语言发音(主要为中国境内语言)<br /> <br /> 产品:语音线上合成器和在线服务API<br /> <br /> === 第三阶段:与人工智能/深度学习专家共同将系统升级为深度语音合成 ===<br /> 软件工具:语言维基版 eSpeak-ng, TensorFlow<br /> <br /> 目标:实现和接近于人声的高端语音合成<br /> <br /> 产品:人声级在线语音合成界面和API<br /> <br /> === 详细信息 ===<br /> 软件源码:https://github.com/nlpguyz/espeak-ng</div> Admin https://langwiki.org/index.php?title=%E8%AF%AD%E8%A8%80%E7%BB%B4%E5%9F%BA:%E8%AF%AD%E9%9F%B3%E5%90%88%E6%88%90%E5%BC%80%E5%8F%91%E9%A1%B9%E7%9B%AE&diff=3015 语言维基:语音合成开发项目 2018-07-16T03:01:30Z <p>Admin:</p> <hr /> <div>为了满足语言和音韵爱好者们关于合成方言和古汉语语音的需要,语言维基筹划开发开源的语音合成项目。最终目标是开发出使用IPA输入,能够合成汉语各方言和古汉语语音的开源产品和服务。有鉴于常见语音合成软件的局限性,我们将开发分为以下几个阶段,欢迎大家在Discussion栏提供反馈,或直接参与这个项目。<br /> <br /> === '''第一阶段:掌握基本语音合成技术并掌握语言定制技术''' ===<br /> 软件工具:开源eSpeak-ng多语言语音合成器<br /> <br /> 目标:修复汉语普通话合成功能,并用于基于汉语拼音的语音合成(合成音不局限于当前汉字读音)<br /> <br /> 产品:增强的语言维基版 eSpeak-ng<br /> <br /> === '''第二阶段:定制新语言和方言发音方案''' ===<br /> 软件工具:语言维基版 eSpeak-ng<br /> <br /> 目标:通过eSpeak-ng的定制功能,增加所需语言发音(主要为中国境内语言)<br /> <br /> 产品:语音线上合成器和在线服务API<br /> <br /> === 第三阶段:与人工智能/深度学习专家共同将系统升级为深度语音合成 ===<br /> 软件工具:语言维基版 eSpeak-ng, TensorFlow<br /> <br /> 目标:实现和接近于人声的高端语音合成<br /> <br /> 产品:人声级在线语音合成界面和API</div> Admin https://langwiki.org/index.php?title=%E8%AF%AD%E8%A8%80%E7%BB%B4%E5%9F%BA:%E8%AF%AD%E9%9F%B3%E5%90%88%E6%88%90%E5%BC%80%E5%8F%91%E9%A1%B9%E7%9B%AE&diff=3014 语言维基:语音合成开发项目 2018-07-15T21:28:05Z <p>Admin:/* 第一阶段:掌握基本语音合成技术并掌握语言定制技术 */</p> <hr /> <div>为了满足语言和音韵爱好者们关于合成方言和古汉语语音的需要,语言维基筹划开发开源的语音合成项目。最终目标是开发出使用IPA输入,能够合成汉语各方言和古汉语语音的开源产品和服务。有鉴于常见语音合成软件的局限性,我们将开发分为以下几个阶段,欢迎大家在Discussion栏提供反馈,或直接参与这个项目。<br /> <br /> === '''第一阶段:掌握基本语音合成技术并掌握语言定制技术''' ===<br /> 软件工具:开源eSpeak-ng多语言语音合成器<br /> <br /> 目标:修复汉语普通话合成功能,并用于基于汉语拼音的语音合成(合成音不局限于当前汉字读音)<br /> <br /> 产品:增强的语言维基版 eSpeak-ng<br /> <br /> === '''第二阶段:定制新语言和方言发音方案''' ===<br /> 软件工具:语言维基版 eSpeak-ng<br /> <br /> 目标:通过eSpeak-ng的定制功能,增加所需语言发音(主要为中国境内语言)<br /> <br /> 产品:语音线上合成器和在线服务API</div> Admin https://langwiki.org/index.php?title=Template:MainPage/ltc/content-plus1b&diff=3013 Template:MainPage/ltc/content-plus1b 2018-07-15T21:25:45Z <p>Admin:</p> <hr /> <div>'''语言学习和研究资料'''<br /> * [[语言维基:字典和辞书|字典和辞书]]<br /> * [[语言维基:语言教程|语言教程]]<br /> * [[语言维基:输入法和字体|输入法和字体]]<br /> * [[语言维基:语言学及音韵|语言学及音韵]]'''''(新)'''''<br /> * [[语言维基:NLP和语料库|NLP和语料库]]<br /> '''正在进行的志愿者项目'''<br /> * [[语言维基:语音合成开发项目|语音合成项目]](欢迎志愿者)<br /> * [[语言爱好者统一码]] (Lanicode) (欢迎志愿者)<br /> * [[语言维基:满文典籍识别项目|满文典籍识别]](欢迎志愿者)</div> Admin https://langwiki.org/index.php?title=%E8%AF%AD%E8%A8%80%E7%BB%B4%E5%9F%BA:%E8%AF%AD%E9%9F%B3%E5%90%88%E6%88%90%E5%BC%80%E5%8F%91%E9%A1%B9%E7%9B%AE&diff=3012 语言维基:语音合成开发项目 2018-07-15T21:22:58Z <p>Admin:创建页面,内容为“为了满足语言和音韵爱好者们关于合成方言和古汉语语音的需要,语言维基筹划开发开源的语音合成项目。最终目标是开发出...”</p> <hr /> <div>为了满足语言和音韵爱好者们关于合成方言和古汉语语音的需要,语言维基筹划开发开源的语音合成项目。最终目标是开发出使用IPA输入,能够合成汉语各方言和古汉语语音的开源产品和服务。有鉴于常见语音合成软件的局限性,我们将开发分为以下几个阶段,欢迎大家在Discussion栏提供反馈,或直接参与这个项目。<br /> <br /> === '''第一阶段:掌握基本语音合成技术并掌握语言定制技术''' ===<br /> 软件工具:开源eSpeak-ng开源合成器<br /> <br /> 目标:修复汉语普通话合成功能,并用于基于汉语拼音的语音合成(合成音不局限于当前汉字读音)<br /> <br /> 产品:增强的语言维基版 eSpeak-ng<br /> <br /> === '''第二阶段:定制新语言和方言发音方案''' ===<br /> 软件工具:语言维基版 eSpeak-ng<br /> <br /> 目标:通过eSpeak-ng的定制功能,增加所需语言发音(主要为中国境内语言)<br /> <br /> 产品:语音线上合成器和在线服务API</div> Admin https://langwiki.org/index.php?title=Template:MainPage/ltc/content-plus1b&diff=3011 Template:MainPage/ltc/content-plus1b 2018-07-12T04:30:09Z <p>Admin:</p> <hr /> <div>'''语言学习和研究资料'''<br /> * [[语言维基:字典和辞书|字典和辞书]]<br /> * [[语言维基:语言教程|语言教程]]<br /> * [[语言维基:输入法和字体|输入法和字体]]<br /> * [[语言维基:语言学及音韵|语言学及音韵]]'''''(新)'''''<br /> * [[语言维基:NLP和语料库|NLP和语料库]]<br /> '''正在进行的志愿者项目'''<br /> * [[语言爱好者统一码]] (Lanicode) (需要志愿者)<br /> * [[语言维基:满文典籍识别项目|满文典籍识别]](需要志愿者)</div> Admin