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

Reply via email to