| <?php | |
| class NavigationView { | |
| private static $introductionCount = 0; | |
| private function __construct() {} | |
| public static function create( $version ) { | |
| $paths = DevGuideUtils::$versions[ $version ]; | |
| $filePath = $paths[ 'rootUrl' ] . $paths[ 'tocPath' ]; | |
| $result = '<ul id="dev-guide-nav">'; | |
| $xmlIterator = new SimpleXMLIterator( $filePath, null, true ); | |
| $result .= self::createNavigationFromXml( $xmlIterator, $version ); | |
| $result .= '</ul>'; | |
| return $result; | |
| } | |
| private static function createNavigationFromXml( $xmlIterator, $version, $depth = 0 ) { | |
| $result = ''; | |
| foreach( $xmlIterator as $element ) { | |
| $label = $element[ 'label' ]; | |
| if( !self::navEntryIsExcluded( $label ) ) { | |
| $hasChildren = $element -> count() > 0 ? true : false; | |
| if( $hasChildren && $depth == 0 ) { | |
| $result .= '<li class="category-group"><span><span class="arrow"></span>' . $label . '</span><ul>'; | |
| $result .= self::createNavigationFromXml( $element, $version, $depth + 1 ); | |
| $result .= '</ul></li>'; | |
| } else { | |
| $url = self::createLinkUrl( self::getHref( $element ), $version ); | |
| $result .= self::createLinkItem( $url, $label ); | |
| } | |
| } | |
| } | |
| return $result; | |
| } | |
| private static function getHref( $element ) { | |
| $result; | |
| if( $element[ 'href' ] ) { | |
| $result = $element[ 'href' ]; | |
| } else if( $element->link[ 0 ] ) { | |
| $toc = $element->link[ 0 ][ 'toc' ]; | |
| $result = str_replace( 'toc.xml', 'index.html', $toc ); | |
| } | |
| return $result; | |
| } | |
| private static function createLinkUrl( $href, $version ) { | |
| $topicPath = DevGuideUtils::$versions[ $version ][ 'topicPath' ]; | |
| $apiUrl = DevGuideUtils::$versions[ $version ][ 'apiUrl' ]; | |
| $topicUrl = str_replace( $topicPath, '', $href ); | |
| if( self::startsWith( $topicUrl, 'reference/' ) ) { | |
| $url = $apiUrl . substr( $topicUrl, 10 ); | |
| } else if( self::startsWith( $topicUrl, 'guide/reference/' ) ) { | |
| $url = $apiUrl . substr( $topicUrl, 16 ); | |
| } else { | |
| $url = 'devguide.php?topic=' . $topicUrl . '&version=' . $version; | |
| } | |
| return $url; | |
| } | |
| private static function createLinkItem( $url, $label ) { | |
| $active = ''; | |
| $style = self::createLinkStyle( $url ); | |
| if( isset( $_GET[ 'topic' ] ) ) { | |
| $active = strrpos( $url, $_GET[ 'topic' ] ) != false ? ' class="active"' : ''; | |
| } | |
| $result = '<li><a' | |
| . $active | |
| . $style | |
| . ' href="' | |
| . $url | |
| . '">' | |
| . $label | |
| . '</a></li>'; | |
| return $result; | |
| } | |
| private static function createLinkStyle( $url ) { | |
| $result = ''; | |
| if( self::startsWith( $url, 'http' ) ) { | |
| $result = ' style="padding-right:13px;background:url(../images/external.png) center right no-repeat"'; | |
| } | |
| return $result; | |
| } | |
| private static function navEntryIsExcluded( $navEntry ) { | |
| $result = false; | |
| switch( $navEntry ) { | |
| case 'Legal': | |
| $result = true; | |
| break; | |
| case 'Introduction': | |
| if( self::$introductionCount < 1 ) { | |
| self::$introductionCount++; | |
| $result = true; | |
| break; | |
| } | |
| } | |
| return $result; | |
| } | |
| private static function startsWith( $haystack, $needle ) { | |
| return !strncmp( $haystack, $needle, strlen( $needle ) ); | |
| } | |
| } | |
| ?> |