MediaWiki:Common.js
注意:在发布之后,您可能需要清除浏览器缓存才能看到所作出的更改的影响。
- Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5或Ctrl-R(Mac为⌘-R)
- Google Chrome:按Ctrl-Shift-R(Mac为⌘-Shift-R)
- Edge:按住Ctrl的同时单击刷新,或按Ctrl-F5。
/*
* MediaWiki:Common.js — 全站通用脚本
* 倒计时模板实时更新(配合 模板:倒计时 使用)
*/
( function ( mw, $ ) {
'use strict';
if ( window.dshCountdownLoaded ) {
return;
}
window.dshCountdownLoaded = true;
function pad( n ) {
return ( n < 10 ? '0' : '' ) + n;
}
function parseDate( s ) {
if ( !s ) {
return null;
}
// 兼容 "YYYY-MM-DD HH:MM(:SS)"(按浏览器本地时区,北京时间即为东八区)
// 与 "YYYY-MM-DDTHH:MM:SS+08:00" 等 ISO 8601 格式
var t = String( s ).trim().replace( ' ', 'T' );
var d = new Date( t );
return isNaN( d.getTime() ) ? null : d;
}
function fmtSpan( ms ) {
var neg = ms < 0;
if ( neg ) {
ms = -ms;
}
var d = Math.floor( ms / 86400000 );
var h = Math.floor( ( ms % 86400000 ) / 3600000 );
var m = Math.floor( ( ms % 3600000 ) / 60000 );
var s = Math.floor( ( ms % 60000 ) / 1000 );
var out = ( d > 0 ? d + '天 ' : '' ) + pad( h ) + ':' + pad( m ) + ':' + pad( s );
return neg ? '-' + out : out;
}
function update( $el ) {
var target = parseDate( $el.data( 'date' ) );
var dir = $el.data( 'dir' ) === 'up' ? 'up' : 'down';
var $val = $el.find( '.dsh-cd-value' );
if ( !target ) {
$val.text( '(日期格式无法解析)' );
return;
}
var now = Date.now();
var diff = dir === 'up' ? now - target.getTime() : target.getTime() - now;
var txt;
if ( dir === 'up' ) {
txt = diff < 0 ? '尚未开始' : fmtSpan( diff );
} else {
txt = diff <= 0 ? '目标时刻已到' : fmtSpan( diff );
}
$val.text( txt );
}
mw.hook( 'wikipage.content' ).add( function ( $content ) {
$content.find( '.dsh-cd' ).each( function () {
var $el = $( this );
update( $el );
if ( !$el.data( 'dshTimer' ) ) {
$el.data( 'dshTimer', setInterval( function () {
update( $el );
}, 1000 ) );
}
} );
} );
}( window.mediaWiki, jQuery ) );