MediaWiki:Gadget-popups.js:修订间差异
跳到导航
跳到搜索
(以“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); | |||
} |
2020年8月3日 (一) 07:24的版本
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); }