contentful_middleman 4.0.1 → 4.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +2 -3
- data/CHANGELOG.md +4 -0
- data/README.md +54 -14
- data/contentful_middleman.gemspec +1 -0
- data/lib/contentful_middleman/core.rb +4 -0
- data/lib/contentful_middleman/helpers.rb +11 -0
- data/lib/contentful_middleman/mappers/base.rb +13 -0
- data/lib/contentful_middleman/version.rb +1 -1
- data/spec/contentful_middleman/helpers_spec.rb +148 -0
- data/spec/fixtures/backup_fixtures/.tmp/backups/.gitkeep +0 -0
- data/spec/fixtures/json_fixtures/structured_text.json +206 -0
- data/spec/fixtures/vcr_fixtures/helpers/rich_text.yml +1707 -0
- data/spec/spec_helper.rb +6 -0
- metadata +20 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1307e1d94d361acbb2e3dff98d646982d7b437e8d0998c18ce8b4c8d69ae1e66
|
4
|
+
data.tar.gz: f56e068dd9463f21a02a587f2c69a9e105dc3194c3db267953a2f51f2676c3ae
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4f02722dce5f2e2be856200bc0162af50f873927432e53f82b45887d1c20f80209659f85b73113480f15bdf434d86c620c0886c8d5e8cbe75a613da709507b00
|
7
|
+
data.tar.gz: bd9b842b364b540c4ef7da32dbb22038c2f01ce887c084f43bd892ddc6224b49623851528bf22a945f1cc32e974fc2ec3de504a675ac1e83cdbcb9cf412425e8
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
# Change Log
|
2
2
|
## Unreleased
|
3
3
|
|
4
|
+
## 4.1.0
|
5
|
+
### Added
|
6
|
+
* *This feature is currently in BETA state, changes may occur as patch fixes* Added support for RichText and added the `rich_text` view helper.
|
7
|
+
|
4
8
|
## 4.0.1
|
5
9
|
### Fixed
|
6
10
|
* Allow usage of `use_camel_case` in client options.
|
data/README.md
CHANGED
@@ -50,20 +50,21 @@ activate :contentful do |f|
|
|
50
50
|
end
|
51
51
|
```
|
52
52
|
|
53
|
-
Parameter
|
54
|
-
----------
|
55
|
-
space
|
56
|
-
access_token
|
57
|
-
cda_query
|
58
|
-
client_options
|
59
|
-
content_types
|
60
|
-
default_locale
|
61
|
-
use_preview_api
|
62
|
-
all_entries
|
63
|
-
all_entries_page_size
|
64
|
-
rebuild_on_webhook
|
65
|
-
webhook_timeout
|
66
|
-
webhook_controller
|
53
|
+
Parameter | Description
|
54
|
+
---------- | ------------
|
55
|
+
space | Hash with an user choosen name for the space as key and the space id as value.
|
56
|
+
access_token | Contentful Delivery API access token.
|
57
|
+
cda_query | Hash describing query configuration. See [contentful.rb](https://github.com/contentful/contentful.rb) for more info (look for filter options there). Note that by default only 100 entries will be fetched, this can be configured to up to 1000 entries using the `limit` option. Example: `f.cda_query = { limit: 1000 }`.
|
58
|
+
client_options | Hash describing client configuration. See [contentful.rb](https://github.com/contentful/contentful.rb#client-configuration-options) for more info. This option should commonly be used to change Rate Limit Management, Include Resolution, Logging and Proxies.
|
59
|
+
content_types | Hash describing the mapping applied to entries of the imported content types.
|
60
|
+
default_locale | String with the value for the default locale for your space. Defaults to `'en-US'`.
|
61
|
+
use_preview_api | Boolean to toggle the used API. Set it to `false` to use `cdn.contentful.com` (default value). Set it to `true` to use `preview.contentful.com`. More info in [the documentation](https://www.contentful.com/developers/documentation/content-delivery-api/#preview-api)
|
62
|
+
all_entries | Boolean to toggle multiple requests to the API for getting over 1000 entries. This uses a naive approach and can get rate limited. When using this, have in mind adding an `order` in your `:cda_query` . Default order is `order: 'sys.createdAt'`.
|
63
|
+
all_entries_page_size | Integer amount of items per page for `:all_entries` requests, allowing for smaller page sizes on content heavy requests.
|
64
|
+
rebuild_on_webhook | Boolean to toggle Webhook server. Server will run in port 5678, and will be expecting to receive Contentful Webhook calls on `/receive`.
|
65
|
+
webhook_timeout | Integer (in seconds) for wait time after Webhook received for rebuilding. Only used if `:rebuild_on_webhook` is true. Defaults to 300 seconds.
|
66
|
+
webhook_controller | Class for handling Webhook response, defaults to `::ContentfulMiddleman::WebhookHandler`.
|
67
|
+
rich_text_mappings | Hash with `'nodeTyoe' => RendererClass` pairs determining overrides for the [`RichTextRenderer` library](https://github.com/contentful/rich-text-renderer.rb) configuration.
|
67
68
|
|
68
69
|
You can activate the extension multiple times to import entries from different spaces.
|
69
70
|
|
@@ -164,6 +165,45 @@ end
|
|
164
165
|
*NOTE*: This kind of Composite Mapper is static, therefore if you want to have multiple combinations of mappers
|
165
166
|
for multiple entries, you'd need to write code a bit differently.
|
166
167
|
|
168
|
+
### Rich Text *BETA*
|
169
|
+
|
170
|
+
To render rich text in your views, you can use the `rich_text` view helper.
|
171
|
+
|
172
|
+
An example using `erb`:
|
173
|
+
|
174
|
+
```erb
|
175
|
+
<% data.my_space.my_type.each do |_, entry| %>
|
176
|
+
<%= rich_text(entry.rich_field) %>
|
177
|
+
<% end %>
|
178
|
+
```
|
179
|
+
|
180
|
+
This will output the generated HTML generated by the [`RichTextRenderer` library](https://github.com/contentful/rich-text-renderer.rb).
|
181
|
+
|
182
|
+
#### Adding custom renderers
|
183
|
+
|
184
|
+
When using rich text, if you're planning to embed entries, then you need to create your custom renderer for them. You can read how create your own renderer classes [here](https://github.com/contentful/rich-text-renderer.rb#using-different-renderers).
|
185
|
+
|
186
|
+
To configure the mappings, you need to add them in your `activate` block like follows:
|
187
|
+
|
188
|
+
```ruby
|
189
|
+
activate :contentful do |f|
|
190
|
+
# ... all the regular config ...
|
191
|
+
f.rich_text_mappings = { 'embedded-entry-block' => MyCustomRenderer }
|
192
|
+
end
|
193
|
+
```
|
194
|
+
|
195
|
+
You can also add renderers for all other types of nodes if you want to have more granular control over the rendering.
|
196
|
+
|
197
|
+
#### Using the helper with multiple activated Contentful extensions
|
198
|
+
|
199
|
+
In case you have multiple activated extensions, and have different mapping configurations for them. You can specify which extension instance you want to pull the configuration from when using the helper.
|
200
|
+
|
201
|
+
The helper receives an additional optional parameter for the extension instance. By default it is `0`, indicating the first activated extension.
|
202
|
+
|
203
|
+
The instances are sequentially numbered in order of activation, starting from 0.
|
204
|
+
|
205
|
+
So, if for example you have 2 active instances with different configuration, to use the second instance configuration, you should call the helper as: `rich_text(entry.rich_field, 1)`.
|
206
|
+
|
167
207
|
## Configuration: examples
|
168
208
|
|
169
209
|
```ruby
|
@@ -25,6 +25,7 @@ Gem::Specification.new do |s|
|
|
25
25
|
# Additional dependencies
|
26
26
|
s.add_dependency("contentful", '~> 2.1')
|
27
27
|
s.add_dependency("contentful-webhook-listener", '~> 0.1')
|
28
|
+
s.add_dependency("rich_text_renderer", '~> 0.1')
|
28
29
|
|
29
30
|
s.add_development_dependency 'rubygems-tasks', '~> 0.2'
|
30
31
|
s.add_development_dependency "guard"
|
@@ -52,6 +52,9 @@ module ContentfulMiddleman
|
|
52
52
|
option :webhook_controller, ::ContentfulMiddleman::WebhookHandler,
|
53
53
|
"Controller for managing Webhook callbacks"
|
54
54
|
|
55
|
+
option :rich_text_mappings, {},
|
56
|
+
"Custom renderers for the RichTextRenderer library"
|
57
|
+
|
55
58
|
|
56
59
|
helpers ContentfulMiddleman::Helpers
|
57
60
|
include ContentfulMiddleman::Helpers
|
@@ -62,6 +65,7 @@ module ContentfulMiddleman
|
|
62
65
|
expose_to_template localize: :localize
|
63
66
|
expose_to_template localize_array: :localize_array
|
64
67
|
expose_to_template localize_value: :localize_value
|
68
|
+
expose_to_template rich_text: :rich_text
|
65
69
|
|
66
70
|
attr_reader :middleman_app
|
67
71
|
def initialize(app, options_hash = {}, &block)
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'thor/core_ext/hash_with_indifferent_access'
|
2
2
|
require 'contentful_middleman/tools/preview_proxy'
|
3
|
+
require 'rich_text_renderer'
|
3
4
|
|
4
5
|
module ContentfulMiddleman
|
5
6
|
module Helpers
|
@@ -47,5 +48,15 @@ module ContentfulMiddleman
|
|
47
48
|
|
48
49
|
block.call(preview_client)
|
49
50
|
end
|
51
|
+
|
52
|
+
def rich_text(document_field, instance_index = 0)
|
53
|
+
mappings = begin
|
54
|
+
app.extensions[:contentful]["instance_#{instance_index}"].options[:rich_text_mappings] || {}
|
55
|
+
rescue Exception
|
56
|
+
{}
|
57
|
+
end
|
58
|
+
|
59
|
+
RichTextRenderer::Renderer.new(mappings).render(document_field)
|
60
|
+
end
|
50
61
|
end
|
51
62
|
end
|
@@ -61,6 +61,8 @@ module ContentfulMiddleman
|
|
61
61
|
map_entry(value)
|
62
62
|
when Array
|
63
63
|
map_array(value, locale)
|
64
|
+
when Hash
|
65
|
+
map_hash(value, locale)
|
64
66
|
else
|
65
67
|
value
|
66
68
|
end
|
@@ -140,6 +142,17 @@ module ContentfulMiddleman
|
|
140
142
|
def map_array(array, locale = nil)
|
141
143
|
array.map {|element| map_value(element, locale)}
|
142
144
|
end
|
145
|
+
|
146
|
+
def map_hash(hash, locale = nil)
|
147
|
+
return hash.transform_values {|element| map_value(element, locale)} if hash.respond_to?(:transform_values)
|
148
|
+
|
149
|
+
# Support for Ruby versions previous to 2.4
|
150
|
+
result = {}
|
151
|
+
hash.each do |k, v|
|
152
|
+
result[k] = map_value(v, locale)
|
153
|
+
end
|
154
|
+
result
|
155
|
+
end
|
143
156
|
end
|
144
157
|
end
|
145
158
|
end
|
@@ -1,7 +1,51 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
+
class CustomEntryRenderer < RichTextRenderer::BaseNodeRenderer
|
4
|
+
def render(node)
|
5
|
+
"<div>Custom Content</div>"
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
class OtherCustomEntryRenderer < RichTextRenderer::BaseNodeRenderer
|
10
|
+
def render(node)
|
11
|
+
"<h1>#{node['data'].body}</h1>"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
class InstanceMock
|
16
|
+
def initialize(mappings = {})
|
17
|
+
@mappings = mappings
|
18
|
+
end
|
19
|
+
|
20
|
+
def options
|
21
|
+
{
|
22
|
+
rich_text_mappings: @mappings
|
23
|
+
}
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
class AppMock
|
28
|
+
def initialize(instances = {})
|
29
|
+
@instances = instances
|
30
|
+
end
|
31
|
+
|
32
|
+
def extensions
|
33
|
+
{
|
34
|
+
contentful: @instances
|
35
|
+
}
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
3
39
|
class HelpersMock
|
4
40
|
include ContentfulMiddleman::Helpers
|
41
|
+
|
42
|
+
def initialize(instances = {})
|
43
|
+
@instances = instances
|
44
|
+
end
|
45
|
+
|
46
|
+
def app
|
47
|
+
AppMock.new(@instances)
|
48
|
+
end
|
5
49
|
end
|
6
50
|
|
7
51
|
class InstanceDouble
|
@@ -178,5 +222,109 @@ describe ContentfulMiddleman::Helpers do
|
|
178
222
|
end
|
179
223
|
end
|
180
224
|
end
|
225
|
+
|
226
|
+
describe 'rich text helpers' do
|
227
|
+
describe '#rich_text' do
|
228
|
+
it 'renders a rich text field to HTML' do
|
229
|
+
expected = [
|
230
|
+
'<h1>Some heading</h1>',
|
231
|
+
'<p></p>',
|
232
|
+
'<div>{"target"=>{"sys"=>{"id"=>"49rofLvvxCOiIMIi6mk8ai", "type"=>"Link", "linkType"=>"Entry"}}}</div>',
|
233
|
+
'<h2>Some subheading</h2>',
|
234
|
+
'<p><b>Some bold</b></p>',
|
235
|
+
'<p><i>Some italics</i></p>',
|
236
|
+
'<p><u>Some underline</u></p>',
|
237
|
+
'<p></p>',
|
238
|
+
'<p></p>',
|
239
|
+
'<div>{"target"=>{"sys"=>{"id"=>"5ZF9Q4K6iWSYIU2OUs0UaQ", "type"=>"Link", "linkType"=>"Entry"}}}</div>',
|
240
|
+
'<p></p>',
|
241
|
+
'<p>Some raw content</p>',
|
242
|
+
'<p></p>',
|
243
|
+
'<p>An unpublished embed:</p>',
|
244
|
+
'<p></p>',
|
245
|
+
'<div>{"target"=>{"sys"=>{"id"=>"q2hGXkd5tICym64AcgeKK", "type"=>"Link", "linkType"=>"Entry"}}}</div>',
|
246
|
+
'<p>Some more content</p>'
|
247
|
+
].join("\n")
|
248
|
+
|
249
|
+
expect(subject.rich_text(json('structured_text'))).to eq expected
|
250
|
+
end
|
251
|
+
|
252
|
+
it 'supports multiple configurations' do
|
253
|
+
vcr('helpers/rich_text') {
|
254
|
+
# Instances are a 0-based progressive hash with keys in the shape "instance_#{index}"
|
255
|
+
instances = {
|
256
|
+
"instance_0" => InstanceMock.new('embedded-entry-block' => CustomEntryRenderer),
|
257
|
+
"instance_1" => InstanceMock.new('embedded-entry-block' => OtherCustomEntryRenderer)
|
258
|
+
}
|
259
|
+
subject = HelpersMock.new(instances)
|
260
|
+
|
261
|
+
expected_default = [
|
262
|
+
'<h1>Some heading</h1>',
|
263
|
+
'<p></p>',
|
264
|
+
'<div>Custom Content</div>',
|
265
|
+
'<h2>Some subheading</h2>',
|
266
|
+
'<p><b>Some bold</b></p>',
|
267
|
+
'<p><i>Some italics</i></p>',
|
268
|
+
'<p><u>Some underline</u></p>',
|
269
|
+
'<p></p>',
|
270
|
+
'<p></p>',
|
271
|
+
'<div>Custom Content</div>',
|
272
|
+
'<p></p>',
|
273
|
+
'<p>Some raw content</p>',
|
274
|
+
'<p></p>',
|
275
|
+
'<p>An unpublished embed:</p>',
|
276
|
+
'<p></p>',
|
277
|
+
'<p>Some more content</p>',
|
278
|
+
'<p><code>Some code</code></p>',
|
279
|
+
'<p><a href="https://www.contentful.com">A hyperlink</a></p>',
|
280
|
+
'<ul><li><p>Ul list</p></li><li><p>A few <b>items</b></p><ol><li><p>Ordered list nested inside an Unordered list item</p></li></ol></li></ul>',
|
281
|
+
'<ol><li><p>Ol list</p></li><li><p>two</p></li><li><p>three</p></li></ol>',
|
282
|
+
'<hr />',
|
283
|
+
'<p></p>',
|
284
|
+
'<blockqoute><p>An inspirational quote</p><p></p></blockqoute>',
|
285
|
+
'<p></p>'
|
286
|
+
].join("\n")
|
287
|
+
|
288
|
+
expected_different_config = [
|
289
|
+
'<h1>Some heading</h1>',
|
290
|
+
'<p></p>',
|
291
|
+
'<h1>Embedded 1</h1>',
|
292
|
+
'<h2>Some subheading</h2>',
|
293
|
+
'<p><b>Some bold</b></p>',
|
294
|
+
'<p><i>Some italics</i></p>',
|
295
|
+
'<p><u>Some underline</u></p>',
|
296
|
+
'<p></p>',
|
297
|
+
'<p></p>',
|
298
|
+
'<h1>Embedded 2</h1>',
|
299
|
+
'<p></p>',
|
300
|
+
'<p>Some raw content</p>',
|
301
|
+
'<p></p>',
|
302
|
+
'<p>An unpublished embed:</p>',
|
303
|
+
'<p></p>',
|
304
|
+
'<p>Some more content</p>',
|
305
|
+
'<p><code>Some code</code></p>',
|
306
|
+
'<p><a href="https://www.contentful.com">A hyperlink</a></p>',
|
307
|
+
'<ul><li><p>Ul list</p></li><li><p>A few <b>items</b></p><ol><li><p>Ordered list nested inside an Unordered list item</p></li></ol></li></ul>',
|
308
|
+
'<ol><li><p>Ol list</p></li><li><p>two</p></li><li><p>three</p></li></ol>',
|
309
|
+
'<hr />',
|
310
|
+
'<p></p>',
|
311
|
+
'<blockqoute><p>An inspirational quote</p><p></p></blockqoute>',
|
312
|
+
'<p></p>'
|
313
|
+
].join("\n")
|
314
|
+
|
315
|
+
client = Contentful::Client.new(
|
316
|
+
space: 'jd7yc4wnatx3',
|
317
|
+
access_token: '6256b8ef7d66805ca41f2728271daf27e8fa6055873b802a813941a0fe696248',
|
318
|
+
dynamic_entries: :auto,
|
319
|
+
gzip_encoded: false
|
320
|
+
)
|
321
|
+
entry = client.entry('4BupPSmi4M02m0U48AQCSM')
|
322
|
+
|
323
|
+
expect(subject.rich_text(entry.body)).to eq expected_default
|
324
|
+
expect(subject.rich_text(entry.body, 1)).to eq expected_different_config
|
325
|
+
}
|
326
|
+
end
|
327
|
+
end
|
328
|
+
end
|
181
329
|
end
|
182
330
|
end
|
File without changes
|
@@ -0,0 +1,206 @@
|
|
1
|
+
{
|
2
|
+
"content": [
|
3
|
+
{
|
4
|
+
"data": {},
|
5
|
+
"content": [
|
6
|
+
{
|
7
|
+
"marks": [],
|
8
|
+
"value": "Some heading",
|
9
|
+
"nodeType": "text",
|
10
|
+
"nodeClass": "text"
|
11
|
+
}
|
12
|
+
],
|
13
|
+
"nodeType": "heading-1",
|
14
|
+
"nodeClass": "block"
|
15
|
+
},
|
16
|
+
{
|
17
|
+
"data": {},
|
18
|
+
"content": [
|
19
|
+
{"marks": [], "value": "", "nodeType": "text", "nodeClass": "text"}
|
20
|
+
],
|
21
|
+
"nodeType": "paragraph",
|
22
|
+
"nodeClass": "block"
|
23
|
+
},
|
24
|
+
{
|
25
|
+
"data": {
|
26
|
+
"target": {
|
27
|
+
"sys": {
|
28
|
+
"id": "49rofLvvxCOiIMIi6mk8ai",
|
29
|
+
"type": "Link",
|
30
|
+
"linkType": "Entry"
|
31
|
+
}
|
32
|
+
}
|
33
|
+
},
|
34
|
+
"content": [
|
35
|
+
{"marks": [], "value": "", "nodeType": "text", "nodeClass": "text"}
|
36
|
+
],
|
37
|
+
"nodeType": "embedded-entry-block",
|
38
|
+
"nodeClass": "block"
|
39
|
+
},
|
40
|
+
{
|
41
|
+
"data": {},
|
42
|
+
"content": [
|
43
|
+
{
|
44
|
+
"marks": [],
|
45
|
+
"value": "Some subheading",
|
46
|
+
"nodeType": "text",
|
47
|
+
"nodeClass": "text"
|
48
|
+
}
|
49
|
+
],
|
50
|
+
"nodeType": "heading-2",
|
51
|
+
"nodeClass": "block"
|
52
|
+
},
|
53
|
+
{
|
54
|
+
"data": {},
|
55
|
+
"content": [
|
56
|
+
{
|
57
|
+
"marks": [{"data": {}, "type": "bold", "object": "mark"}],
|
58
|
+
"value": "Some bold",
|
59
|
+
"nodeType": "text",
|
60
|
+
"nodeClass": "text"
|
61
|
+
}
|
62
|
+
],
|
63
|
+
"nodeType": "paragraph",
|
64
|
+
"nodeClass": "block"
|
65
|
+
},
|
66
|
+
{
|
67
|
+
"data": {},
|
68
|
+
"content": [
|
69
|
+
{
|
70
|
+
"marks": [{"data": {}, "type": "italic", "object": "mark"}],
|
71
|
+
"value": "Some italics",
|
72
|
+
"nodeType": "text",
|
73
|
+
"nodeClass": "text"
|
74
|
+
}
|
75
|
+
],
|
76
|
+
"nodeType": "paragraph",
|
77
|
+
"nodeClass": "block"
|
78
|
+
},
|
79
|
+
{
|
80
|
+
"data": {},
|
81
|
+
"content": [
|
82
|
+
{
|
83
|
+
"marks": [{"data": {}, "type": "underline", "object": "mark"}],
|
84
|
+
"value": "Some underline",
|
85
|
+
"nodeType": "text",
|
86
|
+
"nodeClass": "text"
|
87
|
+
}
|
88
|
+
],
|
89
|
+
"nodeType": "paragraph",
|
90
|
+
"nodeClass": "block"
|
91
|
+
},
|
92
|
+
{
|
93
|
+
"data": {},
|
94
|
+
"content": [
|
95
|
+
{"marks": [], "value": "", "nodeType": "text", "nodeClass": "text"}
|
96
|
+
],
|
97
|
+
"nodeType": "paragraph",
|
98
|
+
"nodeClass": "block"
|
99
|
+
},
|
100
|
+
{
|
101
|
+
"data": {},
|
102
|
+
"content": [
|
103
|
+
{"marks": [], "value": "", "nodeType": "text", "nodeClass": "text"}
|
104
|
+
],
|
105
|
+
"nodeType": "paragraph",
|
106
|
+
"nodeClass": "block"
|
107
|
+
},
|
108
|
+
{
|
109
|
+
"data": {
|
110
|
+
"target": {
|
111
|
+
"sys": {
|
112
|
+
"id": "5ZF9Q4K6iWSYIU2OUs0UaQ",
|
113
|
+
"type": "Link",
|
114
|
+
"linkType": "Entry"
|
115
|
+
}
|
116
|
+
}
|
117
|
+
},
|
118
|
+
"content": [
|
119
|
+
{"marks": [], "value": "", "nodeType": "text", "nodeClass": "text"}
|
120
|
+
],
|
121
|
+
"nodeType": "embedded-entry-block",
|
122
|
+
"nodeClass": "block"
|
123
|
+
},
|
124
|
+
{
|
125
|
+
"data": {},
|
126
|
+
"content": [
|
127
|
+
{"marks": [], "value": "", "nodeType": "text", "nodeClass": "text"}
|
128
|
+
],
|
129
|
+
"nodeType": "paragraph",
|
130
|
+
"nodeClass": "block"
|
131
|
+
},
|
132
|
+
{
|
133
|
+
"data": {},
|
134
|
+
"content": [
|
135
|
+
{
|
136
|
+
"marks": [],
|
137
|
+
"value": "Some raw content",
|
138
|
+
"nodeType": "text",
|
139
|
+
"nodeClass": "text"
|
140
|
+
}
|
141
|
+
],
|
142
|
+
"nodeType": "paragraph",
|
143
|
+
"nodeClass": "block"
|
144
|
+
},
|
145
|
+
{
|
146
|
+
"data": {},
|
147
|
+
"content": [
|
148
|
+
{"marks": [], "value": "", "nodeType": "text", "nodeClass": "text"}
|
149
|
+
],
|
150
|
+
"nodeType": "paragraph",
|
151
|
+
"nodeClass": "block"
|
152
|
+
},
|
153
|
+
{
|
154
|
+
"data": {},
|
155
|
+
"content": [
|
156
|
+
{
|
157
|
+
"marks": [],
|
158
|
+
"value": "An unpublished embed:",
|
159
|
+
"nodeType": "text",
|
160
|
+
"nodeClass": "text"
|
161
|
+
}
|
162
|
+
],
|
163
|
+
"nodeType": "paragraph",
|
164
|
+
"nodeClass": "block"
|
165
|
+
},
|
166
|
+
{
|
167
|
+
"data": {},
|
168
|
+
"content": [
|
169
|
+
{"marks": [], "value": "", "nodeType": "text", "nodeClass": "text"}
|
170
|
+
],
|
171
|
+
"nodeType": "paragraph",
|
172
|
+
"nodeClass": "block"
|
173
|
+
},
|
174
|
+
{
|
175
|
+
"data": {
|
176
|
+
"target": {
|
177
|
+
"sys": {
|
178
|
+
"id": "q2hGXkd5tICym64AcgeKK",
|
179
|
+
"type": "Link",
|
180
|
+
"linkType": "Entry"
|
181
|
+
}
|
182
|
+
}
|
183
|
+
},
|
184
|
+
"content": [
|
185
|
+
{"marks": [], "value": "", "nodeType": "text", "nodeClass": "text"}
|
186
|
+
],
|
187
|
+
"nodeType": "embedded-entry-block",
|
188
|
+
"nodeClass": "block"
|
189
|
+
},
|
190
|
+
{
|
191
|
+
"data": {},
|
192
|
+
"content": [
|
193
|
+
{
|
194
|
+
"marks": [],
|
195
|
+
"value": "Some more content",
|
196
|
+
"nodeType": "text",
|
197
|
+
"nodeClass": "text"
|
198
|
+
}
|
199
|
+
],
|
200
|
+
"nodeType": "paragraph",
|
201
|
+
"nodeClass": "block"
|
202
|
+
}
|
203
|
+
],
|
204
|
+
"nodeType": "document",
|
205
|
+
"nodeClass": "document"
|
206
|
+
}
|