2013-07-13 05:26:27 +02:00
< ? php
2014-05-18 11:59:54 +02:00
require_once ( dirname ( __FILE__ ) . " /../vendor/autoload.php " );
2013-06-12 00:28:29 +02:00
2014-02-27 18:30:40 +01:00
$tree = array ();
$base = dirname ( dirname ( __FILE__ ));
2014-03-08 07:01:32 +01:00
$options = get_options ( isset ( $argv [ 2 ]) ? $argv [ 2 ] : '' );
2014-02-27 18:30:40 +01:00
$docs_path = $base . '/' . $options [ 'docs_path' ];
$multilanguage = ! empty ( $options [ 'languages' ]) ? TRUE : FALSE ;
// Options
2014-03-08 07:01:32 +01:00
function get_options ( $config_file ) {
2014-02-27 18:30:40 +01:00
global $base ;
$options = array (
'title' => " Documentation " ,
'tagline' => false ,
'image' => false ,
'theme' => 'red' ,
'docs_path' => 'docs' ,
'date_modified' => true ,
'float' => true ,
'repo' => false ,
'toggle_code' => false ,
'twitter' => array (),
'links' => array (),
'colors' => false ,
'clean_urls' => true ,
'google_analytics' => false ,
'piwik_analytics' => false ,
'piwik_analytics_id' => 1 ,
'ignore' => array (),
'languages' => array (),
'file_editor' => false ,
2014-05-31 00:02:19 +02:00
'template' => 'default' ,
2014-06-11 17:59:28 +02:00
'breadcrumbs' => false ,
'log' => ''
2014-02-27 18:30:40 +01:00
);
2014-05-18 11:59:54 +02:00
2014-02-27 18:30:40 +01:00
// Load User Config
2014-03-08 07:01:32 +01:00
$config_file = (( $config_file === '' ) ? 'docs/config.json' : $config_file );
if ( substr ( $config_file , 0 , 1 ) !== '/' ) $config_file = $base . '/' . $config_file ;
2014-02-27 18:30:40 +01:00
if ( file_exists ( $config_file )) {
$config = json_decode ( file_get_contents ( $config_file ), true );
2014-03-28 21:49:36 +01:00
if ( ! isset ( $config )) {
echo '<strong>Daux.io Config Error:</strong><br> The config file ' . $config_file . ' that was passed contained invalid JSON. <a href="http://daux.io">Learn More</a>.' ;
exit ;
}
2014-02-27 18:30:40 +01:00
$options = array_merge ( $options , $config );
}
if ( ! isset ( $options [ 'ignore' ][ 'files' ])) $options [ 'ignore' ][ 'files' ] = array ();
if ( ! isset ( $options [ 'ignore' ][ 'folders' ])) $options [ 'ignore' ][ 'folders' ] = array ();
if ( $options [ 'theme' ] !== 'custom' ) {
$themes = array ( " blue " , " navy " , " green " , " red " );
if ( ! in_array ( $options [ 'theme' ], $themes )) {
echo " <strong>Daux.io Config Error:</strong><br>The theme you set is not not a valid option. Please use one of the following options: " . join ( array_keys ( $themes ), ', ' ) . ' or <a href="http://daux.io">learn more</a> about how to customize the colors.' ;
exit ;
}
} else {
if ( empty ( $options [ 'colors' ])) {
echo '<strong>Daux.io Config Error:</strong><br>You are trying to use a custom theme, but did not setup your color options in the config. <a href="http://daux.io">Learn more</a> about how to customize the colors.' ;
exit ;
}
}
2014-03-28 21:49:36 +01:00
if ( ! ini_get ( 'date.timezone' )) date_default_timezone_set ( 'GMT' );
2014-02-27 18:30:40 +01:00
return $options ;
}
// Build Directory Tree
function build_tree () {
global $tree , $options , $docs_path , $multilanguage , $output_language ;
if ( ! $multilanguage ) $tree = directory_tree ( $docs_path , $options [ 'ignore' ]);
else
foreach ( $options [ 'languages' ] as $languageKey => $language ) {
$output_language = $languageKey ;
$tree [ $languageKey ] = directory_tree ( $docs_path . '/' . $languageKey , $options [ 'ignore' ]);
}
}
// Recursively add files & directories to Tree
function directory_tree ( $dir , $ignore ) {
global $base_doc , $multilanguage , $output_language ;
$tree = array ();
2014-04-09 23:15:50 +02:00
$Item = array_diff ( scandir ( $dir ), array ( " . " , " .. " ));
2014-02-27 18:30:40 +01:00
foreach ( $Item as $key => $value ) {
if ( is_dir ( $dir . '/' . $value )) {
if ( ! in_array ( $value , $ignore [ 'folders' ]))
$tree [ $value ] = directory_tree ( $dir . '/' . $value , $ignore );
} else if ( ! in_array ( $value , $ignore [ 'files' ])) {
if ( substr ( $value , - 3 ) === " .md " ) {
$tree [ $value ] = $value ;
if ( $multilanguage )
$base_doc [ $output_language ] = isset ( $base_doc [ $output_language ]) ? $base_doc [ $output_language ] : $dir . '/' . $value ;
else $base_doc = isset ( $base_doc ) ? $base_doc : $dir . '/' . $value ;
}
}
}
return $tree ;
}
// Build Navigation
function get_navigation ( $url ) {
global $tree , $multilanguage , $output_language , $output_path ;
$dir = isset ( $output_path ) ? $output_path : '' ;
$return = " <ul class= \" nav nav-list \" > " ;
$return .= $multilanguage ? build_navigation ( $tree [ $output_language ], (( $dir !== '' ) ? $dir . '/' : '' ) . $output_language , $url ) : build_navigation ( $tree , $dir , $url );
$return .= " </ul> " ;
return $return ;
}
function build_navigation ( $tree , $current_dir , $url ) {
global $mode , $base_path , $docs_path , $options ;
$return = " " ;
if ( $mode === 'Static' ) $t = relative_path ( $current_dir . " /. " , $url ) . '/' ;
else {
$t = " http:// " . $base_path . '/' ;
if ( ! $options [ 'clean_urls' ]) $t .= 'index.php?' ;
$rel = clean_url ( $current_dir , 'Live' );
$t .= ( $rel === '' ) ? '' : $rel . '/' ;
}
foreach ( $tree as $key => $node )
if ( is_array ( $node )) {
$return .= " <li " ;
if ( ! ( strpos ( $url , $key ) === FALSE )) $return .= " class= \" open \" " ;
$return .= " > " ;
2014-04-09 23:23:23 +02:00
$link = " # " ;
$nav_class = " aj-nav " ;
if ( in_array ( " index.md " , $node )) {
$link = $t . clean_url ( $key , $mode );
$nav_class = " " ;
}
2014-04-09 23:15:50 +02:00
$return .= " <a href= \" " . $link . " \" class= \" " . $nav_class . " folder \" > " ;
2014-02-27 18:30:40 +01:00
$return .= clean_url ( $key , " Title " );
$return .= " </a> " ;
$return .= " <ul class= \" nav nav-list \" > " ;
$dir = ( $current_dir === '' ) ? $key : $current_dir . '/' . $key ;
$return .= build_navigation ( $node , $dir , $url );
$return .= " </ul> " ;
$return .= " </li> " ;
}
2014-04-09 23:15:50 +02:00
else if ( $node !== " index.md " ) {
2014-02-27 18:30:40 +01:00
$return .= " <li " ;
if ( $url === $current_dir . '/' . $node ) $return .= " class= \" active \" " ;
$return .= " > " ;
$link = $t . clean_url ( $node , $mode );
$return .= " <a href= \" " . $link . " \" > " . clean_url ( $node , " Title " );
$return .= " </a></li> " ;
}
return $return ;
}
// Generate Documentation from Markdown file
2014-06-11 17:59:28 +02:00
function generate_page ( $file , $with_index = " " ) {
2014-02-27 18:30:40 +01:00
global $base , $base_doc , $base_path , $docs_path , $options , $mode , $relative_base ;
$template = $options [ 'template' ];
2014-04-09 23:23:23 +02:00
$file_relative_path = str_replace ( $docs_path . '/' , " " , $file );
2014-04-09 23:15:50 +02:00
if ( $file_relative_path === 'index.md' ) $homepage = TRUE ;
2014-02-27 18:30:40 +01:00
else $homepage = FALSE ;
if ( ! $file ) {
2014-06-11 17:59:28 +02:00
if ( file_get_contents ( $with_index ) === FALSE ) {
$page [ 'path' ] = '' ;
$page [ 'markdown' ] = '' ;
$page [ 'title' ] = 'Oh No' ;
$page [ 'content' ] = " <h3>Oh No. That page doesn't exist</h3> " ;
$options [ 'file_editor' ] = false ;
} else {
$file_relative_path = str_replace ( $docs_path . '/' , " " , $with_index );
$page [ 'path' ] = $file_relative_path ;
$page [ 'markdown' ] = file_get_contents ( $with_index );
$page [ 'modified' ] = filemtime ( $with_index );
$Parsedown = new Parsedown ();
$page [ 'content' ] = $Parsedown -> text ( $page [ 'markdown' ]);
if ( $options [ 'breadcrumbs' ]) {
$page [ 'title' ] = url_to_title ( get_url ( $with_index ), 'Colons' );
} else {
$page [ 'title' ] = clean_url ( $with_index , 'Title' );
}
}
2014-02-27 18:30:40 +01:00
} else {
2014-04-09 23:15:50 +02:00
$page [ 'path' ] = $file_relative_path ;
2014-02-27 18:30:40 +01:00
$page [ 'markdown' ] = file_get_contents ( $file );
2014-03-06 17:57:05 +01:00
$page [ 'modified' ] = filemtime ( $file );
2014-04-22 22:19:03 +02:00
$Parsedown = new Parsedown ();
$page [ 'content' ] = $Parsedown -> text ( $page [ 'markdown' ]);
2014-05-31 00:02:19 +02:00
if ( $options [ 'breadcrumbs' ]) {
$page [ 'title' ] = url_to_title ( get_url ( $file ), 'Colons' );
} else {
$page [ 'title' ] = clean_url ( $file , 'Title' );
}
2014-02-27 18:30:40 +01:00
}
$relative_base = ( $mode === 'Static' ) ? relative_path ( " " , $file ) : " http:// " . $base_path . '/' ;
ob_start ();
include ( $base . " /template/ " . $template . " .tpl " );
$return = ob_get_contents ();
@ ob_end_clean ();
return $return ;
}
2014-05-31 00:02:19 +02:00
// Converts a URL to a readable breadcrumb string for the page title
function url_to_title ( $url , $separator = " Chevrons " ) {
$url = str_replace ( " index.php? " , " " , $url );
$url = str_replace ( " _ " , " " , $url );
switch ( $separator ) {
case 'Chevrons' :
$url = str_replace ( " / " , " <i class= \" glyphicon glyphicon-chevron-right \" ></i> " , $url );
return $url ;
case 'Colons' :
$url = str_replace ( " / " , " : " , $url );
return $url ;
case 'Spaces' :
$url = str_replace ( " / " , " " , $url );
return $url ;
}
return $url ;
}
2014-02-27 18:30:40 +01:00
// File to URL
function clean_url ( $url , $mode = 'Static' ) {
global $docs_path , $output_path , $options ;
switch ( $mode ) {
case 'Live' :
$url = str_replace ( array ( " .md " , " .html " , " .php " ), " " , $url );
case 'Static' :
$url = str_replace ( " .md " , " .html " , $url );
$remove = array ( $docs_path . '/' );
if ( isset ( $output_path )) $remove [] = $output_path . '/' ;
$url = str_replace ( $remove , " " , $url );
$url = explode ( '/' , $url );
foreach ( $url as & $a ) {
$a = explode ( '_' , $a );
if ( isset ( $a [ 0 ]) && is_numeric ( $a [ 0 ])) unset ( $a [ 0 ]);
$a = implode ( '_' , $a );
}
$url = implode ( '/' , $url );
return $url ;
case 'Title' :
case 'Filename' :
2014-04-09 23:23:23 +02:00
$parts = array_reverse ( explode ( '/' , $url ));
if ( isset ( $parts [ 0 ])) {
if ( $parts [ 0 ] === " index.md " && isset ( $parts [ 1 ])) $url = $parts [ 1 ];
else $url = $parts [ 0 ];
}
2014-02-27 18:30:40 +01:00
$url = explode ( '_' , $url );
if ( isset ( $url [ 0 ]) && is_numeric ( $url [ 0 ])) unset ( $url [ 0 ]);
if ( $mode === 'Filename' ) $url = implode ( '_' , $url );
else $url = implode ( ' ' , $url );
$url = str_replace ( array ( " .md " , " .html " ), " " , $url );
return $url ;
}
}
// Get Path based on Server. For Use in template file.
function get_url ( $url ) {
global $mode , $options , $relative_base ;
$t = clean_url ( $url , $mode );
if ( $t === 'index' ) {
if ( $mode === 'Static' ) return $relative_base . 'index.html' ;
else return $relative_base ;
}
if ( $mode === 'Live' && ! $options [ 'clean_urls' ]) $t = 'index.php?' . $t ;
return $t ;
}
// Relative Path From Path2 to Path1
function relative_path ( $path1 , $path2 ) {
global $output_path , $docs_path , $base ;
$remove = array ( $docs_path . '/' );
if ( isset ( $output_path )) $remove [] = $output_path . '/' ;
$remove [] = $base . '/' ;
$path1 = str_replace ( $remove , " " , $path1 );
$path2 = str_replace ( $remove , " " , $path2 );
$nesting = substr_count ( $path2 , " / " );
if ( $nesting == 0 ) return clean_url ( $path1 );
$return = " " ;
$t = 0 ;
while ( $t < $nesting ) {
$return .= " ../ " ;
$t += 1 ;
}
$return .= clean_url ( $path1 );
return $return ;
}
?>