MediaWiki:Gadget-twinklefluff.js: Perbedaan antara revisi

Konten dihapus Konten ditambahkan
k Perbarui dari GitHub
Repo at d9666d4: Update Twinkle from upstream
Baris 17:
Twinklefluff revert and antivandalism utility
*/
 
var spanTag = function( color, content ) {
var span = document.createElement( 'span' );
span.style.color = color;
span.appendChild( document.createTextNode( content ) );
return span;
};
var buildLink = function(color, text) {
var link = document.createElement('a');
link.appendChild(spanTag('Black', '['));
link.appendChild(spanTag(color, text));
link.appendChild(spanTag('Black', ']'));
return link;
};
 
Twinkle.fluff = {
auto: function() {
if( parseInt( Morebitsmw.queryStringconfig.get('oldidwgRevisionId'), 10) !== mw.config.get('wgCurRevisionId') ) {
// not latest revision
alert("Tidak dapat mengembalikan revisi, halaman sudah berubah saat ini.");
Baris 30 ⟶ 44:
Twinkle.fluff.revert( Morebits.queryString.get( 'twinklerevert' ), vandal, true );
},
normal: function() {
 
var spanTag = contributions: function( color, content ) {
// $('sp-contributions-footer-anon-range') relies on the fmbox
var span = document.createElement( 'span' );
// id in [[MediaWiki:Sp-contributions-footer-anon-range]] and
span.style.color = color;
// is used to show rollback/vandalism links for IP ranges
span.appendChild( document.createTextNode( content ) );
if( mw.config.get('wgCanonicalSpecialPageName') === "Contributions" && (mw.config.exists('wgRelevantUserName') || !!$('#sp-contributions-footer-anon-range')[0])) {
return span;
};
 
if( mw.config.get('wgNamespaceNumber') === -1 && mw.config.get('wgCanonicalSpecialPageName') === "Contributions" ) {
//Get the username these contributions are for
var username = mw.config.get('wgRelevantUserName');
var logLink = $('#contentSub').find('a[title^="Special:Log"]').last();
if( Twinkle.getPref('showRollbackLinks').indexOf('contribs') !== -1 ||
if (logLink.length>0) //#215 -- there is no log link on Special:Contributions with no user
( mw.config.get('wgUserName') !== username && Twinkle.getPref('showRollbackLinks').indexOf('others') !== -1 ) ||
{
( mw.config.get('wgUserName') === username && Twinkle.getPref('showRollbackLinks').indexOf('mine') !== -1 ) ) {
var username = decodeURIComponent(/wiki\/Special:Log\/(.+)$/.exec(logLink.attr("href").replace(/_/g, "%20"))[1]);
var list = $("#mw-content-text").find("ul li:has(span.mw-uctop)");
if( Twinkle.getPref('showRollbackLinks').indexOf('contribs') !== -1 ||
( mw.config.get('wgUserName') !== username && Twinkle.getPref('showRollbackLinks').indexOf('others') !== -1 ) ||
( mw.config.get('wgUserName') === username && Twinkle.getPref('showRollbackLinks').indexOf('mine') !== -1 ) ) {
var list = $("#mw-content-text").find("ul li:has(span.mw-uctop)");
 
var revNode = document.createElement('strong');
var revLink = document.createElementbuildLink('aSteelBlue', 'kembalikan');
revLinkrevNode.appendChild( spanTag( 'Black', '[' ) revLink);
revLink.appendChild( spanTag( 'SteelBlue', 'kembalikan' ) );
revLink.appendChild( spanTag( 'Black', ']' ) );
revNode.appendChild(revLink);
 
var revVandNode = document.createElement('strong');
var revVandLink = document.createElementbuildLink('aRed', 'vandalisme');
revVandLinkrevVandNode.appendChild( spanTag( 'Black', '[' ) revVandLink);
revVandLink.appendChild( spanTag( 'Red', 'vandalisme' ) );
revVandLink.appendChild( spanTag( 'Black', ']' ) );
revVandNode.appendChild(revVandLink);
 
list.each(function(key, current) {
var href = $(current).childrenfind("a:eq(1).mw-changeslist-diff").attr("href");
current.appendChild( document.createTextNode(' ') );
var tmpNode = revNode.cloneNode( true );
tmpNode.firstChild.setAttribute( 'href', href + '&' + Morebits.queryString.create( { 'twinklerevert': 'norm' } ) );
current.appendChild( tmpNode );
current.appendChild( document.createTextNode(' ') );
tmpNode = revVandNode.cloneNode( true );
tmpNode.firstChild.setAttribute( 'href', href + '&' + Morebits.queryString.create( { 'twinklerevert': 'vand' } ) );
current.appendChild( tmpNode );
});
}
}
} else {
},
 
diff: function() {
if( mw.config.get('wgCanonicalSpecialPageName') === "Undelete" ) {
if (mw.config.get('wgDiffNewId') === mw.config.get('wgRevisionId')) {
//You can't rollback deleted pages!
// Add a [restore this revision] link to the older revision
return;
// Don't show if there's a single revision or weird diff (cur on latest)
}
if (mw.config.get('wgDiffOldId') && (mw.config.get('wgDiffOldId') !== mw.config.get('wgDiffNewId'))) {
var revertToRevision = document.createElement('div');
revertToRevision.setAttribute( 'id', 'tw-revert-to-orevision' );
revertToRevision.style.fontWeight = 'bold';
 
var revertToRevisionLink = buildLink('SaddleBrown', 'restore this version');
var firstRev = $("div.firstrevisionheader").length;
revertToRevisionLink.href = "#";
if( firstRev ) {
$(revertToRevisionLink).click(function(){
// we have first revision here, nothing to do.
Twinkle.fluff.revertToRevision(mw.config.get('wgDiffOldId').toString());
return;
});
revertToRevision.appendChild(revertToRevisionLink);
 
var otitle, ntitle= document.getElementById('mw-diff-otitle1').parentNode;
otitle.insertBefore( revertToRevision, otitle.firstChild );
try {
var otitle1 = document.getElementById('mw-diff-otitle1');
var ntitle1 = document.getElementById('mw-diff-ntitle1');
if (!otitle1 || !ntitle1) {
return;
}
otitle = otitle1.parentNode;
ntitle = ntitle1.parentNode;
} catch( e ) {
// no old, nor new title, nothing to do really, return;
return;
}
 
// Add either restore or rollback links to the newer revision
var old_rev_url = $("#mw-diff-otitle1").find("strong a").attr("href");
// Don't show if there's a single revision or weird diff (prev on first)
 
var ntitle = document.getElementById('mw-diff-ntitle1').parentNode;
// Lets first add a [edit this revision] link
var query = new Morebits.queryString( old_rev_url.split( '?', 2 )[1] );
 
var oldrev = query.get('oldid');
 
var revertToRevision = document.createElement('div');
revertToRevision.setAttribute( 'id', 'tw-revert-to-orevision' );
revertToRevision.style.fontWeight = 'bold';
 
var revertToRevisionLink = revertToRevision.appendChild( document.createElement('a') );
revertToRevisionLink.href = "#";
$(revertToRevisionLink).click(function(){
Twinkle.fluff.revertToRevision(oldrev);
});
revertToRevisionLink.appendChild( spanTag( 'Black', '[' ) );
revertToRevisionLink.appendChild( spanTag( 'SaddleBrown', 'kembalikan revisi ini' ) );
revertToRevisionLink.appendChild( spanTag( 'Black', ']' ) );
 
otitle.insertBefore( revertToRevision, otitle.firstChild );
 
if( document.getElementById('differences-nextlink') ) {
// Not latest revision
var revertToRevisionN = document.createElement('div');
var new_rev_url = $("#mw-diff-ntitle1").find("strong a").attr("href");
revertToRevisionN.setAttribute( 'id', 'tw-revert-to-nrevision' );
query = new Morebits.queryString( new_rev_url.split( '?', 2 )[1] );
revertToRevisionN.style.fontWeight = 'bold';
var newrev = query.get('oldid');
 
revertToRevision = document.createElement('div');
var revertToRevisionNLink = buildLink('SaddleBrown', 'kembalikan revisi ini');
revertToRevision.setAttribute( 'id', 'tw-revert-to-nrevision' );
revertToRevisionNLink.href = "#";
revertToRevision.style.fontWeight = 'bold';
$(revertToRevisionNLink).click(function(){
revertToRevisionLink = revertToRevision.appendChild( document.createElement('a') );
Twinkle.fluff.revertToRevision(mw.config.get('wgDiffNewId').toString());
revertToRevisionLink.href = "#";
$(revertToRevisionLink).click(function(){
Twinkle.fluff.revertToRevision(newrev);
});
revertToRevisionLinkrevertToRevisionN.appendChild( spanTag( 'Black', '[' ) revertToRevisionNLink);
revertToRevisionLink.appendChild( spanTag( 'SaddleBrown', 'kembalikan revisi ini' ) );
revertToRevisionLink.appendChild( spanTag( 'Black', ']' ) );
ntitle.insertBefore( revertToRevision, ntitle.firstChild );
 
ntitle.insertBefore( revertToRevisionN, ntitle.firstChild );
return;
} else if( Twinkle.getPref('showRollbackLinks').indexOf('diff') !== -1 && mw.config.get('wgDiffOldId') && (mw.config.get('wgDiffOldId') !== mw.config.get('wgDiffNewId') || document.getElementById('differences-prevlink'))) {
}
if( Twinkle.getPref('showRollbackLinks').indexOf('diff') !== -1 ) {
var vandal = $("#mw-diff-ntitle2").find("a").first().text();
 
Baris 156 ⟶ 127:
var normNode = document.createElement('strong');
 
var agfLink = document.createElementbuildLink('aDarkOliveGreen', 'kembalikan (AGF)');
var vandLink = document.createElementbuildLink('aRed', 'kembalikan (VANDAL)');
var normLink = document.createElementbuildLink('aSteelBlue', 'kembalikan');
 
agfLink.href = "#";
Baris 172 ⟶ 143:
Twinkle.fluff.revert('norm', vandal);
});
 
agfLink.appendChild( spanTag( 'Black', '[' ) );
agfLink.appendChild( spanTag( 'DarkOliveGreen', 'kembalikan (ANB)' ) );
agfLink.appendChild( spanTag( 'Black', ']' ) );
 
vandLink.appendChild( spanTag( 'Black', '[' ) );
vandLink.appendChild( spanTag( 'Red', 'kembalikan (VANDAL)' ) );
vandLink.appendChild( spanTag( 'Black', ']' ) );
 
normLink.appendChild( spanTag( 'Black', '[' ) );
normLink.appendChild( spanTag( 'SteelBlue', 'kembalikan' ) );
normLink.appendChild( spanTag( 'Black', ']' ) );
 
agfNode.appendChild(agfLink);
Baris 198 ⟶ 157:
}
}
},
 
oldid: function() { // Add a [restore this revision] link on old revisions
var revertToRevision = document.createElement('div');
revertToRevision.setAttribute( 'id', 'tw-revert-to-orevision' );
revertToRevision.style.fontWeight = 'bold';
 
var revertToRevisionLink = buildLink('SaddleBrown', 'restore this version');
revertToRevisionLink.href = "#";
$(revertToRevisionLink).click(function(){
Twinkle.fluff.revertToRevision(mw.config.get('wgRevisionId').toString());
});
revertToRevision.appendChild(revertToRevisionLink);
var otitle = document.getElementById('mw-revision-info').parentNode;
otitle.insertBefore( revertToRevision, otitle.firstChild );
}
};
Baris 252 ⟶ 226:
 
Twinkle.fluff.userIpLink = function( user ) {
return (Morebitsmw.util.isIPAddress(user) ? "[[Special:Contributions/" : "[[:User:" ) + user + "|" + user + "]]";
};
 
Baris 268 ⟶ 242:
 
if (revertToRevID !== self.params.rev) {
self.statitem.error( 'The retrieved revision does not match the requested revision. Stopping Abortingrevert.' );
return;
}
Baris 289 ⟶ 263:
'basetimestamp': touched,
'starttimestamp': starttimestamp,
'watchlist': Twinkle.getPref('watchRevertedPages').indexOf( self.params.type'torev' ) !== -1 ? 'watch' : undefined,
'minor': Twinkle.getPref('markRevertedPagesAsMinor').indexOf( self.params.type'torev' ) !== -1 ? true : undefined
};
 
Baris 314 ⟶ 288:
 
if( revs.length < 1 ) {
self.statelem.error( 'HanyaTidak memiliki satu pun revisi tambahan yang kurang dari satu, sehingga tidak mungkin untuk dikembalikan' );
return;
}
Baris 328 ⟶ 302:
switch( self.params.type ) {
case 'vand':
Morebits.status.info( 'Informasi', [ 'Revisi terakhir yang dibuat oleh ', Morebits.htmlNode( 'strong', self.params.user ) , '. Karena dianggap sebagai vandalisme, kami lanjutkan pengembaliannya.' ]);
break;
case 'agf':
Morebits.status.warn( 'PeringatanWarning', [ 'Revisi terakhir yang dibuat oleh ', Morebits.htmlNode( 'strong', self.params.user ) , '. Karena dianggap sebagai niat baik, pengembalian ini dihentikan, di mana masalah mungkin dapat diatasi.' ]);
return;
default:
Morebits.status.warn( 'PemberitahuanPerhatian', [ 'Revisi terakhir yang dibuat oleh ', Morebits.htmlNode( 'strong', self.params.user ) , ', namun kami akan menghentikan proses pengembalian.' ] );
return;
}
Baris 341 ⟶ 315:
Twinkle.fluff.whiteList.indexOf( top.getAttribute( 'user' ) ) !== -1 && revs.length > 1 &&
revs[1].getAttribute( 'pageId' ) === self.params.revid) {
Morebits.status.info( 'Informasi', [ 'Revisi terakhir yang dibuat oleh ', Morebits.htmlNode( 'strong', lastuser ), ', bot yang dipercayatepercaya, dan revisi sebelumnya dibuat oleh pengguna vandalisme, pengembalian dilanjutkan.' ] );
index = 2;
} else {
Morebits.status.error( 'Galat', [ 'Revisi terakhir yang dibuat oleh ', Morebits.htmlNode( 'strong', lastuser ), ', sehingga mungkin telah dikembalikan, akan menghentikan pengembalian ini.'] );
return;
}
Baris 399 ⟶ 373:
if (self.params.type !== 'vand' && count > 1) {
if ( !confirm( self.params.user + ' telah melakukan ' + count + ' suntingan berturut-turut. Apakah Anda yakin mau membatalkan semuanya?') ) {
Morebits.status.info( 'Notice', 'Menghentikan pembatalan karena masukan dari pengguna.' );
return;
}
Baris 428 ⟶ 402:
case 'vand':
 
summary = "Membatalkan " + self.params.count + "(self.params.count > 1 ? ' suntingan' : ' suntingan') + " oleh [[Special:Contributions/" +
self.params.user + "|" + self.params.user + "]] ([[User talk:" + self.params.user + "|bicara]]) ke revisi terakhir oleh " +
self.params.gooduser + "." + Twinkle.getPref('summaryAd');
break;
 
Baris 523 ⟶ 497:
},
complete: function (apiobj) {
// TODO Most of this is copy-pasted from Morebits.wiki.page#fnSaveSuccess. Unify it
var $edit = $(apiobj.getXML()).find('edit');
var xml = apiobj.getXML();
var $edit = $(xml).find('edit');
var blacklist = $edit.attr('spamblacklist');
if (blacklist) {
Baris 530 ⟶ 506:
code.appendChild(document.createTextNode(blacklist));
apiobj.statelem.error(['Tidak dapat membatalkan karena URL ', code, ' berada dalam daftar hitam spam.']);
} else if ( $(xml).find('captcha').length > 0 ) { // TODO: Translate!
apiobj.statelem.error("Could not rollback, because the wiki server wanted you to fill out a CAPTCHA.");
} else if ( $edit.attr('code') === 'abusefilter-disallowed' ) { // TODO: Translate!
apiobj.statelem.error('The edit was disallowed by the edit filter rule "' + $edit.attr('info').substring(17) + '".');
} else if ( $edit.attr('info') && $edit.attr('info').indexOf('Hit AbuseFilter:') === 0 ) { // TODO: Translate!
var div = document.createElement('div');
div.className = "toccolours";
div.style.fontWeight = "normal";
div.style.color = "black";
div.innerHTML = $edit.attr('warning');
apiobj.statelem.error([ 'The following warning was returned by the edit filter: ', div, 'If you wish to proceed with the rollback, please reload this page (F5 or Ctrl+R) and carry it out again. This warning will not appear a second time.' ]);
} else if ($edit.attr('nochange') === '') {
apiobj.statelem.warn("Revisi yang dibatalkan sama dengan revisi terakhir: Tidak ada yang dapat dilakukan.");
} else {
apiobj.statelem.info("done");
Baris 555 ⟶ 542:
var result = builtInString;
 
// append user's custom reason with requisite punctuation
if (userString) {
result += ': ' + Morebits.string.toUpperCaseFirstChar(userString);
if (userString.search(/[.?!;]$/) === -1) {
result += '.';
}
} else {
result += '.';
}
result += Twinkle.getPref('summaryAd');
Baris 575 ⟶ 557:
var talkLink = " ([[User talk:" + userName + "|bicara]])";
if (resultLen + contribsLen + unescape(encodeURIComponent(talkLink)).length <= 255) {
result = resultMorebits.replacestring.safeReplace(result, "$USER", contribsLink + talkLink);
} else {
result = resultMorebits.replacestring.safeReplace(result, "$USER", contribsLink);
}
} else {
result = resultMorebits.replacestring.safeReplace(result, "$USER", userName);
}
 
Baris 601 ⟶ 583:
if ( Morebits.queryString.exists( 'twinklerevert' ) ) {
Twinkle.fluff.auto();
} else if( mw.config.get('wgNamespaceNumber') === -1 && mw.config.get('wgCanonicalSpecialPageName') === "Contributions" ) {
} else {
Twinkle.fluff.normalcontributions();
} else if( mw.config.get('wgDiffOldId') || mw.config.get('wgDiffNewId') ) { // wgDiffOldId included for clarity in if else loop [[phab:T214985]]
mw.hook( 'wikipage.diff' ).add( function () { // Reload alongside the revision slider
Twinkle.fluff.diff();
} );
} else if( mw.config.get('wgCurRevisionId') !== mw.config.get('wgRevisionId') ) {
Twinkle.fluff.oldid();
}
}