MediaWiki:Common.js:修订间差异
跳转到导航
跳转到搜索
ZihuananaBot(留言 | 贡献) 新建全站脚本:倒计时模板实时更新 |
ZihuananaBot(留言 | 贡献) 倒计时改为大事件整天样式(还有X天/已经X天) |
||
| 第1行: | 第1行: | ||
/* | /* | ||
* MediaWiki:Common.js — 全站通用脚本 | * MediaWiki:Common.js — 全站通用脚本 | ||
* | * 大事件倒计时实时更新(配合 模板:倒计时 使用) | ||
*/ | */ | ||
( function ( mw, $ ) { | ( function ( mw, $ ) { | ||
| 第11行: | 第11行: | ||
window.dshCountdownLoaded = true; | window.dshCountdownLoaded = true; | ||
function | function esc( s ) { | ||
return ( | return String( s ) | ||
.replace( /&/g, '&' ) | |||
.replace( /</g, '<' ) | |||
.replace( />/g, '>' ) | |||
.replace( /"/g, '"' ); | |||
} | } | ||
function | // 取本地时区的"今天 00:00" | ||
function todayStart() { | |||
var d = new Date(); | |||
return new Date( d.getFullYear(), d.getMonth(), d.getDate() ); | |||
} | |||
// 解析目标日期:支持 YYYY-MM-DD(含时分秒会被忽略,只按整天算) | |||
function parseTarget( s ) { | |||
if ( !s ) { | if ( !s ) { | ||
return null; | return null; | ||
} | } | ||
/ | var m = String( s ).trim().match( /^(\d{4})-(\d{2})-(\d{2})/ ); | ||
if ( m ) { | |||
var | return new Date( +m[ 1 ], +m[ 2 ] - 1, +m[ 3 ] ); | ||
} | |||
var d = new Date( String( s ).trim().replace( ' ', 'T' ) ); | |||
return isNaN( d.getTime() ) ? null : d; | return isNaN( d.getTime() ) ? null : d; | ||
} | } | ||
function update( $el ) { | function update( $el ) { | ||
var target = | var target = parseTarget( $el.data( 'date' ) ); | ||
var $txt = $el.find( '.dsh-bigcd-txt' ); | |||
var $ | |||
if ( !target ) { | if ( !target ) { | ||
$ | $txt.text( '(倒计时日期格式无法解析,请使用 YYYY-MM-DD)' ); | ||
return; | return; | ||
} | } | ||
var | var ev = esc( $el.data( 'event' ) || '' ); | ||
var | var evTag = ev ? '<span class="dsh-bigcd-ev">' + ev + '</span>' : ''; | ||
var day = 86400000; | |||
if ( | var diff = Math.round( ( target.getTime() - todayStart().getTime() ) / day ); | ||
txt | var num = '<span class="dsh-bigcd-num">'; | ||
if ( diff > 0 ) { | |||
$txt.html( '距离' + evTag + '还有 ' + num + diff + '</span> 天' ); | |||
} else if ( diff === 0 ) { | |||
$txt.html( evTag + '就是今天!' ); | |||
} else { | } else { | ||
txt | $txt.html( evTag + '已经 ' + num + ( -diff ) + '</span> 天' ); | ||
} | } | ||
} | } | ||
mw.hook( 'wikipage.content' ).add( function ( $content ) { | mw.hook( 'wikipage.content' ).add( function ( $content ) { | ||
$content.find( '.dsh- | $content.find( '.dsh-bigcd' ).each( function () { | ||
var $el = $( this ); | var $el = $( this ); | ||
update( $el ); | update( $el ); | ||
| 第65行: | 第66行: | ||
$el.data( 'dshTimer', setInterval( function () { | $el.data( 'dshTimer', setInterval( function () { | ||
update( $el ); | update( $el ); | ||
}, | }, 60000 ) ); | ||
} | } | ||
} ); | } ); | ||
} ); | } ); | ||
}( window.mediaWiki, jQuery ) ); | }( window.mediaWiki, jQuery ) ); | ||
2026年9月4日 (五) 17:04的版本
/*
* MediaWiki:Common.js — 全站通用脚本
* 大事件倒计时实时更新(配合 模板:倒计时 使用)
*/
( function ( mw, $ ) {
'use strict';
if ( window.dshCountdownLoaded ) {
return;
}
window.dshCountdownLoaded = true;
function esc( s ) {
return String( s )
.replace( /&/g, '&' )
.replace( /</g, '<' )
.replace( />/g, '>' )
.replace( /"/g, '"' );
}
// 取本地时区的"今天 00:00"
function todayStart() {
var d = new Date();
return new Date( d.getFullYear(), d.getMonth(), d.getDate() );
}
// 解析目标日期:支持 YYYY-MM-DD(含时分秒会被忽略,只按整天算)
function parseTarget( s ) {
if ( !s ) {
return null;
}
var m = String( s ).trim().match( /^(\d{4})-(\d{2})-(\d{2})/ );
if ( m ) {
return new Date( +m[ 1 ], +m[ 2 ] - 1, +m[ 3 ] );
}
var d = new Date( String( s ).trim().replace( ' ', 'T' ) );
return isNaN( d.getTime() ) ? null : d;
}
function update( $el ) {
var target = parseTarget( $el.data( 'date' ) );
var $txt = $el.find( '.dsh-bigcd-txt' );
if ( !target ) {
$txt.text( '(倒计时日期格式无法解析,请使用 YYYY-MM-DD)' );
return;
}
var ev = esc( $el.data( 'event' ) || '' );
var evTag = ev ? '<span class="dsh-bigcd-ev">' + ev + '</span>' : '';
var day = 86400000;
var diff = Math.round( ( target.getTime() - todayStart().getTime() ) / day );
var num = '<span class="dsh-bigcd-num">';
if ( diff > 0 ) {
$txt.html( '距离' + evTag + '还有 ' + num + diff + '</span> 天' );
} else if ( diff === 0 ) {
$txt.html( evTag + '就是今天!' );
} else {
$txt.html( evTag + '已经 ' + num + ( -diff ) + '</span> 天' );
}
}
mw.hook( 'wikipage.content' ).add( function ( $content ) {
$content.find( '.dsh-bigcd' ).each( function () {
var $el = $( this );
update( $el );
if ( !$el.data( 'dshTimer' ) ) {
$el.data( 'dshTimer', setInterval( function () {
update( $el );
}, 60000 ) );
}
} );
} );
}( window.mediaWiki, jQuery ) );