apostrophe 3.53.0 → 3.55.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/CHANGELOG.md +58 -1
- package/defaults.js +1 -0
- package/modules/@apostrophecms/admin-bar/ui/apos/components/TheAposContextModeAndSettings.vue +5 -2
- package/modules/@apostrophecms/admin-bar/ui/apos/components/TheAposContextTitle.vue +28 -19
- package/modules/@apostrophecms/any-doc-type/index.js +2 -2
- package/modules/@apostrophecms/any-page-type/index.js +2 -2
- package/modules/@apostrophecms/doc/index.js +55 -29
- package/modules/@apostrophecms/doc-type/index.js +11 -6
- package/modules/@apostrophecms/doc-type/ui/apos/components/AposDocContextMenu.vue +4 -440
- package/modules/@apostrophecms/doc-type/ui/apos/logic/AposDocContextMenu.js +445 -0
- package/modules/@apostrophecms/i18n/i18n/de.json +113 -105
- package/modules/@apostrophecms/i18n/i18n/es.json +10 -0
- package/modules/@apostrophecms/i18n/i18n/fr.json +8 -0
- package/modules/@apostrophecms/i18n/i18n/pt-BR.json +10 -0
- package/modules/@apostrophecms/i18n/i18n/sk.json +8 -0
- package/modules/@apostrophecms/image/ui/apos/components/AposMediaManager.vue +1 -0
- package/modules/@apostrophecms/log/index.js +429 -0
- package/modules/@apostrophecms/login/index.js +47 -4
- package/modules/@apostrophecms/modal/ui/apos/components/AposDocsManagerToolbar.vue +14 -1
- package/modules/@apostrophecms/modal/ui/apos/mixins/AposEditorMixin.js +1 -1
- package/modules/@apostrophecms/module/index.js +32 -6
- package/modules/@apostrophecms/module/lib/log.js +68 -0
- package/modules/@apostrophecms/page/index.js +71 -19
- package/modules/@apostrophecms/page/lib/legacy-migrations.js +0 -57
- package/modules/@apostrophecms/page/ui/apos/components/AposPagesManager.vue +8 -285
- package/modules/@apostrophecms/page/ui/apos/logic/AposPagesManager.js +291 -0
- package/modules/@apostrophecms/page-type/index.js +39 -26
- package/modules/@apostrophecms/piece-type/index.js +19 -11
- package/modules/@apostrophecms/piece-type/ui/apos/components/AposDocsManager.vue +1 -0
- package/modules/@apostrophecms/schema/ui/apos/components/AposArrayEditor.vue +2 -357
- package/modules/@apostrophecms/schema/ui/apos/components/AposInputArea.vue +2 -86
- package/modules/@apostrophecms/schema/ui/apos/components/AposInputArray.vue +2 -254
- package/modules/@apostrophecms/schema/ui/apos/components/AposInputAttachment.vue +2 -77
- package/modules/@apostrophecms/schema/ui/apos/components/AposInputBoolean.vue +2 -44
- package/modules/@apostrophecms/schema/ui/apos/components/AposInputCheckboxes.vue +2 -64
- package/modules/@apostrophecms/schema/ui/apos/components/AposInputColor.vue +2 -94
- package/modules/@apostrophecms/schema/ui/apos/components/AposInputDateAndTime.vue +3 -47
- package/modules/@apostrophecms/schema/ui/apos/components/AposInputObject.vue +2 -82
- package/modules/@apostrophecms/schema/ui/apos/components/AposInputPassword.vue +2 -37
- package/modules/@apostrophecms/schema/ui/apos/components/AposInputRadio.vue +2 -26
- package/modules/@apostrophecms/schema/ui/apos/components/AposInputRange.vue +2 -57
- package/modules/@apostrophecms/schema/ui/apos/components/AposInputRelationship.vue +2 -259
- package/modules/@apostrophecms/schema/ui/apos/components/AposInputSelect.vue +2 -38
- package/modules/@apostrophecms/schema/ui/apos/components/AposInputSlug.vue +2 -275
- package/modules/@apostrophecms/schema/ui/apos/components/AposInputString.vue +2 -167
- package/modules/@apostrophecms/schema/ui/apos/components/AposInputWrapper.vue +2 -115
- package/modules/@apostrophecms/schema/ui/apos/components/AposSchema.vue +3 -279
- package/modules/@apostrophecms/schema/ui/apos/components/AposSearchList.vue +2 -83
- package/modules/@apostrophecms/schema/ui/apos/lib/detectChange.js +10 -1
- package/modules/@apostrophecms/schema/ui/apos/logic/AposArrayEditor.js +361 -0
- package/modules/@apostrophecms/schema/ui/apos/logic/AposInputArea.js +89 -0
- package/modules/@apostrophecms/schema/ui/apos/logic/AposInputArray.js +257 -0
- package/modules/@apostrophecms/schema/ui/apos/logic/AposInputAttachment.js +81 -0
- package/modules/@apostrophecms/schema/ui/apos/logic/AposInputBoolean.js +48 -0
- package/modules/@apostrophecms/schema/ui/apos/logic/AposInputCheckboxes.js +68 -0
- package/modules/@apostrophecms/schema/ui/apos/logic/AposInputColor.js +98 -0
- package/modules/@apostrophecms/schema/ui/apos/logic/AposInputDateAndTime.js +49 -0
- package/modules/@apostrophecms/schema/ui/apos/logic/AposInputObject.js +86 -0
- package/modules/@apostrophecms/schema/ui/apos/logic/AposInputPassword.js +41 -0
- package/modules/@apostrophecms/schema/ui/apos/logic/AposInputRadio.js +29 -0
- package/modules/@apostrophecms/schema/ui/apos/logic/AposInputRange.js +60 -0
- package/modules/@apostrophecms/schema/ui/apos/logic/AposInputRelationship.js +262 -0
- package/modules/@apostrophecms/schema/ui/apos/logic/AposInputSelect.js +41 -0
- package/modules/@apostrophecms/schema/ui/apos/logic/AposInputSlug.js +278 -0
- package/modules/@apostrophecms/schema/ui/apos/logic/AposInputString.js +170 -0
- package/modules/@apostrophecms/schema/ui/apos/logic/AposInputWrapper.js +118 -0
- package/modules/@apostrophecms/schema/ui/apos/logic/AposSchema.js +281 -0
- package/modules/@apostrophecms/schema/ui/apos/logic/AposSearchList.js +85 -0
- package/modules/@apostrophecms/template/index.js +1 -1
- package/modules/@apostrophecms/ui/ui/apos/components/AposTreeHeader.vue +2 -2
- package/modules/@apostrophecms/util/index.js +83 -13
- package/modules/@apostrophecms/util/lib/logger.js +19 -17
- package/package.json +1 -1
- package/test/docs.js +35 -2
- package/test/log.js +1765 -0
- package/test/pages.js +57 -0
- package/test-lib/util.js +1 -1
package/test/pages.js
CHANGED
|
@@ -335,6 +335,27 @@ describe('Pages', function() {
|
|
|
335
335
|
assert(subPage.level === 3);
|
|
336
336
|
});
|
|
337
337
|
|
|
338
|
+
it('is able to insert a draft subpage from published parent id', async function() {
|
|
339
|
+
|
|
340
|
+
const subPageInfo = {
|
|
341
|
+
slug: '/parent/sub-draft-page',
|
|
342
|
+
visibility: 'public',
|
|
343
|
+
type: 'test-page',
|
|
344
|
+
title: 'Sub Draft Page'
|
|
345
|
+
};
|
|
346
|
+
console.log('PARENT PAGE', newPage);
|
|
347
|
+
|
|
348
|
+
const subPage = await apos.page.insert(
|
|
349
|
+
apos.task.getReq({ mode: 'draft' }),
|
|
350
|
+
// ensure it ends with ":published"
|
|
351
|
+
newPage._id.replace(':draft', ':published'),
|
|
352
|
+
'lastChild',
|
|
353
|
+
subPageInfo
|
|
354
|
+
);
|
|
355
|
+
// Should not throw 'notfound'.
|
|
356
|
+
assert(subPage);
|
|
357
|
+
});
|
|
358
|
+
|
|
338
359
|
// MOVING
|
|
339
360
|
|
|
340
361
|
it('is able to move root/parent/sibling/cousin after root/parent', async function() {
|
|
@@ -386,6 +407,42 @@ describe('Pages', function() {
|
|
|
386
407
|
assert.strictEqual(page.path, `${homeId.replace(':en:published', '')}/another-parent/parent/sibling`);
|
|
387
408
|
});
|
|
388
409
|
|
|
410
|
+
it('inferred page relationships are correct', async function() {
|
|
411
|
+
const req = apos.task.getReq();
|
|
412
|
+
const pages = await apos.page.find(req, {}).toArray();
|
|
413
|
+
for (const page of pages) {
|
|
414
|
+
if (page.level === 0) {
|
|
415
|
+
continue;
|
|
416
|
+
}
|
|
417
|
+
const { lastTargetId, lastPosition } = await apos.page.inferLastTargetIdAndPosition(page);
|
|
418
|
+
const parentPath = page.path.split('/').slice(0, page.path.split('/').length - 1).join('/');
|
|
419
|
+
assert(pages.find(p => p.path === parentPath));
|
|
420
|
+
const peers = pages.filter(p => p.path.match(apos.page.matchDescendants(parentPath)) && (p.level === page.level));
|
|
421
|
+
if (peers.length === 1) {
|
|
422
|
+
const parent = pages.find(p => p._id === lastTargetId);
|
|
423
|
+
assert(parent);
|
|
424
|
+
assert(page.path.startsWith(parent.path));
|
|
425
|
+
assert([ 'firstChild', 'lastChild' ].includes(lastPosition));
|
|
426
|
+
} else if (page.rank === Math.max(...peers.map(peer => peer.rank))) {
|
|
427
|
+
assert.strictEqual(lastPosition, 'lastChild');
|
|
428
|
+
const parent = pages.find(p => p._id === lastTargetId);
|
|
429
|
+
assert(parent);
|
|
430
|
+
assert(page.path.startsWith(parent.path));
|
|
431
|
+
} else if (page.rank === Math.min(...peers.map(peer => peer.rank))) {
|
|
432
|
+
assert.strictEqual(lastPosition, 'firstChild');
|
|
433
|
+
const parent = pages.find(p => p._id === lastTargetId);
|
|
434
|
+
assert(parent);
|
|
435
|
+
assert(page.path.startsWith(parent.path));
|
|
436
|
+
} else if (lastPosition === 'after') {
|
|
437
|
+
const peer = pages.find(p => p._id === lastTargetId);
|
|
438
|
+
assert(peer);
|
|
439
|
+
assert(page.rank > peer.rank);
|
|
440
|
+
} else {
|
|
441
|
+
throw new Error(`Unexpected position for ${page.path}: ${lastPosition}`);
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
});
|
|
445
|
+
|
|
389
446
|
it('should be able to serve a page', async function() {
|
|
390
447
|
const response = await apos.http.get('/another-parent/parent/child', {
|
|
391
448
|
fullResponse: true
|