diff --git a/docs/guide/events.md b/docs/guide/events.md index 0cae195..94c5e9a 100644 --- a/docs/guide/events.md +++ b/docs/guide/events.md @@ -115,14 +115,14 @@ Removing Event Handlers The correspondoing `off` method removes an event handler: ```php -// $component->off($eventName); +$component->off($eventName); ``` Yii supports the ability to associate multiple handlers with the same event. When using `off` as in the above, every handler is removed. To remove only a specific handler, provide that as the second argument to `off`: ```php -// $component->off($eventName, $handler); +$component->off($eventName, $handler); ``` The `$handler` should be presented in the `off` method in the same way as was presented in `on` in order to remove it. diff --git a/extensions/apidoc/README.md b/extensions/apidoc/README.md index 55b1e99..1cb7c03 100644 --- a/extensions/apidoc/README.md +++ b/extensions/apidoc/README.md @@ -25,14 +25,36 @@ to the require section of your composer.json. Usage ----- -To generate API documentation, run the `apidoc` command. +This extension offers two commands: + +- `api` to generate class API documentation. +- `guide` to render nice HTML pages from markdown files such as the yii guide. + +Simple usage for stand alone class documentation: + +``` +vendor/bin/apidoc api source/directory ./output +``` + +Simple usage for stand alone guide documentation: + +``` +vendor/bin/apidoc guide source/docs ./output +``` + +You can combine them to generate class API and guide doc in one place: ``` -vendor/bin/apidoc source/directory ./output +# first generate guide docs to allow links from code to guide you may skip this if you do not need these. +vendor/bin/apidoc guide source/docs ./output +# second generate API docs +vendor/bin/apidoc api source/directory ./output +# third run guide docs again to have class links enabled +vendor/bin/apidoc guide source/docs ./output ``` -By default the `offline` template will be used. You can choose a different templates with the `--template=name` parameter. -Currently there is only the `offline` template available. +By default the `bootstrap` template will be used. You can choose a different templates with the `--template=name` parameter. +Currently there is only the `bootstrap` template available. You may also add the `yii\apidoc\commands\RenderController` to your console application class map and run it inside of your applications console app. diff --git a/extensions/apidoc/commands/ApiController.php b/extensions/apidoc/commands/ApiController.php index 51dcbee..b3c28f3 100644 --- a/extensions/apidoc/commands/ApiController.php +++ b/extensions/apidoc/commands/ApiController.php @@ -1,16 +1,24 @@ <?php /** - * @author Carsten Brandt <mail@cebe.cc> + * @link http://www.yiiframework.com/ + * @copyright Copyright (c) 2008 Yii Software LLC + * @license http://www.yiiframework.com/license/ */ namespace yii\apidoc\commands; +use yii\apidoc\components\BaseController; use yii\apidoc\renderers\ApiRenderer; +use yii\apidoc\renderers\BaseRenderer; use yii\helpers\ArrayHelper; use yii\helpers\Console; use yii\helpers\FileHelper; +/** + * Generate class API documentation + * + */ class ApiController extends BaseController { /** @@ -36,8 +44,18 @@ class ApiController extends BaseController // setup reference to guide if ($this->guide !== null) { - $renderer->guideUrl = $this->guide; - $renderer->guideReferences = []; // TODO set references + $guideUrl = $this->guide; + $referenceFile = $guideUrl . '/' . BaseRenderer::GUIDE_PREFIX . 'references.txt'; + } else { + $guideUrl = './'; + $referenceFile = $targetDir . '/' . BaseRenderer::GUIDE_PREFIX . 'references.txt'; + } + if (file_exists($referenceFile)) { + $renderer->guideUrl = $guideUrl; + $renderer->guideReferences = []; + foreach(explode("\n", file_get_contents($referenceFile)) as $reference) { + $renderer->guideReferences[BaseRenderer::GUIDE_PREFIX . $reference] = $renderer->generateGuideUrl($reference); + } } // search for files to process diff --git a/extensions/apidoc/commands/GuideController.php b/extensions/apidoc/commands/GuideController.php index 5b7750f..8dbe648 100644 --- a/extensions/apidoc/commands/GuideController.php +++ b/extensions/apidoc/commands/GuideController.php @@ -1,10 +1,13 @@ <?php /** - * @author Carsten Brandt <mail@cebe.cc> + * @link http://www.yiiframework.com/ + * @copyright Copyright (c) 2008 Yii Software LLC + * @license http://www.yiiframework.com/license/ */ namespace yii\apidoc\commands; +use yii\apidoc\components\BaseController; use yii\apidoc\models\Context; use yii\apidoc\renderers\BaseRenderer; use yii\apidoc\renderers\GuideRenderer; @@ -38,6 +41,8 @@ class GuideController extends BaseController return 1; } + $renderer->guideUrl = './'; + // setup reference to apidoc if ($this->apiDocs !== null) { $renderer->apiUrl = $this->apiDocs; @@ -59,8 +64,12 @@ class GuideController extends BaseController } $this->stdout('done.' . PHP_EOL, Console::FG_GREEN); - - // TODO generate api references.txt + // generate api references.txt + $references = []; + foreach($files as $file) { + $references[] = basename($file, '.md'); + } + file_put_contents($targetDir . '/guide-references.txt', implode("\n", $references)); } protected function findFiles($path, $except = ['README.md']) diff --git a/extensions/apidoc/components/BaseController.php b/extensions/apidoc/components/BaseController.php index 6a5f14c..768280d 100644 --- a/extensions/apidoc/components/BaseController.php +++ b/extensions/apidoc/components/BaseController.php @@ -5,7 +5,7 @@ * @license http://www.yiiframework.com/license/ */ -namespace yii\apidoc\commands; +namespace yii\apidoc\components; use yii\apidoc\renderers\BaseRenderer; use yii\console\Controller; diff --git a/extensions/apidoc/renderers/BaseRenderer.php b/extensions/apidoc/renderers/BaseRenderer.php index 0170213..786ec61 100644 --- a/extensions/apidoc/renderers/BaseRenderer.php +++ b/extensions/apidoc/renderers/BaseRenderer.php @@ -31,6 +31,8 @@ use yii\helpers\Html; */ abstract class BaseRenderer extends Component { + const GUIDE_PREFIX = 'guide-'; + public $apiUrl; /** * @var Context the [[Context]] currently being rendered. @@ -160,4 +162,14 @@ abstract class BaseRenderer extends Component * @return mixed */ public abstract function generateApiUrl($typeName); + + /** + * Generate an url to a guide page + * @param string $file + * @return string + */ + public function generateGuideUrl($file) + { + return rtrim($this->guideUrl, '/') . '/' . static::GUIDE_PREFIX . basename($file, '.md') . '.html'; + } } \ No newline at end of file diff --git a/extensions/apidoc/templates/bootstrap/layouts/api.php b/extensions/apidoc/templates/bootstrap/layouts/api.php index c60956c..1acf68c 100644 --- a/extensions/apidoc/templates/bootstrap/layouts/api.php +++ b/extensions/apidoc/templates/bootstrap/layouts/api.php @@ -1,4 +1,5 @@ <?php + use yii\apidoc\templates\bootstrap\ApiRenderer; use yii\apidoc\templates\bootstrap\SideNavWidget; use yii\helpers\StringHelper; diff --git a/extensions/apidoc/templates/bootstrap/layouts/guide.php b/extensions/apidoc/templates/bootstrap/layouts/guide.php index 20778f1..16f846c 100644 --- a/extensions/apidoc/templates/bootstrap/layouts/guide.php +++ b/extensions/apidoc/templates/bootstrap/layouts/guide.php @@ -1,4 +1,5 @@ <?php + use yii\apidoc\templates\bootstrap\SideNavWidget; /** @@ -15,20 +16,13 @@ $this->beginContent('@yii/apidoc/templates/bootstrap/layouts/main.php'); ?> $nav = []; $nav[] = [ 'label' => 'Index', - 'url' => './guide_index.html', + 'url' => $this->context->generateGuideUrl('index.md'), 'active' => isset($currentFile) && (basename($currentFile) == 'index.md'), ]; foreach($headlines as $file => $headline) { -// if (!isset($nav[$namespace])) { -// $nav[$namespace] = [ -// 'label' => $namespace, -// 'url' => '#', -// 'items' => [], -// ]; -// } - $nav/*[$namespace]['items']*/[] = [ + $nav[] = [ 'label' => $headline, - 'url' => './guide_' . str_replace('.md', '.html', basename($file)), + 'url' => $this->context->generateGuideUrl($file), 'active' => isset($currentFile) && ($file == $currentFile), ]; } ?> diff --git a/extensions/apidoc/templates/bootstrap/layouts/main.php b/extensions/apidoc/templates/bootstrap/layouts/main.php index 2ec970f..de40aca 100644 --- a/extensions/apidoc/templates/bootstrap/layouts/main.php +++ b/extensions/apidoc/templates/bootstrap/layouts/main.php @@ -1,4 +1,6 @@ <?php + +use yii\apidoc\renderers\BaseRenderer; use yii\bootstrap\Nav; use yii\bootstrap\NavBar; use yii\helpers\Html; @@ -17,7 +19,7 @@ $this->registerJs(<<<JS window.addEventListener("hashchange", shiftWindow); JS , - \yii\web\View::POS_HEAD + \yii\web\View::POS_READY ); $this->beginPage(); @@ -38,30 +40,32 @@ $this->beginPage(); <?php NavBar::begin([ 'brandLabel' => $this->context->pageTitle, - 'brandUrl' => './index.html', + 'brandUrl' => ($this->context->apiUrl === null && $this->context->guideUrl !== null) ? './guide-index.html' : './index.html', 'options' => [ 'class' => 'navbar-inverse navbar-fixed-top', ], 'renderInnerContainer' => false, 'view' => $this, ]); - $nav = [ - ['label' => 'Class reference', 'url' => './index.html'], - ]; - if (!empty($this->context->extensions)) - { - $extItems = []; - foreach($this->context->extensions as $ext) { - $extItems[] = [ - 'label' => $ext, - 'url' => "./ext_{$ext}_index.html", - ]; + $nav = []; + + if ($this->context->apiUrl !== null) { + $nav[] = ['label' => 'Class reference', 'url' => rtrim($this->context->apiUrl, '/') . '/index.html']; + if (!empty($this->context->extensions)) + { + $extItems = []; + foreach($this->context->extensions as $ext) { + $extItems[] = [ + 'label' => $ext, + 'url' => "./ext_{$ext}_index.html", + ]; + } + $nav[] = ['label' => 'Extensions', 'items' => $extItems]; } - $nav[] = ['label' => 'Extensions', 'items' => $extItems]; } if ($this->context->guideUrl !== null) { - $nav[] = ['label' => 'Guide', 'url' => $this->context->guideUrl . 'guide_index.html']; + $nav[] = ['label' => 'Guide', 'url' => rtrim($this->context->guideUrl, '/') . '/' . BaseRenderer::GUIDE_PREFIX . 'index.html']; } echo Nav::widget([ diff --git a/extensions/apidoc/templates/html/GuideRenderer.php b/extensions/apidoc/templates/html/GuideRenderer.php index dded806..49d0456 100644 --- a/extensions/apidoc/templates/html/GuideRenderer.php +++ b/extensions/apidoc/templates/html/GuideRenderer.php @@ -115,10 +115,9 @@ abstract class GuideRenderer extends BaseGuideRenderer } } - // TODO move these to guide renderer protected function generateGuideFileName($file) { - return 'guide_' . basename($file, '.md') . '.html'; + return static::GUIDE_PREFIX . basename($file, '.md') . '.html'; } public function getGuideReferences() @@ -134,7 +133,7 @@ abstract class GuideRenderer extends BaseGuideRenderer protected function fixMarkdownLinks($content) { - $content = preg_replace('/href\s*=\s*"([^"\/]+)\.md(#.*)?"/i', 'href="guide_\1.html\2"', $content); + $content = preg_replace('/href\s*=\s*"([^"\/]+)\.md(#.*)?"/i', 'href="' . static::GUIDE_PREFIX . '\1.html\2"', $content); return $content; }