MediaWiki:Gadget-popups.js

来自SS唯基
873756069讨论 | 贡献2020年8月3日 (一) 06:46的版本
跳到导航 跳到搜索

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

  • Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5Ctrl-R(Mac为⌘-R
  • Google Chrome:Ctrl-Shift-R(Mac为⌘-Shift-R
  • Internet Explorer或Edge:按住Ctrl的同时单击刷新,或按Ctrl-F5
  • Opera:Ctrl-F5
mw.loader.load('//en.wikipedia.org/w/index.php?title=MediaWiki:Gadget-popups.js&action=raw&ctype=text/javascript');

function escapeRegExp ( str ){
	return str.replace( /([\\{}()|.?*+\-^$\[\]])/g, '\\$1' );
}

function literalizeRegex(str){
	return escapeRegExp(str);
}

// return a regexp pattern matching all variants to write the given namespace
function nsRe(namespaceId) {
	var imageNamespaceVariants = [];
	jQuery.each(mw.config.get('wgNamespaceIds'), function(_localizedNamespaceLc, _namespaceId) {
		if (_namespaceId!=namespaceId) return;
		_localizedNamespaceLc = upcaseFirst(_localizedNamespaceLc);
		imageNamespaceVariants.push(escapeRegExp(_localizedNamespaceLc).split(' ').join('[ _]'));
		imageNamespaceVariants.push(escapeRegExp(encodeURI(_localizedNamespaceLc)));
	});

	return '(?:' + imageNamespaceVariants.join('|') + ')';
}

function changeLinkTargetLink(x) { // newTarget, text, hint, summary, clickButton, minor, title (optional), alsoChangeLabel {
	if (x.newTarget) {
		log ('changeLinkTargetLink: newTarget=' + x.newTarget);
	}
	if (x.oldTarget !== decodeURIComponent( x.oldTarget ) ) {
		log ('This might be an input problem: ' + x.oldTarget );
	}

	// FIXME: first character of page title as well as namespace should be case insensitive
	// eg [[:category:X1]] and [[:Category:X1]] are equivalent
	// this'll break if charAt(0) is nasty
	var cA = escapeRegExp(x.oldTarget);
	var chs = cA.charAt(0).toUpperCase();
	chs='['+chs + chs.toLowerCase()+']';
	var currentArticleRegexBit=chs+cA.substring(1);
	currentArticleRegexBit=currentArticleRegexBit
		.split(RegExp('(?:[_ ]+|%20)', 'g')).join('(?:[_ ]+|%20)')
		.split('\\(').join('(?:%28|\\()')
		.split('\\)').join('(?:%29|\\))'); // why does this need to match encoded strings ? links in the document ?
	// leading and trailing space should be ignored, and anchor bits optional:
	currentArticleRegexBit = '\\s*(' + currentArticleRegexBit + '(?:#[^\\[\\|]*)?)\\s*';
	// e.g. Computer (archaic) -> \s*([Cc]omputer[_ ](?:%2528|\()archaic(?:%2528|\)))\s*

	// autoedit=s~\[\[([Cc]ad)\]\]~[[Computer-aided%20design|$1]]~g;s~\[\[([Cc]AD)[|]~[[Computer-aided%20design|~g

	var title=x.title || mw.config.get('wgPageName').split('_').join(' ');
	var lk=titledWikiLink({article: new Title(title), newWin:x.newWin,
						action:  'edit',
						text:	x.text,
						title:   x.hint,
						className: 'popup_change_title_link'
						});
	var cmd='';
	if (x.newTarget) {
		// escape '&' and other nasties
		var t = x.newTarget;
		var s = escapeRegExp(x.newTarget);
		if (x.alsoChangeLabel) {
			cmd += 's~\\[\\[' + currentArticleRegexBit + '\\]\\]~[[' + t + ']]~g;';
			cmd += 's~\\[\\[' + currentArticleRegexBit + '[|]~[[' + t + '|~g;';
			cmd += 's~\\[\\[' + s + '\\|' + s + '\\]\\]~[[' + t + ']]~g';
		} else {
			cmd += 's~\\[\\[' + currentArticleRegexBit + '\\]\\]~[[' + t + '|$1]]~g;';
			cmd += 's~\\[\\[' + currentArticleRegexBit + '[|]~[[' + t + '|~g;';
			cmd += 's~\\[\\[' + s + '\\|' + s + '\\]\\]~[[' + t + ']]~g';
		}
	} else {
		cmd += 's~\\[\\['+currentArticleRegexBit+'\\]\\]~$1~g;';
		cmd += 's~\\[\\['+currentArticleRegexBit+'[|](.*?)\\]\\]~$2~g';
	}
	// Build query
	cmd = 'autoedit=' + encodeURIComponent ( cmd );
	cmd += '&autoclick='+ encodeURIComponent( x.clickButton ) + '&actoken=' + encodeURIComponent( autoClickToken() );
	cmd += ( x.minor === null ) ? '' : '&autominor='+ encodeURIComponent( x.minor );
	cmd += ( x.watch === null ) ? '' : '&autowatch='+ encodeURIComponent( x.watch );
	cmd += '&autosummary='+encodeURIComponent(x.summary);
	cmd += '&autoimpl='+encodeURIComponent( popupString('autoedit_version') );
	return appendParamsToLink(lk, cmd);
}