mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/RelatedArticles
synced 2024-12-01 19:36:38 +00:00
95ea0b0ef7
Hide the related articles from the sidebar if ReadMore is enabled. Otherwise leave as is because it's used in WikiVoyage. Bug: T117444 Change-Id: I3879ae1e53de301b0d3f5f2c066f8e8de7c1c223
185 lines
5.1 KiB
PHP
185 lines
5.1 KiB
PHP
<?php
|
|
|
|
namespace RelatedArticles;
|
|
|
|
use BetaFeatures;
|
|
use OutputPage;
|
|
use ResourceLoader;
|
|
use Skin;
|
|
use ConfigFactory;
|
|
|
|
class ReadMoreHooks {
|
|
/**
|
|
* Register QUnit tests.
|
|
* @see https://www.mediawiki.org/wiki/Manual:Hooks/ResourceLoaderTestModules
|
|
*
|
|
* @param array $modules
|
|
* @param ResourceLoader $rl
|
|
* @return bool
|
|
*/
|
|
public static function onResourceLoaderTestModules( &$modules, &$rl ) {
|
|
$boilerplate = array(
|
|
'localBasePath' => __DIR__ . '/../tests/qunit/',
|
|
'remoteExtPath' => 'RelatedArticles/tests/qunit',
|
|
'targets' => array( 'desktop', 'mobile' ),
|
|
);
|
|
|
|
$modules['qunit']['ext.relatedArticles.readMore.gateway.tests'] = $boilerplate + array(
|
|
'scripts' => array(
|
|
'ext.relatedArticles.readMore.gateway/test_RelatedPagesGateway.js',
|
|
),
|
|
'dependencies' => array(
|
|
'ext.relatedArticles.readMore.gateway',
|
|
),
|
|
);
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Handler for the <code>MakeGlobalVariablesScript</code> hook.
|
|
*
|
|
* Sets the value of the <code>wgRelatedArticles</code> global variable
|
|
* to the list of related articles in the cached parser output.
|
|
*
|
|
* @param array $vars
|
|
* @param OutputPage $out
|
|
* @return boolean Always <code>true</code>
|
|
*/
|
|
public static function onMakeGlobalVariablesScript( &$vars, OutputPage $out ) {
|
|
$config = ConfigFactory::getDefaultInstance()->makeConfig( 'RelatedArticles' );
|
|
|
|
$vars['wgRelatedArticles'] = $out->getProperty( 'RelatedArticles' );
|
|
|
|
$vars['wgRelatedArticlesUseCirrusSearch'] = $config->get( 'RelatedArticlesUseCirrusSearch' );
|
|
$vars['wgRelatedArticlesOnlyUseCirrusSearch'] =
|
|
$config->get( 'RelatedArticlesOnlyUseCirrusSearch' );
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Handler for the <code>BeforePageDisplay</code> hook.
|
|
*
|
|
* Adds the <code>ext.relatedArticles.readMore.bootstrap</code> module
|
|
* to the output when:
|
|
*
|
|
* <ol>
|
|
* <li><code>$wgRelatedArticlesShowReadMore</code> is truthy</li>
|
|
* <li>On mobile, the output is being rendered with
|
|
* <code>SkinMinervaBeta<code></li>
|
|
* <li>On desktop, the beta feature has been enabled.</li>
|
|
* <li>The page is in mainspace</li>
|
|
* </ol>
|
|
*
|
|
* @param OutputPage $out
|
|
* @param Skin $skin
|
|
* @return boolean Always <code>true</code>
|
|
*/
|
|
public static function onBeforePageDisplay( OutputPage $out, Skin $skin ) {
|
|
$config = ConfigFactory::getDefaultInstance()->makeConfig( 'RelatedArticles' );
|
|
$showReadMore = $config->get( 'RelatedArticlesShowReadMore' );
|
|
|
|
$title = $out->getContext()->getTitle();
|
|
|
|
if (
|
|
$showReadMore &&
|
|
$title->inNamespace( NS_MAIN ) &&
|
|
!$title->isMainPage()
|
|
) {
|
|
if (
|
|
get_class( $skin ) === 'SkinMinervaBeta' ||
|
|
(
|
|
class_exists( 'BetaFeatures' ) &&
|
|
BetaFeatures::isFeatureEnabled( $out->getUser(), 'read-more' )
|
|
)
|
|
) {
|
|
$out->addModules( array( 'ext.relatedArticles.readMore.bootstrap' ) );
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* EventLoggingRegisterSchemas hook handler.
|
|
*
|
|
* Registers our EventLogging schemas so that they can be converted to
|
|
* ResourceLoaderSchemaModules by the EventLogging extension.
|
|
*
|
|
* If the module has already been registered in
|
|
* onResourceLoaderRegisterModules, then it is overwritten.
|
|
*
|
|
* @param array $schemas The schemas currently registered with the EventLogging
|
|
* extension
|
|
* @return bool Always true
|
|
*/
|
|
public static function onEventLoggingRegisterSchemas( &$schemas ) {
|
|
// @see https://meta.wikimedia.org/wiki/Schema:RelatedArticles
|
|
$schemas['RelatedArticles'] = 14496900;
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* ResourceLoaderGetConfigVars hook handler for setting a config variable
|
|
* @see https://www.mediawiki.org/wiki/Manual:Hooks/ResourceLoaderGetConfigVars
|
|
*
|
|
* @param array $vars
|
|
* @return boolean
|
|
*/
|
|
public static function onResourceLoaderGetConfigVars( &$vars ) {
|
|
$config = ConfigFactory::getDefaultInstance()->makeConfig( 'RelatedArticles' );
|
|
$vars['wgRelatedArticlesLoggingSamplingRate'] =
|
|
$config->get( 'RelatedArticlesLoggingSamplingRate' );
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Register the "ext.relatedArticles.readMore" module.
|
|
* Optionally update the dependencies and scripts if EventLogging is installed.
|
|
*
|
|
* @see https://www.mediawiki.org/wiki/Manual:Hooks/ResourceLoaderRegisterModules
|
|
*
|
|
* @param ResourceLoader &$resourceLoader The ResourceLoader object
|
|
* @return boolean
|
|
*/
|
|
public static function onResourceLoaderRegisterModules( ResourceLoader &$resourceLoader ) {
|
|
$dependencies = array(
|
|
"mediawiki.user",
|
|
"mediawiki.util"
|
|
);
|
|
$scripts = array(
|
|
"resources/ext.relatedArticles.readMore/index.js"
|
|
);
|
|
|
|
if ( class_exists( 'EventLogging' ) ) {
|
|
$dependencies[] = "ext.eventLogging.Schema";
|
|
$scripts[] = "resources/ext.relatedArticles.readMore/eventLogging.js";
|
|
}
|
|
|
|
$resourceLoader->register(
|
|
"ext.relatedArticles.readMore",
|
|
array(
|
|
"dependencies" => $dependencies,
|
|
"scripts" => $scripts,
|
|
"styles" => array(
|
|
"resources/ext.relatedArticles.readMore/readMore.less"
|
|
),
|
|
"messages" => array(
|
|
"relatedarticles-read-more-heading"
|
|
),
|
|
"targets" => array(
|
|
"desktop",
|
|
"mobile"
|
|
),
|
|
"localBasePath" => __DIR__ . "/..",
|
|
"remoteExtPath" => "RelatedArticles"
|
|
)
|
|
);
|
|
|
|
return true;
|
|
}
|
|
|
|
}
|