<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://xn--k7y073b.xn--6qqs2j68e.xn--fiqs8s/w/history/MediaWiki:Gadget-RightToolbar.v2.js?feed=atom</id>
	<title>MediaWiki:Gadget-RightToolbar.v2.js - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://xn--k7y073b.xn--6qqs2j68e.xn--fiqs8s/w/history/MediaWiki:Gadget-RightToolbar.v2.js?feed=atom"/>
	<link rel="alternate" type="text/html" href="https://xn--k7y073b.xn--6qqs2j68e.xn--fiqs8s/w/history/MediaWiki:Gadget-RightToolbar.v2.js"/>
	<updated>2026-11-13T10:23:03Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.46.2</generator>
	<entry>
		<id>https://xn--k7y073b.xn--6qqs2j68e.xn--fiqs8s/index.php?title=MediaWiki:Gadget-RightToolbar.v2.js&amp;diff=2319&amp;oldid=prev</id>
		<title>Maintenance script：​创建 RightToolbar v2 脚本资源</title>
		<link rel="alternate" type="text/html" href="https://xn--k7y073b.xn--6qqs2j68e.xn--fiqs8s/index.php?title=MediaWiki:Gadget-RightToolbar.v2.js&amp;diff=2319&amp;oldid=prev"/>
		<updated>2026-07-19T12:28:14Z</updated>

		<summary type="html">&lt;p&gt;创建 RightToolbar v2 脚本资源&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/* MediaWiki Gadget: RightToolbar */&lt;br /&gt;
( function () {&lt;br /&gt;
	&amp;#039;use strict&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
	mw.loader.using( [ &amp;#039;mediawiki.util&amp;#039; ] ).then( function () {&lt;br /&gt;
		var toolbar;&lt;br /&gt;
		var topButton;&lt;br /&gt;
		var bottomButton;&lt;br /&gt;
		var clockTimer = 0;&lt;br /&gt;
		var ticking = false;&lt;br /&gt;
		var mobileQuery = window.matchMedia( &amp;#039;(max-width: 768px)&amp;#039; );&lt;br /&gt;
&lt;br /&gt;
		function isMobileView() {&lt;br /&gt;
			return mobileQuery.matches ||&lt;br /&gt;
				document.documentElement.classList.contains( &amp;#039;skin-minerva&amp;#039; ) ||&lt;br /&gt;
				new URLSearchParams( window.location.search ).get( &amp;#039;mobileaction&amp;#039; ) === &amp;#039;toggle_view_mobile&amp;#039;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		function msg( key ) {&lt;br /&gt;
			var lang = ( mw.config.get( &amp;#039;wgUserLanguage&amp;#039; ) || mw.config.get( &amp;#039;wgContentLanguage&amp;#039; ) || &amp;#039;zh-cn&amp;#039; ).toLowerCase();&lt;br /&gt;
			var en = lang.indexOf( &amp;#039;en&amp;#039; ) === 0;&lt;br /&gt;
			var messages = {&lt;br /&gt;
				top: en ? &amp;#039;Top&amp;#039; : &amp;#039;顶部&amp;#039;,&lt;br /&gt;
				bottom: en ? &amp;#039;Bottom&amp;#039; : &amp;#039;底部&amp;#039;,&lt;br /&gt;
				topTitle: en ? &amp;#039;Back to top&amp;#039; : &amp;#039;回到顶部&amp;#039;,&lt;br /&gt;
				bottomTitle: en ? &amp;#039;Back to bottom&amp;#039; : &amp;#039;回到底部&amp;#039;,&lt;br /&gt;
				loading: en ? &amp;#039;Loading...&amp;#039; : &amp;#039;加载中...&amp;#039;&lt;br /&gt;
			};&lt;br /&gt;
			return messages[ key ];&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		function createButton( id, text, tooltip, clickHandler ) {&lt;br /&gt;
			var button = document.createElement( &amp;#039;button&amp;#039; );&lt;br /&gt;
			button.id = id;&lt;br /&gt;
			button.className = &amp;#039;mw-rt-button&amp;#039;;&lt;br /&gt;
			button.title = tooltip;&lt;br /&gt;
			button.type = &amp;#039;button&amp;#039;;&lt;br /&gt;
			button.textContent = text;&lt;br /&gt;
			button.setAttribute( &amp;#039;aria-label&amp;#039;, tooltip );&lt;br /&gt;
			button.addEventListener( &amp;#039;click&amp;#039;, clickHandler );&lt;br /&gt;
			return button;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		function formatParts( date, zone ) {&lt;br /&gt;
			var userLang = mw.config.get( &amp;#039;wgUserLanguage&amp;#039; ) || &amp;#039;zh-cn&amp;#039;;&lt;br /&gt;
			var parts = new Intl.DateTimeFormat( userLang, {&lt;br /&gt;
				year: &amp;#039;numeric&amp;#039;,&lt;br /&gt;
				month: &amp;#039;2-digit&amp;#039;,&lt;br /&gt;
				day: &amp;#039;2-digit&amp;#039;,&lt;br /&gt;
				hour: &amp;#039;2-digit&amp;#039;,&lt;br /&gt;
				minute: &amp;#039;2-digit&amp;#039;,&lt;br /&gt;
				second: &amp;#039;2-digit&amp;#039;,&lt;br /&gt;
				hour12: false,&lt;br /&gt;
				timeZone: zone&lt;br /&gt;
			} ).formatToParts( date );&lt;br /&gt;
&lt;br /&gt;
			function partValue( type ) {&lt;br /&gt;
				var part = parts.find( function ( item ) {&lt;br /&gt;
					return item.type === type;&lt;br /&gt;
				} );&lt;br /&gt;
				return part ? part.value : &amp;#039;&amp;#039;;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			return {&lt;br /&gt;
				date: partValue( &amp;#039;year&amp;#039; ) + &amp;#039;-&amp;#039; + partValue( &amp;#039;month&amp;#039; ) + &amp;#039;-&amp;#039; + partValue( &amp;#039;day&amp;#039; ),&lt;br /&gt;
				time: partValue( &amp;#039;hour&amp;#039; ) + &amp;#039;:&amp;#039; + partValue( &amp;#039;minute&amp;#039; ) + &amp;#039;:&amp;#039; + partValue( &amp;#039;second&amp;#039; )&lt;br /&gt;
			};&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		function renderClock() {&lt;br /&gt;
			var now = new Date();&lt;br /&gt;
			var timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;&lt;br /&gt;
			var local = formatParts( now, timeZone );&lt;br /&gt;
			var utc = formatParts( now, &amp;#039;UTC&amp;#039; );&lt;br /&gt;
			var localDateEl = document.getElementById( &amp;#039;mw-local-date&amp;#039; );&lt;br /&gt;
			var localTimeEl = document.getElementById( &amp;#039;mw-local-time&amp;#039; );&lt;br /&gt;
			var utcTimeEl = document.getElementById( &amp;#039;mw-utc-time&amp;#039; );&lt;br /&gt;
&lt;br /&gt;
			if ( localDateEl ) {&lt;br /&gt;
				localDateEl.textContent = local.date;&lt;br /&gt;
			}&lt;br /&gt;
			if ( localTimeEl ) {&lt;br /&gt;
				localTimeEl.textContent = local.time;&lt;br /&gt;
			}&lt;br /&gt;
			if ( utcTimeEl ) {&lt;br /&gt;
				utcTimeEl.textContent = &amp;#039;UTC &amp;#039; + utc.date + &amp;#039; &amp;#039; + utc.time;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		function updateTopButton() {&lt;br /&gt;
			var scrollTop = window.pageYOffset || document.documentElement.scrollTop || 0;&lt;br /&gt;
			topButton.hidden = scrollTop &amp;lt;= 240;&lt;br /&gt;
			bottomButton.hidden = document.documentElement.scrollHeight - window.innerHeight - scrollTop &amp;lt;= 240;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		function onScroll() {&lt;br /&gt;
			if ( ticking ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			ticking = true;&lt;br /&gt;
			window.requestAnimationFrame( function () {&lt;br /&gt;
				updateTopButton();&lt;br /&gt;
				ticking = false;&lt;br /&gt;
			} );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		function stopClock() {&lt;br /&gt;
			if ( clockTimer ) {&lt;br /&gt;
				window.clearInterval( clockTimer );&lt;br /&gt;
				clockTimer = 0;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		function teardownToolbar() {&lt;br /&gt;
			stopClock();&lt;br /&gt;
			window.removeEventListener( &amp;#039;scroll&amp;#039;, onScroll );&lt;br /&gt;
			if ( toolbar ) {&lt;br /&gt;
				toolbar.remove();&lt;br /&gt;
			}&lt;br /&gt;
			toolbar = null;&lt;br /&gt;
			topButton = null;&lt;br /&gt;
			bottomButton = null;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		function initToolbar() {&lt;br /&gt;
			var clockDiv;&lt;br /&gt;
&lt;br /&gt;
			if ( isMobileView() ) {&lt;br /&gt;
				teardownToolbar();&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			if ( toolbar ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			toolbar = document.createElement( &amp;#039;div&amp;#039; );&lt;br /&gt;
			toolbar.id = &amp;#039;mw-right-toolbar&amp;#039;;&lt;br /&gt;
			toolbar.className = &amp;#039;mw-right-toolbar&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
			topButton = createButton( &amp;#039;mw-scroll-top&amp;#039;, msg( &amp;#039;top&amp;#039; ), msg( &amp;#039;topTitle&amp;#039; ), function () {&lt;br /&gt;
				window.scrollTo( { top: 0, behavior: &amp;#039;smooth&amp;#039; } );&lt;br /&gt;
			} );&lt;br /&gt;
			bottomButton = createButton( &amp;#039;mw-scroll-bottom&amp;#039;, msg( &amp;#039;bottom&amp;#039; ), msg( &amp;#039;bottomTitle&amp;#039; ), function () {&lt;br /&gt;
				window.scrollTo( {&lt;br /&gt;
					top: Math.max( document.body.scrollHeight, document.documentElement.scrollHeight ),&lt;br /&gt;
					behavior: &amp;#039;smooth&amp;#039;&lt;br /&gt;
				} );&lt;br /&gt;
			} );&lt;br /&gt;
&lt;br /&gt;
			clockDiv = document.createElement( &amp;#039;div&amp;#039; );&lt;br /&gt;
			clockDiv.id = &amp;#039;mw-right-toolbar-clock&amp;#039;;&lt;br /&gt;
			clockDiv.className = &amp;#039;mw-rt-clock&amp;#039;;&lt;br /&gt;
			clockDiv.innerHTML = &amp;#039;&amp;lt;div id=&amp;quot;mw-local-date&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div id=&amp;quot;mw-local-time&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div id=&amp;quot;mw-utc-time&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;;&lt;br /&gt;
			clockDiv.firstChild.textContent = msg( &amp;#039;loading&amp;#039; );&lt;br /&gt;
&lt;br /&gt;
			toolbar.appendChild( topButton );&lt;br /&gt;
			toolbar.appendChild( bottomButton );&lt;br /&gt;
			toolbar.appendChild( clockDiv );&lt;br /&gt;
			document.body.appendChild( toolbar );&lt;br /&gt;
&lt;br /&gt;
			window.addEventListener( &amp;#039;scroll&amp;#039;, onScroll, { passive: true } );&lt;br /&gt;
			updateTopButton();&lt;br /&gt;
			renderClock();&lt;br /&gt;
			clockTimer = window.setInterval( renderClock, 1000 );&lt;br /&gt;
&lt;br /&gt;
			window.requestAnimationFrame( function () {&lt;br /&gt;
				if ( toolbar ) {&lt;br /&gt;
					toolbar.classList.add( &amp;#039;is-visible&amp;#039; );&lt;br /&gt;
				}&lt;br /&gt;
			} );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		function refreshToolbar() {&lt;br /&gt;
			if ( isMobileView() ) {&lt;br /&gt;
				teardownToolbar();&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			initToolbar();&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ( document.readyState === &amp;#039;loading&amp;#039; ) {&lt;br /&gt;
			document.addEventListener( &amp;#039;DOMContentLoaded&amp;#039;, initToolbar );&lt;br /&gt;
		} else {&lt;br /&gt;
			initToolbar();&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		mobileQuery.addEventListener( &amp;#039;change&amp;#039;, refreshToolbar );&lt;br /&gt;
		window.addEventListener( &amp;#039;orientationchange&amp;#039;, refreshToolbar );&lt;br /&gt;
		document.addEventListener( &amp;#039;visibilitychange&amp;#039;, function () {&lt;br /&gt;
			if ( !toolbar ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			if ( document.hidden ) {&lt;br /&gt;
				stopClock();&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			renderClock();&lt;br /&gt;
			if ( !clockTimer ) {&lt;br /&gt;
				clockTimer = window.setInterval( renderClock, 1000 );&lt;br /&gt;
			}&lt;br /&gt;
		} );&lt;br /&gt;
	} );&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
</feed>