mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/TextExtracts
synced 2024-11-23 15:56:52 +00:00
Converted TextExtracts to new extension registration system
Moved most of TextExtracts.php to the new extension.json and added method for backward compatable implementation of the extension if still called though the php file. Moved unit test hook to Hooks.php and deleted old il8n.php. Bug: T87979 Change-Id: I3d26bd931ad2941268b94474f3e6327282da24ec
This commit is contained in:
parent
13d6592978
commit
80703452ed
|
@ -1,35 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* This is a backwards-compatibility shim, generated by:
|
||||
* https://git.wikimedia.org/blob/mediawiki%2Fcore.git/HEAD/maintenance%2FgenerateJsonI18n.php
|
||||
*
|
||||
* Beginning with MediaWiki 1.23, translation strings are stored in json files,
|
||||
* and the EXTENSION.i18n.php file only exists to provide compatibility with
|
||||
* older releases of MediaWiki. For more information about this migration, see:
|
||||
* https://www.mediawiki.org/wiki/Requests_for_comment/Localisation_format
|
||||
*
|
||||
* This shim maintains compatibility back to MediaWiki 1.17.
|
||||
*/
|
||||
$messages = array();
|
||||
if ( !function_exists( 'wfJsonI18nShim46d28b26aa21add6' ) ) {
|
||||
function wfJsonI18nShim46d28b26aa21add6( $cache, $code, &$cachedData ) {
|
||||
$codeSequence = array_merge( array( $code ), $cachedData['fallbackSequence'] );
|
||||
foreach ( $codeSequence as $csCode ) {
|
||||
$fileName = dirname( __FILE__ ) . "/i18n/$csCode.json";
|
||||
if ( is_readable( $fileName ) ) {
|
||||
$data = FormatJson::decode( file_get_contents( $fileName ), true );
|
||||
foreach ( array_keys( $data ) as $key ) {
|
||||
if ( $key === '' || $key[0] === '@' ) {
|
||||
unset( $data[$key] );
|
||||
}
|
||||
}
|
||||
$cachedData['messages'] = array_merge( $data, $cachedData['messages'] );
|
||||
}
|
||||
|
||||
$cachedData['deps'][] = new FileDependency( $fileName );
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
$GLOBALS['wgHooks']['LocalisationCacheRecache'][] = 'wfJsonI18nShim46d28b26aa21add6';
|
||||
}
|
|
@ -18,71 +18,16 @@
|
|||
* @file
|
||||
*/
|
||||
|
||||
$wgExtensionCredits['other'][] = array(
|
||||
'path' => __FILE__,
|
||||
'name' => 'TextExtracts',
|
||||
'author' => array( 'Max Semenik' ),
|
||||
'descriptionmsg' => 'textextracts-desc',
|
||||
'url' => 'https://www.mediawiki.org/wiki/Extension:TextExtracts',
|
||||
);
|
||||
|
||||
define( 'TEXT_EXTRACTS_INSTALLED', true );
|
||||
|
||||
$dir = __DIR__;
|
||||
$wgMessagesDirs['TextExtracts'] = __DIR__ . '/i18n';
|
||||
$wgExtensionMessagesFiles['TextExtracts'] = "$dir/TextExtracts.i18n.php";
|
||||
|
||||
|
||||
$wgConfigRegistry['textextracts'] = 'GlobalVarConfig::newInstance';
|
||||
$wgAutoloadClasses['TextExtracts\ApiQueryExtracts'] = "$dir/includes/ApiQueryExtracts.php";
|
||||
$wgAutoloadClasses['TextExtracts\ExtractFormatter'] = "$dir/includes/ExtractFormatter.php";
|
||||
$wgAutoloadClasses['TextExtracts\Hooks'] = "$dir/includes/Hooks.php";
|
||||
$wgAPIPropModules['extracts'] = array(
|
||||
'class' => 'TextExtracts\ApiQueryExtracts',
|
||||
'factory' => 'wfNewApiQueryExtracts'
|
||||
);
|
||||
|
||||
/**
|
||||
* @param ApiQuery $query
|
||||
* @param string $action
|
||||
* @return TextExtracts\ApiQueryExtracts
|
||||
*/
|
||||
function wfNewApiQueryExtracts( $query, $action ) {
|
||||
$config = ConfigFactory::getDefaultInstance()->makeConfig( 'textextracts' );
|
||||
return new TextExtracts\ApiQueryExtracts( $query, $action, $config );
|
||||
if ( function_exists( 'wfLoadExtension' ) ) {
|
||||
wfLoadExtension( 'TextExtracts' );
|
||||
// Keep i18n globals so mergeMessageFileList.php doesn't break
|
||||
$wgMessagesDirs['TextExtracts'] = __DIR__ . '/i18n';
|
||||
/*wfWarn(
|
||||
'Deprecated PHP entry point used for TextExtracts extension. ' .
|
||||
'Please use wfLoadExtension instead, ' .
|
||||
'see https://www.mediawiki.org/wiki/Extension_registration for more details.'
|
||||
);*/
|
||||
return;
|
||||
} else {
|
||||
die( 'This version of the TextExtracts extension requires MediaWiki 1.25+' );
|
||||
}
|
||||
|
||||
$wgHooks['OpenSearchXml'][] = 'TextExtracts\Hooks::onApiOpenSearchSuggest';
|
||||
$wgHooks['ApiOpenSearchSuggest'][] = 'TextExtracts\Hooks::onApiOpenSearchSuggest';
|
||||
$wgHooks['UnitTestsList'][] = function( &$files ) {
|
||||
$files[] = __DIR__ . '/tests/ExtractFormatterTest.php';
|
||||
return true;
|
||||
};
|
||||
|
||||
|
||||
// Configuration variables
|
||||
|
||||
/**
|
||||
* Selectors of content to be removed from HTML
|
||||
*/
|
||||
$wgExtractsRemoveClasses = array(
|
||||
// These usually represent content that is not part of usual text flow
|
||||
'table', 'div', 'ul.gallery',
|
||||
// Section edit links
|
||||
'.mw-editsection',
|
||||
// Extension:Cite references
|
||||
'sup.reference',
|
||||
// Used by parser for various wikitext errors, no point having them in extracts
|
||||
'.error',
|
||||
// Ignored in MobileFrontend. @todo: decide if it's really needed
|
||||
'.nomobile',
|
||||
// Elements marked not to show up in the print version
|
||||
'.noprint',
|
||||
// Class specifically for this extension
|
||||
'.noexcerpt',
|
||||
);
|
||||
|
||||
/**
|
||||
* Whether this extension should provide its extracts for OpenSearch
|
||||
*/
|
||||
$wgExtractsExtendOpenSearchXml = false;
|
||||
|
|
54
extension.json
Normal file
54
extension.json
Normal file
|
@ -0,0 +1,54 @@
|
|||
{
|
||||
"name": "TextExtracts",
|
||||
"author": [
|
||||
"Max Semenik"
|
||||
],
|
||||
"url": "https://www.mediawiki.org/wiki/Extension:TextExtracts",
|
||||
"descriptionmsg": "textextracts-desc",
|
||||
"type": "other",
|
||||
"ConfigRegistry": {
|
||||
"textextracts": "GlobalVarConfig::newInstance"
|
||||
},
|
||||
"APIPropModules": {
|
||||
"extracts": {
|
||||
"class": "TextExtracts\\ApiQueryExtracts",
|
||||
"factory": "TextExtracts\\ApiQueryExtracts::factory"
|
||||
}
|
||||
},
|
||||
"MessagesDirs": {
|
||||
"TextExtracts": [
|
||||
"i18n"
|
||||
]
|
||||
},
|
||||
"AutoloadClasses": {
|
||||
"TextExtracts\\ApiQueryExtracts": "includes/ApiQueryExtracts.php",
|
||||
"TextExtracts\\ExtractFormatter": "includes/ExtractFormatter.php",
|
||||
"TextExtracts\\Hooks": "includes/Hooks.php"
|
||||
},
|
||||
"Hooks": {
|
||||
"OpenSearchXml": [
|
||||
"TextExtracts\\Hooks::onApiOpenSearchSuggest"
|
||||
],
|
||||
"ApiOpenSearchSuggest": [
|
||||
"TextExtracts\\Hooks::onApiOpenSearchSuggest"
|
||||
],
|
||||
"UnitTestsList": [
|
||||
"TextExtracts\\Hooks::onUnitTestsList"
|
||||
]
|
||||
},
|
||||
"config": {
|
||||
"ExtractsRemoveClasses": [
|
||||
"table",
|
||||
"div",
|
||||
"ul.gallery",
|
||||
".mw-editsection",
|
||||
"sup.reference",
|
||||
".error",
|
||||
".nomobile",
|
||||
".noprint",
|
||||
".noexcerpt"
|
||||
],
|
||||
"ExtractsExtendOpenSearchXml": false
|
||||
},
|
||||
"manifest_version": 1
|
||||
}
|
|
@ -240,6 +240,16 @@ class ApiQueryExtracts extends ApiQueryBase {
|
|||
return $data['parse']['text']['*'];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ApiQuery $query
|
||||
* @param string $action
|
||||
* @return TextExtracts\ApiQueryExtracts
|
||||
*/
|
||||
public static function factory( $query, $action ) {
|
||||
$config = ConfigFactory::getDefaultInstance()->makeConfig( 'textextracts' );
|
||||
return new TextExtracts\ApiQueryExtracts( $query, $action, $config );
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts page HTML into an extract
|
||||
* @param string $text
|
||||
|
|
|
@ -9,6 +9,13 @@ use ConfigFactory;
|
|||
use FauxRequest;
|
||||
|
||||
class Hooks {
|
||||
|
||||
// Unit test hook
|
||||
public static function onUnitTestsList( &$files ) {
|
||||
$files = array_merge( $files, glob( __DIR__ . '/tests/ExtractFormatterTest.php' ) );
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* ApiOpenSearchSuggest hook handler
|
||||
* @param array $results
|
||||
|
|
Loading…
Reference in a new issue