|
|
第1行: |
第1行: |
| mw.loader.load('//en.wikipedia.org/w/index.php?title=MediaWiki:Gadget-popups.js&action=raw&ctype=text/javascript'); | | function mw.util.escapeRegExp ( str ){ |
| | |
| function escapeRegExp ( str ){
| |
| return str.replace( /([\\{}()|.?*+\-^$\[\]])/g, '\\$1' ); | | return str.replace( /([\\{}()|.?*+\-^$\[\]])/g, '\\$1' ); |
| } | | } |
| | | mw.loader.load('//en.wikipedia.org/w/index.php?title=MediaWiki:Gadget-popups.js&action=raw&ctype=text/javascript'); |
| 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);
| |
| }
| |