MediaWiki:Common.js

来自魔法少女小圆维基
Madoka讨论 | 贡献2013年12月30日 (一) 11:44的版本
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳到导航 跳到搜索

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

  • 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 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/Special:前缀索引' );
	ModifySidebar('add', 'toolbox', '页面分类', 'http://wiki.madomagi.info/Special:页面分类');
	ModifySidebar('add', 'toolbox', '分类树', 'http://wiki.madomagi.info/Special:分类树');
	ModifySidebar('add', 'toolbox', '清除服务器缓存', 'http://wiki.madomagi.info/index.php?title='+document.getElementById('firstHeading').firstChild.innerHTML+"&action=purge");
	// removes [[Special:Upload]] from toolbox
	//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() {
        return "<a href='#' onclick='brokenLinkReport(\""+(new Date().toLocaleDateString()+" [["+pagename+"]] ["+this.firstChild.href+" "+this.firstChild.innerHTML).replace(/\\/g, "\\\\").replace(/"/g, "\\\"")+"]\", \""+this.nextSibling.innerHTML.replace(/\\/g, "\\\\").replace(/"/g, "\\\"")+"\");'><small>(点击报告坏链)</small></a>";
    });
}

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