Per wikitech-l consensus: https://lists.wikimedia.org/pipermail/wikitech-l/2016-February/084821.html Notes: * Disabled CallTimePassByReference due to false positives (T127163) Change-Id: I2c8ce713ce6600a0bb7bf67537c87044c7a45c4b
46 lines
1.3 KiB
PHP
46 lines
1.3 KiB
PHP
<?php
|
|
|
|
namespace MediaWiki\Tidy;
|
|
|
|
use MWHttpRequest;
|
|
use Exception;
|
|
|
|
class Html5Depurate extends TidyDriverBase {
|
|
public function __construct( array $config ) {
|
|
parent::__construct( $config + [
|
|
'url' => 'http://localhost:4339/document',
|
|
'timeout' => 10,
|
|
'connectTimeout' => 0.5,
|
|
] );
|
|
}
|
|
|
|
public function tidy( $text ) {
|
|
$wrappedtext = '<!DOCTYPE html><html>' .
|
|
'<body>' . $text . '</body></html>';
|
|
|
|
$req = MWHttpRequest::factory( $this->config['url'],
|
|
[
|
|
'method' => 'POST',
|
|
'timeout' => $this->config['timeout'],
|
|
'connectTimeout' => $this->config['connectTimeout'],
|
|
'postData' => [
|
|
'text' => $wrappedtext
|
|
]
|
|
] );
|
|
$status = $req->execute();
|
|
if ( !$status->isOK() ) {
|
|
throw new Exception( "Error contacting depurate service: " . $status->getWikiText() );
|
|
} elseif ( $req->getStatus() !== 200 ) {
|
|
throw new Exception( "Depurate returned error: " . $status->getWikiText() );
|
|
}
|
|
$result = $req->getContent();
|
|
$startBody = strpos( $result, "<body>" );
|
|
$endBody = strrpos( $result, "</body>" );
|
|
if ( $startBody !== false && $endBody !== false && $endBody > $startBody ) {
|
|
$startBody += strlen( "<body>" );
|
|
return substr( $result, $startBody, $endBody - $startBody );
|
|
} else {
|
|
return $text . "\n<!-- Html5Depurate returned an invalid result -->";
|
|
}
|
|
}
|
|
}
|