MediaWiki:Common.js

来自魔法少女小圆维基
跳到导航 跳到搜索

注意:在保存之后,您可能需要清除浏览器缓存才能看到所作出的变更的影响。

  • Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5Ctrl-R(Mac为⌘-R
  • Google Chrome:Ctrl-Shift-R(Mac为⌘-Shift-R
  • Internet Explorer:按住Ctrl的同时单击刷新,或按Ctrl-F5
  • Opera:前往菜单 → 设置(Mac为Opera → Preferences),然后隐私和安全 → 清除浏览数据 → 缓存的图片和文件
/* 此处的JavaScript将加载于所有用户每一个页面。 */

/* ----- Modify Sidebar ----- */
function addInputFormToSidebar() {
  theNode = document.getElementById('p-.E5.B7.A5.E5.85.B7.E7.AE.B12').getElementsByTagName('div')[0].getElementsByTagName('ul')[0];
  aInput = document.createElement('input');
  aInput.name='title';
  aInput.size="15";
  aInput.placeholder="条目名称";
  aButton = document.createElement('button');
  aButton.type='submit';
  aButton.style="visibility: hidden;";
  aForm = document.createElement('form');
  aForm.action='/index.php';
  aForm.target='_blank';
  aForm.appendChild(aInput);
  aForm.appendChild(aButton);
  liNode = document.createElement('li');
  liNode.appendChild(aForm);
  theNode.appendChild(liNode);
}
addOnloadHook( addInputFormToSidebar );

/* ----- Modify Sidebar Toolbox ----- */
/* copied from http://www.mediawiki.org/wiki/Manual:Interface/Sidebar#Add_or_remove_sections_.28JavaScript.29 */
/* 不再使用 */
/* function ModifySidebar( action, section, name, link ) {
	try {
		switch ( section ) {
			case 'languages':
				var target = 'p-lang';
				break;
			case 'toolbox':
				var target = 'p-tb';
				break;
			case 'navigation':
				var target = 'p-navigation';
				break;
			default:
				var target = 'p-' + section;
				break;
		}
 
		if ( action == 'add' ) {
			var node = document.getElementById( target )
							   .getElementsByTagName( 'div' )[0]
							   .getElementsByTagName( 'ul' )[0];
 			var aNode = document.createElement( 'a' );
			var liNode = document.createElement( 'li' );
 			aNode.appendChild( document.createTextNode( name ) );
			aNode.setAttribute( 'href', link );
			liNode.appendChild( aNode );
			liNode.className = 'plainlinks';
			node.appendChild( liNode );
		}
 
		if ( action == 'remove' ) {
			var list = document.getElementById( target )
							   .getElementsByTagName( 'div' )[0]
							   .getElementsByTagName( 'ul' )[0];
 			var listelements = list.getElementsByTagName( 'li' );
 			for ( var i = 0; i < listelements.length; i++ ) {
				if (
					listelements[i].getElementsByTagName( 'a' )[0].innerHTML == name ||
					listelements[i].getElementsByTagName( 'a' )[0].href == link
				)
				{
					list.removeChild( listelements[i] );
				}
			}
		}
	} catch( e ) {
		// let's just ignore what's happened
		return;
	}
}

function CustomizeModificationsOfSidebar() {
	ModifySidebar('add', 'toolbox', '清除服务器缓存', 'http://wiki.madomagi.info/index.php?title='+document.getElementById('firstHeading').firstChild.innerHTML+"&action=purge");
	//ModifySidebar( 'remove', 'toolbox', 'Upload file', 'http://en.wikipedia.org/wiki/Special:Upload' );
}
addOnloadHook( CustomizeModificationsOfSidebar );  */


/* --------- one-click broken link report ------- */
/* cf: https://www.mediawiki.org/wiki/API:Edit */
/* cf: https://www.mediawiki.org/wiki/API:Tokens */
function emailUploader( content, user, editToken ) {
    $.ajax({
      url: 'http://wiki.madomagi.info/api.php',
      data: 'action=query&list=users&ususers='+encodeURIComponent(user)+'&usprop=emailable&format=json',
      dataType: 'json',
      success: function( data ) {
        if ( typeof data.query.users[0]['emailable'] !== 'undefined' ) {
          emailable = true;
        } else {
          emailable = false;
        }
      }
    });
  if (emailable) {
    $.ajax({
        url: 'http://wiki.madomagi.info/api.php',
        data: {
            format: 'json',
            action: 'emailuser',
            target: user,
            subject: '坏链求补档',
            text: content,
            token: editToken
        },
        dataType: 'json',
        type: 'POST',
        success: function( data ) {
            if ( data && data.emailuser && data.emailuser.result == 'Success' ) {
                alert( '成功向'+user+'发送邮件提醒补档' );
            } else if ( data && data.error ) {
                alert( 'Error: API returned error code "' + data.error.code + '": ' + data.error.info );
            } else {
                alert( 'Error: Unknown result from API.' );
            }
        },
        error: function( xhr ) {
            alert( 'Error: Request failed.' );
        }
    });
  }
}

function appendReport( content, editToken ) {
    $.ajax({
        url: 'http://wiki.madomagi.info/api.php',
        data: {
            format: 'json',
            action: 'edit',
            title: '坏链报告',
            appendtext: content,
            token: editToken
        },
        dataType: 'json',
        type: 'POST',
        success: function( data ) {
            if ( data && data.edit && data.edit.result == 'Success' ) {
                alert( '成功添加到[[坏链报告]]条目' );
            } else if ( data && data.error ) {
                alert( 'Error: API returned error code "' + data.error.code + '": ' + data.error.info );
            } else {
                alert( 'Error: Unknown result from API.' );
            }
        },
        error: function( xhr ) {
            alert( 'Error: Request failed.' );
        }
    });
}

function obtainToken(f) {
    $.ajax({
        url: 'http://wiki.madomagi.info/api.php',
        data: {
            format: 'json',
            action: 'tokens'
        },
        dataType: 'json',
        type: 'GET',
        success: f,
        error: function( xhr ) {
            alert( 'Error: Request failed' );
        }
    })
}

function brokenLinkReport(text, contact) {
    if (confirm('确定要报告这链接坏了?')) {
        obtainToken(function( data ) {
            if (data && data.tokens && data.tokens.edittoken.length==34) {
                appendReport( "\r\n* "+text, data.tokens.edittoken );
                if (contact!=="" && contact!=="undefined") {emailUploader(text, contact, data.tokens.edittoken );}
            } else {
                alert( 'Error: cannot retrieve edit token' );
            }
        });
    }
}

//mw.loader.load( 'jquery.ui.brokenLinkGuard' ); 

function renderBrokenLinkGuard() {
    pagename = document.getElementById("firstHeading").firstChild.innerHTML;
    $('.brokenLinkGuard').after(function() {
        s = "<a href='#' onclick='brokenLinkReport(\""+(new Date().toLocaleDateString()+" [["+pagename+"]] ["+this.firstChild.href+" "+this.firstChild.innerHTML).replace(/\\/g, "\\\\").replace(/"/g, "\\\"")+"]\", \"";
        if (this.nextSibling!=null) {
            s = s+this.nextSibling.innerHTML.replace(/\\/g, "\\\\").replace(/"/g, "\\\"");
        }
        s = s+"\");'><small>(点击报告坏链)</small></a>";
        return s;
    });
}

addOnloadHook( renderBrokenLinkGuard );
//jQuery( document ).ready( function( $ ) {
//        mw.loader.using( 'jquery.ui.brokenLinkGuard', function() {renderBrokenLinkGuard();} );
//} );

// Popups
/* disabled
// changed to reference tooltips: http://en.wikipedia.org/wiki/User_talk:Yair_rand/ReferenceTooltips
// translation
// ref: http://en.wikipedia.org/wiki/Wikipedia:Tools/Navigation_popups/Translation
mw.loader.load("//en.wikipedia.org/w/index.php?title=User:Theslboat/Popups-strings-chs.js&action=raw&ctype=text/javascript&smaxage=21600&maxage=86400");
// ref: http://en.wikipedia.org/wiki/Wikipedia:Tools/Navigation_popups
mw.loader.load("//en.wikipedia.org/w/index.php?title=User:Lupin/popups.js&action=raw&ctype=text/javascript&smaxage=21600&maxage=86400");

// window.popupSubpopups = false;
window.popupImages = false;
window.popupOnEditSelection = false;
window.popupImageLinks = false;
*/


// 展开/折叠 所有 封面/插图
function expandOrCollapse() {
	$("#expand-all-cover").click(function(){ $("table.cover span.mw-collapsible-toggle-collapsed a").click();});
	$("#collapse-all-cover").click(function(){ $("table.cover span.mw-collapsible-toggle-expanded a").click();});
	$("#expand-all-illust").click(function(){ $("table.illust span.mw-collapsible-toggle-collapsed a").click();});
	$("#collapse-all-illust").click(function(){ $("table.illust span.mw-collapsible-toggle-expanded a").click();});
};
addOnloadHook( expandOrCollapse );