mirror of
https://github.com/silverstripe/silverstripe-docsviewer
synced 2024-10-22 11:05:56 +02:00
Fix breadcrumbs
This commit is contained in:
parent
314e504903
commit
1e04aaed28
@ -29,8 +29,6 @@
|
||||
*/
|
||||
class DocumentationManifest {
|
||||
|
||||
const TEMPLATES_DIR = 'documentation';
|
||||
|
||||
/**
|
||||
* @config
|
||||
*
|
||||
@ -119,6 +117,10 @@ class DocumentationManifest {
|
||||
);
|
||||
|
||||
$entity->addVersion($version);
|
||||
|
||||
if(isset($details['DefaultEntity']) && $details['DefaultEntity']) {
|
||||
$entity->setDefaultEntity(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -290,6 +292,9 @@ class DocumentationManifest {
|
||||
$this->entity, $basename, $path
|
||||
);
|
||||
|
||||
// populate any meta data
|
||||
$page->getMarkdown();
|
||||
|
||||
$this->pages[$page->Link()] = array(
|
||||
'title' => $page->getTitle(),
|
||||
'filepath' => $path,
|
||||
@ -302,12 +307,32 @@ class DocumentationManifest {
|
||||
/**
|
||||
* Generate an {@link ArrayList} of the pages to the given page.
|
||||
*
|
||||
* @param DocumentationPage
|
||||
* @param DocumentationEntityLanguage
|
||||
*
|
||||
* @return ArrayList
|
||||
*/
|
||||
public function generateBreadcrumbs($record) {
|
||||
public function generateBreadcrumbs($record, $base) {
|
||||
$output = new ArrayList();
|
||||
|
||||
// @todo
|
||||
$parts = explode('/', $record->getRelativeLink());
|
||||
$output->push(new ArrayData(array(
|
||||
'Link' => $base->Link(),
|
||||
'Title' => $base->Title
|
||||
)));
|
||||
|
||||
$progress = $base->Link();
|
||||
|
||||
foreach($parts as $part) {
|
||||
if($part) {
|
||||
$progress = Controller::join_links($progress, $part, '/');
|
||||
|
||||
$output->push(new ArrayData(array(
|
||||
'Link' => $progress,
|
||||
'Title' => DocumentationHelper::clean_page_name($part)
|
||||
)));
|
||||
}
|
||||
}
|
||||
|
||||
return $output;
|
||||
}
|
||||
@ -380,24 +405,33 @@ class DocumentationManifest {
|
||||
*
|
||||
* @return ArrayList
|
||||
*/
|
||||
public function getChildrenFor($base, $record) {
|
||||
public function getChildrenFor($base, $record, $recursive = true) {
|
||||
$output = new ArrayList();
|
||||
$depth = substr_count($base, '/');
|
||||
|
||||
foreach($this->getPages() as $url => $page) {
|
||||
if(strstr($url, $base) !== false) {
|
||||
// children
|
||||
if(substr_count($url, '/') == ($depth + 1)) {
|
||||
// found a child
|
||||
if($base !== $record) {
|
||||
$mode = (strstr($url, $record) !== false) ? 'current' : 'link';
|
||||
} else {
|
||||
$mode = 'link';
|
||||
}
|
||||
|
||||
$children = new ArrayList();
|
||||
|
||||
if($mode == 'current') {
|
||||
if($recursive) {
|
||||
$children = $this->getChildrenFor($url, $url, false);
|
||||
}
|
||||
}
|
||||
|
||||
$output->push(new ArrayData(array(
|
||||
'Link' => $url,
|
||||
'Title' => $page['title'],
|
||||
'LinkingMode' => $mode
|
||||
'LinkingMode' => $mode,
|
||||
'Children' => $children
|
||||
)));
|
||||
}
|
||||
}
|
||||
|
@ -178,7 +178,10 @@ class DocumentationViewer extends Controller {
|
||||
return $response;
|
||||
}
|
||||
|
||||
if($response->getStatusCode() !== 200) {
|
||||
$action = $request->param('Action');
|
||||
$allowed = $this->config()->allowed_actions;
|
||||
|
||||
if(!in_array($action, $allowed) || $response->getStatusCode() !== 200) {
|
||||
// look up the manifest to see find the nearest match against the
|
||||
// list of the URL. If the URL exists then set that as the current
|
||||
// page to match against.
|
||||
@ -292,6 +295,7 @@ class DocumentationViewer extends Controller {
|
||||
'Title' => $entity->getTitle(),
|
||||
'Link' => $link,
|
||||
'LinkingMode' => $mode,
|
||||
'DefaultEntity' => $entity,
|
||||
'Children' => $children
|
||||
)));
|
||||
}
|
||||
@ -320,7 +324,10 @@ class DocumentationViewer extends Controller {
|
||||
*/
|
||||
public function getBreadcrumbs() {
|
||||
if($this->record) {
|
||||
return $this->getManifest()->generateBreadcrumbs($this->record);
|
||||
return $this->getManifest()->generateBreadcrumbs(
|
||||
$this->record,
|
||||
$this->record->getEntity()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@ -335,8 +342,8 @@ class DocumentationViewer extends Controller {
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getPageTitle() {
|
||||
return ($this->record) ? $this->record->getBreadcrumbTitle() : null;
|
||||
public function getTitle() {
|
||||
return ($this->record) ? $this->record->getTitle() : null;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -42,6 +42,15 @@ class DocumentationEntity extends ViewableData {
|
||||
*/
|
||||
protected $versions;
|
||||
|
||||
/**
|
||||
* If the system is setup to only document one entity then you may only
|
||||
* want to show a single entity in the URL and the sidebar. Set this when
|
||||
* you register the entity with the key `DefaultEntity`
|
||||
*
|
||||
* @var boolean $default_entity
|
||||
*/
|
||||
protected $defaultEntity;
|
||||
|
||||
/**
|
||||
* Constructor. You do not need to pass the langs to this as
|
||||
* it will work out the languages from the filesystem
|
||||
@ -153,10 +162,12 @@ class DocumentationEntity extends ViewableData {
|
||||
* @return string
|
||||
*/
|
||||
public function Link() {
|
||||
return Controller::join_links(
|
||||
Config::inst()->get('DocumentationViewer', 'link_base'),
|
||||
$this->getFolder()
|
||||
);
|
||||
return ($this->getDefaultEntity())
|
||||
? Config::inst()->get('DocumentationViewer', 'link_base')
|
||||
: Controller::join_links(
|
||||
Config::inst()->get('DocumentationViewer', 'link_base'),
|
||||
$this->getFolder()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -178,4 +189,17 @@ class DocumentationEntity extends ViewableData {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param boolean $bool
|
||||
*/
|
||||
public function setDefaultEntity($bool) {
|
||||
$this->defaultEntity = $bool;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getDefaultEntity() {
|
||||
return $this->defaultEntity;
|
||||
}
|
||||
}
|
@ -115,9 +115,7 @@ class DocumentationPage extends ViewableData {
|
||||
public function getMarkdown($removeMetaData = false) {
|
||||
try {
|
||||
if ($md = file_get_contents($this->path)) {
|
||||
if ($this->title != 'Index') {
|
||||
$this->populateMetaDataFromText($md, $removeMetaData);
|
||||
}
|
||||
$this->populateMetaDataFromText($md, $removeMetaData);
|
||||
|
||||
return $md;
|
||||
}
|
||||
|
@ -393,3 +393,15 @@ html {
|
||||
#content .warningBoxBottom a:hover { color: #f3fbfe; }
|
||||
#content .warningBoxBottom ul { margin: 0 0 0 40px; }
|
||||
#content .warningBoxBottom li { background: none; margin-bottom: 0; }
|
||||
|
||||
.doc-breadcrumbs {
|
||||
margin-top: -10px;
|
||||
}
|
||||
.doc-breadcrumbs p {
|
||||
font-size: 11px;
|
||||
margin: 0;
|
||||
color: #999;
|
||||
}
|
||||
.doc-breadcrumbs p a {
|
||||
color: #999;
|
||||
}
|
||||
|
@ -121,8 +121,8 @@ ul.third {
|
||||
|
||||
/*! headers */
|
||||
h1 {
|
||||
font-size: 30px;
|
||||
line-height: 30px;
|
||||
font-size: 35px;
|
||||
line-height: 40px;
|
||||
margin-bottom: 10px;
|
||||
margin-top: 0;
|
||||
letter-spacing: -1px;
|
||||
|
@ -4,7 +4,7 @@
|
||||
<head>
|
||||
<% base_tag %>
|
||||
<meta charset="utf-8" />
|
||||
<title><% if PageTitle %>$PageTitle<% end_if %>$DocumentationTitle</title>
|
||||
<title><% if Title %>$Title – <% end_if %>$DocumentationTitle</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
@ -3,12 +3,25 @@
|
||||
<ul class="nav">
|
||||
<% loop Entities %>
|
||||
<% if DefaultEntity %>
|
||||
<% loop Children %>
|
||||
<li class="$LinkingMode $FirstLast">
|
||||
<a href="$Link" class="top">$Title</a>
|
||||
|
||||
<% if LinkingMode == current %>
|
||||
<% if Children %>
|
||||
<ul class="$FirstLast">
|
||||
<% loop Children %>
|
||||
<li><a href="$Link" class="$LinkingMode">$Title</a></li>
|
||||
<% end_loop %>
|
||||
</ul><% end_if %>
|
||||
<% end_if %>
|
||||
</li>
|
||||
<% end_loop %>
|
||||
<% else %>
|
||||
<li class="$LinkingMode"><a href="$Link" class="top">$Title <% if IsFolder %><span class="is-folder">►</span><% end_if %></a>
|
||||
<li class="$LinkingMode $FirstLast"><a href="$Link" class="top">$Title <% if IsFolder %><span class="is-folder">►</span><% end_if %></a>
|
||||
<% if LinkingMode == current %>
|
||||
<% if Children %>
|
||||
<ul>
|
||||
<ul class="$FirstLast">
|
||||
<% loop Children %>
|
||||
<li><a href="$Link" class="$LinkingMode">$Title</a></li>
|
||||
<% end_loop %>
|
||||
|
Loading…
Reference in New Issue
Block a user