jenkins-bot has submitted this change and it was merged. Change subject: Use AJAX to delete pages ......................................................................
Use AJAX to delete pages Instead of actually submitting the form and refreshing the page (losing all the results in the process), send requests to the MW core API to delete selected pages. Change-Id: Ib4e37e57c772fe92899209e03dbd8e28330d67ca --- M SmiteSpam.php M static/js/ext.smitespam.retriever.js 2 files changed, 62 insertions(+), 25 deletions(-) Approvals: jan: Looks good to me, but someone else must approve Polybuildr: Looks good to me, approved Yaron Koren: Looks good to me, but someone else must approve jenkins-bot: Verified diff --git a/SmiteSpam.php b/SmiteSpam.php index e8907fc..a4ada81 100644 --- a/SmiteSpam.php +++ b/SmiteSpam.php @@ -42,6 +42,9 @@ 'table_pager_prev', 'table_pager_next', 'smitespam-loading', + 'smitespam-delete-page-success-msg', + 'smitespam-delete-page-failure-msg', + 'smitespam-deleted-reason', ), ); diff --git a/static/js/ext.smitespam.retriever.js b/static/js/ext.smitespam.retriever.js index b30505b..880bf00 100644 --- a/static/js/ext.smitespam.retriever.js +++ b/static/js/ext.smitespam.retriever.js @@ -36,6 +36,7 @@ var displayPageSize = mw.config.get( 'displayPageSize' ); var results = []; results.push( [] ); + var editToken, deleteIndex = 0; var resultPageToDisplay = new Counter(); resultPageToDisplay.notify = function () { @@ -81,7 +82,9 @@ var pagination = { data: { - pagesToDelete: [] + pagesToDelete: [], + pagesDeleted: [], + failedToDeletePages: [] }, handlersAttached: false, attachHandlers: function () { @@ -142,42 +145,73 @@ } for ( var i = 0; i < displayPageSize; ++i ) { var page = results[resultPageToDisplay.getValue()][i]; - var $row = $( '<tr>' ); + var $row = $( '<tr>' ).attr( 'id', 'result-row-page-' + page.id ); $( '<td></td>' ).html( page.link ).appendTo( $row ); $( '<td></td>' ).text( page['spam-probability-text'] ).appendTo( $row ); $( '<td></td>' ).html( page['creator-link'] ).appendTo( $row ); $( '<td></td>' ).text( page.preview ).appendTo( $row ); - - var $checkbox = $( '<input>', { - type: 'checkbox', - value: page.id - } ) - .on( 'change', checkboxChanged ); - if ( $.inArray( $checkbox.val(), pagination.data.pagesToDelete ) !== -1 ) { - $checkbox.attr( 'checked', 'checked' ); + if ( $.inArray( page.id.toString(), pagination.data.pagesDeleted ) !== -1 ) { + $( '<td></td>' ).text( mw.msg( 'smitespam-delete-page-success-msg' ) ).appendTo( $row ); + } else if ( $.inArray( page.id.toString(), pagination.data.failedToDeletePages ) !== -1 ) { + $( '<td></td>' ).text( mw.msg( 'smitespam-delete-page-failure-msg' ) ).appendTo( $row ); + } else { + var $checkbox = $( '<input>', { + type: 'checkbox', + value: page.id + } ) + .on( 'change', checkboxChanged ); + if ( $.inArray( $checkbox.val(), pagination.data.pagesToDelete ) !== -1 ) { + $checkbox.attr( 'checked', 'checked' ); + } + $( '<td></td>' ).append( $checkbox ).appendTo( $row ); } - $( '<td></td>' ).append( $checkbox ).appendTo( $row ); $( '#smitespam-page-list' ).append( $row ); } } }; $( '#smitespam-delete-pages' ).on( 'submit', function () { - var toDelete = pagination.data.pagesToDelete; - $( '#smitespam-page-list' ).empty(); - var $this = $( this ); - for ( var i = 0; i < toDelete.length; ++i ) { - $( '<input>', { - type: 'checkbox', - name: 'delete[]', - value: toDelete[i], - checked: 'checked' - } ).hide().appendTo( $this ); - } + deletePage(); + return false; } ); - $( '<p id="results-loading"></p>' ).text( 'Loading...' ) - .appendTo( '#pagination' ); - resultPageToDisplay.notify(); + $.getJSON( mw.config.get( 'wgScriptPath' ) + '/api.php?action=query&meta=tokens&format=json', + function ( data ) { + editToken = data.query.tokens.csrftoken; + $( '<p id="results-loading"></p>' ).text( 'Loading...' ) + .appendTo( '#pagination' ); + resultPageToDisplay.notify(); + } + ); + function processDeletedPage( data ) { + var pageID = pagination.data.pagesToDelete[deleteIndex]; + var row = $( '#result-row-page-' + pageID ); + if ( 'delete' in data ) { + pagination.data.pagesDeleted.push( pageID ); + if ( row.length ) { + row.find( 'td' ).eq( 4 ).text( mw.msg( 'smitespam-delete-page-success-msg' ) ); + } + } else if ( 'error' in data ) { + pagination.data.failedToDeletePages.push( pageID ); + if ( row.length ) { + row.find( 'td' ).eq( 4 ).text( mw.msg( 'smitespam-delete-page-failure-msg' ) ); + } + } + deleteIndex++; + if ( deleteIndex < pagination.data.pagesToDelete.length ) { + deletePage(); + } + } + + function deletePage() { + $.post( mw.config.get( 'wgScriptPath' ) + '/api.php?action=delete&format=json', + { + token: editToken, + pageid: pagination.data.pagesToDelete[deleteIndex], + reason: mw.msg( 'smitespam-deleted-reason' ) + }, + 'json' + ).done( processDeletedPage ); + } } )( jQuery ); -- To view, visit https://gerrit.wikimedia.org/r/220742 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: Ib4e37e57c772fe92899209e03dbd8e28330d67ca Gerrit-PatchSet: 2 Gerrit-Project: mediawiki/extensions/SmiteSpam Gerrit-Branch: master Gerrit-Owner: Polybuildr <v.a.ghai...@gmail.com> Gerrit-Reviewer: Polybuildr <v.a.ghai...@gmail.com> Gerrit-Reviewer: Yaron Koren <yaro...@gmail.com> Gerrit-Reviewer: jan <j...@jans-seite.de> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits