feat: add support for quotes

This commit is contained in:
Michael Große
2018-01-29 15:51:56 +01:00
parent ea31cc0bac
commit 063ce30e6e
6 changed files with 148 additions and 0 deletions

79
_test/json/quote.json Normal file
View File

@ -0,0 +1,79 @@
{
"type": "doc",
"content": [
{
"type": "paragraph",
"content": [
{
"type": "text",
"text": "I think we should do it"
}
]
},
{
"type": "quote",
"content": [
{
"type": "text",
"text": " No we shouldn't"
}
]
},
{
"type": "quote",
"content": [
{
"type": "quote",
"content": [
{
"type": "text",
"text": " Well, I say we should"
}
]
}
]
},
{
"type": "quote",
"content": [
{
"type": "text",
"text": " Really?"
}
]
},
{
"type": "quote",
"content": [
{
"type": "quote",
"content": [
{
"type": "text",
"text": " Yes!"
}
]
}
]
},
{
"type": "quote",
"content": [
{
"type": "quote",
"content": [
{
"type": "quote",
"content": [
{
"type": "text",
"text": " Then lets do it!"
}
]
}
]
}
]
}
]
}

11
_test/json/quote.txt Normal file
View File

@ -0,0 +1,11 @@
I think we should do it
> No we shouldn't
>> Well, I say we should
> Really?
>> Yes!
>>> Then lets do it!

View File

@ -17,6 +17,7 @@ abstract class Node {
'locallink' => LocalLinkNode::class,
'preformatted' => PreformattedNode::class,
'code_block' => CodeBlockNode::class,
'quote' => QuoteNode::class,
'image' => ImageNode::class,
'hard_break' => HardBreakNode::class,
'horizontal_rule' => HruleNode::class,

36
parser/QuoteNode.php Normal file
View File

@ -0,0 +1,36 @@
<?php
namespace dokuwiki\plugin\prosemirror\parser;
class QuoteNode extends Node
{
/** @var Node[] */
protected $subnodes = [];
protected $parent;
public function __construct($data, $parent) {
$this->parent = &$parent;
$previousNode = false;
foreach ($data['content'] as $nodeData) {
try {
$newNode = new self::$nodeclass[$nodeData['type']]($nodeData, $this, $previousNode);
} catch (\Throwable $e) {
error_log("************ Unknown Node type: " . $nodeData['type'] . " ************");
throw $e;
}
$this->subnodes[] = $newNode;
$previousNode = $newNode;
}
}
public function toSyntax() {
$doc = '>';
foreach ($this->subnodes as $subnode) {
$doc .= $subnode->toSyntax();
}
return $doc;
}
}

View File

@ -55,6 +55,18 @@ class renderer_plugin_prosemirror extends Doku_Renderer {
$this->nodestack->drop('paragraph');
}
/** @inheritDoc */
function quote_open()
{
$this->nodestack->addTop(new Node('quote'));
}
/** @inheritDoc */
function quote_close()
{
$this->nodestack->drop('quote');
}
#region lists
/** @inheritDoc */

View File

@ -56,6 +56,15 @@ const codeBlock = nodes.get('code_block');
codeBlock.toDOM = function toDOM() { return ['pre', { class: 'code' }, 0]; };
nodes = nodes.update('code_block', codeBlock);
nodes = nodes.addToEnd('quote', {
content: 'block',
group: 'block',
inline: false,
toDOM() {
return ['blockquote', {}, ['div', { class: 'no' }, 0]];
},
});
nodes = nodes.addToEnd('interwikilink', {
content: 'text',
marks: '_',