Revert "AJAXify watchlist editor"
authorKrinkle <ttijhof@wikimedia.org>
Wed, 1 Aug 2012 03:19:12 +0000 (03:19 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Wed, 1 Aug 2012 03:19:12 +0000 (03:19 +0000)
Doesn't properly work on Special:EditWatchlist, some of the titles being unwatched are not fading out and staying behind.

There's also a small code quality issue unaddressed. Please re-submit for further review.

This reverts commit b46ec8fde5dfd3e80fa3861a01f1aac6f5a7b5ba

includes/api/ApiWatch.php
includes/specials/SpecialEditWatchlist.php
languages/messages/MessagesEn.php
languages/messages/MessagesQqq.php
maintenance/language/messages.inc
resources/Resources.php
resources/mediawiki.special/mediawiki.special.editWatchlist.js [deleted file]

index a897cfd..c923c6d 100644 (file)
@@ -40,27 +40,14 @@ class ApiWatch extends ApiBase {
                if ( !$user->isLoggedIn() ) {
                        $this->dieUsage( 'You must be logged-in to have a watchlist', 'notloggedin' );
                }
+
                $params = $this->extractRequestParams();
-               // titles can handle basic request of 1 title,
-               // but title is still supported for backward compatability
-               if ( isset( $params['title'] ) ) {
-                       $title = Title::newFromText( $params['title'] );
-                       if ( !$title || $title->getNamespace() < 0 ) {
-                               $this->dieUsageMsg( array( 'invalidtitle', $params['title'] ) );
-                       }
-                       $res = $this->watchTitle( $title, $user, $params);
-               } else {
-                       $pageSet = new ApiPageSet( $this );
-                       $pageSet->execute();
-                       $res = array();
-                       foreach ( $pageSet->getTitles() as $title ) {
-                               $r = $this->watchTitle( $title, $user, $params);
-                               $res[] = $r;
-                       }
+               $title = Title::newFromText( $params['title'] );
+
+               if ( !$title || $title->getNamespace() < 0 ) {
+                       $this->dieUsageMsg( array( 'invalidtitle', $params['title'] ) );
                }
-               $this->getResult()->addValue( null, $this->getModuleName(), $res );
-       }
-       private function watchTitle( $title, $user, $params ) {
+
                $res = array( 'title' => $title->getPrefixedText() );
 
                if ( $params['unwatch'] ) {
@@ -75,7 +62,7 @@ class ApiWatch extends ApiBase {
                if ( !$success ) {
                        $this->dieUsageMsg( 'hookaborted' );
                }
-               return $res;
+               $this->getResult()->addValue( null, $this->getModuleName(), $res );
        }
 
        public function mustBePosted() {
@@ -98,10 +85,7 @@ class ApiWatch extends ApiBase {
                return array(
                        'title' => array(
                                ApiBase::PARAM_TYPE => 'string',
-                       ),
-                       'titles' => array(
-                               ApiBase::PARAM_TYPE => 'string',
-                               ApiBase::PARAM_ISMULTI => true
+                               ApiBase::PARAM_REQUIRED => true
                        ),
                        'unwatch' => false,
                        'token' => null,
index 4c58e09..67f6d68 100644 (file)
@@ -43,8 +43,6 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
        const EDIT_RAW = 2;
        const EDIT_NORMAL = 3;
 
-       protected $offset = 0;
-       protected $limit = 0;
        protected $successMessage;
 
        protected $toc;
@@ -94,7 +92,6 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
                        }
                }
                $mode = self::getMode( $this->getRequest(), $mode );
-               list( $this->limit, $this->offset ) = $this->getRequest()->getLimitOffset( 50, 'wllimit' );
 
                switch( $mode ) {
                        case self::EDIT_CLEAR:
@@ -113,7 +110,6 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
                        case self::EDIT_NORMAL:
                        default:
                                $out->setPageTitle( $this->msg( 'watchlistedit-normal-title' ) );
-                               $out->addModules( 'mediawiki.special.editWatchlist' );
                                $form = $this->getNormalForm();
                                if( $form->show() ){
                                        $out->addHTML( $this->successMessage );
@@ -268,42 +264,29 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
        }
 
        /**
-       * select from DB  watchlist items watched by the current user
-       * @return q query result of watchlist items watched by the current user
-       */
-       private function selectWatchListInfo( ) {
-               $options = array(
-                       'ORDER BY' => array( 'wl_namespace', 'wl_title' ),
-                       'LIMIT' => intval( $this->limit ),
-                       'OFFSET' => intval( $this->offset )
-               );
+        * Get a list of titles on a user's watchlist, excluding talk pages,
+        * and return as a two-dimensional array with namespace and title.
+        *
+        * @return array
+        */
+       private function getWatchlistInfo() {
+               $titles = array();
                $dbr = wfGetDB( DB_MASTER );
-               //query only non talk namespaces.
-               $nonTalkNamespaces = MWNamespace::getContentNamespaces();
+
                $res = $dbr->select(
                        array( 'watchlist' ),
                        array( 'wl_namespace',  'wl_title' ),
-                       array( 'wl_user' => $this->getUser()->getId(), 'wl_namespace' => $nonTalkNamespaces  ),
+                       array( 'wl_user' => $this->getUser()->getId() ),
                        __METHOD__,
-                       $options
+                       array( 'ORDER BY' => array( 'wl_namespace', 'wl_title' ) )
                );
 
-               return $res;
-       }
-
-       /**
-        * Get a list of titles on a user's watchlist, excluding talk pages,
-        * and return as a two-dimensional array with namespace and title.
-        *
-        * @param $watchedItems rows of watched items
-        * @return array
-        */
-       private function getWatchlistInfo( $watchedItems ) {
-               $titles = array();
                $lb = new LinkBatch();
-               foreach ( $watchedItems as $row ) {
+               foreach ( $res as $row ) {
                        $lb->add( $row->wl_namespace, $row->wl_title );
-                       $titles[$row->wl_namespace][$row->wl_title] = 1;
+                       if ( !MWNamespace::isTalk( $row->wl_namespace ) ) {
+                               $titles[$row->wl_namespace][$row->wl_title] = 1;
+                       }
                }
 
                $lb->execute();
@@ -478,9 +461,8 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
 
                $fields = array();
                $count = 0;
-               $watchedItems = $this->selectWatchListInfo();
-               $rowNum = $watchedItems->numRows();
-               foreach ( $this->getWatchlistInfo( $watchedItems ) as $namespace => $pages ) {
+
+               foreach( $this->getWatchlistInfo() as $namespace => $pages ){
                        if ( $namespace >= 0 ) {
                                $fields['TitlesNs'.$namespace] = array(
                                        'class' => 'EditWatchlistCheckboxSeriesField',
@@ -489,7 +471,7 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
                                );
                        }
 
-                       foreach ( array_keys( $pages ) as $dbkey ) {
+                       foreach( array_keys( $pages ) as $dbkey ){
                                $title = Title::makeTitleSafe( $namespace, $dbkey );
                                if ( $this->checkTitle( $title, $namespace, $dbkey ) ) {
                                        $text = $this->buildRemoveLine( $title );
@@ -522,13 +504,10 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
                $form = new EditWatchlistNormalHTMLForm( $fields, $this->getContext() );
                $form->setTitle( $this->getTitle() );
                $form->setSubmitTextMsg( 'watchlistedit-normal-submit' );
-               $form->setSubmitID( 'watchlistedit-submit' );
                # Used message keys: 'accesskey-watchlistedit-normal-submit', 'tooltip-watchlistedit-normal-submit'
                $form->setSubmitTooltip('watchlistedit-normal-submit');
                $form->setWrapperLegendMsg( 'watchlistedit-normal-legend' );
-               $paging = '<p>' . $this->getLanguage()->viewPrevNext( $this->getTitle(), $this->offset,
-                               $this->limit,  array(), ( $rowNum < $this->limit ) ) . '</p>';
-               $form->addHeaderText( $this->msg( 'watchlistedit-normal-explain' )->parse() . $paging );
+               $form->addHeaderText( $this->msg( 'watchlistedit-normal-explain' )->parse() );
                $form->setSubmitCallback( array( $this, 'submitNormal' ) );
                return $form;
        }
@@ -563,7 +542,7 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
 
                wfRunHooks( 'WatchlistEditorBuildRemoveLine', array( &$tools, $title, $title->isRedirect(), $this->getSkin() ) );
 
-               return '<span class="watchlist-item">' . $link . '</span>' . " (" . $this->getLanguage()->pipeList( $tools ) . ")";
+               return $link . " (" . $this->getLanguage()->pipeList( $tools ) . ")";
        }
 
        /**
index 1951853..86954ba 100644 (file)
@@ -4527,7 +4527,6 @@ Try normal preview.',
 To remove a title, check the box next to it, and click "{{int:Watchlistedit-normal-submit}}".
 You can also [[Special:EditWatchlist/raw|edit the raw list]].',
 'watchlistedit-normal-submit'  => 'Remove titles',
-'watchlistedit-normal-submitting'  => 'Removing titles...',
 'watchlistedit-normal-done'    => '{{PLURAL:$1|1 title was|$1 titles were}} removed from your watchlist:',
 'watchlistedit-raw-title'      => 'Edit raw watchlist',
 'watchlistedit-raw-legend'     => 'Edit raw watchlist',
index f9a68b1..e2d7903 100644 (file)
@@ -4300,7 +4300,6 @@ Bitrate (of a file, typically) in yottabits (1 yottabits = 1000×1000×1000×100
 Hint: the text "Remove Titles" is in {{msg-mw|watchlistedit-normal-submit}}',
 'watchlistedit-normal-submit' => 'Text of submit button on [[Special:Watchlist/edit]].',
 'watchlistedit-normal-done' => 'Message on [[Special:EditWatchlist]] after pages are removed from the watchlist.',
-'watchlistedit-normal-submitting' => 'Text of submit button on [[Special:Watchlist/edit]] when submiting an AJAX request',
 'watchlistedit-raw-title' => 'Title of [[Special:Watchlist/raw|Special page]].
 
 {{Identical|Edit raw watchlist}}',
index 8d96b3d..30c3d9a 100644 (file)
@@ -3399,7 +3399,6 @@ $wgMessageStructure = array(
                'watchlistedit-normal-legend',
                'watchlistedit-normal-explain',
                'watchlistedit-normal-submit',
-               'watchlistedit-normal-submiting',
                'watchlistedit-normal-done',
                'watchlistedit-raw-title',
                'watchlistedit-raw-legend',
index b4f4617..26d73c5 100644 (file)
@@ -799,14 +799,6 @@ return array(
                'styles' => 'resources/mediawiki.special/mediawiki.special.changeslist.css',
                'dependencies' => array( 'jquery.makeCollapsible' ),
        ),
-       'mediawiki.special.editWatchlist' => array(
-               'scripts' => 'resources/mediawiki.special/mediawiki.special.editWatchlist.js',
-               'dependencies' => array(
-                       'mediawiki.api',
-                       'user.tokens'
-               ),
-               'messages' => array( 'watchlistedit-normal-submit', 'watchlistedit-normal-submiting' )
-       ),
        'mediawiki.special.movePage' => array(
                'scripts' => 'resources/mediawiki.special/mediawiki.special.movePage.js',
                'dependencies' => 'jquery.byteLimit',
diff --git a/resources/mediawiki.special/mediawiki.special.editWatchlist.js b/resources/mediawiki.special/mediawiki.special.editWatchlist.js
deleted file mode 100644 (file)
index 66329cf..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * JavaScript for Special:EditWatchlist
- */
-
-/**
- * Replace the submit button action to operate with ajax.
- */
-( function ( mw, $ ) {
-       $( '#watchlistedit-submit' ).parents( 'form:first' ).on( 'submit.ajax', function ( e ) {
-               var titlesToRemove, params, api;
-               titlesToRemove = $.map( $( '.mw-htmlform-flatlist-item input:checked' ), function ( el ) {
-                       return $( el ).val();
-               } ).join( '|' );
-               params = {
-                       action: 'watch',
-                       titles: titlesToRemove,
-                       token: mw.user.tokens.get( 'watchToken' ),
-                       unwatch: '1'
-               };
-               api = new mw.Api();
-               api.ajax( params, { type: 'POST' } ).done( function ( data ) {
-                               $.each( data.watch, function ( e ) {
-                                       var removedItem = this.title;
-                                       var item = $( '.watchlist-item a' ).filter( function ( ) {
-                                                               return this.title === removedItem;
-                                                       } ).parents( '.mw-htmlform-flatlist-item' ).fadeOut();
-                               } );
-                               $( '#watchlistedit-submit' ).prop( {
-                                       disabled: false,
-                                       value: mw.msg( 'watchlistedit-normal-submit' )
-                               } );
-                       } ).fail( function () {
-                               //some error occurred.
-                               //re-enable the submit and try to send normal submit
-                               $( '#watchlistedit-submit' ).prop( {
-                                       disabled: false,
-                                       value: mw.msg( 'watchlistedit-normal-submit' )
-                               } ).parents( 'form:first' )
-                                  .off( 'submit.ajax' ).submit();
-                       } );
-               $( '#watchlistedit-submit' ).prop( { disabled: true, value:  mw.msg( 'watchlistedit-normal-submitting' )  } );
-               e.preventDefault();
-       } );
-} )( mediaWiki, jQuery );