Алексей Авдеев, Neuron.Digital
{
title: "Название статьи",
content: "
Первый абзац <strong>контента</strong>
Второй абзац контента
",
}
Привет, РИТ++! Как дела?
Привет, РИТ++! <strong>Как</strong> дела?
Привет, РИТ++! <a href="#">Как</a> дела?
Привет, РИТ++! Как дела?<br/><br/>
<p align=justify>Привет, РИТ++! Как дела?</p>
Привет, <font size=4>РИТ++!</font>Как дела?
<p>Привет, РИТ++! Как дела?</p>
<div class=""></div>
<p> </p>
<span> </span>
{
title: "Название статьи",
content: "<ul>
<li>
<span style="font-size: x-small;">
<span style="font-size:10px; line-height:16px;">Элемент</span>
</span>
</li>
</ul>",
}
<div class="quote">
<div>Мы с вами дИвелоперы</div>
<div>Вадим Макеев</div>
</div>
<p><iframe class="medialib-video" title=""
src="//embed.life.ru/video/b271fca5ff74420e78893b94cce071ca"
frameborder="0" allowfullscreen="" data-extra-autoplay="0"
data-extra-loop="0" data-extra-title=""
data-extra-description=""
data-extra-send-to-rss="0"></iframe></p>
<div class="tiny-mce-plugin-societywidget mceNonEditable"
data-mce-contenteditable="false"
data-society-code="PGJsb2NrcXVvdGUgY2xhc3M9InR3aXR0ZXItdHdlZXQiIGRhdGEtbGFuZz0...sb2NrcXVvdGU+CjxzY3JpcHQgYXN5bmMgc3JjPSIvL3BsYXRmb3JtLnR3aXR0ZXIuY29tL3dpZGdldHMuanMiIGNoYXJzZXQ9InV0Zi04Ij48L3NjcmlwdD4=">
[
{ type: "TEXT", value: "Привет, РИТ++" },
{ type: "TEXT", value: "Давно не виделись" },
{ type: "TEXT", value: "Лови фотки!" },
{ type: "GALLERY", id: "3637" },
]
content.filter(block => (
['HEADING', 'TEXT'].includes(block.type)
))
content.some(block => (
block.type === 'VIDEO'
))
content
.filter(block => block.type === 'TEXT')
.reduce((accumulator, block) => (
accumulator + block.value
), '')
{ value: "Привет, РИТ++! <i>Как</i> дела?" },
{ value: "Привет, РИТ++! <b>Как</b> дела?" },
{ value: "Привет, РИТ++! <u>Как</u> дела?" },
{ value: "Привет, РИТ++! <s>Как</s> дела?" },
{ value: "Привет, РИТ++! <a href="#">Как</a> дела?" },
{ value: "Это *курсив* и это тоже _курсив_" },
{ value: "Это **жирный** и это тоже __жирный__" },
{ value: "Это `важный` текст" },
{ value: "Это [пример ссылки](https://ritfest.ru//)" },
facebook/draft-js
import { Editor, EditorState } from 'draft-js';
class MyEditor extends React.Component {
state = { editorState: EditorState.createEmpty() };
onChange = (editorState) => this.setState({ editorState });
render() {
return <Editor
editorState={this.state.editorState} onChange={this.onChange}
/>;
}
}
{ blockMap: { '4iabc': {
type: 'unstyled',
text: 'АБ',
characterList: [
{ style: ['ITALIC'], entity: null },
{ style: ['BOLD','ITALIC'], entity: null },
],
} } }
nikgraf/awesome-draft-js
[{ type: "TEXT", value: {
blockMap: { '4iabc': {
type: 'unstyled',
text: '',
characterList: [],
} },
}]
lbovet/docson
{
title: "Название статьи",
content: "<p>Тут какой-то старый контент</p>",
}
{
title: "Название статьи",
content: {
content: "<p>Тут какой-то старый контент</p>",
content_type: "text/html",
},
}
{
title: "Название статьи",
content: {
content: "[]",
content_type: "application/json",
},
}
func FormatJSON(content string, template *template.Template) string {
contentBlocks := []Decorator{}
var buffer bytes.Buffer
for i, block := range contentBlocks {
block.render(&buffer, template, i)
}
return buffer.String()
}
window.formatJSON = (content) ->
result = ''
try contentBlocks = JSON.parse content
return result if not contentBlocks
for block, i in contentBlocks
try result += BLOCK_TEMPLATES[block.type]?(block) || ''
result
items.select {|el| %w(TEXT).include?(el[:type]) }.each do |item|
element = nil
case item[:type]
when 'TEXT'
element = export(item[:value])
end
result << element if element
end
[
{ type: "TEXT", value: "Привет, РИТ++" },
{ type: "TEXT", value: "Давно не виделись" },
{ type: "TEXT", value: "Лови фотки!" },
{ type: "GALLERY", id: "3637" },
]
{
blocks: [
{ type: "TEXT", value: "Привет, РИТ++" },
],
version: '1-0-0',
time: 1558018012033,
}