You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
163 lines
3.7 KiB
163 lines
3.7 KiB
11 years ago
|
<?php
|
||
|
/**
|
||
|
* @link http://www.yiiframework.com/
|
||
|
* @copyright Copyright (c) 2008 Yii Software LLC
|
||
|
* @license http://www.yiiframework.com/license/
|
||
|
*/
|
||
|
|
||
|
namespace yii\apidoc\templates\html;
|
||
|
|
||
|
use yii\apidoc\helpers\ApiMarkdown;
|
||
|
use yii\console\Controller;
|
||
|
use yii\helpers\Console;
|
||
|
use yii\apidoc\renderers\GuideRenderer as BaseGuideRenderer;
|
||
|
use Yii;
|
||
|
use yii\helpers\Html;
|
||
|
use yii\web\AssetManager;
|
||
|
use yii\web\View;
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
* @author Carsten Brandt <mail@cebe.cc>
|
||
|
* @since 2.0
|
||
|
*/
|
||
|
abstract class GuideRenderer extends BaseGuideRenderer
|
||
|
{
|
||
|
public $pageTitle;
|
||
|
public $layout;
|
||
|
|
||
|
/**
|
||
|
* @var View
|
||
|
*/
|
||
|
private $_view;
|
||
|
private $_targetDir;
|
||
|
|
||
|
|
||
|
public function init()
|
||
|
{
|
||
|
parent::init();
|
||
|
|
||
|
if ($this->pageTitle === null) {
|
||
|
$this->pageTitle = 'Yii Framework 2.0 API Documentation'; // TODO guess page title
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return View the view instance
|
||
|
*/
|
||
|
public function getView()
|
||
|
{
|
||
|
if ($this->_view === null) {
|
||
|
$this->_view = new View();
|
||
|
$assetPath = Yii::getAlias($this->_targetDir) . '/assets';
|
||
|
if (!is_dir($assetPath)) {
|
||
|
mkdir($assetPath);
|
||
|
}
|
||
|
$this->_view->assetManager = new AssetManager([
|
||
|
'basePath' => $assetPath,
|
||
|
'baseUrl' => './assets',
|
||
|
]);
|
||
|
}
|
||
|
return $this->_view;
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Renders a given [[Context]].
|
||
|
*
|
||
|
* @param Controller $controller the apidoc controller instance. Can be used to control output.
|
||
|
*/
|
||
|
public function render($files, $targetDir)
|
||
|
{
|
||
|
$this->_targetDir = $targetDir;
|
||
|
|
||
|
$fileCount = count($files) + 1;
|
||
|
if ($this->controller !== null) {
|
||
|
Console::startProgress(0, $fileCount, 'Rendering markdown files: ', false);
|
||
|
}
|
||
|
$done = 0;
|
||
|
$fileData = [];
|
||
|
$headlines = [];
|
||
|
foreach($files as $file) {
|
||
|
$fileData[$file] = file_get_contents($file);
|
||
|
if (basename($file) == 'index.md') {
|
||
|
continue; // to not add index file to nav
|
||
|
}
|
||
|
if (preg_match("/^(.*)\n=+/", $fileData[$file], $matches)) {
|
||
|
$headlines[$file] = $matches[1];
|
||
|
} else {
|
||
|
$headlines[$file] = basename($file);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
foreach($fileData as $file => $content) {
|
||
|
$output = ApiMarkdown::process($content); // TODO generate links to yiiframework.com by default
|
||
|
$output = $this->fixMarkdownLinks($output);
|
||
|
if ($this->layout !== false) {
|
||
|
$params = [
|
||
|
'headlines' => $headlines,
|
||
|
'currentFile' => $file,
|
||
|
'content' => $output,
|
||
|
];
|
||
|
$output = $this->getView()->renderFile($this->layout, $params, $this);
|
||
|
}
|
||
|
$fileName = $this->generateGuideFileName($file);
|
||
|
file_put_contents($targetDir . '/' . $fileName, $output);
|
||
|
|
||
|
if ($this->controller !== null) {
|
||
|
Console::updateProgress(++$done, $fileCount);
|
||
|
}
|
||
|
}
|
||
|
if ($this->controller !== null) {
|
||
|
Console::updateProgress(++$done, $fileCount);
|
||
|
Console::endProgress(true);
|
||
|
$this->controller->stdout('done.' . PHP_EOL, Console::FG_GREEN);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// TODO move these to guide renderer
|
||
|
protected function generateGuideFileName($file)
|
||
|
{
|
||
|
return 'guide_' . basename($file, '.md') . '.html';
|
||
|
}
|
||
|
|
||
|
public function getGuideReferences()
|
||
|
{
|
||
|
// TODO implement for api docs
|
||
|
// $refs = [];
|
||
|
// foreach($this->markDownFiles as $file) {
|
||
|
// $refName = 'guide-' . basename($file, '.md');
|
||
|
// $refs[$refName] = ['url' => $this->generateGuideFileName($file)];
|
||
|
// }
|
||
|
// return $refs;
|
||
|
}
|
||
|
|
||
|
protected function fixMarkdownLinks($content)
|
||
|
{
|
||
|
$content = preg_replace('/href\s*=\s*"([^"\/]+)\.md(#.*)?"/i', 'href="guide_\1.html\2"', $content);
|
||
|
return $content;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* generate link markup
|
||
|
* @param $text
|
||
|
* @param $href
|
||
|
* @return mixed
|
||
|
*/
|
||
|
protected function generateLink($text, $href)
|
||
|
{
|
||
|
return Html::a($text, null, ['href' => $href]);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Generate an url to a type in apidocs
|
||
|
* @param $typeName
|
||
|
* @return mixed
|
||
|
*/
|
||
|
public function generateApiUrl($typeName)
|
||
|
{
|
||
|
// TODO: Implement generateApiUrl() method.
|
||
|
|
||
|
return $this->apiUrl . '...';
|
||
|
}
|
||
|
}
|