apostrophe 3.63.3 → 4.1.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/.eslintrc +13 -4
- package/CHANGELOG.md +37 -5
- package/defaults.js +2 -1
- package/modules/@apostrophecms/admin-bar/ui/apos/apps/AposAdminBar.js +7 -17
- package/modules/@apostrophecms/admin-bar/ui/apos/components/TheAposAdminBar.vue +14 -16
- package/modules/@apostrophecms/admin-bar/ui/apos/components/TheAposAdminBarLocale.vue +1 -1
- package/modules/@apostrophecms/admin-bar/ui/apos/components/TheAposAdminBarMenu.vue +22 -15
- package/modules/@apostrophecms/admin-bar/ui/apos/components/TheAposAdminBarUser.vue +2 -2
- package/modules/@apostrophecms/admin-bar/ui/apos/components/TheAposContextBar.vue +13 -8
- package/modules/@apostrophecms/admin-bar/ui/apos/components/TheAposContextModeAndSettings.vue +18 -10
- package/modules/@apostrophecms/admin-bar/ui/apos/components/TheAposContextTitle.vue +4 -4
- package/modules/@apostrophecms/admin-bar/ui/apos/components/TheAposContextUndoRedo.vue +14 -8
- package/modules/@apostrophecms/admin-bar/ui/apos/components/TheAposSavingIndicator.vue +2 -1
- package/modules/@apostrophecms/area/ui/apos/apps/AposAreas.js +36 -54
- package/modules/@apostrophecms/area/ui/apos/components/AposAreaContextualMenu.vue +20 -25
- package/modules/@apostrophecms/area/ui/apos/components/AposAreaEditor.vue +5 -12
- package/modules/@apostrophecms/area/ui/apos/components/AposAreaExpandedMenu.vue +11 -3
- package/modules/@apostrophecms/area/ui/apos/components/AposAreaMenu.vue +6 -6
- package/modules/@apostrophecms/area/ui/apos/components/AposAreaMenuItem.vue +3 -2
- package/modules/@apostrophecms/area/ui/apos/components/AposAreaWidget.vue +31 -44
- package/modules/@apostrophecms/area/ui/apos/components/AposWidgetControls.vue +16 -16
- package/modules/@apostrophecms/asset/index.js +25 -12
- package/modules/@apostrophecms/asset/lib/webpack/apos/webpack.config.js +3 -3
- package/modules/@apostrophecms/asset/lib/webpack/apos/webpack.vue.js +7 -1
- package/modules/@apostrophecms/attachment/index.js +2 -1
- package/modules/@apostrophecms/attachment/public/img/missing-icon.svg +14 -0
- package/modules/@apostrophecms/busy/ui/apos/apps/AposBusy.js +8 -7
- package/modules/@apostrophecms/busy/ui/apos/components/TheAposBusy.vue +1 -1
- package/modules/@apostrophecms/command-menu/ui/apos/apps/AposCommandMenu.js +11 -29
- package/modules/@apostrophecms/command-menu/ui/apos/components/AposCommandMenuKey.vue +1 -1
- package/modules/@apostrophecms/command-menu/ui/apos/components/AposCommandMenuShortcut.vue +6 -6
- package/modules/@apostrophecms/command-menu/ui/apos/components/TheAposCommandMenu.vue +10 -7
- package/modules/@apostrophecms/doc-type/index.js +34 -13
- package/modules/@apostrophecms/doc-type/ui/apos/components/AposDocContextMenu.vue +3 -3
- package/modules/@apostrophecms/doc-type/ui/apos/components/AposDocEditor.vue +20 -15
- package/modules/@apostrophecms/doc-type/ui/apos/logic/AposDocContextMenu.js +1 -1
- package/modules/@apostrophecms/i18n/i18n/en.json +13 -0
- package/modules/@apostrophecms/i18n/ui/apos/components/AposI18nLocalize.vue +209 -33
- package/modules/@apostrophecms/i18n/ui/apos/components/AposI18nLocalizeErrors.vue +3 -3
- package/modules/@apostrophecms/image/ui/apos/components/AposImageCropper.vue +5 -5
- package/modules/@apostrophecms/image/ui/apos/components/AposImageRelationshipEditor.vue +6 -6
- package/modules/@apostrophecms/image/ui/apos/components/AposMediaManager.vue +23 -16
- package/modules/@apostrophecms/image/ui/apos/components/AposMediaManagerDisplay.vue +11 -11
- package/modules/@apostrophecms/image/ui/apos/components/AposMediaManagerEditor.vue +28 -21
- package/modules/@apostrophecms/image/ui/apos/components/AposMediaManagerSelections.vue +4 -3
- package/modules/@apostrophecms/image/ui/apos/components/AposMediaUploader.vue +5 -4
- package/modules/@apostrophecms/login/index.js +18 -1
- package/modules/@apostrophecms/login/ui/apos/apps/AposLogin.js +6 -7
- package/modules/@apostrophecms/login/ui/apos/components/AposForgotPasswordForm.vue +3 -3
- package/modules/@apostrophecms/login/ui/apos/components/AposLoginForm.vue +10 -10
- package/modules/@apostrophecms/login/ui/apos/components/AposResetPasswordForm.vue +3 -3
- package/modules/@apostrophecms/login/ui/apos/components/TheAposLogin.vue +2 -2
- package/modules/@apostrophecms/login/ui/apos/logic/AposLoginForm.js +1 -16
- package/modules/@apostrophecms/modal/ui/apos/apps/AposModals.js +60 -87
- package/modules/@apostrophecms/modal/ui/apos/components/AposDocsManagerToolbar.vue +15 -11
- package/modules/@apostrophecms/modal/ui/apos/components/AposModal.vue +17 -11
- package/modules/@apostrophecms/modal/ui/apos/components/AposModalBreadcrumbs.vue +7 -4
- package/modules/@apostrophecms/modal/ui/apos/components/AposModalConfirm.vue +9 -9
- package/modules/@apostrophecms/modal/ui/apos/components/AposModalLip.vue +2 -2
- package/modules/@apostrophecms/modal/ui/apos/components/AposModalShareDraft.vue +8 -8
- package/modules/@apostrophecms/modal/ui/apos/components/AposModalTabs.vue +4 -3
- package/modules/@apostrophecms/modal/ui/apos/components/AposModalToolbar.vue +7 -7
- package/modules/@apostrophecms/modal/ui/apos/components/TheAposModals.vue +22 -4
- package/modules/@apostrophecms/modal/ui/apos/composables/AposFocus.js +95 -0
- package/modules/@apostrophecms/modal/ui/apos/mixins/AposDocsManagerMixin.js +2 -3
- package/modules/@apostrophecms/modal/ui/apos/mixins/AposEditorMixin.js +6 -0
- package/modules/@apostrophecms/notification/index.js +4 -4
- package/modules/@apostrophecms/notification/ui/apos/apps/AposNotification.js +6 -9
- package/modules/@apostrophecms/notification/ui/apos/components/AposNotification.vue +12 -8
- package/modules/@apostrophecms/notification/ui/apos/components/TheAposNotifications.vue +4 -2
- package/modules/@apostrophecms/oembed-field/ui/apos/components/AposInputOembed.vue +12 -10
- package/modules/@apostrophecms/page/index.js +1 -0
- package/modules/@apostrophecms/page/ui/apos/components/AposPagesManager.vue +15 -11
- package/modules/@apostrophecms/page/ui/apos/logic/AposPagesManager.js +1 -1
- package/modules/@apostrophecms/permission/ui/apos/components/AposInputRole.vue +3 -3
- package/modules/@apostrophecms/piece-type/ui/apos/components/AposDocsManager.vue +25 -17
- package/modules/@apostrophecms/piece-type/ui/apos/components/AposDocsManagerDisplay.vue +24 -20
- package/modules/@apostrophecms/piece-type/ui/apos/components/AposDocsManagerSelectBox.vue +9 -5
- package/modules/@apostrophecms/piece-type/ui/apos/components/AposRelationshipEditor.vue +15 -11
- package/modules/@apostrophecms/rich-text-widget/index.js +1 -0
- package/modules/@apostrophecms/rich-text-widget/ui/apos/components/AposImageControlDialog.vue +7 -6
- package/modules/@apostrophecms/rich-text-widget/ui/apos/components/AposRichTextWidgetEditor.vue +31 -30
- package/modules/@apostrophecms/rich-text-widget/ui/apos/components/AposTiptapAnchor.vue +12 -10
- package/modules/@apostrophecms/rich-text-widget/ui/apos/components/AposTiptapButton.vue +1 -1
- package/modules/@apostrophecms/rich-text-widget/ui/apos/components/AposTiptapImage.vue +1 -1
- package/modules/@apostrophecms/rich-text-widget/ui/apos/components/AposTiptapLink.vue +9 -8
- package/modules/@apostrophecms/rich-text-widget/ui/apos/components/AposTiptapStyles.vue +3 -3
- package/modules/@apostrophecms/rich-text-widget/ui/apos/components/AposTiptapTable.vue +3 -3
- package/modules/@apostrophecms/schema/index.js +69 -8
- package/modules/@apostrophecms/schema/lib/addFieldTypes.js +1 -1
- package/modules/@apostrophecms/schema/ui/apos/components/AposArrayEditor.vue +10 -8
- package/modules/@apostrophecms/schema/ui/apos/components/AposInputArea.vue +5 -3
- package/modules/@apostrophecms/schema/ui/apos/components/AposInputArray.vue +81 -277
- package/modules/@apostrophecms/schema/ui/apos/components/AposInputAttachment.vue +4 -2
- package/modules/@apostrophecms/schema/ui/apos/components/AposInputBoolean.vue +24 -14
- package/modules/@apostrophecms/schema/ui/apos/components/AposInputCheckboxes.vue +7 -6
- package/modules/@apostrophecms/schema/ui/apos/components/AposInputColor.vue +10 -7
- package/modules/@apostrophecms/schema/ui/apos/components/AposInputObject.vue +3 -3
- package/modules/@apostrophecms/schema/ui/apos/components/AposInputPassword.vue +6 -4
- package/modules/@apostrophecms/schema/ui/apos/components/AposInputRadio.vue +5 -4
- package/modules/@apostrophecms/schema/ui/apos/components/AposInputRange.vue +9 -6
- package/modules/@apostrophecms/schema/ui/apos/components/AposInputRelationship.vue +15 -12
- package/modules/@apostrophecms/schema/ui/apos/components/AposInputSelect.vue +1 -1
- package/modules/@apostrophecms/schema/ui/apos/components/AposInputSlug.vue +16 -12
- package/modules/@apostrophecms/schema/ui/apos/components/AposInputString.vue +19 -11
- package/modules/@apostrophecms/schema/ui/apos/components/AposInputWrapper.vue +15 -12
- package/modules/@apostrophecms/schema/ui/apos/components/AposSchema.vue +75 -22
- package/modules/@apostrophecms/schema/ui/apos/components/AposSearchList.vue +1 -1
- package/modules/@apostrophecms/schema/ui/apos/components/AposSubform.vue +2 -2
- package/modules/@apostrophecms/schema/ui/apos/logic/AposArrayEditor.js +0 -4
- package/modules/@apostrophecms/schema/ui/apos/logic/AposInputArea.js +3 -3
- package/modules/@apostrophecms/schema/ui/apos/logic/AposInputArray.js +15 -4
- package/modules/@apostrophecms/schema/ui/apos/logic/AposInputAttachment.js +3 -3
- package/modules/@apostrophecms/schema/ui/apos/logic/AposInputCheckboxes.js +7 -7
- package/modules/@apostrophecms/schema/ui/apos/logic/AposInputColor.js +5 -8
- package/modules/@apostrophecms/schema/ui/apos/logic/AposInputDateAndTime.js +1 -1
- package/modules/@apostrophecms/schema/ui/apos/logic/AposInputObject.js +1 -1
- package/modules/@apostrophecms/schema/ui/apos/logic/AposInputRadio.js +1 -1
- package/modules/@apostrophecms/schema/ui/apos/logic/AposInputRelationship.js +12 -9
- package/modules/@apostrophecms/schema/ui/apos/logic/AposInputSelect.js +3 -3
- package/modules/@apostrophecms/schema/ui/apos/logic/AposInputString.js +7 -9
- package/modules/@apostrophecms/schema/ui/apos/logic/AposInputWrapper.js +4 -4
- package/modules/@apostrophecms/schema/ui/apos/logic/AposSchema.js +42 -13
- package/modules/@apostrophecms/schema/ui/apos/logic/AposSubform.js +1 -1
- package/modules/@apostrophecms/schema/ui/apos/mixins/AposInputMixin.js +9 -9
- package/modules/@apostrophecms/schema/ui/apos/scss/AposInputArray.scss +205 -0
- package/modules/@apostrophecms/settings/ui/apos/components/AposSettingsManager.vue +5 -5
- package/modules/@apostrophecms/settings/ui/apos/logic/AposSettingsManager.js +4 -4
- package/modules/@apostrophecms/submitted-draft/ui/apos/components/AposSubmittedDraftIcon.vue +5 -4
- package/modules/@apostrophecms/task/index.js +2 -0
- package/modules/@apostrophecms/translation/index.js +233 -0
- package/modules/@apostrophecms/translation/ui/apos/components/AposTranslationIndicator.vue +84 -0
- package/modules/@apostrophecms/ui/ui/apos/components/AposAvatar.vue +2 -1
- package/modules/@apostrophecms/ui/ui/apos/components/AposButton.vue +4 -4
- package/modules/@apostrophecms/ui/ui/apos/components/AposButtonGroup.vue +6 -6
- package/modules/@apostrophecms/ui/ui/apos/components/AposButtonSplit.vue +120 -113
- package/modules/@apostrophecms/ui/ui/apos/components/AposCellButton.vue +2 -1
- package/modules/@apostrophecms/ui/ui/apos/components/AposCellLabels.vue +49 -5
- package/modules/@apostrophecms/ui/ui/apos/components/AposCheckbox.vue +19 -19
- package/modules/@apostrophecms/ui/ui/apos/components/AposCloudUploadIcon.vue +10 -5
- package/modules/@apostrophecms/ui/ui/apos/components/AposCombo.vue +15 -15
- package/modules/@apostrophecms/ui/ui/apos/components/AposContextMenu.vue +214 -191
- package/modules/@apostrophecms/ui/ui/apos/components/AposContextMenuDialog.vue +77 -65
- package/modules/@apostrophecms/ui/ui/apos/components/AposContextMenuItem.vue +1 -1
- package/modules/@apostrophecms/ui/ui/apos/components/AposContextMenuTip.vue +28 -50
- package/modules/@apostrophecms/ui/ui/apos/components/AposEmptyState.vue +3 -3
- package/modules/@apostrophecms/ui/ui/apos/components/AposFile.vue +5 -5
- package/modules/@apostrophecms/ui/ui/apos/components/AposFilterMenu.vue +4 -4
- package/modules/@apostrophecms/ui/ui/apos/components/AposIndicator.vue +1 -1
- package/modules/@apostrophecms/ui/ui/apos/components/AposLabel.vue +1 -1
- package/modules/@apostrophecms/ui/ui/apos/components/AposMinMaxCount.vue +5 -5
- package/modules/@apostrophecms/ui/ui/apos/components/AposPager.vue +14 -8
- package/modules/@apostrophecms/ui/ui/apos/components/AposPagerDots.vue +2 -1
- package/modules/@apostrophecms/ui/ui/apos/components/AposSlat.vue +13 -12
- package/modules/@apostrophecms/ui/ui/apos/components/AposSlatList.vue +53 -59
- package/modules/@apostrophecms/ui/ui/apos/components/AposSpinner.vue +2 -2
- package/modules/@apostrophecms/ui/ui/apos/components/AposSubformPreview.vue +2 -2
- package/modules/@apostrophecms/ui/ui/apos/components/AposTag.vue +3 -2
- package/modules/@apostrophecms/ui/ui/apos/components/AposTagApply.vue +40 -35
- package/modules/@apostrophecms/ui/ui/apos/components/AposTagListItem.vue +2 -1
- package/modules/@apostrophecms/ui/ui/apos/components/AposToggle.vue +2 -2
- package/modules/@apostrophecms/ui/ui/apos/components/AposTree.vue +9 -11
- package/modules/@apostrophecms/ui/ui/apos/components/AposTreeHeader.vue +5 -3
- package/modules/@apostrophecms/ui/ui/apos/components/AposTreeRows.vue +129 -129
- package/modules/@apostrophecms/ui/ui/apos/composables/AposTheme.js +11 -0
- package/modules/@apostrophecms/ui/ui/apos/lib/click-outside-element.js +4 -4
- package/modules/@apostrophecms/ui/ui/apos/lib/i18next.js +56 -50
- package/modules/@apostrophecms/ui/ui/apos/lib/tooltip.js +191 -0
- package/modules/@apostrophecms/ui/ui/apos/lib/vue.js +19 -10
- package/modules/@apostrophecms/ui/ui/apos/mixins/AposAdvisoryLockMixin.js +1 -1
- package/modules/@apostrophecms/ui/ui/apos/scss/global/_tables.scss +1 -1
- package/modules/@apostrophecms/ui/ui/apos/scss/global/_theme.scss +1 -0
- package/modules/@apostrophecms/ui/ui/apos/scss/global/_tooltips.scss +6 -22
- package/modules/@apostrophecms/ui/ui/apos/scss/shared/_table-rows.scss +1 -1
- package/modules/@apostrophecms/widget-type/index.js +8 -2
- package/modules/@apostrophecms/widget-type/ui/apos/components/AposWidgetEditor.vue +26 -22
- package/modules/@apostrophecms/widget-type/ui/apos/mixins/AposWidgetMixin.js +4 -4
- package/package.json +31 -44
- package/test/attachments.js +5 -0
- package/test/schemas.js +138 -0
- package/test/translation.js +538 -0
- package/test-lib/util.js +21 -0
- package/modules/@apostrophecms/ui/ui/apos/lib/localized-v-tooltip.js +0 -63
- package/modules/@apostrophecms/ui/ui/apos/lib/tooltip-options.js +0 -13
|
@@ -24,12 +24,7 @@ export default {
|
|
|
24
24
|
return {
|
|
25
25
|
previousKey: '',
|
|
26
26
|
modal: 'default',
|
|
27
|
-
keyboardShortcutListener() {}
|
|
28
|
-
delay(resolve, ms) {
|
|
29
|
-
return new Promise(() => {
|
|
30
|
-
setTimeout(resolve, ms);
|
|
31
|
-
});
|
|
32
|
-
}
|
|
27
|
+
keyboardShortcutListener() {}
|
|
33
28
|
};
|
|
34
29
|
},
|
|
35
30
|
computed: {
|
|
@@ -90,13 +85,21 @@ export default {
|
|
|
90
85
|
apos.bus.$on('modal-launched', this.updateModal);
|
|
91
86
|
apos.bus.$on('modal-resolved', this.updateModal);
|
|
92
87
|
},
|
|
93
|
-
|
|
88
|
+
beforeUnmount() {
|
|
94
89
|
document.removeEventListener('keydown', this.keyboardShortcutListener);
|
|
95
90
|
|
|
96
91
|
apos.bus.$off('modal-launched', this.updateModal);
|
|
97
92
|
apos.bus.$off('modal-resolved', this.updateModal);
|
|
98
93
|
},
|
|
99
94
|
methods: {
|
|
95
|
+
delay(resolve, ms) {
|
|
96
|
+
return new Promise(() => {
|
|
97
|
+
setTimeout(resolve, ms);
|
|
98
|
+
});
|
|
99
|
+
},
|
|
100
|
+
getModal() {
|
|
101
|
+
return this.modal;
|
|
102
|
+
},
|
|
100
103
|
getFirstNonShortcutModal(index = -1) {
|
|
101
104
|
const modal = apos.modal.getAt(index);
|
|
102
105
|
const properties = apos.modal.getProperties(modal.id);
|
|
@@ -1047,6 +1047,7 @@ module.exports = {
|
|
|
1047
1047
|
locale: toLocale,
|
|
1048
1048
|
mode: 'draft'
|
|
1049
1049
|
});
|
|
1050
|
+
|
|
1050
1051
|
const toId = draft._id.replace(`:${draft.aposLocale}`, `:${toLocale}:draft`);
|
|
1051
1052
|
const actionModule = self.apos.page.isPage(draft) ? self.apos.page : self;
|
|
1052
1053
|
// Use findForEditing so that we are successful even for edge cases
|
|
@@ -1059,17 +1060,26 @@ module.exports = {
|
|
|
1059
1060
|
const existing = await actionModule.findForEditing(toReq, {
|
|
1060
1061
|
_id: toId
|
|
1061
1062
|
}).permission('view').toObject();
|
|
1063
|
+
|
|
1064
|
+
const eventOptions = {
|
|
1065
|
+
source: draft.aposLocale.split(':')[0],
|
|
1066
|
+
target: toLocale,
|
|
1067
|
+
existing: Boolean(existing)
|
|
1068
|
+
};
|
|
1069
|
+
|
|
1062
1070
|
// We only want to copy schema properties, leave non-schema
|
|
1063
1071
|
// properties of the source document alone
|
|
1064
|
-
const data = Object.fromEntries(Object.entries(draft)
|
|
1072
|
+
const data = Object.fromEntries(Object.entries(draft)
|
|
1073
|
+
.filter(
|
|
1074
|
+
([ key, value ]) => key === 'type' || self.schema.find(field => field.name === key)
|
|
1075
|
+
));
|
|
1065
1076
|
// We need a slug even if removed from the schema for editing purposes
|
|
1066
1077
|
data.slug = draft.slug;
|
|
1067
1078
|
let result;
|
|
1068
1079
|
if (!existing) {
|
|
1069
1080
|
if (self.apos.page.isPage(draft)) {
|
|
1070
1081
|
if (!draft.level) {
|
|
1071
|
-
|
|
1072
|
-
result = await self.apos.doc.insert(toReq, {
|
|
1082
|
+
const insert = {
|
|
1073
1083
|
...data,
|
|
1074
1084
|
aposDocId: draft.aposDocId,
|
|
1075
1085
|
aposLocale: `${toLocale}:draft`,
|
|
@@ -1079,7 +1089,10 @@ module.exports = {
|
|
|
1079
1089
|
rank: draft.rank,
|
|
1080
1090
|
parked: draft.parked,
|
|
1081
1091
|
parkedId: draft.parkedId
|
|
1082
|
-
}
|
|
1092
|
+
};
|
|
1093
|
+
await self.emit('beforeLocalize', req, insert, eventOptions);
|
|
1094
|
+
// Replicating the home page for the first time
|
|
1095
|
+
result = await self.apos.doc.insert(toReq, insert);
|
|
1083
1096
|
} else {
|
|
1084
1097
|
// A page that is not the home page, being replicated for the first time
|
|
1085
1098
|
let { lastTargetId, lastPosition } = await self.apos.page.inferLastTargetIdAndPosition(draft);
|
|
@@ -1137,25 +1150,29 @@ module.exports = {
|
|
|
1137
1150
|
lastPosition = 'lastChild';
|
|
1138
1151
|
}
|
|
1139
1152
|
}
|
|
1153
|
+
const insert = {
|
|
1154
|
+
...data,
|
|
1155
|
+
aposLocale: `${toLocale}:draft`,
|
|
1156
|
+
_id: toId,
|
|
1157
|
+
parked: draft.parked,
|
|
1158
|
+
parkedId: draft.parkedId
|
|
1159
|
+
};
|
|
1160
|
+
await self.emit('beforeLocalize', req, insert, eventOptions);
|
|
1140
1161
|
result = await actionModule.insert(toReq,
|
|
1141
1162
|
localizedTargetId,
|
|
1142
1163
|
lastPosition,
|
|
1143
|
-
|
|
1144
|
-
...data,
|
|
1145
|
-
aposLocale: `${toLocale}:draft`,
|
|
1146
|
-
_id: toId,
|
|
1147
|
-
parked: draft.parked,
|
|
1148
|
-
parkedId: draft.parkedId
|
|
1149
|
-
}
|
|
1164
|
+
insert
|
|
1150
1165
|
);
|
|
1151
1166
|
}
|
|
1152
1167
|
} else {
|
|
1153
|
-
|
|
1168
|
+
const insert = {
|
|
1154
1169
|
...data,
|
|
1155
1170
|
aposDocId: draft.aposDocId,
|
|
1156
1171
|
aposLocale: `${toLocale}:draft`,
|
|
1157
1172
|
_id: toId
|
|
1158
|
-
}
|
|
1173
|
+
};
|
|
1174
|
+
await self.emit('beforeLocalize', req, insert, eventOptions);
|
|
1175
|
+
result = await actionModule.insert(toReq, insert);
|
|
1159
1176
|
}
|
|
1160
1177
|
} else {
|
|
1161
1178
|
if (!options.update) {
|
|
@@ -1169,8 +1186,12 @@ module.exports = {
|
|
|
1169
1186
|
aposLocale: `${toLocale}:draft`,
|
|
1170
1187
|
metaType: 'doc'
|
|
1171
1188
|
};
|
|
1189
|
+
await self.emit('beforeLocalize', req, update, eventOptions);
|
|
1172
1190
|
result = await actionModule.update(toReq, update);
|
|
1173
1191
|
}
|
|
1192
|
+
|
|
1193
|
+
await self.emit('afterLocalize', req, draft, result, eventOptions);
|
|
1194
|
+
|
|
1174
1195
|
return result;
|
|
1175
1196
|
},
|
|
1176
1197
|
// Reverts the given draft to the most recent publication.
|
|
@@ -4,9 +4,6 @@
|
|
|
4
4
|
:menu="menu"
|
|
5
5
|
:disabled="disabled || (menu.length === 0)"
|
|
6
6
|
menu-placement="bottom-end"
|
|
7
|
-
@item-clicked="menuHandler"
|
|
8
|
-
@open="$emit('menu-open')"
|
|
9
|
-
@close="$emit('menu-close')"
|
|
10
7
|
:button="{
|
|
11
8
|
tooltip: { content: 'apostrophe:moreOptions', placement: 'bottom' },
|
|
12
9
|
label: 'apostrophe:moreOptions',
|
|
@@ -15,6 +12,9 @@
|
|
|
15
12
|
type: 'subtle',
|
|
16
13
|
modifiers: ['small', 'no-motion']
|
|
17
14
|
}"
|
|
15
|
+
@item-clicked="menuHandler"
|
|
16
|
+
@open="$emit('menu-open')"
|
|
17
|
+
@close="$emit('menu-close')"
|
|
18
18
|
/>
|
|
19
19
|
</template>
|
|
20
20
|
|
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<AposModal
|
|
3
|
-
class="apos-doc-editor"
|
|
3
|
+
class="apos-doc-editor"
|
|
4
|
+
:modal="modal"
|
|
4
5
|
:modal-title="modalTitle"
|
|
5
|
-
@inactive="modal.active = false"
|
|
6
|
-
@
|
|
6
|
+
@inactive="modal.active = false"
|
|
7
|
+
@show-modal="modal.showModal = true"
|
|
8
|
+
@esc="confirmAndCancel"
|
|
9
|
+
@no-modal="$emit('safe-close')"
|
|
7
10
|
>
|
|
8
11
|
<template #secondaryControls>
|
|
9
12
|
<AposButton
|
|
10
|
-
type="default"
|
|
13
|
+
type="default"
|
|
14
|
+
label="apostrophe:cancel"
|
|
11
15
|
@click="confirmAndCancel"
|
|
12
16
|
/>
|
|
13
17
|
</template>
|
|
@@ -24,10 +28,11 @@
|
|
|
24
28
|
/>
|
|
25
29
|
<AposButton
|
|
26
30
|
v-if="restoreOnly"
|
|
27
|
-
type="primary"
|
|
31
|
+
type="primary"
|
|
32
|
+
:label="saveLabel"
|
|
28
33
|
:disabled="saveDisabled"
|
|
29
|
-
@click="onRestore"
|
|
30
34
|
:tooltip="errorTooltip"
|
|
35
|
+
@click="onRestore"
|
|
31
36
|
/>
|
|
32
37
|
<AposButtonSplit
|
|
33
38
|
v-else-if="saveMenu"
|
|
@@ -42,8 +47,8 @@
|
|
|
42
47
|
<template #leftRail>
|
|
43
48
|
<AposModalRail>
|
|
44
49
|
<AposModalTabs
|
|
45
|
-
:key="tabKey"
|
|
46
50
|
v-if="tabs.length"
|
|
51
|
+
:key="tabKey"
|
|
47
52
|
:current="currentTab"
|
|
48
53
|
:tabs="tabs"
|
|
49
54
|
:errors="fieldErrors"
|
|
@@ -59,6 +64,7 @@
|
|
|
59
64
|
v-for="tab in tabs"
|
|
60
65
|
v-show="tab.name === currentTab"
|
|
61
66
|
:key="tab.name"
|
|
67
|
+
:ref="tab.name"
|
|
62
68
|
:changed="changed"
|
|
63
69
|
:schema="groups[tab.name].schema"
|
|
64
70
|
:current-fields="groups[tab.name].fields"
|
|
@@ -67,12 +73,11 @@
|
|
|
67
73
|
:following-values="followingValues('other')"
|
|
68
74
|
:conditional-fields="conditionalFields"
|
|
69
75
|
:doc-id="docId"
|
|
70
|
-
:value="docFields"
|
|
76
|
+
:model-value="docFields"
|
|
71
77
|
:meta="docMeta"
|
|
72
78
|
:server-errors="serverErrors"
|
|
73
|
-
:ref="tab.name"
|
|
74
79
|
:generation="generation"
|
|
75
|
-
@
|
|
80
|
+
@update:model-value="updateDocFields"
|
|
76
81
|
@validate="triggerValidate"
|
|
77
82
|
@update-doc-data="onUpdateDocFields"
|
|
78
83
|
/>
|
|
@@ -85,6 +90,7 @@
|
|
|
85
90
|
<div class="apos-doc-editor__utility">
|
|
86
91
|
<AposSchema
|
|
87
92
|
v-if="docReady"
|
|
93
|
+
ref="utilitySchema"
|
|
88
94
|
:schema="groups['utility'].schema"
|
|
89
95
|
:changed="changed"
|
|
90
96
|
:current-fields="groups['utility'].fields"
|
|
@@ -93,14 +99,13 @@
|
|
|
93
99
|
:following-values="followingUtils"
|
|
94
100
|
:conditional-fields="conditionalFields"
|
|
95
101
|
:doc-id="docId"
|
|
96
|
-
:value="docFields"
|
|
102
|
+
:model-value="docFields"
|
|
97
103
|
:meta="docMeta"
|
|
98
|
-
@input="updateDocFields"
|
|
99
|
-
@validate="triggerValidate"
|
|
100
104
|
:modifiers="['small', 'inverted']"
|
|
101
|
-
ref="utilitySchema"
|
|
102
105
|
:server-errors="serverErrors"
|
|
103
106
|
:generation="generation"
|
|
107
|
+
@update:model-value="updateDocFields"
|
|
108
|
+
@validate="triggerValidate"
|
|
104
109
|
/>
|
|
105
110
|
</div>
|
|
106
111
|
</AposModalRail>
|
|
@@ -423,7 +428,7 @@ export default {
|
|
|
423
428
|
}
|
|
424
429
|
apos.bus.$on('content-changed', this.onContentChanged);
|
|
425
430
|
},
|
|
426
|
-
|
|
431
|
+
unmounted() {
|
|
427
432
|
apos.bus.$off('content-changed', this.onContentChanged);
|
|
428
433
|
},
|
|
429
434
|
methods: {
|
|
@@ -356,7 +356,7 @@ export default {
|
|
|
356
356
|
apos.bus.$on('content-changed', this.onContentChanged);
|
|
357
357
|
apos.bus.$on('command-menu-admin-bar-discard-draft', this.customDiscardDraft);
|
|
358
358
|
},
|
|
359
|
-
|
|
359
|
+
unmounted() {
|
|
360
360
|
apos.bus.$off('content-changed', this.onContentChanged);
|
|
361
361
|
apos.bus.$off('command-menu-admin-bar-discard-draft', this.customDiscardDraft);
|
|
362
362
|
},
|
|
@@ -45,6 +45,15 @@
|
|
|
45
45
|
"assetWebpackCacheCleared": "Build cache cleared.",
|
|
46
46
|
"assetWebpackConfigWarning": "⚠️ In the module {{ module }}, your webpack config is incorrect. It must be an object and should contain only the properties: {{ properties }}.",
|
|
47
47
|
"at": "at",
|
|
48
|
+
"automaticTranslationCheckbox": "Translate text content",
|
|
49
|
+
"automaticTranslationErrMsg": "An error happened while getting available languages for translation. Translation will be skipped.",
|
|
50
|
+
"automaticTranslationErrorNoProvider": "Translation provider not found. Page \"{{ title }}\" was not translated.",
|
|
51
|
+
"automaticTranslationErrorTargets": "Badly formatted translation targets.",
|
|
52
|
+
"automaticTranslationLngCheckNoProvider": "Translation provider not found.",
|
|
53
|
+
"automaticTranslationSettings": "Automatic translation settings",
|
|
54
|
+
"automaticTranslationSourceErrMsg": "The current locale <strong>{{ source }}</strong> is not suitable for translation. Translation will be skipped.",
|
|
55
|
+
"automaticTranslationTargetErrMsg": "Could not find a suitable language for the locale <strong>{{ targets }}</strong>. Translation will be skipped for this locale.",
|
|
56
|
+
"automaticTranslationTargetErrMsg_plural": "Could not find a suitable language for the locales <strong>{{ targets }}</strong>. Translation will be skipped for these locales.",
|
|
48
57
|
"back": "Back",
|
|
49
58
|
"backToHome": "Back to Home",
|
|
50
59
|
"basics": "Basics",
|
|
@@ -149,6 +158,8 @@
|
|
|
149
158
|
"email": "Email",
|
|
150
159
|
"emptyRichTextWidget": "Empty Rich Text Widget",
|
|
151
160
|
"enabled": "Enabled",
|
|
161
|
+
"enterPassword": "Enter password",
|
|
162
|
+
"enterUsername": "Enter username",
|
|
152
163
|
"error": "An error occurred",
|
|
153
164
|
"errorBatchOperationNoti": "Batch operation {{ operation }} failed.",
|
|
154
165
|
"errorCount": "{{ count }} error remaining",
|
|
@@ -281,6 +292,7 @@
|
|
|
281
292
|
"noNewRelatedDocuments": "Although this document has related documents, none of them are new to the locales you have selected.",
|
|
282
293
|
"noTypeFound": "No {{ type }} Found",
|
|
283
294
|
"none": "None",
|
|
295
|
+
"notAvailable": "n/a",
|
|
284
296
|
"notFound": "Not found.",
|
|
285
297
|
"notFoundPageMessage": "We can't seem to find the page you're looking for.",
|
|
286
298
|
"notFoundPageStatusCode": "404",
|
|
@@ -366,6 +378,7 @@
|
|
|
366
378
|
"restoredPrevious": "Restored previously published version.",
|
|
367
379
|
"resumeEditing": "Resume Editing",
|
|
368
380
|
"retryingSaveDocument": "Retrying save document...",
|
|
381
|
+
"retry": "Retry",
|
|
369
382
|
"returnToPage": "Return to {{ label }}",
|
|
370
383
|
"richText": "Rich Text",
|
|
371
384
|
"richTextAlignCenter": "Align Center",
|