783
个编辑
(以“function mw.util.escapeRegExp ( str ){ return str.replace( /([\\{}()|.?*+\-^$\[\]])/g, '\\$1' ); } mw.loader.load('//en.wikipedia.org/w/index.php?title=MediaWiki:Gadget-popu...”替换内容) |
|||
第1行: | 第1行: | ||
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' ); | return str.replace( /([\\{}()|.?*+\-^$\[\]])/g, '\\$1' ); | ||
} | } | ||
mw. | |||
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); | |||
} |