mirror of
https://github.com/silverstripe/silverstripe-docsviewer
synced 2024-10-22 11:05:56 +02:00
Fix some CBF linting issues. Improved a couple of doc blocks.
This commit is contained in:
parent
a9130a33db
commit
909cfd695f
@ -156,8 +156,8 @@ class DocumentationManifest
|
||||
foreach ($langs as $k => $lang) {
|
||||
if (isset($possible[$lang])) {
|
||||
/**
|
||||
* @var DocumentationEntity $entity
|
||||
*/
|
||||
* @var DocumentationEntity $entity
|
||||
*/
|
||||
$entity = Injector::inst()->create(
|
||||
'DocumentationEntity', $key
|
||||
);
|
||||
@ -769,8 +769,8 @@ class DocumentationManifest
|
||||
$output = new ArrayList();
|
||||
|
||||
/**
|
||||
* @var DocumentationEntity $check
|
||||
*/
|
||||
* @var DocumentationEntity $check
|
||||
*/
|
||||
foreach ($this->getEntities() as $check) {
|
||||
if ($check->getKey() == $entity->getKey()) {
|
||||
if ($check->getLanguage() == $entity->getLanguage()) {
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
/**
|
||||
* Parser wrapping the Markdown Extra parser.
|
||||
*
|
||||
*
|
||||
* @see http://michelf.com/projects/php-markdown/extra/
|
||||
*
|
||||
* @package docsviewer
|
||||
@ -16,25 +16,25 @@ class DocumentationParser
|
||||
* @var array
|
||||
*/
|
||||
public static $heading_counts = array();
|
||||
|
||||
|
||||
/**
|
||||
* Parse a given path to the documentation for a file. Performs a case
|
||||
* insensitive lookup on the file system. Automatically appends the file
|
||||
* Parse a given path to the documentation for a file. Performs a case
|
||||
* insensitive lookup on the file system. Automatically appends the file
|
||||
* extension to one of the markdown extensions as well so /install/ in a
|
||||
* web browser will match /install.md or /INSTALL.md.
|
||||
*
|
||||
*
|
||||
* Filepath: /var/www/myproject/src/cms/en/folder/subfolder/page.md
|
||||
* URL: http://myhost/mywebroot/dev/docs/2.4/cms/en/folder/subfolder/page
|
||||
* Webroot: http://myhost/mywebroot/
|
||||
* Baselink: dev/docs/2.4/cms/en/
|
||||
* Pathparts: folder/subfolder/page
|
||||
*
|
||||
* @param DocumentationPage $page
|
||||
* @param String $baselink Link relative to webroot, up until the "root" of the module. Necessary to rewrite relative links
|
||||
* of the module. Necessary to rewrite relative
|
||||
* links
|
||||
*
|
||||
* @return String
|
||||
* @param DocumentationPage $page
|
||||
* @param string $baselink Link relative to webroot, up until the "root" of the module.
|
||||
* Necessary to rewrite relative links of the module. Necessary
|
||||
* to rewrite relative links
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function parse(DocumentationPage $page, $baselink = null)
|
||||
{
|
||||
@ -43,7 +43,7 @@ class DocumentationParser
|
||||
}
|
||||
|
||||
$md = $page->getMarkdown(true);
|
||||
|
||||
|
||||
// Pre-processing
|
||||
$md = self::rewrite_image_links($md, $page);
|
||||
$md = self::rewrite_relative_links($md, $page, $baselink);
|
||||
@ -60,7 +60,7 @@ class DocumentationParser
|
||||
|
||||
return $text;
|
||||
}
|
||||
|
||||
|
||||
public static function rewrite_code_blocks($md)
|
||||
{
|
||||
$started = false;
|
||||
@ -148,8 +148,8 @@ class DocumentationParser
|
||||
var_dump('Inner line of code block');
|
||||
}
|
||||
|
||||
// still inside a colon based block, if the line is only whitespace
|
||||
// then continue with with it. We can continue with it for now as
|
||||
// still inside a colon based block, if the line is only whitespace
|
||||
// then continue with with it. We can continue with it for now as
|
||||
// it'll be tidied up later in the $end section.
|
||||
$inner = true;
|
||||
$output[$i] = $line;
|
||||
@ -210,7 +210,7 @@ class DocumentationParser
|
||||
|
||||
return $output;
|
||||
}
|
||||
|
||||
|
||||
public static function rewrite_image_links($md, $page)
|
||||
{
|
||||
// Links with titles
|
||||
@ -229,14 +229,14 @@ class DocumentationParser
|
||||
foreach ($images[0] as $i => $match) {
|
||||
$title = $images[1][$i];
|
||||
$url = $images[2][$i];
|
||||
|
||||
|
||||
// Don't process absolute links (based on protocol detection)
|
||||
$urlParts = parse_url($url);
|
||||
|
||||
if ($urlParts && isset($urlParts['scheme'])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
// Rewrite URL (relative or absolute)
|
||||
$baselink = DocumentationHelper::relativePath(
|
||||
DocumentationHelper::normalizePath(
|
||||
@ -262,13 +262,13 @@ class DocumentationParser
|
||||
while (strpos($relativeUrl, '/..') !== false) {
|
||||
$relativeUrl = preg_replace('/\w+\/\.\.\//', '', $relativeUrl);
|
||||
}
|
||||
|
||||
|
||||
// Make it absolute again
|
||||
$absoluteUrl = Controller::join_links(
|
||||
Director::absoluteBaseURL(),
|
||||
$relativeUrl
|
||||
);
|
||||
|
||||
|
||||
// Replace any double slashes (apart from protocol)
|
||||
// $absoluteUrl = preg_replace('/([^:])\/{2,}/', '$1/', $absoluteUrl);
|
||||
|
||||
@ -280,20 +280,20 @@ class DocumentationParser
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return $md;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Rewrite links with special "api:" prefix to html as in the following example:
|
||||
*
|
||||
* (1) [api:DataObject] gets re-written to
|
||||
* (1) [api:DataObject] gets re-written to
|
||||
* <a href="https://api.silverstripe.org/search/lookup/?q=DataObject&version=2.4&module=framework">DataObject</a>
|
||||
* (2) [api:DataObject::$defaults] gets re-written to
|
||||
* <a href="https://api.silverstripe.org/search/lookup/?q=DataObject::$defaults&version=2.4&module=framework">DataObject::$defaults</a>
|
||||
* (3) [api:DataObject::populateDefaults()] gets re-written to
|
||||
* <a href="https://api.silverstripe.org/search/lookup/?q=DataObject::populateDefaults()&version=2.4&module=framework">DataObject::$defaults</a>
|
||||
* (4) [Title](api:DataObject) gets re-written to
|
||||
* (4) [Title](api:DataObject) gets re-written to
|
||||
* <a href="https://api.silverstripe.org/search/lookup/?q=DataObject&version=2.4&module=framework">Title</a>
|
||||
* (5) [Title](api:DataObject::$defaults) gets re-written to
|
||||
* <a href="https://api.silverstripe.org/search/lookup/?q=DataObject::$defaults&version=2.4&module=framework">Title</a>
|
||||
@ -302,9 +302,9 @@ class DocumentationParser
|
||||
*
|
||||
* The above api links can be enclosed in backticks.
|
||||
*
|
||||
* The markdown parser gets confused by the extra pair of parentheses in links of the form [DataObject](api:DataObject::populateDefaults()) so
|
||||
* The markdown parser gets confused by the extra pair of parentheses in links of the form [DataObject](api:DataObject::populateDefaults()) so
|
||||
* all links are re-written as html markup instead of markdown [Title](url). This also prevents other markdown parsing problems.
|
||||
*
|
||||
*
|
||||
* @param String $markdown
|
||||
* @param DocumentationPage $doc_page
|
||||
* @return String
|
||||
@ -334,7 +334,7 @@ class DocumentationParser
|
||||
$title = $links[1][$i];
|
||||
$link = $links[1][$i];
|
||||
// change backticked links to avoid being parsed in the same way as non-backticked links
|
||||
$markdown = str_replace('`'.$match.'`', 'XYZ'.$link.'XYZ', $markdown);
|
||||
$markdown = str_replace('`'.$match.'`', 'XYZ'.$link.'XYZ', $markdown);
|
||||
} else {
|
||||
$title = $links[1][$i];
|
||||
$link = $links[2][$i];
|
||||
@ -347,7 +347,7 @@ class DocumentationParser
|
||||
}
|
||||
}
|
||||
|
||||
// recover backticked links with no titles
|
||||
// recover backticked links with no titles
|
||||
preg_match_all('#XYZ(.*)?XYZ#', $markdown, $links);
|
||||
if($links) {
|
||||
foreach($links[0] as $i => $match) {
|
||||
@ -369,7 +369,7 @@ class DocumentationParser
|
||||
return $markdown;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
@ -377,10 +377,10 @@ class DocumentationParser
|
||||
{
|
||||
$re = '/^\#+(.*)/m';
|
||||
$md = preg_replace_callback($re, array('DocumentationParser', '_rewrite_heading_anchors_callback'), $md);
|
||||
|
||||
|
||||
return $md;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
@ -402,10 +402,10 @@ class DocumentationParser
|
||||
|
||||
return sprintf("%s {#%s}", preg_replace('/\\r\\n|\\r|\\n/', '', $heading), self::generate_html_id($headingText));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Generate an html element id from a string
|
||||
*
|
||||
*
|
||||
* @return String
|
||||
*/
|
||||
public static function generate_html_id($title)
|
||||
@ -417,13 +417,13 @@ class DocumentationParser
|
||||
$t = preg_replace('/-+/', '-', $t);
|
||||
$t = trim($t, '-');
|
||||
$t = strtolower($t);
|
||||
|
||||
|
||||
return $t;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Resolves all relative links within markdown.
|
||||
*
|
||||
*
|
||||
* @param String $md Markdown content
|
||||
* @param DocumentationPage $page
|
||||
*
|
||||
@ -461,20 +461,20 @@ class DocumentationParser
|
||||
if ($relativeLink == ".") {
|
||||
$relativeLink = '';
|
||||
}
|
||||
|
||||
|
||||
// file base link
|
||||
$fileBaseLink = DocumentationHelper::relativePath(DocumentationHelper::normalizePath(dirname($page->getPath())));
|
||||
|
||||
|
||||
if ($matches) {
|
||||
foreach ($matches[0] as $i => $match) {
|
||||
$title = $matches[2][$i];
|
||||
$url = $matches[3][$i];
|
||||
|
||||
|
||||
// Don't process API links
|
||||
if (preg_match('/^api:/', $url)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
// Don't process absolute links (based on protocol detection)
|
||||
$urlParts = parse_url($url);
|
||||
if ($urlParts && isset($urlParts['scheme'])) {
|
||||
@ -501,12 +501,12 @@ class DocumentationParser
|
||||
$relativeUrl = Controller::join_links($baselink, $relativeLink, $url, '/');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Resolve relative paths
|
||||
while (strpos($relativeUrl, '..') !== false) {
|
||||
$relativeUrl = preg_replace('/[-\w]+\/\.\.\//', '', $relativeUrl);
|
||||
}
|
||||
|
||||
|
||||
// Replace any double slashes (apart from protocol)
|
||||
$relativeUrl = preg_replace('/([^:])\/{2,}/', '$1/', $relativeUrl);
|
||||
|
||||
@ -518,10 +518,10 @@ class DocumentationParser
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return $md;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Strips out the metadata for a page
|
||||
*
|
||||
|
@ -117,14 +117,14 @@ class DocumentationViewer extends Controller implements PermissionProvider
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
/**
|
||||
* Permission provider to allow more control over who can view docs
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
|
||||
public function providePermissions()
|
||||
|
||||
public function providePermissions()
|
||||
{
|
||||
return array(
|
||||
'CMS_VIEW_DEVDOCS' => array(
|
||||
@ -400,11 +400,11 @@ class DocumentationViewer extends Controller implements PermissionProvider
|
||||
$output->push(
|
||||
new ArrayData(
|
||||
array(
|
||||
'Title' => $entity->getTitle(),
|
||||
'Title' => $entity->getTitle(),
|
||||
'Link' => $link,
|
||||
'LinkingMode' => $mode,
|
||||
'LinkingMode' => $mode,
|
||||
'DefaultEntity' => $entity->getIsDefaultEntity(),
|
||||
'Children' => $children
|
||||
'Children' => $children
|
||||
)
|
||||
)
|
||||
);
|
||||
@ -467,7 +467,7 @@ class DocumentationViewer extends Controller implements PermissionProvider
|
||||
return $this->customise(
|
||||
new ArrayData(
|
||||
array(
|
||||
'Children' => $children
|
||||
'Children' => $children
|
||||
)
|
||||
)
|
||||
)->renderWith('Includes/DocumentationPages');
|
||||
@ -587,9 +587,9 @@ class DocumentationViewer extends Controller implements PermissionProvider
|
||||
$output->push(
|
||||
new ArrayData(
|
||||
array(
|
||||
'Link' => Controller::join_links($baseLink, $url),
|
||||
'Title' => $page['title'],
|
||||
'FirstLetter' => $first
|
||||
'Link' => Controller::join_links($baseLink, $url),
|
||||
'Title' => $page['title'],
|
||||
'FirstLetter' => $first
|
||||
)
|
||||
)
|
||||
);
|
||||
@ -622,14 +622,14 @@ class DocumentationViewer extends Controller implements PermissionProvider
|
||||
* - %version%
|
||||
* - %entity%
|
||||
* - %path%
|
||||
* - %lang%
|
||||
* - %lang%
|
||||
*
|
||||
* For example to provide an edit link to the framework module in github:
|
||||
*
|
||||
* <code>
|
||||
* DocumentationViewer::set_edit_link(
|
||||
* 'framework',
|
||||
* 'https://github.com/silverstripe/%entity%/edit/%version%/docs/%lang%/%path%',
|
||||
* 'framework',
|
||||
* 'https://github.com/silverstripe/%entity%/edit/%version%/docs/%lang%/%path%',
|
||||
* $opts
|
||||
* ));
|
||||
* </code>
|
||||
@ -658,8 +658,6 @@ class DocumentationViewer extends Controller implements PermissionProvider
|
||||
if ($page) {
|
||||
$entity = $page->getEntity();
|
||||
|
||||
|
||||
|
||||
if ($entity && isset(self::$edit_links[strtolower($entity->title)])) {
|
||||
|
||||
// build the edit link, using the version defined
|
||||
@ -671,7 +669,7 @@ class DocumentationViewer extends Controller implements PermissionProvider
|
||||
}
|
||||
|
||||
|
||||
if ($version == "trunk" && (isset($url['options']['rewritetrunktomaster']))) {
|
||||
if ($version == 'trunk' && (isset($url['options']['rewritetrunktomaster']))) {
|
||||
if ($url['options']['rewritetrunktomaster']) {
|
||||
$version = "master";
|
||||
}
|
||||
@ -699,7 +697,7 @@ class DocumentationViewer extends Controller implements PermissionProvider
|
||||
* Returns the next page. Either retrieves the sibling of the current page
|
||||
* or return the next sibling of the parent page.
|
||||
*
|
||||
* @return DocumentationPage
|
||||
* @return DocumentationPage|null
|
||||
*/
|
||||
public function getNextPage()
|
||||
{
|
||||
@ -714,7 +712,7 @@ class DocumentationViewer extends Controller implements PermissionProvider
|
||||
* Returns the previous page. Either returns the previous sibling or the
|
||||
* parent of this page
|
||||
*
|
||||
* @return DocumentationPage
|
||||
* @return DocumentationPage|null
|
||||
*/
|
||||
public function getPreviousPage()
|
||||
{
|
||||
@ -726,7 +724,7 @@ class DocumentationViewer extends Controller implements PermissionProvider
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
* @return string|void
|
||||
*/
|
||||
public function getGoogleAnalyticsCode()
|
||||
{
|
||||
@ -745,6 +743,9 @@ class DocumentationViewer extends Controller implements PermissionProvider
|
||||
return $this->config()->get('documentation_title');
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getDocumentationBaseHref()
|
||||
{
|
||||
return Config::inst()->get('DocumentationViewer', 'link_base');
|
||||
|
@ -10,14 +10,14 @@
|
||||
* <code>
|
||||
* StaticExporter:
|
||||
* extensions:
|
||||
* - DocumentationStaticPublisherExtension
|
||||
* - DocumentationStaticPublisherExtension
|
||||
* </code>
|
||||
*
|
||||
* If you don't plan on using static publisher for anything else and you have
|
||||
* the cms module installed, make sure you disable that from being published.
|
||||
*
|
||||
* If you don't plan on using static publisher for anything else and you have
|
||||
* the cms module installed, make sure you disable that from being published.
|
||||
*
|
||||
* Again, in your applications config.yml file
|
||||
*
|
||||
*
|
||||
* <code>
|
||||
* StaticExporter:
|
||||
* disable_sitetree_export: true
|
||||
@ -30,7 +30,7 @@ class DocumentationStaticPublisherExtension extends Extension
|
||||
public function alterExportUrls(&$urls)
|
||||
{
|
||||
$manifest = new DocumentationManifest(true);
|
||||
|
||||
|
||||
foreach ($manifest->getPages() as $url => $page) {
|
||||
$urls[$url] = $url;
|
||||
}
|
||||
|
@ -1,14 +1,15 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Check to see if the currently accessed version is out of date or perhaps a
|
||||
* future version rather than the stable edition.
|
||||
*
|
||||
* @return false|ArrayData
|
||||
* @package docsviewer
|
||||
*/
|
||||
|
||||
class DocumentationViewerVersionWarning extends Extension
|
||||
{
|
||||
/**
|
||||
* Check to see if the currently accessed version is out of date or perhaps a
|
||||
* future version rather than the stable edition.
|
||||
*
|
||||
* @return false|ArrayData
|
||||
*/
|
||||
public function VersionWarning()
|
||||
{
|
||||
$page = $this->owner->getPage();
|
||||
@ -16,7 +17,7 @@ class DocumentationViewerVersionWarning extends Extension
|
||||
if (!$page) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
$entity = $page->getEntity();
|
||||
|
||||
if (!$entity) {
|
||||
@ -32,12 +33,12 @@ class DocumentationViewerVersionWarning extends Extension
|
||||
$stable = $this->owner->getManifest()->getStableVersion($entity);
|
||||
$compare = $entity->compare($stable);
|
||||
|
||||
if ($entity->getVersion() == "master" || $compare > 0) {
|
||||
if ($entity->getVersion() == 'master' || $compare > 0) {
|
||||
return $this->owner->customise(
|
||||
new ArrayData(
|
||||
array(
|
||||
'FutureRelease' => true,
|
||||
'StableVersion' => DBField::create_field('HTMLText', $stable->getVersion())
|
||||
'FutureRelease' => true,
|
||||
'StableVersion' => DBField::create_field('HTMLText', $stable->getVersion())
|
||||
)
|
||||
)
|
||||
);
|
||||
@ -45,13 +46,13 @@ class DocumentationViewerVersionWarning extends Extension
|
||||
return $this->owner->customise(
|
||||
new ArrayData(
|
||||
array(
|
||||
'OutdatedRelease' => true,
|
||||
'StableVersion' => DBField::create_field('HTMLText', $stable->getVersion())
|
||||
'OutdatedRelease' => true,
|
||||
'StableVersion' => DBField::create_field('HTMLText', $stable->getVersion())
|
||||
)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -255,7 +255,7 @@ class DocumentationEntity extends ViewableData
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getVersionTitle()
|
||||
public function getVersionTitle()
|
||||
{
|
||||
return $this->versionTitle;
|
||||
}
|
||||
@ -266,7 +266,7 @@ class DocumentationEntity extends ViewableData
|
||||
* @param string $title
|
||||
* @return $this
|
||||
*/
|
||||
public function setVersionTitle($title)
|
||||
public function setVersionTitle($title)
|
||||
{
|
||||
$this->versionTitle = $title;
|
||||
return $this;
|
||||
@ -278,7 +278,7 @@ class DocumentationEntity extends ViewableData
|
||||
* @param bool $archived
|
||||
* @return $this
|
||||
*/
|
||||
public function setIsArchived($archived)
|
||||
public function setIsArchived($archived)
|
||||
{
|
||||
$this->archived = $archived;
|
||||
return $this;
|
||||
@ -287,7 +287,7 @@ class DocumentationEntity extends ViewableData
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function getIsArchived()
|
||||
public function getIsArchived()
|
||||
{
|
||||
return $this->archived;
|
||||
}
|
||||
@ -320,8 +320,7 @@ class DocumentationEntity extends ViewableData
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $path
|
||||
*
|
||||
* @param string $path
|
||||
* @return $this
|
||||
*/
|
||||
public function setPath($path)
|
||||
@ -350,8 +349,6 @@ class DocumentationEntity extends ViewableData
|
||||
return $this->stable;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Returns an integer value based on if a given version is the latest
|
||||
* version. Will return -1 for if the version is older, 0 if versions are
|
||||
@ -367,7 +364,7 @@ class DocumentationEntity extends ViewableData
|
||||
|
||||
// Normalise versions prior to comparison
|
||||
$dots = substr_count($v1, '.') - substr_count($v2, '.');
|
||||
while($dots > 0) {
|
||||
while ($dots > 0) {
|
||||
$dots--;
|
||||
$v2 .= '.99999';
|
||||
}
|
||||
@ -384,10 +381,10 @@ class DocumentationEntity extends ViewableData
|
||||
public function toMap()
|
||||
{
|
||||
return array(
|
||||
'Key' => $this->key,
|
||||
'Path' => $this->getPath(),
|
||||
'Version' => $this->getVersion(),
|
||||
'Branch' => $this->getBranch(),
|
||||
'Key' => $this->key,
|
||||
'Path' => $this->getPath(),
|
||||
'Version' => $this->getVersion(),
|
||||
'Branch' => $this->getBranch(),
|
||||
'IsStable' => $this->getIsStable(),
|
||||
'Language' => $this->getLanguage()
|
||||
);
|
||||
|
@ -1,12 +1,12 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* A specific documentation page within a {@link DocumentationEntity}.
|
||||
* A specific documentation page within a {@link DocumentationEntity}.
|
||||
*
|
||||
* Maps to a file on the file system. Note that the URL to access this page may
|
||||
* not always be the file name. If the file contains meta data with a nicer URL
|
||||
* sthen it will use that.
|
||||
*
|
||||
* Maps to a file on the file system. Note that the URL to access this page may
|
||||
* not always be the file name. If the file contains meta data with a nicer URL
|
||||
* sthen it will use that.
|
||||
*
|
||||
* @package docsviewer
|
||||
* @subpackage model
|
||||
*/
|
||||
@ -55,7 +55,7 @@ class DocumentationPage extends ViewableData
|
||||
{
|
||||
return DocumentationHelper::get_extension($this->filename);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param string - has to be plain text for open search compatibility.
|
||||
*
|
||||
@ -64,17 +64,19 @@ class DocumentationPage extends ViewableData
|
||||
public function getBreadcrumbTitle($divider = ' - ')
|
||||
{
|
||||
$pathParts = explode('/', trim($this->getRelativePath(), '/'));
|
||||
|
||||
|
||||
// from the page from this
|
||||
array_pop($pathParts);
|
||||
|
||||
// add the module to the breadcrumb trail.
|
||||
$pathParts[] = $this->entity->getTitle();
|
||||
|
||||
|
||||
$titleParts = array_map(
|
||||
array(
|
||||
'DocumentationHelper', 'clean_page_name'
|
||||
), $pathParts
|
||||
'DocumentationHelper',
|
||||
'clean_page_name'
|
||||
),
|
||||
$pathParts
|
||||
);
|
||||
|
||||
$titleParts = array_filter(
|
||||
@ -91,7 +93,7 @@ class DocumentationPage extends ViewableData
|
||||
|
||||
return implode($divider, $titleParts);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return DocumentationEntity
|
||||
*/
|
||||
@ -111,7 +113,7 @@ class DocumentationPage extends ViewableData
|
||||
|
||||
$page = DocumentationHelper::clean_page_name($this->filename);
|
||||
|
||||
if ($page == "Index") {
|
||||
if ($page == 'Index') {
|
||||
return $this->getTitleFromFolder();
|
||||
}
|
||||
|
||||
@ -124,7 +126,7 @@ class DocumentationPage extends ViewableData
|
||||
$entity = $this->getEntity()->getPath();
|
||||
|
||||
$folder = str_replace('index.md', '', $folder);
|
||||
|
||||
|
||||
// if it's the root of the entity then we want to use the entity name
|
||||
// otherwise we'll get 'En' for the entity folder
|
||||
if ($folder == $entity) {
|
||||
@ -136,7 +138,7 @@ class DocumentationPage extends ViewableData
|
||||
|
||||
return DocumentationHelper::clean_page_name($folderName);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
@ -146,25 +148,25 @@ class DocumentationPage extends ViewableData
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the raw markdown for a given documentation page.
|
||||
* Return the raw markdown for a given documentation page.
|
||||
*
|
||||
* @param boolean $removeMetaData
|
||||
*
|
||||
* @return string
|
||||
* @return string|false
|
||||
*/
|
||||
public function getMarkdown($removeMetaData = false)
|
||||
{
|
||||
try {
|
||||
if (is_file($this->getPath()) && $md = file_get_contents($this->getPath())) {
|
||||
$this->populateMetaDataFromText($md, $removeMetaData);
|
||||
|
||||
|
||||
return $md;
|
||||
}
|
||||
|
||||
$this->read = true;
|
||||
} catch (InvalidArgumentException $e) {
|
||||
}
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -175,19 +177,22 @@ class DocumentationPage extends ViewableData
|
||||
$this->$key = $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getIntroduction()
|
||||
{
|
||||
if (!$this->read) {
|
||||
$this->getMarkdown();
|
||||
}
|
||||
|
||||
|
||||
return $this->introduction;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Parse a file and return the parsed HTML version.
|
||||
*
|
||||
* @param string $baselink
|
||||
* @param string $baselink
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
@ -200,10 +205,10 @@ class DocumentationPage extends ViewableData
|
||||
|
||||
return $html;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* This should return the link from the entity root to the page. The link
|
||||
* value has the cleaned version of the folder names. See
|
||||
* value has the cleaned version of the folder names. See
|
||||
* {@link getRelativePath()} for the actual file path.
|
||||
*
|
||||
* @return string
|
||||
@ -213,10 +218,12 @@ class DocumentationPage extends ViewableData
|
||||
$path = $this->getRelativePath();
|
||||
$url = explode('/', $path);
|
||||
$url = implode(
|
||||
'/', array_map(
|
||||
'/',
|
||||
array_map(
|
||||
function ($a) {
|
||||
return DocumentationHelper::clean_page_url($a);
|
||||
}, $url
|
||||
},
|
||||
$url
|
||||
)
|
||||
);
|
||||
|
||||
@ -245,7 +252,7 @@ class DocumentationPage extends ViewableData
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the URL that will be required for the user to hit to view the
|
||||
* Returns the URL that will be required for the user to hit to view the
|
||||
* given document base name.
|
||||
*
|
||||
* @param boolean $short If true, will attempt to return a short version of the url
|
||||
@ -261,11 +268,11 @@ class DocumentationPage extends ViewableData
|
||||
), '/'
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Return metadata from the first html block in the page, then remove the
|
||||
* Return metadata from the first html block in the page, then remove the
|
||||
* block on request
|
||||
*
|
||||
*
|
||||
* @param DocumentationPage $md
|
||||
* @param bool $remove
|
||||
*/
|
||||
@ -278,11 +285,11 @@ class DocumentationPage extends ViewableData
|
||||
|
||||
if ($matches && $block[1]) {
|
||||
$metaDataFound = false;
|
||||
|
||||
|
||||
// find the key/value pairs
|
||||
$intPattern = '/(?<key>[A-Za-z][A-Za-z0-9_-]+)[\t]*:[\t]*(?<value>[^:\n\r\/]+)/x';
|
||||
$matches = preg_match_all($intPattern, $block[1], $meta);
|
||||
|
||||
|
||||
foreach ($meta['key'] as $index => $key) {
|
||||
if (isset($meta['value'][$index])) {
|
||||
// check if a property exists for this key
|
||||
@ -293,7 +300,7 @@ class DocumentationPage extends ViewableData
|
||||
}
|
||||
}
|
||||
|
||||
// optionally remove the metadata block (only on the page that
|
||||
// optionally remove the metadata block (only on the page that
|
||||
// is displayed)
|
||||
if ($metaDataFound && $removeMetaData) {
|
||||
$md = preg_replace($extPattern, '', $md);
|
||||
@ -307,6 +314,9 @@ class DocumentationPage extends ViewableData
|
||||
return $this->entity->getVersion();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function __toString()
|
||||
{
|
||||
return sprintf(get_class($this) .': %s)', $this->getPath());
|
||||
|
@ -9,7 +9,8 @@ class DocumentationHelperTests extends SapphireTest
|
||||
public function testCleanName()
|
||||
{
|
||||
$this->assertEquals(
|
||||
"File path", DocumentationHelper::clean_page_name(
|
||||
'File path',
|
||||
DocumentationHelper::clean_page_name(
|
||||
'00_file-path.md'
|
||||
)
|
||||
);
|
||||
@ -18,13 +19,15 @@ class DocumentationHelperTests extends SapphireTest
|
||||
public function testCleanUrl()
|
||||
{
|
||||
$this->assertEquals(
|
||||
"some_path", DocumentationHelper::clean_page_url(
|
||||
'some_path',
|
||||
DocumentationHelper::clean_page_url(
|
||||
'Some Path'
|
||||
)
|
||||
);
|
||||
|
||||
$this->assertEquals(
|
||||
"somefilepath", DocumentationHelper::clean_page_url(
|
||||
'somefilepath',
|
||||
DocumentationHelper::clean_page_url(
|
||||
'00_SomeFilePath.md'
|
||||
)
|
||||
);
|
||||
@ -33,19 +36,22 @@ class DocumentationHelperTests extends SapphireTest
|
||||
public function testTrimSortNumber()
|
||||
{
|
||||
$this->assertEquals(
|
||||
'file', DocumentationHelper::trim_sort_number(
|
||||
'file',
|
||||
DocumentationHelper::trim_sort_number(
|
||||
'0_file'
|
||||
)
|
||||
);
|
||||
|
||||
$this->assertEquals(
|
||||
'2.1', DocumentationHelper::trim_sort_number(
|
||||
'2.1',
|
||||
DocumentationHelper::trim_sort_number(
|
||||
'2.1'
|
||||
)
|
||||
);
|
||||
|
||||
$this->assertEquals(
|
||||
'dev/tasks/2.1', DocumentationHelper::trim_sort_number(
|
||||
'dev/tasks/2.1',
|
||||
DocumentationHelper::trim_sort_number(
|
||||
'dev/tasks/2.1'
|
||||
)
|
||||
);
|
||||
@ -54,13 +60,15 @@ class DocumentationHelperTests extends SapphireTest
|
||||
public function testTrimExtension()
|
||||
{
|
||||
$this->assertEquals(
|
||||
'file', DocumentationHelper::trim_extension_off(
|
||||
'file',
|
||||
DocumentationHelper::trim_extension_off(
|
||||
'file.md'
|
||||
)
|
||||
);
|
||||
|
||||
$this->assertEquals(
|
||||
'dev/path/file', DocumentationHelper::trim_extension_off(
|
||||
'dev/path/file',
|
||||
DocumentationHelper::trim_extension_off(
|
||||
'dev/path/file.md'
|
||||
)
|
||||
);
|
||||
@ -69,19 +77,22 @@ class DocumentationHelperTests extends SapphireTest
|
||||
public function testGetExtension()
|
||||
{
|
||||
$this->assertEquals(
|
||||
'md', DocumentationHelper::get_extension(
|
||||
'md',
|
||||
DocumentationHelper::get_extension(
|
||||
'file.md'
|
||||
)
|
||||
);
|
||||
|
||||
$this->assertEquals(
|
||||
'md', DocumentationHelper::get_extension(
|
||||
'md',
|
||||
DocumentationHelper::get_extension(
|
||||
'dev/tasks/file.md'
|
||||
)
|
||||
);
|
||||
|
||||
$this->assertEquals(
|
||||
'txt', DocumentationHelper::get_extension(
|
||||
'txt',
|
||||
DocumentationHelper::get_extension(
|
||||
'dev/tasks/file.txt'
|
||||
)
|
||||
);
|
||||
|
@ -14,7 +14,7 @@ class DocumentationManifestTests extends SapphireTest
|
||||
|
||||
Config::nest();
|
||||
|
||||
// explicitly use dev/docs. Custom paths should be tested separately
|
||||
// explicitly use dev/docs. Custom paths should be tested separately
|
||||
Config::inst()->update(
|
||||
'DocumentationViewer', 'link_base', 'dev/docs'
|
||||
);
|
||||
@ -57,11 +57,11 @@ class DocumentationManifestTests extends SapphireTest
|
||||
|
||||
$this->manifest = new DocumentationManifest(true);
|
||||
}
|
||||
|
||||
|
||||
public function tearDown()
|
||||
{
|
||||
parent::tearDown();
|
||||
|
||||
|
||||
Config::unnest();
|
||||
}
|
||||
|
||||
@ -108,7 +108,8 @@ class DocumentationManifestTests extends SapphireTest
|
||||
// get next page at the end of one subfolder goes back up to the top
|
||||
// most directory
|
||||
$this->assertStringEndsWith(
|
||||
'2.3/test/', $this->manifest->getNextPage(
|
||||
'2.3/test/',
|
||||
$this->manifest->getNextPage(
|
||||
DOCSVIEWER_PATH . '/tests/docs/en/subfolder/subsubfolder/subsubpage.md',
|
||||
DOCSVIEWER_PATH . '/tests/docs/en/'
|
||||
)->Link
|
||||
@ -116,7 +117,8 @@ class DocumentationManifestTests extends SapphireTest
|
||||
|
||||
// after sorting, 2 is shown.
|
||||
$this->assertContains(
|
||||
'/intermediate/', $this->manifest->getNextPage(
|
||||
'/intermediate/',
|
||||
$this->manifest->getNextPage(
|
||||
DOCSVIEWER_PATH . '/tests/docs/en/sort/01-basic.md',
|
||||
DOCSVIEWER_PATH . '/tests/docs/en/'
|
||||
)->Link
|
||||
@ -125,7 +127,8 @@ class DocumentationManifestTests extends SapphireTest
|
||||
|
||||
// next gets the following URL
|
||||
$this->assertContains(
|
||||
'/test/', $this->manifest->getNextPage(
|
||||
'/test/',
|
||||
$this->manifest->getNextPage(
|
||||
DOCSVIEWER_PATH . '/tests/docs-v2.4/en/index.md',
|
||||
DOCSVIEWER_PATH . '/tests/docs-v2.4/en/'
|
||||
)->Link
|
||||
@ -145,7 +148,8 @@ class DocumentationManifestTests extends SapphireTest
|
||||
{
|
||||
// goes right into subfolders
|
||||
$this->assertContains(
|
||||
'subfolder/subsubfolder/subsubpage', $this->manifest->getPreviousPage(
|
||||
'subfolder/subsubfolder/subsubpage',
|
||||
$this->manifest->getPreviousPage(
|
||||
DOCSVIEWER_PATH . '/tests/docs/en/test.md',
|
||||
DOCSVIEWER_PATH . '/tests/docs/en/'
|
||||
)->Link
|
||||
@ -186,7 +190,7 @@ class DocumentationManifestTests extends SapphireTest
|
||||
|
||||
$this->assertDOSContains(
|
||||
$expected, $this->manifest->getChildrenFor(
|
||||
DOCSVIEWER_PATH . "/tests/docs/en/"
|
||||
DOCSVIEWER_PATH . '/tests/docs/en/'
|
||||
)
|
||||
);
|
||||
|
||||
@ -197,7 +201,8 @@ class DocumentationManifestTests extends SapphireTest
|
||||
);
|
||||
|
||||
$this->assertDOSContains(
|
||||
$expected, $this->manifest->getChildrenFor(
|
||||
$expected,
|
||||
$this->manifest->getChildrenFor(
|
||||
DOCSVIEWER_PATH . '/tests/docs-v3.0/en/',
|
||||
DOCSVIEWER_PATH . '/tests/docs-v3.0/en/ChangeLog.md'
|
||||
)
|
||||
@ -229,7 +234,7 @@ class DocumentationManifestTests extends SapphireTest
|
||||
$this->assertEquals(3, $this->manifest->getAllVersionsOfEntity($entity)->count());
|
||||
|
||||
$entity = $this->manifest->getEntities()->find('Language', 'de');
|
||||
|
||||
|
||||
$this->assertEquals(1, $this->manifest->getAllVersionsOfEntity($entity)->count());
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user