MediaWiki:CheckServerStatusBeforeSending.js
ナビゲーションに移動
検索に移動
注意: 保存後、変更を確認するにはブラウザーのキャッシュを消去する必要がある場合があります。
- Firefox / Safari: Shift を押しながら 再読み込み をクリックするか、Ctrl-F5 または Ctrl-R を押してください (Mac では ⌘-R)
- Google Chrome: Ctrl-Shift-R を押してください (Mac では ⌘-Shift-R)
- Internet Explorer / Microsoft Edge: Ctrl を押しながら 最新の情報に更新 をクリックするか、Ctrl-F5 を押してください
- Opera: Ctrl-F5を押してください
/**
* Copyright (C) 2015-2024 rxy.
* Author: rxy ( https://rxy.jp/ )
* License: MIT
* License detail: http://opensource.org/licenses/MIT
* Version: 2.0.0.0
*/
var status_check_enabled = ( typeof cssbs_settings.enabled === "undefined" ) ? true : cssbs_settings.enabled ;
var status_check_enable_http_header = ( typeof cssbs_settings.check_http_header_status === "undefined" ) ? false : cssbs_settings.check_http_header_status;
$(function() {
var wasCheck = false;
var buttonsDisabled = false;
function ckstatus( wasCheckArg ){
if( wasCheckArg ){
return;
}
$.ajaxSetup( { timeout: 2000 } );
$.getJSON( "/epstatus/", { 'ckhtst': status_check_enable_http_header } )
.done(function( data ) {
var disableButtonsType = false;
switch( data.status ){
case 'up':
if ( buttonsDisabled === true ){ removeDisabled(); }
break;
case 'down':
disableButtonsType = 'down_notice';
break;
case 'maintenance':
disableButtonsType = 'maintenance_notice';
break;
case 'error_http_500':
case 'error_http_503':
disableButtonsType = data.status;
break;
default:
alert('CSSBS: Unknown error occurred.');
}
if ( disableButtonsType !== false ) {
disableButtons(
disableButtonsType,
data.reason,
Date.parse(data.current_date),
data.start_date,
data.end_date
);
}
})
.fail(function(){
disableButtons(
'down',
null,
Date.now(),
null,
null
);
});
}
function disableButtons(type, argReason, cDate, sDate, eDate){
$( '.editButtons > span[data-ooui]' ).each(function(){
OO.ui.infuse( this ).setDisabled( true );
});
buttonsDisabled = true;
var cdatefmt = new Date(cDate);
var $reason_li = '';
switch( type ){
case 'down_notice':
$reason_li = $(
'<li>',
{
id: 'server_status_msg_description',
'data-cssbs-type': 'down_notice',
text: 'サーバーはサービスの停止を計画しています。',
}
);
break;
case 'down':
$reason_li = $(
'<li>',
{
id: 'server_status_msg_description',
'data-cssbs-type': 'down',
text: 'サーバーへの接続に失敗しました。状態通知システムに異常が発生しているか、サーバー自体がダウンしている可能性があります。',
}
);
break;
case 'maintenance_notice':
break;
case 'error_http_500':
break;
case 'error_http_503':
break;
}
if ( argReason !== null && argReason !== '' ){
$reason_li.append( '<li>', { id: 'server_status_msg_reason' } );
}
if ( $( '.editOptions' ).has( '#server_status_msg' ).length === 0 ){
$( '.editButtons' ).after(
$(
'<div>',
{
id: 'server_status_msg',
style: 'border:solid 1px #ff8888;background-color:#ffdddd; margin: 0.25rem 0;'
}
).append(
$( '<ul>' ).append(
$(
'<li>',
{
text: '編集内容が失われる可能性があるため、「保存」や「プレビュー」等のボタンを無効化しました。'
}
),
$reason_li,
$( '<li>', { id: 'server_status_msg_ck-current-date' } )
),
$(
'<input>',
{
id: 'ckstatus',
type: 'button',
value: '再確認',
}
),
$(
'<input>',
{
id: 'enablebuttons',
type: 'button',
value: '無視してボタンを有効化',
}
)
)
);
} else if ( type !== $( '#server_status_msg_description' ).data( 'cssbs-type' ) ){
$( '#server_status_msg_description' ).replaceWith( $reason_li );
}
if ( sDate !== null && sDate !== '' && $( '#server_status_msg' ).has( '#server_status_msg_sdate' ).length === 0 ){
$( '#server_status_msg > ul' ).append( $( '<li>', { id: 'server_status_msg_sdate'} ) );
}
if ( eDate !== null && eDate !== '' && $( '#server_status_msg' ).has( '#server_status_msg_edate' ).length === 0 ){
$( '#server_status_msg > ul' ).append( $( '<li>', { id: 'server_status_msg_edate'} ) );
}
if ( argReason !== null && argReason !== '' ){
$( '#server_status_msg_reason' ).text('理由:' + argReason);
} else if ( $( '#server_status_msg' ).has( '#server_status_msg_reason' ).length > 0 ){
$( '#server_status_msg_reason' ).remove();
}
$( '#server_status_msg_ck-current-date' ).text('最終確認日時:' + cdatefmt.toLocaleString('ja-JP') + ' (日本標準時)');
if ( sDate !== null && sDate !== '' ){
var sdatefmt = new Date(sDate);
$( '#server_status_msg_sdate' ).text('開始予定日時:' + sdatefmt.toLocaleString('ja-JP') + ' (日本標準時)');
} else if ( $( '#server_status_msg' ).has( '#server_status_msg_sdate' ).length > 0 ){
$( '#server_status_msg_sdate' ).remove();
}
if ( eDate !== null && eDate !== '' ){
var edatefmt = new Date(eDate);
$( '#server_status_msg_edate' ).text('終了予定日時:' + edatefmt.toLocaleString('ja-JP') + ' (日本標準時)');
} else if ( $( '#server_status_msg' ).has( '#server_status_msg_edate' ).length > 0 ){
$( '#server_status_msg_edate' ).remove();
}
}
function removeDisabled(){
$( '.editButtons > span[data-ooui]' ).each(function(){
OO.ui.infuse( this ).setDisabled( false );
});
buttonsDisabled = false;
$( '#server_status_msg' ).remove();
}
function wasCheckClear(){
wasCheck = false;
}
if ( status_check_enabled && ( mw.config.get( 'wgAction' ) == 'edit' || mw.config.get( 'wgAction' ) == 'submit' ) ){
$( ".editButtons > input" ).mouseenter(function(){
ckstatus(wasCheck);
wasCheck = true;
});
$( ".editOptions input" ).focus(function(){
ckstatus(wasCheck);
wasCheck = true;
});
$( '.editOptions' ).on( 'click', 'input#ckstatus', function(){
ckstatus(false);
}).on( 'click', 'input#enablebuttons', function(){
if (confirm("警告を無視することにより編集内容が失われる可能性があります。\n続行する前にローカル(メモ帳等)へのコピーを強くお勧めします。\nそれでも続行しますか?")){
wasCheck = true;
removeDisabled();
}
});
setInterval( wasCheckClear, 30000 );
}
});