Confluences bugfixes, Fix documentation

Make it easier to spot where an error comes from when uploading to confluence.
Allow to upload documentation without a prefix.
This commit is contained in:
Stéphane Goetz 2017-11-06 22:46:07 +01:00
parent 8e7340da3d
commit 59b8c04161
11 changed files with 97 additions and 32 deletions

View File

@ -63,7 +63,7 @@ Preformatted blocks are useful for ASCII art:
,-.
, ,-. ,-.
/ \ ( )-( )
\ | ,.>-( )-<
\ | ,.>-( )-&lt;
\|,' ( )-( )
Y ___`-' `-'
|/__/ `-'

View File

@ -16,3 +16,7 @@ Code Highlight | √ | X (Planned) | √ (Using macros)
Live Mode | √ | X | X
Pages Ordering | √ | √ | X (API Limitation)
Google / Piwik analytics | √ | √ | √ (Configured on Conflence)
## Confluence Example
You can see this documentation uploaded to Confluence : https://dauxio.atlassian.net/wiki/spaces/DOC/overview

View File

@ -8,8 +8,8 @@
---
<div class=row>
<div class=col-third>
<div class="row">
<div class="col-third">
#### For Authors
@ -24,7 +24,7 @@
* [Table of Contents](01_Features/Table_of_contents.md)
</div>
<div class=col-third>
<div class="col-third">
#### For Developers
@ -34,7 +34,7 @@
* Work with pages metadata
</div>
<div class=col-third>
<div class="col-third">
#### For Marketing

View File

@ -29,5 +29,10 @@
"GitHub Repo": "https://github.com/dauxio/daux.io",
"Help/Support/Bugs": "https://github.com/dauxio/daux.io/issues"
}
},
"confluence": {
"base_url": "https://dauxio.atlassian.net/wiki/",
"space_id": "DOC",
"root_id": 196610
}
}

View File

@ -60,9 +60,9 @@ class Api
}
$message = $label .
' [url] ' . $request->getUri() .
' [status code] ' . $response->getStatusCode() .
' [message] ';
"\n [url] " . $request->getUri() .
"\n [status code] " . $response->getStatusCode() .
"\n [message] ";
$body = $response->getBody();
$json = json_decode($body, true);
@ -201,8 +201,45 @@ class Api
try {
$this->getClient()->put("content/$page_id", ['json' => $body]);
} catch (BadResponseException $e) {
throw $this->handleError($e);
$error = $this->handleError($e);
$re = '/\[([0-9]*),([0-9]*)\]$/';
preg_match($re, $error->getMessage(), $matches, PREG_OFFSET_CAPTURE, 0);
if (count($matches) == 3) {
echo "\nContent: \n";
echo $this->showSourceCode($content, $matches[1][0], $matches[2][0]);
}
throw $error;
}
}
public function showSourceCode($css, $lineNumber, $column)
{
$lines = preg_split("/\r?\n/", $css);
$start = max($lineNumber - 3, 0);
$end = min($lineNumber + 2, count($lines));
$maxWidth = strlen("$end");
$filtered = array_slice($lines, $start, $end - $start);
$prepared = [];
foreach ($filtered as $index => $line) {
$number = $start + 1 + $index;
$gutter = substr(' ' . (' ' . $number), -$maxWidth) . ' | ';
if ($number == $lineNumber) {
$spacing = str_repeat(" ", strlen($gutter) + $column - 2);
$prepared[] = '>' . $gutter . $line . "\n " . $spacing . '^';
} else {
$prepared[] = ' ' . $gutter . $line;
}
}
return implode("\n", $prepared);
}
/**

View File

@ -0,0 +1,32 @@
<?php namespace Todaymade\Daux\Format\Confluence\ContentTypes\Markdown;
use League\CommonMark\Block\Renderer\BlockRendererInterface;
use League\CommonMark\HtmlElement;
abstract class CodeRenderer implements BlockRendererInterface
{
public function escapeCDATA($content)
{
return str_replace("]]>", "]]]]><![CDATA[>", $content);
}
public function getHTMLElement($body, $language)
{
$body = '<![CDATA[' . $this->escapeCDATA($body) . ']]>';
$content = [];
if ($language) {
$content[] = new HtmlElement('ac:parameter', ['ac:name' => 'language'], $language);
}
$content[] = new HtmlElement('ac:plain-text-body', [], $body);
return new HtmlElement(
'ac:structured-macro',
['ac:name' => 'code'],
$content
);
}
}

View File

@ -2,11 +2,10 @@
use League\CommonMark\Block\Element\AbstractBlock;
use League\CommonMark\Block\Element\FencedCode;
use League\CommonMark\Block\Renderer\BlockRendererInterface;
use League\CommonMark\ElementRendererInterface;
use League\CommonMark\HtmlElement;
class FencedCodeRenderer implements BlockRendererInterface
class FencedCodeRenderer extends CodeRenderer
{
protected $supported_languages = [
'actionscript3',
@ -48,19 +47,9 @@ class FencedCodeRenderer implements BlockRendererInterface
throw new \InvalidArgumentException('Incompatible block type: ' . get_class($block));
}
$content = [];
$language = $this->getLanguage($block->getInfoWords(), $htmlRenderer);
if ($language = $this->getLanguage($block->getInfoWords(), $htmlRenderer)) {
$content[] = new HtmlElement('ac:parameter', ['ac:name' => 'language'], $language);
}
$content[] = new HtmlElement('ac:plain-text-body', [], '<![CDATA[' . $block->getStringContent() . ']]>');
return new HtmlElement(
'ac:structured-macro',
['ac:name' => 'code'],
$content
);
return $this->getHTMLElement($block->getStringContent(), $language);
}
public function getLanguage($infoWords, ElementRendererInterface $htmlRenderer)

View File

@ -2,11 +2,10 @@
use League\CommonMark\Block\Element\AbstractBlock;
use League\CommonMark\Block\Element\IndentedCode;
use League\CommonMark\Block\Renderer\BlockRendererInterface;
use League\CommonMark\ElementRendererInterface;
use League\CommonMark\HtmlElement;
class IndentedCodeRenderer implements BlockRendererInterface
class IndentedCodeRenderer extends CodeRenderer
{
/**
* @param AbstractBlock $block
@ -21,10 +20,6 @@ class IndentedCodeRenderer implements BlockRendererInterface
throw new \InvalidArgumentException('Incompatible block type: ' . get_class($block));
}
return new HtmlElement(
'ac:structured-macro',
['ac:name' => 'code'],
new HtmlElement('ac:plain-text-body', [], '<![CDATA[' . $block->getStringContent() . ']]>')
);
return $this->getHTMLElement($block->getStringContent(), "");
}
}

View File

@ -41,7 +41,7 @@ class LinkRenderer extends \Todaymade\Daux\ContentTypes\Markdown\LinkRenderer
$file = $this->resolveInternalFile($url);
$link_props = [
'ri:content-title' => trim($this->daux['confluence']['prefix']) . ' ' . $file->getTitle(),
'ri:content-title' => trim(trim($this->daux['confluence']['prefix']) . ' ' . $file->getTitle()),
'ri:space-key' => $this->daux['confluence']['space_id'],
];

View File

@ -73,6 +73,9 @@ class Generator implements \Todaymade\Daux\Format\Base\Generator
$confluence = $params['confluence'];
$this->prefix = trim($confluence['prefix']) . ' ';
if ($this->prefix == ' ') {
$this->prefix = '';
}
$tree = $this->runAction(
'Generating Tree ...',

View File

@ -48,7 +48,7 @@ class Publisher
try {
return $this->runAction($title, $this->output, $this->width, $closure);
} catch (BadResponseException $e) {
$this->output->writeLn(' <error>' . $e->getMessage() . '</error>');
$this->output->writeLn('<fg=red>' . $e->getMessage() . '</>');
}
}