Optionally disable Read More using extension data

By default, the Read More feature tries to use editor-curated articles
before using the CirrusSearch morelike: feature. Add a configuration
variable that disables the former behaviour but leave the default in
place.

Changes:

* Add the wgReadMoreOnlyUseCirrusSearch configuration variable, which
  defaults to false, and pass it in to
  mw.relatedArticles.RelatedPagesGateway at construction time
* Add the onlyUseCirrusSearch parameter to
  mw.relatedArticles.RelatedPagesGateway, which controls whether to
  ignore the editorCuratedArticles parameter

Bug: T117443
Change-Id: I0dfa67f4a68e8dc17302fef7ebf8d23c0c1d892c
This commit is contained in:
Sam Smith 2015-11-11 15:30:19 +00:00
parent 371998e22e
commit 0fed50e266
5 changed files with 50 additions and 7 deletions

View file

@ -92,6 +92,7 @@
"config": {
"RelatedArticlesShowReadMore": false,
"RelatedArticlesUseCirrusSearch": false,
"RelatedArticlesOnlyUseCirrusSearch": false,
"RelatedArticlesLoggingSamplingRate": 0.01
},
"ConfigRegistry": {

View file

@ -48,7 +48,10 @@ class ReadMoreHooks {
$config = ConfigFactory::getDefaultInstance()->makeConfig( 'RelatedArticles' );
$vars['wgRelatedArticles'] = $out->getProperty( 'RelatedArticles' );
$vars['wgRelatedArticlesUseCirrusSearch'] = $config->get( 'RelatedArticlesUseCirrusSearch' );
$vars['wgRelatedArticlesOnlyUseCirrusSearch'] =
$config->get( 'RelatedArticlesOnlyUseCirrusSearch' );
return true;
}

View file

@ -1,10 +1,13 @@
( function ( $ ) {
var config = mw.config.get( [ 'skin', 'wgNamespaceNumber', 'wgMFMode', 'wgIsMainPage' ] ),
relatedPages = new mw.relatedArticles.RelatedPagesGateway( new mw.Api(),
mw.config.get( 'wgPageName' ), mw.config.get( 'wgRelatedArticles' ),
mw.config.get( 'wgRelatedArticlesUseCirrusSearch' ) ),
relatedPages = new mw.relatedArticles.RelatedPagesGateway(
new mw.Api(),
mw.config.get( 'wgPageName' ),
mw.config.get( 'wgRelatedArticles' ),
mw.config.get( 'wgRelatedArticlesUseCirrusSearch' ),
mw.config.get( 'wgRelatedArticlesOnlyUseCirrusSearch' )
),
LIMIT = 4;
if (

View file

@ -8,13 +8,26 @@
* @param {mw.Api} api
* @param {string} currentPage the page that the editorCuratedArticles relate to
* @param {Array} editorCuratedArticles a list of articles curated by editors for the current page
* @param {boolean} useCirrusSearch whether to hit the API when no editor curated articles are available
* @param {boolean} useCirrusSearch whether to hit the API when no editor-curated articles are available
* @param {boolean} [onlyUseCirrusSearch=false] whether to ignore the list of editor-curated articles
*/
function RelatedPagesGateway( api, currentPage, editorCuratedArticles, useCirrusSearch ) {
function RelatedPagesGateway(
api,
currentPage,
editorCuratedArticles,
useCirrusSearch,
onlyUseCirrusSearch
) {
this.api = api;
this.currentPage = currentPage;
this.editorCuratedArticles = editorCuratedArticles || [];
this.useCirrusSearch = useCirrusSearch;
if ( onlyUseCirrusSearch ) {
editorCuratedArticles = [];
}
this.editorCuratedArticles = editorCuratedArticles || [];
}
OO.initClass( RelatedPagesGateway );

View file

@ -68,4 +68,27 @@
} );
} );
QUnit.test( 'Ignore related pages from editor curated content', 1, function ( assert ) {
var wgRelatedArticles = [
'Bar',
'Baz',
'Qux'
],
gateway = new RelatedPagesGateway( this.api, 'Foo', wgRelatedArticles, true, true ),
spy;
spy = this.sandbox.stub( this.api, 'get' )
.returns( $.Deferred().resolve( relatedPages ) );
gateway.getForCurrentPage( 1 ).then( function () {
var parameters = spy.lastCall.args[ 0 ];
assert.strictEqual(
parameters.generator,
'search',
'it should hit the CirrusSearch API even though wgRelatedArticles is non-empty'
);
} );
} );
}( mw.mobileFrontend, jQuery ) );