Skip to content

Commit ad1dd00

Browse files
committed
Namespaces in landing page
1 parent a84d1be commit ad1dd00

File tree

4 files changed

+89
-21
lines changed

4 files changed

+89
-21
lines changed

src/PHPFUI/InstaDoc/Controller.php

Lines changed: 34 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ class Controller
88
// parameters
99
public const CLASS_NAME = 'c';
1010
public const CSS_FILE = 'CSS';
11-
// pages
1211
public const DOC_PAGE = 'd';
1312
public const FILE_PAGE = 'f';
1413
public const GIT_LIMIT = 'gl';
@@ -20,7 +19,21 @@ class Controller
2019
public const TAB_SIZE = 't';
2120

2221
// allowed page sections
23-
private const SECTIONS = ['Git', 'File', 'Doc', 'Landing', 'Home', 'GitDiff'];
22+
private const SECTIONS = [
23+
'Git',
24+
'File',
25+
'Doc',
26+
'Landing',
27+
'Home',
28+
'GitDiff',
29+
];
30+
31+
private const VALID_CLASS_PAGES = [
32+
Controller::DOC_PAGE,
33+
Controller::FILE_PAGE,
34+
Controller::GIT_PAGE,
35+
];
36+
2437
private const VALID_PARAMETERS = [
2538
Controller::NAMESPACE => '',
2639
Controller::CLASS_NAME => '',
@@ -33,7 +46,11 @@ class Controller
3346
];
3447

3548
// valid static page parameters
36-
private const VALID_STATIC_PARTS = [Controller::NAMESPACE, Controller::CLASS_NAME, Controller::PAGE, ];
49+
private const VALID_STATIC_PARTS = [
50+
Controller::NAMESPACE,
51+
Controller::CLASS_NAME,
52+
Controller::PAGE,
53+
];
3754

3855
private $accordionMenu = null;
3956
private $currentPage = Controller::DOC_PAGE;
@@ -72,7 +89,7 @@ public function addHomePageMarkdown(string $path) : Controller
7289
return $this;
7390
}
7491

75-
public function display() : string
92+
public function display(array $classPagesToShow = Controller::VALID_CLASS_PAGES) : string
7693
{
7794
$page = $this->getPage();
7895
$page->setGenerating($this->generating);
@@ -96,7 +113,7 @@ public function display() : string
96113
}
97114
$section = new Section($this);
98115
$mainColumn->add($section->getBreadCrumbs($fullClassName));
99-
$mainColumn->add($section->getMenu($fullClassName));
116+
$mainColumn->add($section->getMenu($fullClassName, $classPagesToShow));
100117

101118
if (Controller::DOC_PAGE == $this->getParameter(Controller::PAGE))
102119
{
@@ -198,6 +215,18 @@ public function getClassURL(string $namespacedClass) : string
198215
return $url;
199216
}
200217

218+
public function getNamespaceURL(string $namespace) : string
219+
{
220+
while (strlen($namespace) && $namespace[0] == '\\')
221+
{
222+
$namespace = substr($namespace, 1);
223+
}
224+
225+
$url = $this->getUrl([Controller::PAGE => Controller::DOC_PAGE, Controller::NAMESPACE => $namespace] +$this->getParameters());
226+
227+
return $url;
228+
}
229+
201230
public function getFileManager() : FileManager
202231
{
203232
return $this->fileManager;

src/PHPFUI/InstaDoc/NamespaceTree.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,11 @@ private function getMenuTree(NamespaceTree $tree, \PHPFUI\Menu $menu) : \PHPFUI\
274274
return $currentMenu;
275275
}
276276

277+
public function getChildren() : array
278+
{
279+
return $this->children;
280+
}
281+
277282
public static function getAllMDFiles(?NamespaceTree $tree = null, array $files = []) : array
278283
{
279284
if (! $tree)

src/PHPFUI/InstaDoc/Section.php

Lines changed: 31 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public function getClassBase(string $fullClassName) : string
3939
return array_pop($parts);
4040
}
4141

42-
public function getMenu(string $className) : \PHPFUI\Menu
42+
public function getMenu(string $className, array $allowedMenus) : ?\PHPFUI\Menu
4343
{
4444
$menu = new \PHPFUI\Menu();
4545

@@ -50,22 +50,39 @@ public function getMenu(string $className) : \PHPFUI\Menu
5050
{
5151
$this->controller->setParameter($key, $value);
5252
}
53-
$docItem = new \PHPFUI\MenuItem('Docs', $this->controller->getPageUrl(Controller::DOC_PAGE));
54-
$docItem->setActive(Controller::DOC_PAGE == $currentPage);
55-
$menu->addMenuItem($docItem);
56-
$fileItem = new \PHPFUI\MenuItem('File', $this->controller->getPageUrl(Controller::FILE_PAGE));
57-
$fileItem->setActive(Controller::FILE_PAGE == $currentPage);
58-
$menu->addMenuItem($fileItem);
59-
$node = \PHPFUI\InstaDoc\NamespaceTree::findNamespace($parts[Controller::NAMESPACE]);
60-
61-
if ($node->getGit())
53+
54+
if (in_array(Controller::DOC_PAGE, $allowedMenus))
55+
{
56+
$docItem = new \PHPFUI\MenuItem('Docs', $this->controller->getPageUrl(Controller::DOC_PAGE));
57+
$docItem->setActive(Controller::DOC_PAGE == $currentPage);
58+
$menu->addMenuItem($docItem);
59+
}
60+
61+
if (in_array(Controller::FILE_PAGE, $allowedMenus))
62+
{
63+
$fileItem = new \PHPFUI\MenuItem('File', $this->controller->getPageUrl(Controller::FILE_PAGE));
64+
$fileItem->setActive(Controller::FILE_PAGE == $currentPage);
65+
$menu->addMenuItem($fileItem);
66+
}
67+
68+
if (in_array(Controller::GIT_PAGE, $allowedMenus))
69+
{
70+
$node = \PHPFUI\InstaDoc\NamespaceTree::findNamespace($parts[Controller::NAMESPACE]);
71+
if ($node->getGit())
72+
{
73+
$gitItem = new \PHPFUI\MenuItem('Git', $this->controller->getPageUrl(Controller::GIT_PAGE));
74+
$gitItem->setActive(Controller::GIT_PAGE == $currentPage);
75+
$menu->addMenuItem($gitItem);
76+
}
77+
}
78+
79+
// only show the menu if more than one
80+
if (count($menu) > 1)
6281
{
63-
$gitItem = new \PHPFUI\MenuItem('Git', $this->controller->getPageUrl(Controller::GIT_PAGE));
64-
$gitItem->setActive(Controller::GIT_PAGE == $currentPage);
65-
$menu->addMenuItem($gitItem);
82+
return $menu;
6683
}
6784

68-
return $menu;
85+
return null;
6986
}
7087

7188
public function getNamespaceFromClass(string $class) : string

src/PHPFUI/InstaDoc/Section/Landing.php

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,27 @@ public function generate(\PHPFUI\Page $page, string $namespace) : \PHPFUI\Contai
3636
$node = \PHPFUI\InstaDoc\NamespaceTree::findNamespace($namespace);
3737
$ul = new \PHPFUI\UnorderedList();
3838

39-
foreach ($node->getClassFilenames() as $class => $fullPath)
39+
$children = $node->getChildren();
40+
if ($children)
4041
{
41-
$ul->addItem(new \PHPFUI\ListItem(new \PHPFUI\Link($this->controller->getClassURL($class), $class, false)));
42+
$ul->addItem(new \PHPFUI\ListItem('<b>Namespaces</b>'));
43+
foreach ($children as $child)
44+
{
45+
$namespace = $child->getNamespace();
46+
$ul->addItem(new \PHPFUI\ListItem(new \PHPFUI\Link($this->controller->getNamespaceURL($namespace), $namespace, false)));
47+
}
48+
}
49+
50+
$classNames = $node->getClassFilenames();
51+
if ($classNames)
52+
{
53+
$ul->addItem(new \PHPFUI\ListItem('<b>Classes</b>'));
54+
foreach ($node->getClassFilenames() as $class => $fullPath)
55+
{
56+
$ul->addItem(new \PHPFUI\ListItem(new \PHPFUI\Link($this->controller->getClassURL($class), $class, false)));
57+
}
4258
}
59+
4360
$container->add($ul);
4461

4562
return $container;

0 commit comments

Comments
 (0)