打开/关闭菜单
打开/关闭外观设置菜单
打开/关闭个人菜单
未登录
未登录用户的IP地址会在进行任意编辑后公开展示。

MediaWiki:Common.js:修订间差异

MediaWiki界面页面
DGCK81LNN留言 | 贡献
无编辑摘要
DGCK81LNN留言 | 贡献
无编辑摘要
第89行: 第89行:
var $item = $( '<li><a>在旧站查看</a></li>' )
var $item = $( '<li><a>在旧站查看</a></li>' )
$( "a", $item ).attr( "href", url )
$( "a", $item ).attr( "href", url )
$( "#p-tb ul" ).append( $item )
$( "#p-tb ul" ).prepend( $item )


} )
} )

2023年3月9日 (四) 20:00的版本

$( function () {

/* 为 Template:Hidebox 增加动画效果 */
function changeTagName( el, newTagName ) {
	var newEl = document.createElement( newTagName )
	for ( var i = 0, l = el.attributes.length; i < l; i++ ) {
		newEl.attributes.setNamedItem( el.attributes[i].cloneNode() )
	}
	while ( el.childNodes.length ) {
		newEl.appendChild( el.firstChild )
	}
	if ( el.parentNode ) {
		el.parentNode.replaceChild( newEl, el )
	}
	return newEl
}
$( "#bodyContent" ).on( "click", ".lnnblog-hidebox-heading", function ( event ) {
	event.preventDefault()

	/** 折叠框的 <summary> 元素。 */
	var $this = $( this )
	/** 折叠框的 <details> 元素。 */
	var $parent = $this.parent()
	/** 折叠框内容元素。 */
	var $body = $this.nextAll( ".lnnblog-hidebox-body" )

	if ( this.tagName.toLowerCase() !== "summary" ) {
		$this = $( changeTagName( this, "summary" ) )
		$parent = $( changeTagName( $parent[0], "details" ) )
		$body.css( "display", "" )
	}

	var open = $parent.prop( "open" )
	/** 当前正在执行的动画动作(expand 或 shrink)。若不在执行动画则为空。 */
	var oldState = $parent.attr( "data-lnnblog-hidebox-state" )
	/** 现在要执行的动画动作。 */
	var state = !open || oldState === "shrink" ? "expand" : "shrink"

	// 计算当前的宽高
	// 取得的宽度是四舍五入过的;增加 0.5 以避免内容折行
	var currentWidth = $parent.width() + 0.5
	var currentHeight = $parent.height()
	// 打断可能正在进行的动画,然后计算一下动画目标状态的宽高
	$parent.stop( true, true ).prop( "open", state === "expand" )
	var targetWidth = $parent.width() + 0.5
	var targetHeight = $parent.height()

	// 锁定内容框宽度为完全展开状态的宽度,以避免内容折行
	if (state === "expand")
		$body.outerWidth( targetWidth )
	else if (oldState !== "expand") // 从完全展开状态折叠
		$body.outerWidth( currentWidth )
	// 如果不是从完全展开状态折叠,即在展开的半途中折叠,
	// 则内容框的宽度还没有清除,无需再次设置。

	$parent
		.attr( "data-lnnblog-hidebox-state", state )
		.width( currentWidth )
		.height( currentHeight )
		// 必须在 open 状态下才能显示出内容框,所以不管展开还是折叠都需要设置成 open
		.prop( "open", true )
		.animate( {
			width: targetWidth,
			height: targetHeight
		}, {
			duration: 250,
			done: function () {
				if (state === "shrink") $parent.prop( "open", false )
				// 清除手动设置的宽高
				$body.css( "width", "" )
				$parent
					.css( { width: "", height: "" } )
					.removeAttr( "data-lnnblog-hidebox-state" )
			}
		} )
} )

/* 在编辑页面时强制加载 Tabber 扩展以使 MediaWiki:Edittools 正常工作 */
var action = mw.config.get( "wgAction" )
if ( action === "edit" || action === "submit" )
	mw.loader.load( "ext.tabberNeue" )

/* 在侧栏添加“在旧站查看”链接 */
var title = mw.config.get( "wgTitle" )
var ns = mw.config.get( "wgCanonicalNamespace" )
var pagename = ns ? ns + ":" + title : title
var url = "https://www.mywiki.cn/dgck81lnn/index.php/" +
	mw.util.wikiUrlencode( pagename )
var $item = $( '<li><a>在旧站查看</a></li>' )
$( "a", $item ).attr( "href", url )
$( "#p-tb ul" ).prepend( $item )

} )