%PDF- %PDF-
| Direktori : /www/varak.net/wiki.varak.net/extensions/MobileFrontend/includes/api/ |
| Current File : //www/varak.net/wiki.varak.net/extensions/MobileFrontend/includes/api/ApiParseExtender.php |
<?php
/**
* Extends API action=parse with mobile goodies
* See https://www.mediawiki.org/wiki/Extension:MobileFrontend#Extended_action.3Dparse
*/
class ApiParseExtender {
/**
* APIGetAllowedParams hook handler
* @see https://www.mediawiki.org/wiki/Manual:Hooks/APIGetAllowedParams
* @param ApiBase &$module
* @param array|bool &$params Array of parameters
* @return bool
*/
public static function onAPIGetAllowedParams( ApiBase &$module, &$params ) {
if ( $module->getModuleName() == 'parse' ) {
$params['mobileformat'] = false;
$params['noimages'] = false;
$params['mainpage'] = false;
}
return true;
}
/**
* APIAfterExecute hook handler
* @see https://www.mediawiki.org/wiki/Manual:Hooks/APIAfterExecute
* @param ApiBase &$module
* @return bool
*/
public static function onAPIAfterExecute( ApiBase &$module ) {
$mfSpecialCaseMainPage = MobileContext::singleton()
->getMFConfig()->get( 'MFSpecialCaseMainPage' );
if ( $module->getModuleName() == 'parse' ) {
$data = $module->getResult()->getResultData();
$params = $module->extractRequestParams();
if ( isset( $data['parse']['text'] ) && $params['mobileformat'] ) {
$result = $module->getResult();
$result->reset();
$title = Title::newFromText( $data['parse']['title'] );
$text = $data['parse']['text'];
if ( is_array( $text ) ) {
if ( isset( $text[ApiResult::META_CONTENT] ) ) {
$contentKey = $text[ApiResult::META_CONTENT];
} else {
$contentKey = '*';
}
$html = MobileFormatter::wrapHTML( $text[$contentKey] );
} else {
$html = MobileFormatter::wrapHTML( $text );
}
$mf = new MobileFormatter( $html, $title );
$mf->setRemoveMedia( $params['noimages'] );
$mf->setIsMainPage( $params['mainpage'] && $mfSpecialCaseMainPage );
$mf->enableExpandableSections( !$params['mainpage'] );
$mf->disableScripts();
// HACK: need a nice way to request a TOC-free HTML in the first place
$mf->remove( [ '.toc', '.mw-headline-anchor' ] );
$mf->filterContent();
if ( is_array( $text ) ) {
$text[$contentKey] = $mf->getText();
} else {
$text = $mf->getText();
}
$data['parse']['text'] = $text;
$result->addValue( null, $module->getModuleName(), $data['parse'] );
}
}
return true;
}
}