@prismicio/vue 2.0.11 → 2.1.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/README.md +81 -149
- package/components/common.js +275 -41
- package/components/index.js +269 -39
- package/components/umd.js +278 -43
- package/dist/prismic-vue.common.js +278 -48
- package/dist/prismic-vue.esm.js +270 -42
- package/dist/prismic-vue.js +282 -52
- package/dist/prismic-vue.min.js +1 -1
- package/package.json +51 -47
- package/src/components/Link.js +87 -51
- package/src/components/RichText.js +40 -41
- package/src/components/SliceZone.js +144 -0
- package/src/components/Text.js +37 -0
- package/src/components/index.js +26 -22
- package/src/components-bundler.js +10 -5
- package/src/index.js +46 -39
package/components/index.js
CHANGED
|
@@ -1,28 +1,17 @@
|
|
|
1
|
-
import PrismicDom, { RichText } from 'prismic-dom';
|
|
2
|
-
|
|
3
|
-
function _defineProperty(obj, key, value) {
|
|
4
|
-
if (key in obj) {
|
|
5
|
-
Object.defineProperty(obj, key, {
|
|
6
|
-
value: value,
|
|
7
|
-
enumerable: true,
|
|
8
|
-
configurable: true,
|
|
9
|
-
writable: true
|
|
10
|
-
});
|
|
11
|
-
} else {
|
|
12
|
-
obj[key] = value;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
return obj;
|
|
16
|
-
}
|
|
1
|
+
import PrismicDom, { RichText as RichText$1 } from 'prismic-dom';
|
|
17
2
|
|
|
18
3
|
function ownKeys(object, enumerableOnly) {
|
|
19
4
|
var keys = Object.keys(object);
|
|
20
5
|
|
|
21
6
|
if (Object.getOwnPropertySymbols) {
|
|
22
7
|
var symbols = Object.getOwnPropertySymbols(object);
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
8
|
+
|
|
9
|
+
if (enumerableOnly) {
|
|
10
|
+
symbols = symbols.filter(function (sym) {
|
|
11
|
+
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
|
|
26
15
|
keys.push.apply(keys, symbols);
|
|
27
16
|
}
|
|
28
17
|
|
|
@@ -49,6 +38,21 @@ function _objectSpread2(target) {
|
|
|
49
38
|
return target;
|
|
50
39
|
}
|
|
51
40
|
|
|
41
|
+
function _defineProperty(obj, key, value) {
|
|
42
|
+
if (key in obj) {
|
|
43
|
+
Object.defineProperty(obj, key, {
|
|
44
|
+
value: value,
|
|
45
|
+
enumerable: true,
|
|
46
|
+
configurable: true,
|
|
47
|
+
writable: true
|
|
48
|
+
});
|
|
49
|
+
} else {
|
|
50
|
+
obj[key] = value;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
return obj;
|
|
54
|
+
}
|
|
55
|
+
|
|
52
56
|
var Embed = {
|
|
53
57
|
name: 'PrismicEmbed',
|
|
54
58
|
functional: true,
|
|
@@ -121,11 +125,24 @@ var Image = {
|
|
|
121
125
|
}
|
|
122
126
|
};
|
|
123
127
|
|
|
128
|
+
var isInternalURL = function isInternalURL(url) {
|
|
129
|
+
/**
|
|
130
|
+
* @see Regex101 expression: {@link https://regex101.com/r/1y7iod/1}
|
|
131
|
+
*/
|
|
132
|
+
var isInternal = /^\/(?!\/)/.test(url);
|
|
133
|
+
/**
|
|
134
|
+
* @see Regex101 expression: {@link https://regex101.com/r/RnUseS/1}
|
|
135
|
+
*/
|
|
136
|
+
|
|
137
|
+
var isSpecialLink = !isInternal && !/^https?:\/\//i.test(url);
|
|
138
|
+
return isInternal && !isSpecialLink;
|
|
139
|
+
};
|
|
140
|
+
|
|
124
141
|
var Link = (function (_ref) {
|
|
125
142
|
var _ref$component = _ref.component,
|
|
126
|
-
component = _ref$component === void 0 ?
|
|
143
|
+
component = _ref$component === void 0 ? "a" : _ref$component;
|
|
127
144
|
return {
|
|
128
|
-
name:
|
|
145
|
+
name: "PrismicLink",
|
|
129
146
|
functional: true,
|
|
130
147
|
props: {
|
|
131
148
|
field: {
|
|
@@ -135,6 +152,21 @@ var Link = (function (_ref) {
|
|
|
135
152
|
linkResolver: {
|
|
136
153
|
type: Function,
|
|
137
154
|
required: false
|
|
155
|
+
},
|
|
156
|
+
target: {
|
|
157
|
+
type: String,
|
|
158
|
+
"default": undefined,
|
|
159
|
+
required: false
|
|
160
|
+
},
|
|
161
|
+
rel: {
|
|
162
|
+
type: String,
|
|
163
|
+
"default": undefined,
|
|
164
|
+
required: false
|
|
165
|
+
},
|
|
166
|
+
blankTargetRelAttribute: {
|
|
167
|
+
type: String,
|
|
168
|
+
"default": "noopener",
|
|
169
|
+
required: false
|
|
138
170
|
}
|
|
139
171
|
},
|
|
140
172
|
render: function render(h, _ref2) {
|
|
@@ -153,7 +185,7 @@ var Link = (function (_ref) {
|
|
|
153
185
|
return null;
|
|
154
186
|
});
|
|
155
187
|
|
|
156
|
-
if (url
|
|
188
|
+
if (isInternalURL(url) && !props.target) {
|
|
157
189
|
data.props = data.props || {};
|
|
158
190
|
data.props.to = url;
|
|
159
191
|
return h(component, data, children);
|
|
@@ -161,23 +193,33 @@ var Link = (function (_ref) {
|
|
|
161
193
|
|
|
162
194
|
data.attrs = _objectSpread2(_objectSpread2({}, data.attrs), {}, {
|
|
163
195
|
href: url
|
|
164
|
-
}, field.target && {
|
|
165
|
-
target: field.target,
|
|
166
|
-
rel: 'noopener'
|
|
167
196
|
});
|
|
168
|
-
|
|
197
|
+
|
|
198
|
+
if (typeof props.target !== "undefined" || field.target) {
|
|
199
|
+
data.attrs.target = typeof props.target !== "undefined" ? props.target : field.target;
|
|
200
|
+
|
|
201
|
+
if (data.attrs.target === "_blank") {
|
|
202
|
+
data.attrs.rel = typeof props.rel !== "undefined" ? props.rel : props.blankTargetRelAttribute;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
return h("a", data, children);
|
|
169
207
|
}
|
|
170
208
|
};
|
|
171
209
|
});
|
|
172
210
|
|
|
173
|
-
var RichText
|
|
174
|
-
name:
|
|
211
|
+
var RichText = {
|
|
212
|
+
name: "PrismicRichText",
|
|
175
213
|
functional: true,
|
|
176
214
|
props: {
|
|
177
215
|
field: {
|
|
178
216
|
type: Array,
|
|
179
217
|
required: true
|
|
180
218
|
},
|
|
219
|
+
linkResolver: {
|
|
220
|
+
type: Function,
|
|
221
|
+
required: false
|
|
222
|
+
},
|
|
181
223
|
htmlSerializer: {
|
|
182
224
|
type: Function,
|
|
183
225
|
required: false
|
|
@@ -185,15 +227,15 @@ var RichText$1 = {
|
|
|
185
227
|
wrapper: {
|
|
186
228
|
type: String,
|
|
187
229
|
required: false,
|
|
188
|
-
"default":
|
|
230
|
+
"default": "div"
|
|
189
231
|
}
|
|
190
232
|
},
|
|
191
233
|
render: function render(h, _ref) {
|
|
192
234
|
var props = _ref.props,
|
|
193
235
|
data = _ref.data,
|
|
194
|
-
children = _ref.children,
|
|
195
236
|
parent = _ref.parent;
|
|
196
237
|
var field = props.field,
|
|
238
|
+
linkResolver = props.linkResolver,
|
|
197
239
|
htmlSerializer = props.htmlSerializer,
|
|
198
240
|
wrapper = props.wrapper;
|
|
199
241
|
|
|
@@ -201,7 +243,48 @@ var RichText$1 = {
|
|
|
201
243
|
return null;
|
|
202
244
|
}
|
|
203
245
|
|
|
204
|
-
var innerHTML = RichText.asHtml(field, parent.$prismic.linkResolver, htmlSerializer || parent.$prismic.htmlSerializer);
|
|
246
|
+
var innerHTML = RichText$1.asHtml(field, linkResolver || parent.$prismic.linkResolver, htmlSerializer || parent.$prismic.htmlSerializer);
|
|
247
|
+
return h(wrapper, _objectSpread2(_objectSpread2({}, data), {}, {
|
|
248
|
+
domProps: {
|
|
249
|
+
innerHTML: innerHTML
|
|
250
|
+
}
|
|
251
|
+
}));
|
|
252
|
+
}
|
|
253
|
+
};
|
|
254
|
+
|
|
255
|
+
var Text = {
|
|
256
|
+
name: "PrismicText",
|
|
257
|
+
functional: true,
|
|
258
|
+
props: {
|
|
259
|
+
field: {
|
|
260
|
+
type: Array,
|
|
261
|
+
required: true
|
|
262
|
+
},
|
|
263
|
+
separator: {
|
|
264
|
+
type: String,
|
|
265
|
+
"default": undefined,
|
|
266
|
+
required: false
|
|
267
|
+
},
|
|
268
|
+
wrapper: {
|
|
269
|
+
type: String,
|
|
270
|
+
required: false,
|
|
271
|
+
"default": "div"
|
|
272
|
+
}
|
|
273
|
+
},
|
|
274
|
+
render: function render(h, _ref) {
|
|
275
|
+
var props = _ref.props,
|
|
276
|
+
data = _ref.data;
|
|
277
|
+
_ref.children;
|
|
278
|
+
_ref.parent;
|
|
279
|
+
var field = props.field,
|
|
280
|
+
separator = props.separator,
|
|
281
|
+
wrapper = props.wrapper;
|
|
282
|
+
|
|
283
|
+
if (!field) {
|
|
284
|
+
return null;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
var innerHTML = RichText$1.asText(field, separator);
|
|
205
288
|
return h(wrapper, _objectSpread2(_objectSpread2({}, data), {}, {
|
|
206
289
|
domProps: {
|
|
207
290
|
innerHTML: innerHTML
|
|
@@ -210,17 +293,162 @@ var RichText$1 = {
|
|
|
210
293
|
}
|
|
211
294
|
};
|
|
212
295
|
|
|
296
|
+
// We need to polyfill process if it doesn't exist, such as in the browser.
|
|
297
|
+
if (typeof process === "undefined") {
|
|
298
|
+
globalThis.process = {
|
|
299
|
+
env: {}
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* `true` if in the production environment, `false` otherwise.
|
|
304
|
+
*
|
|
305
|
+
* This boolean can be used to perform actions only in development environments,
|
|
306
|
+
* such as logging.
|
|
307
|
+
*/
|
|
308
|
+
|
|
309
|
+
|
|
310
|
+
var __PRODUCTION__ = process.env.NODE_ENV === "production";
|
|
311
|
+
|
|
312
|
+
var getSliceComponentProps = function getSliceComponentProps(propsHint) {
|
|
313
|
+
return {
|
|
314
|
+
slice: {
|
|
315
|
+
type: Object,
|
|
316
|
+
required: true
|
|
317
|
+
},
|
|
318
|
+
index: {
|
|
319
|
+
type: Number,
|
|
320
|
+
required: true
|
|
321
|
+
},
|
|
322
|
+
slices: {
|
|
323
|
+
type: Array,
|
|
324
|
+
required: true
|
|
325
|
+
},
|
|
326
|
+
context: {
|
|
327
|
+
type: null,
|
|
328
|
+
required: true
|
|
329
|
+
}
|
|
330
|
+
};
|
|
331
|
+
};
|
|
332
|
+
var TODOSliceComponent = __PRODUCTION__ ? function () {
|
|
333
|
+
return null;
|
|
334
|
+
} : {
|
|
335
|
+
name: "TODOSliceCOmponent",
|
|
336
|
+
functional: true,
|
|
337
|
+
props: getSliceComponentProps(),
|
|
338
|
+
renfer: function renfer(h, _ref) {
|
|
339
|
+
var props = _ref.props,
|
|
340
|
+
data = _ref.data;
|
|
341
|
+
console.warn("[SliceZone] Could not find a component for Slice type \"".concat(props.slice.slice_type, "\""), props.slice);
|
|
342
|
+
return function () {
|
|
343
|
+
return h("section", _objectSpread2(_objectSpread2({}, data), {}, {
|
|
344
|
+
"data-slice-zone-todo-component": "",
|
|
345
|
+
"data-slice-type": props.slice.slice_type
|
|
346
|
+
}), ["Could not find a component for Slice type \"".concat(props.slice.slice_type, "\"")]);
|
|
347
|
+
};
|
|
348
|
+
}
|
|
349
|
+
}; // Just mimiced to prevent confusion but doesn't provide any value with version 2 of this kit
|
|
350
|
+
|
|
351
|
+
var defineSliceZoneComponents = function defineSliceZoneComponents(components) {
|
|
352
|
+
return components;
|
|
353
|
+
};
|
|
354
|
+
var SliceZone = {
|
|
355
|
+
name: "SliceZone",
|
|
356
|
+
functional: true,
|
|
357
|
+
props: {
|
|
358
|
+
slices: {
|
|
359
|
+
type: Array,
|
|
360
|
+
required: true
|
|
361
|
+
},
|
|
362
|
+
components: {
|
|
363
|
+
type: Object,
|
|
364
|
+
"default": undefined,
|
|
365
|
+
required: false
|
|
366
|
+
},
|
|
367
|
+
resolver: {
|
|
368
|
+
type: Function,
|
|
369
|
+
"default": undefined,
|
|
370
|
+
required: false
|
|
371
|
+
},
|
|
372
|
+
context: {
|
|
373
|
+
type: null,
|
|
374
|
+
"default": undefined,
|
|
375
|
+
required: false
|
|
376
|
+
},
|
|
377
|
+
defaultComponent: {
|
|
378
|
+
type: Object,
|
|
379
|
+
"default": undefined,
|
|
380
|
+
required: false
|
|
381
|
+
},
|
|
382
|
+
wrapper: {
|
|
383
|
+
type: [String, Object, Function],
|
|
384
|
+
"default": "div",
|
|
385
|
+
required: false
|
|
386
|
+
}
|
|
387
|
+
},
|
|
388
|
+
render: function render(h, _ref2) {
|
|
389
|
+
var props = _ref2.props,
|
|
390
|
+
data = _ref2.data;
|
|
391
|
+
|
|
392
|
+
// Prevent fatal if user didn't check for field, throws `Invalid prop` warn
|
|
393
|
+
if (!props.slices) {
|
|
394
|
+
return function () {
|
|
395
|
+
return null;
|
|
396
|
+
};
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
var renderedSlices = computed(function () {
|
|
400
|
+
return props.slices.map(function (slice, index) {
|
|
401
|
+
var component = props.components && slice.slice_type in props.components ? props.components[slice.slice_type] : props.defaultComponent || TODOSliceComponent; // TODO: Remove `resolver` in v3 in favor of `components`.
|
|
402
|
+
|
|
403
|
+
if (props.resolver) {
|
|
404
|
+
var resolvedComponent = props.resolver({
|
|
405
|
+
slice: slice,
|
|
406
|
+
sliceName: slice.slice_type,
|
|
407
|
+
i: index
|
|
408
|
+
});
|
|
409
|
+
|
|
410
|
+
if (resolvedComponent) {
|
|
411
|
+
component = resolvedComponent;
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
var p = {
|
|
416
|
+
key: "".concat(slice.slice_type, "-").concat(index),
|
|
417
|
+
slice: slice,
|
|
418
|
+
index: index,
|
|
419
|
+
context: props.context,
|
|
420
|
+
slices: props.slices
|
|
421
|
+
};
|
|
422
|
+
return h(component, p);
|
|
423
|
+
});
|
|
424
|
+
});
|
|
425
|
+
var parent = props.wrapper;
|
|
426
|
+
|
|
427
|
+
if (typeof parent === "string") {
|
|
428
|
+
return h(parent, data, renderedSlices.value);
|
|
429
|
+
} else {
|
|
430
|
+
return h(parent, data, {
|
|
431
|
+
"default": function _default() {
|
|
432
|
+
return renderedSlices.value;
|
|
433
|
+
}
|
|
434
|
+
});
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
};
|
|
438
|
+
|
|
213
439
|
var NuxtLink = Link({
|
|
214
|
-
component:
|
|
440
|
+
component: "nuxt-link"
|
|
215
441
|
});
|
|
216
442
|
var VueRouterLink = Link({
|
|
217
|
-
component:
|
|
443
|
+
component: "router-link"
|
|
218
444
|
});
|
|
219
445
|
var exp = {
|
|
220
446
|
common: {
|
|
221
447
|
Embed: Embed,
|
|
222
448
|
Image: Image,
|
|
223
|
-
RichText: RichText
|
|
449
|
+
RichText: RichText,
|
|
450
|
+
Text: Text,
|
|
451
|
+
SliceZone: SliceZone
|
|
224
452
|
},
|
|
225
453
|
nuxt: {
|
|
226
454
|
Link: NuxtLink
|
|
@@ -229,10 +457,12 @@ var exp = {
|
|
|
229
457
|
Link: VueRouterLink
|
|
230
458
|
}
|
|
231
459
|
};
|
|
460
|
+
exp.common;
|
|
461
|
+
exp.nuxt;
|
|
462
|
+
exp.vueRouter;
|
|
232
463
|
|
|
233
|
-
var common
|
|
234
|
-
var nuxt
|
|
235
|
-
var vueRouter
|
|
464
|
+
var common = exp.common;
|
|
465
|
+
var nuxt = exp.nuxt;
|
|
466
|
+
var vueRouter = exp.vueRouter;
|
|
236
467
|
|
|
237
|
-
export default
|
|
238
|
-
export { common$1 as common, nuxt$1 as nuxt, vueRouter$1 as vueRouter };
|
|
468
|
+
export { common, exp as default, defineSliceZoneComponents, getSliceComponentProps, nuxt, vueRouter };
|