jenkins-bot has submitted this change and it was merged. (
https://gerrit.wikimedia.org/r/355636 )
Change subject: Make number of RelatedArticles configurable
......................................................................
Make number of RelatedArticles configurable
Wikivoyage pages have more than 3 related articles as they make use
of the {{#related:}} magic word.
After speaking with Nirzar we should allow this project to show more than 3.
This change allows this while keeping the existing behaviour on other wikis and
will pave the way for removing a bunch of code from this extension.
Additional changes:
* Cleanup skinStyles definitions
* Limit cards to 30% maximum width and give margin top to account for
situations where the number of cards are multiple of 3
** In Minerva hardcode the max-width to pixels.
* Margins are switched from hardcoded 10px to percentage based. Yes
this changes the right margin slightly but is more maintable and visually
the same.
Bug: T164765
Change-Id: I41119de3228c2df799f740d4bd00082101c21b97
---
M extension.json
M includes/FooterHooks.php
M resources/ext.relatedArticles.cards/styles.less
M resources/ext.relatedArticles.readMore.bootstrap/index.js
M resources/ext.relatedArticles.readMore.gateway/RelatedPagesGateway.js
M tests/qunit/ext.relatedArticles.readMore.gateway/test_RelatedPagesGateway.js
6 files changed, 63 insertions(+), 10 deletions(-)
Approvals:
Bmansurov: Looks good to me, approved
jenkins-bot: Verified
diff --git a/extension.json b/extension.json
index fdb7471..02cccf2 100644
--- a/extension.json
+++ b/extension.json
@@ -163,6 +163,8 @@
}
},
"config": {
+ "@RelatedArticlesCardLimit": "Maximum number of articles that
should be shown in RelatedArticles widget. This limit is derived from limits in
TextExtracts and PageImages extensions. Number should be between 1 and 20.",
+ "RelatedArticlesCardLimit": 3,
"RelatedArticlesShowInSidebar": true,
"RelatedArticlesShowInFooter": false,
"RelatedArticlesUseCirrusSearch": false,
diff --git a/includes/FooterHooks.php b/includes/FooterHooks.php
index 61ac275..3eb5b22 100644
--- a/includes/FooterHooks.php
+++ b/includes/FooterHooks.php
@@ -28,6 +28,13 @@
->makeConfig( 'RelatedArticles' );
$vars['wgRelatedArticles'] = $out->getProperty(
'RelatedArticles' );
+ $limit = $config->get( 'RelatedArticlesCardLimit' );
+ $vars['wgRelatedArticlesCardLimit'] = $limit;
+ if ( $limit < 1 || $limit > 20 ) {
+ throw new \RuntimeException(
+ 'The value of wgRelatedArticlesCardLimit is not
valid. It should be between 1 and 20.'
+ );
+ }
$vars['wgRelatedArticlesUseCirrusSearch'] = $config->get(
'RelatedArticlesUseCirrusSearch' );
$vars['wgRelatedArticlesOnlyUseCirrusSearch'] =
$config->get( 'RelatedArticlesOnlyUseCirrusSearch' );
diff --git a/resources/ext.relatedArticles.cards/styles.less
b/resources/ext.relatedArticles.cards/styles.less
index 2a09ea5..6164eeb 100644
--- a/resources/ext.relatedArticles.cards/styles.less
+++ b/resources/ext.relatedArticles.cards/styles.less
@@ -9,16 +9,15 @@
.ext-related-articles-card-list {
.flex-display();
flex-flow: row wrap;
- justify-content: flex-start;
font-size: @baseFontSize;
list-style: none;
overflow: hidden;
position: relative;
+ // flex-item
.ext-related-articles-card {
background-color: #fff;
box-sizing: border-box;
- flex: 1 0 auto;
margin: 0;
height: @thumbWidth;
position: relative;
@@ -130,8 +129,11 @@
border-top: 0;
.ext-related-articles-card {
border: @cardBorder;
- margin-right: 10px;
- width: 30%;
+ @rightMargin: 1%;
+ margin-right: @rightMargin;
+ margin-bottom: 10px;
+ // max space is 100-2/3
+ width: ( 100 - ( 2 * @rightMargin ) ) / 3;
// Individual border-radius when cards side by side
(not stacked)
&,
@@ -146,6 +148,10 @@
& + .ext-related-articles-card {
border: @cardBorder;
}
+ // every 3rd child drop the right margin
+ &:nth-child( 3n+3 ) {
+ margin-right: 0;
+ }
}
}
}
diff --git a/resources/ext.relatedArticles.readMore.bootstrap/index.js
b/resources/ext.relatedArticles.readMore.bootstrap/index.js
index 953a811..a2d73ad 100644
--- a/resources/ext.relatedArticles.readMore.bootstrap/index.js
+++ b/resources/ext.relatedArticles.readMore.bootstrap/index.js
@@ -7,7 +7,7 @@
mw.config.get( 'wgRelatedArticlesUseCirrusSearch' ),
mw.config.get( 'wgRelatedArticlesOnlyUseCirrusSearch' )
),
- LIMIT = 3,
+ LIMIT = mw.config.get( 'wgRelatedArticlesCardLimit' ),
debouncedLoad = $.debounce( 100, function () {
loadRelatedArticles(); // eslint-disable-line
} ),
diff --git
a/resources/ext.relatedArticles.readMore.gateway/RelatedPagesGateway.js
b/resources/ext.relatedArticles.readMore.gateway/RelatedPagesGateway.js
index 2645074..ba49682 100644
--- a/resources/ext.relatedArticles.readMore.gateway/RelatedPagesGateway.js
+++ b/resources/ext.relatedArticles.readMore.gateway/RelatedPagesGateway.js
@@ -59,11 +59,12 @@
* * The Wikidata description, if any
*
* @method
- * @param {number} limit of pages to get
+ * @param {number} limit of pages to get. Should be between 1-20.
* @return {jQuery.Promise}
*/
RelatedPagesGateway.prototype.getForCurrentPage = function ( limit ) {
- var parameters = {
+ var apiLimit,
+ parameters = {
action: 'query',
formatversion: 2,
prop: 'pageimages|pageterms',
@@ -71,7 +72,8 @@
pithumbsize: 160, // FIXME: Revert to 80 once
pithumbmode is implemented
wbptterms: 'description'
},
- relatedPages = ( this.editorCuratedPages ).slice( 0,
limit );
+ // Enforce limit
+ relatedPages = this.editorCuratedPages.slice( 0, limit
);
if ( relatedPages.length ) {
parameters.pilimit = relatedPages.length;
@@ -79,12 +81,13 @@
parameters.titles = relatedPages;
} else if ( this.useCirrusSearch ) {
- parameters.pilimit = limit;
+ apiLimit = limit;
+ parameters.pilimit = apiLimit;
parameters.generator = 'search';
parameters.gsrsearch = 'morelike:' + this.currentPage;
parameters.gsrnamespace = '0';
- parameters.gsrlimit = limit;
+ parameters.gsrlimit = apiLimit;
parameters.gsrqiprofile = 'classic_noboostlinks';
// Currently, if you're logged in, then the API uses
your language by default ard so responses
diff --git
a/tests/qunit/ext.relatedArticles.readMore.gateway/test_RelatedPagesGateway.js
b/tests/qunit/ext.relatedArticles.readMore.gateway/test_RelatedPagesGateway.js
index f4219ee..65eace4 100644
---
a/tests/qunit/ext.relatedArticles.readMore.gateway/test_RelatedPagesGateway.js
+++
b/tests/qunit/ext.relatedArticles.readMore.gateway/test_RelatedPagesGateway.js
@@ -1,5 +1,6 @@
( function ( M, $ ) {
var RelatedPagesGateway = mw.relatedPages.RelatedPagesGateway,
+ lotsaRelatedPages = [ 'A', 'B', 'C', 'D', 'E', 'F' ],
relatedPages = {
query: {
pages: [
@@ -67,6 +68,40 @@
} );
} );
+ QUnit.test( 'When limit is higher than number of cards, no limit is
enforced.', function ( assert ) {
+ var gateway = new RelatedPagesGateway( this.api, 'Foo',
lotsaRelatedPages, true ),
+ // needed to get page images etc..
+ stub = this.sandbox.stub( this.api, 'get' )
+ .returns( $.Deferred().resolve( relatedPages )
);
+
+ return gateway.getForCurrentPage( 20 ).then( function () {
+ assert.strictEqual( stub.args[ 0 ][ 0 ].titles.length,
lotsaRelatedPages.length );
+ } );
+ } );
+
+ QUnit.test( 'When limit is 2, results are restricted.', function (
assert ) {
+ var gateway = new RelatedPagesGateway( this.api, 'Foo',
lotsaRelatedPages, true ),
+ // needed to get page images etc..
+ stub = this.sandbox.stub( this.api, 'get' )
+ .returns( $.Deferred().resolve( relatedPages )
);
+
+ return gateway.getForCurrentPage( 2 ).then( function () {
+ assert.strictEqual( stub.args[ 0 ][ 0 ].titles.length,
2 );
+ } );
+ } );
+
+ QUnit.test( 'What if editor curated pages is undefined?', function (
assert ) {
+ var gateway = new RelatedPagesGateway( this.api, 'Foo',
undefined, true );
+ // needed to get page images etc..
+ this.sandbox.stub( this.api, 'get' )
+ .returns( $.Deferred().resolve( relatedPages ) );
+
+ return gateway.getForCurrentPage( 1 ).then( function ( results
) {
+ assert.ok( $.isArray( results ), 'Results must be an
array' );
+ assert.strictEqual( results.length, 1, 'API is invoked
to source articles.' );
+ } );
+ } );
+
QUnit.test( 'Ignore related pages from editor curated content',
function ( assert ) {
var wgRelatedArticles = [
'Bar',
--
To view, visit https://gerrit.wikimedia.org/r/355636
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I41119de3228c2df799f740d4bd00082101c21b97
Gerrit-PatchSet: 16
Gerrit-Project: mediawiki/extensions/RelatedArticles
Gerrit-Branch: master
Gerrit-Owner: Jdlrobson <[email protected]>
Gerrit-Reviewer: Bmansurov <[email protected]>
Gerrit-Reviewer: Jdlrobson <[email protected]>
Gerrit-Reviewer: Phuedx <[email protected]>
Gerrit-Reviewer: Pmiazga <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits