User:SunAfterRain/js/Difflink.js
Appearance
From Meta, a Wikimedia project coordination wiki
< User:SunAfterRain | js
Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
/*! * Difflink.js * https://meta.wikimedia.org/wiki/User:SunAfterRain/js/Difflink.js * Cover from https://zh.wikipedia.org/w/index.php?title=MediaWiki:Gadget-Difflink.js&oldid=63763124 * * Released under GPL v3 license */ $.when( $.ready, mw.loader.using(['mediawiki.util','mediawiki.widgets','oojs-ui']), (()=>{ for(constrlNameof['ext.gadget.HanAssist','userscript.SunAfterRain.HanAssist']){ if(mw.loader.getState(rlName)){ returnmw.loader.using(rlName).then(require=>require(rlName)); } } returnnewPromise((resolve)=>{ mw.hook('userscript.SunAfterRain.HanAssist.ready').add(functionhandler(HanAssist){ mw.hook('userscript.SunAfterRain.HanAssist.ready').remove(handler); resolve(HanAssist); }); }); })() ).then((_$,_require,HanAssist)=>{ constisFlowMode=( ( mw.config.get('wgAction')==='view-header'|| mw.config.get('wgAction')==='compare-header-revisions' )&&mw.config.get('wgFlowData') ); if( !( (mw.config.get('wgAction')==='view'&&mw.config.get('wgArticleId')&&mw.config.get('wgRevisionId'))|| (mw.config.get('wgDiffNewId')&&mw.config.get('wgDiffOldId'))|| isFlowMode ) ){ return; } constmodeOldid=Symbol('oldid'); constmodeDiff=Symbol('diff'); constmessages={ [modeOldid]:HanAssist.batchConv({ displayText:'固定版本', portletText:{hans:'当前修订链接',hant:'當前修訂連結'}, portletDesc:{hans:'复制链接到当前修订版本的维基语法',hant:'複製連結到當前修訂版本的維基語法'} }), [modeDiff]:HanAssist.batchConv({ displayText:{hans:'版本差异',hant:'版本差異'}, portletText:{hans:'当前差异链接',hant:'當前差異連結'}, portletDesc:{hans:'复制链接到当前差异版本的维基语法',hant:'複製連結到當前差異版本的維基語法'} }) }; letmode; if(mw.config.get('wgDiffNewId')||mw.config.get('wgAction')==='compare-header-revisions'){ mode=modeDiff; }else{ mode=modeOldid; } letdiff,oldid,ln; constreloadlink={ normal(){ diff=mw.config.get('wgDiffNewId'); oldid=mw.config.get('wgDiffOldId')||mw.config.get('wgRevisionId'); if(diff){ ln='Special:Diff/'+oldid+'/'+diff; if( mw.config.get('wgCanonicalSpecialPageName')!=='ComparePages'&&/** For [[Special:ComparePages]] **/ !$('td').is('.diff-multi') ){ newmw.Api().get({ action:'compare', fromrev:diff, torelative:'prev', prop:'ids' }).done(function(data){ if(diff===mw.config.get('wgDiffNewId')&&data.compare&&data.compare.fromrevid===oldid){ ln='Special:Diff/'+diff; } }); } }else{ ln='Special:PermanentLink/'+oldid; } }, flow(){ constflowData=mw.config.get('wgFlowData'); if(mode===modeOldid){ oldid=flowData.blocks.header.revision.revisionId; ln=mw.util.getUrl(mw.config.get('wgPageName'),{ action:'view-header', header_newRevision:oldid }); }else{ diff=flowData.blocks.header.revision.new.revisionId; oldid=flowData.blocks.header.revision.old.revisionId; if(flowData.blocks.header.revision.new.previousRevisionId===oldid){ ln=mw.util.getUrl(mw.config.get('wgPageName'),{ action:'compare-header-revisions', header_newRevision:diff }); }else{ ln=mw.util.getUrl(mw.config.get('wgPageName'),{ action:'compare-header-revisions', header_newRevision:diff, header_oldRevision:oldid }); } } } }; if(isFlowMode){ reloadlink.exec=reloadlink.flow; }else{ reloadlink.exec=reloadlink.normal; } $(mw.util.addPortletLink( mw.config.get('skin')==='minerva'?'p-tb':'p-cactions', '', messages[mode].portletText, 't-difflink', messages[mode].portletDesc )).on('click',function(e){ e.preventDefault(); const$dom=$('<div>').attr({ id:'difflink' }); for(constlinkof(isFlowMode ?[ '['+ln+']', '['+ln+' '+messages[mode].displayText+']', window.location.origin+ln ] :[ ln, '[['+ln+']]', '[['+ln+'|'+messages[mode].displayText+']]', window.location.origin+mw.util.getUrl(ln) ] )){ const$layout=newmw.widgets.CopyTextLayout({copyText:link}).$element; $layout.removeClass('oo-ui-fieldLayout-align-left'); $dom.append($layout); } if(/(Android|iPhone|Mobile)/i.test(navigator.userAgent)){ OO.ui.alert($dom); }else{ OO.ui.alert($dom,{size:'medium'}); } }); mw.hook('wikipage.content').add(reloadlink.exec); });