123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- <?php
- /**
- * @link http://www.yiiframework.com/
- * @copyright Copyright (c) 2008 Yii Software LLC
- * @license http://www.yiiframework.com/license/
- */
- namespace yii\apidoc\templates\bootstrap;
- use yii\apidoc\models\TypeDoc;
- /**
- * Common methods for renderers
- */
- trait RendererTrait
- {
- /**
- * @var array official Yii extensions
- */
- public $extensions = [
- 'apidoc',
- 'authclient',
- 'bootstrap',
- 'codeception',
- 'composer',
- 'debug',
- 'elasticsearch',
- 'faker',
- 'gii',
- 'imagine',
- 'jui',
- 'mongodb',
- 'redis',
- 'smarty',
- 'sphinx',
- 'swiftmailer',
- 'twig',
- ];
- /**
- * Returns nav TypeDocs
- * @param TypeDoc $type typedoc to take category from
- * @param TypeDoc[] $types TypeDocs to filter
- * @return array
- */
- public function getNavTypes($type, $types)
- {
- if ($type === null) {
- return $types;
- }
- return $this->filterTypes($types, $this->getTypeCategory($type));
- }
- /**
- * Returns category of TypeDoc
- * @param TypeDoc $type
- * @return string
- */
- protected function getTypeCategory($type)
- {
- $extensions = $this->extensions;
- $navClasses = 'app';
- if (isset($type)) {
- if ($type->name == 'Yii' || $type->name == 'YiiRequirementChecker') {
- $navClasses = 'yii';
- } elseif (strncmp($type->name, 'yii\\', 4) == 0) {
- $navClasses = 'yii';
- $subName = substr($type->name, 4);
- if (($pos = strpos($subName, '\\')) !== false) {
- $subNamespace = substr($subName, 0, $pos);
- if (in_array($subNamespace, $extensions)) {
- $navClasses = $subNamespace;
- }
- }
- }
- }
- return $navClasses;
- }
- /**
- * Returns types of a given class
- *
- * @param TypeDoc[] $types
- * @param string $navClasses
- * @return array
- */
- protected function filterTypes($types, $navClasses)
- {
- switch ($navClasses) {
- case 'app':
- $types = array_filter($types, function ($val) {
- return strncmp($val->name, 'yii\\', 4) !== 0;
- });
- break;
- case 'yii':
- $self = $this;
- $types = array_filter($types, function ($val) use ($self) {
- if ($val->name == 'Yii' || $val->name == 'YiiRequirementChecker') {
- return true;
- }
- if (strlen($val->name) < 5) {
- return false;
- }
- $subName = substr($val->name, 4, strpos($val->name, '\\', 5) - 4);
- return strncmp($val->name, 'yii\\', 4) === 0 && !in_array($subName, $self->extensions);
- });
- break;
- default:
- $types = array_filter($types, function ($val) use ($navClasses) {
- return strncmp($val->name, "yii\\$navClasses\\", strlen("yii\\$navClasses\\")) === 0;
- });
- }
- return $types;
- }
- }
|