mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/RelatedArticles
synced 2024-12-18 19:10:54 +00:00
Make RelatedArticles soft-depend on Cards
RelatedArticles tries to load the 'ext.cards' module and if it succeeds it continues with showing the related articles on the page. Dependency: I6661527175eb889cec4193b18fa18207f332b4fc Bug: T117108 Change-Id: I33936a3e9cd5d1f0296e48fd1c2bba77fff4e466
This commit is contained in:
parent
f24b8aa0d3
commit
8cf9b60ab5
|
@ -63,9 +63,9 @@
|
||||||
},
|
},
|
||||||
"manifest_version": 1,
|
"manifest_version": 1,
|
||||||
"ResourceModules": {
|
"ResourceModules": {
|
||||||
"ext.relatedArticles.readMore": {
|
"ext.relatedArticles.readMore.gateway": {
|
||||||
"scripts": [
|
"scripts": [
|
||||||
"resources/ext.relatedArticles.readMore/RelatedPagesGateway.js"
|
"resources/ext.relatedArticles.readMore.gateway/RelatedPagesGateway.js"
|
||||||
],
|
],
|
||||||
"dependencies": [
|
"dependencies": [
|
||||||
"oojs"
|
"oojs"
|
||||||
|
@ -81,7 +81,7 @@
|
||||||
],
|
],
|
||||||
"dependencies": [
|
"dependencies": [
|
||||||
"mediawiki.api",
|
"mediawiki.api",
|
||||||
"ext.relatedArticles.readMore"
|
"ext.relatedArticles.readMore.gateway"
|
||||||
],
|
],
|
||||||
"targets": [
|
"targets": [
|
||||||
"mobile",
|
"mobile",
|
||||||
|
|
|
@ -23,12 +23,12 @@ class ReadMoreHooks {
|
||||||
'targets' => array( 'desktop', 'mobile' ),
|
'targets' => array( 'desktop', 'mobile' ),
|
||||||
);
|
);
|
||||||
|
|
||||||
$modules['qunit']['ext.relatedArticles.readMore.tests'] = $boilerplate + array(
|
$modules['qunit']['ext.relatedArticles.readMore.gateway.tests'] = $boilerplate + array(
|
||||||
'scripts' => array(
|
'scripts' => array(
|
||||||
'ext.relatedArticles.readMore/test_RelatedPagesGateway.js',
|
'ext.relatedArticles.readMore.gateway/test_RelatedPagesGateway.js',
|
||||||
),
|
),
|
||||||
'dependencies' => array(
|
'dependencies' => array(
|
||||||
'ext.relatedArticles.readMore',
|
'ext.relatedArticles.readMore.gateway',
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
return true;
|
return true;
|
||||||
|
@ -65,9 +65,9 @@ class ReadMoreHooks {
|
||||||
* <ol>
|
* <ol>
|
||||||
* <li><code>$wgRelatedArticlesShowReadMore</code> is truthy</li>
|
* <li><code>$wgRelatedArticlesShowReadMore</code> is truthy</li>
|
||||||
* <li>
|
* <li>
|
||||||
* The output is being rendered with the
|
* The output is being rendered with any skin except the
|
||||||
* <code>SkinMinervaBeta<code> skin, i.e. the user is currently
|
* <code>SkinMinerva<code> skin, i.e. the user is currently
|
||||||
* viewing the page on the mobile set in beta mode
|
* not viewing the page on the mobile set in stable mode
|
||||||
* </li>
|
* </li>
|
||||||
* <li>The page is in mainspace</li>
|
* <li>The page is in mainspace</li>
|
||||||
* </ol>
|
* </ol>
|
||||||
|
@ -84,7 +84,7 @@ class ReadMoreHooks {
|
||||||
|
|
||||||
if (
|
if (
|
||||||
$showReadMore &&
|
$showReadMore &&
|
||||||
get_class( $skin ) === 'SkinMinervaBeta' &&
|
get_class( $skin ) !== 'SkinMinerva' &&
|
||||||
$title->inNamespace( NS_MAIN ) &&
|
$title->inNamespace( NS_MAIN ) &&
|
||||||
!$title->isMainPage()
|
!$title->isMainPage()
|
||||||
) {
|
) {
|
||||||
|
@ -131,7 +131,7 @@ class ReadMoreHooks {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Register the "ext.relatedArticles.readMore.minerva" module.
|
* Register the "ext.relatedArticles.readMore" module.
|
||||||
* Optionally update the dependencies and scripts if EventLogging is installed.
|
* Optionally update the dependencies and scripts if EventLogging is installed.
|
||||||
*
|
*
|
||||||
* @see https://www.mediawiki.org/wiki/Manual:Hooks/ResourceLoaderRegisterModules
|
* @see https://www.mediawiki.org/wiki/Manual:Hooks/ResourceLoaderRegisterModules
|
||||||
|
@ -141,24 +141,25 @@ class ReadMoreHooks {
|
||||||
*/
|
*/
|
||||||
public static function onResourceLoaderRegisterModules( ResourceLoader &$resourceLoader ) {
|
public static function onResourceLoaderRegisterModules( ResourceLoader &$resourceLoader ) {
|
||||||
$dependencies = array(
|
$dependencies = array(
|
||||||
"mediawiki.user"
|
"mediawiki.user",
|
||||||
|
"mediawiki.util"
|
||||||
);
|
);
|
||||||
$scripts = array(
|
$scripts = array(
|
||||||
"resources/ext.relatedArticles.readMore.minerva/index.js"
|
"resources/ext.relatedArticles.readMore/index.js"
|
||||||
);
|
);
|
||||||
|
|
||||||
if ( class_exists( 'EventLogging' ) ) {
|
if ( class_exists( 'EventLogging' ) ) {
|
||||||
$dependencies[] = "ext.eventLogging.Schema";
|
$dependencies[] = "ext.eventLogging.Schema";
|
||||||
$scripts[] = "resources/ext.relatedArticles.readMore.minerva/eventLogging.js";
|
$scripts[] = "resources/ext.relatedArticles.readMore/eventLogging.js";
|
||||||
}
|
}
|
||||||
|
|
||||||
$resourceLoader->register(
|
$resourceLoader->register(
|
||||||
"ext.relatedArticles.readMore.minerva",
|
"ext.relatedArticles.readMore",
|
||||||
array(
|
array(
|
||||||
"dependencies" => $dependencies,
|
"dependencies" => $dependencies,
|
||||||
"scripts" => $scripts,
|
"scripts" => $scripts,
|
||||||
"styles" => array(
|
"styles" => array(
|
||||||
"resources/ext.relatedArticles.readMore.minerva/readMore.less"
|
"resources/ext.relatedArticles.readMore/readMore.less"
|
||||||
),
|
),
|
||||||
"messages" => array(
|
"messages" => array(
|
||||||
"relatedarticles-read-more-heading"
|
"relatedarticles-read-more-heading"
|
||||||
|
|
|
@ -13,14 +13,14 @@
|
||||||
if (
|
if (
|
||||||
config.wgNamespaceNumber === 0 &&
|
config.wgNamespaceNumber === 0 &&
|
||||||
!config.wgIsMainPage &&
|
!config.wgIsMainPage &&
|
||||||
config.skin === 'minerva' &&
|
// any skin except minerva stable
|
||||||
config.wgMFMode === 'beta'
|
( config.skin !== 'minerva' || config.wgMFMode === 'beta' )
|
||||||
) {
|
) {
|
||||||
$.when(
|
$.when(
|
||||||
// Note we load dependencies here rather than ResourceLoader
|
// Note we load dependencies here rather than ResourceLoader
|
||||||
// to avoid PHP exceptions when MobileFrontend not installed
|
// to avoid PHP exceptions when Cards not installed
|
||||||
// which should never happen given the if statement.
|
// which should never happen given the if statement.
|
||||||
mw.loader.using( [ 'mobile.pagelist.scripts', 'ext.relatedArticles.readMore.minerva' ] ),
|
mw.loader.using( [ 'ext.cards', 'ext.relatedArticles.readMore' ] ),
|
||||||
relatedPages.getForCurrentPage( LIMIT )
|
relatedPages.getForCurrentPage( LIMIT )
|
||||||
).done( function ( _, pages ) {
|
).done( function ( _, pages ) {
|
||||||
if ( pages.length ) {
|
if ( pages.length ) {
|
||||||
|
|
|
@ -81,8 +81,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
return this.api.get( parameters )
|
return this.api.get( parameters )
|
||||||
.then( getPages )
|
.then( getPages );
|
||||||
.then( processPages );
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -92,30 +91,5 @@
|
||||||
return result && result.query && result.query.pages ? result.query.pages : [];
|
return result && result.query && result.query.pages ? result.query.pages : [];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @ignore
|
|
||||||
*/
|
|
||||||
function processPages( pages ) {
|
|
||||||
return $.map( pages, function ( page ) {
|
|
||||||
var result = {
|
|
||||||
id: page.pageid,
|
|
||||||
isMissing: !page.pageid,
|
|
||||||
title: page.title,
|
|
||||||
thumbnail: page.thumbnail,
|
|
||||||
wikidataDescription: undefined
|
|
||||||
};
|
|
||||||
|
|
||||||
if (
|
|
||||||
page.terms &&
|
|
||||||
page.terms.description &&
|
|
||||||
page.terms.description.length > 0
|
|
||||||
) {
|
|
||||||
result.wikidataDescription = page.terms.description[ 0 ];
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
} );
|
|
||||||
}
|
|
||||||
|
|
||||||
mw.relatedPages.RelatedPagesGateway = RelatedPagesGateway;
|
mw.relatedPages.RelatedPagesGateway = RelatedPagesGateway;
|
||||||
}( jQuery ) );
|
}( jQuery ) );
|
|
@ -1,52 +0,0 @@
|
||||||
( function ( $ ) {
|
|
||||||
|
|
||||||
var MOBILE_WEB_WATCHING_FUNNEL = 'read-more';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Converts the set of pages generated in the init script into a set of
|
|
||||||
* `Page`s, suitable for use with `WatchstarPageList`.
|
|
||||||
*
|
|
||||||
* @param {Object[]} pages
|
|
||||||
* @return {Page[]}
|
|
||||||
*/
|
|
||||||
function convertPages( pages ) {
|
|
||||||
var Page = mw.mobileFrontend.require( 'mobile.startup/Page' );
|
|
||||||
|
|
||||||
return $.map( pages, function ( rawPage ) {
|
|
||||||
return new Page( rawPage );
|
|
||||||
} );
|
|
||||||
}
|
|
||||||
|
|
||||||
mw.trackSubscribe( 'ext.relatedArticles.init', function ( _, pages ) {
|
|
||||||
var WatchstarPageList = mw.mobileFrontend.require( 'mobile.pagelist.scripts/WatchstarPageList' ),
|
|
||||||
pageList,
|
|
||||||
$container = $( '#content' ),
|
|
||||||
$readMore;
|
|
||||||
|
|
||||||
pageList = new WatchstarPageList( {
|
|
||||||
pages: convertPages( pages ),
|
|
||||||
|
|
||||||
// FIXME: When the user clicks any watchstar, a
|
|
||||||
// MobileWebWatching event is logged. Watchstar, which
|
|
||||||
// logs the event, has a sensible default value for
|
|
||||||
// MobileWebWatching.funnel, but it's overwritten
|
|
||||||
// by WatchstarPageList.
|
|
||||||
funnel: MOBILE_WEB_WATCHING_FUNNEL,
|
|
||||||
|
|
||||||
api: new mw.Api()
|
|
||||||
} );
|
|
||||||
|
|
||||||
$readMore = $( '<aside class="ra-read-more post-content"></aside>' );
|
|
||||||
$readMore.append(
|
|
||||||
$( '<h2></h2>' ).text( mw.msg( 'relatedarticles-read-more-heading' ) )
|
|
||||||
);
|
|
||||||
|
|
||||||
$readMore.append( pageList.$el );
|
|
||||||
|
|
||||||
$container.append( $readMore );
|
|
||||||
|
|
||||||
// the ReadMore code is ready
|
|
||||||
mw.track( 'ext.relatedArticles.logReady', { $readMore: $readMore } );
|
|
||||||
} );
|
|
||||||
|
|
||||||
}( jQuery ) );
|
|
58
resources/ext.relatedArticles.readMore/index.js
Normal file
58
resources/ext.relatedArticles.readMore/index.js
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
( function ( $ ) {
|
||||||
|
// Make sure 'ext.cards' is loaded. It may not be because of the race
|
||||||
|
// condition in the bootstrap file.
|
||||||
|
mw.loader.using( 'ext.cards' ).done( function () {
|
||||||
|
var CardModel = mw.cards.CardModel,
|
||||||
|
CardView = mw.cards.CardView,
|
||||||
|
CardListView = mw.cards.CardListView;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generates `mw.cards.CardView`s from pages
|
||||||
|
*
|
||||||
|
* @param {Object[]} pages
|
||||||
|
* @return {mw.cards.CardView[]}
|
||||||
|
*/
|
||||||
|
function getCards( pages ) {
|
||||||
|
return $.map( pages, function ( page ) {
|
||||||
|
var result = {
|
||||||
|
title: page.title,
|
||||||
|
url: mw.util.getUrl( page.title ),
|
||||||
|
hasThumbnail: false
|
||||||
|
};
|
||||||
|
|
||||||
|
if ( page.thumbnail ) {
|
||||||
|
result.hasThumbnail = true;
|
||||||
|
result.thumbnailUrl = page.thumbnail.source;
|
||||||
|
result.isThumbnailPortrait = page.thumbnail.height >= page.thumbnail.width;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
page.terms &&
|
||||||
|
page.terms.description &&
|
||||||
|
page.terms.description.length
|
||||||
|
) {
|
||||||
|
result.extract = page.terms.description[ 0 ];
|
||||||
|
}
|
||||||
|
|
||||||
|
return new CardView( new CardModel( result ) );
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
|
||||||
|
mw.trackSubscribe( 'ext.relatedArticles.init', function ( _, pages ) {
|
||||||
|
var $readMore,
|
||||||
|
cards;
|
||||||
|
|
||||||
|
cards = new CardListView( getCards( pages ) );
|
||||||
|
|
||||||
|
$readMore = $( '<aside class="ra-read-more post-content"></aside>' )
|
||||||
|
.append( $( '<h2></h2>' ).text( mw.msg( 'relatedarticles-read-more-heading' ) ) )
|
||||||
|
.append( cards.$el );
|
||||||
|
|
||||||
|
$( '#content' ).append( $readMore );
|
||||||
|
|
||||||
|
// the ReadMore code is ready
|
||||||
|
mw.track( 'ext.relatedArticles.logReady', { $readMore: $readMore } );
|
||||||
|
} );
|
||||||
|
} );
|
||||||
|
|
||||||
|
}( jQuery ) );
|
|
@ -17,9 +17,3 @@
|
||||||
.ra-read-more .page-list {
|
.ra-read-more .page-list {
|
||||||
border-top: 1px solid @colorGray14;
|
border-top: 1px solid @colorGray14;
|
||||||
}
|
}
|
||||||
|
|
||||||
// See MobileFrontend/resources/mobile.pagelist.styles/pagelist.less for
|
|
||||||
// example HTML.
|
|
||||||
.ra-read-more .page-summary h3 {
|
|
||||||
color: black;
|
|
||||||
}
|
|
Loading…
Reference in a new issue