blob: 93014bedc0c33906369551d1c24fbd95d5470d84 [file] [log] [blame]
<?php
require_once $_SERVER['DOCUMENT_ROOT'] . '/rap/developers-guide/DevGuideUtils.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/rap/_lib/urlnormalizer/URLNormalizer.php';
class ContentView {
private static $htmlFile;
private static $path;
private static $paths;
private static $version;
private function __construct() {}
public static function create( $htmlFilePath, $version ) {
self::$path = substr( $htmlFilePath, 0, strpos( $htmlFilePath, "/" ) );
if( self::$path == '' ) {
self::$path = '.';
}
self::$version = $version;
self::$paths = DevGuideUtils::$versions[ self::$version ];
self::$htmlFile = new SplFileObject( self::$paths[ 'rootUrl' ] . self::$paths[ 'topicPath' ] . $htmlFilePath );
return self::processHtmlFileContent();
}
private static function processHtmlFileContent() {
$result = '';
$htmlDocument = new DOMDocument();
$htmlDocument -> loadHTMLFile( self::$htmlFile -> getPathname() );
self::rewriteLinkUrls( $htmlDocument );
self::rewriteImageUrls( $htmlDocument );
$bodyChildNodes = $htmlDocument -> getElementsByTagName( 'body' ) -> item( 0 ) -> childNodes;
for( $i = 0; $i < $bodyChildNodes -> length; $i++ ) {
$result .= $htmlDocument -> saveXML( $bodyChildNodes -> item( $i ), LIBXML_NOEMPTYTAG );
}
return $result;
}
private static function rewriteLinkUrls( $htmlDocument ) {
$links = $htmlDocument -> getElementsByTagName( 'a' );
foreach( $links as $link ) {
if( $link -> hasAttribute( 'href' ) ) {
$url = $link -> getAttribute( 'href' );
if( !containsString( $url, 'http://' ) && !self::isBookmark( $url ) ) {
$link -> setAttribute( 'href', self::rewriteLinkUrl( $url ) );
}
}
}
}
private static function isBookmark( $url ) {
return preg_match( '|^#.*|', $url ) === 1 ? true : false;
}
private static function rewriteLinkUrl( $url ) {
$result = '';
$split = explode( "#", $url );
$path = $split[ 0 ];
if( self::startsWith( $path, '/help' ) ) {
$result = str_replace( '/help', 'http://help.eclipse.org', $path );
} else if( self::startsWith( $path, '../reference' ) ) {
$result = self::$paths[ 'apiUrl' ] . substr ( $path, 13 );
} else if( containsString( $path, '.html' ) ) {
$normalizedUrl = self::normalizeUrl( '/' . self::$path . '/' . $path );
$result = '?topic=' . trim( $normalizedUrl, "/" ) . '&version=' . self::$version;
} else {
$result = $path;
}
if( count( $split ) > 1 ) {
$result .= '#' . $split[ 1 ];
}
return $result;
}
private static function rewriteImageUrls( $htmlDocument ) {
$images = $htmlDocument -> getElementsByTagName( 'img' );
foreach( $images as $image ) {
$url = $image -> getAttribute( 'src' );
if( !containsString( $url, 'http://' ) ) {
$image -> setAttribute( 'src', self::$paths[ 'rootUrl' ] . self::$paths[ 'topicPath' ] . self::$path . '/' . $url );
}
}
}
private static function normalizeUrl( $url ) {
$normalizer = new URLNormalizer( $url );
return $normalizer -> normalize();
}
private static function startsWith( $haystack, $needle ) {
return !strncmp( $haystack, $needle, strlen( $needle ) );
}
}
?>