| <?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 ) ); |
| } |
| |
| } |
| |
| ?> |