apostrophe 3.63.2 → 4.0.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 +21 -0
- package/defaults.js +1 -0
- 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 +6 -6
- 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/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/AposCommandMenuShortcut.vue +6 -6
- package/modules/@apostrophecms/command-menu/ui/apos/components/TheAposCommandMenu.vue +10 -7
- 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/ui/apos/components/AposI18nLocalize.vue +36 -27
- 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 +1 -1
- package/modules/@apostrophecms/image/ui/apos/components/AposMediaUploader.vue +5 -4
- 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 +1 -1
- package/modules/@apostrophecms/login/ui/apos/components/TheAposLogin.vue +2 -2
- 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 +8 -2
- package/modules/@apostrophecms/modal/ui/apos/components/AposModalBreadcrumbs.vue +7 -4
- package/modules/@apostrophecms/modal/ui/apos/components/AposModalConfirm.vue +5 -5
- package/modules/@apostrophecms/modal/ui/apos/components/AposModalShareDraft.vue +8 -8
- 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/multisite-i18n/i18n/aposMultisite/en.json +48 -0
- package/modules/@apostrophecms/multisite-i18n/index.js +7 -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/oembed-field/ui/apos/components/AposInputOembed.vue +4 -4
- 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/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/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/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/AposInputRadio.vue +5 -4
- 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 +1 -1
- package/modules/@apostrophecms/schema/ui/apos/components/AposSchema.vue +65 -21
- 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 +2 -2
- package/modules/@apostrophecms/schema/ui/apos/logic/AposInputString.js +6 -8
- package/modules/@apostrophecms/schema/ui/apos/logic/AposSchema.js +39 -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 +4 -4
- 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/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/AposCheckbox.vue +19 -19
- package/modules/@apostrophecms/ui/ui/apos/components/AposCombo.vue +15 -15
- package/modules/@apostrophecms/ui/ui/apos/components/AposContextMenu.vue +216 -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/AposFile.vue +5 -5
- package/modules/@apostrophecms/ui/ui/apos/components/AposFilterMenu.vue +4 -4
- 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/AposSlat.vue +2 -2
- package/modules/@apostrophecms/ui/ui/apos/components/AposSlatList.vue +53 -59
- package/modules/@apostrophecms/ui/ui/apos/components/AposSubformPreview.vue +2 -2
- package/modules/@apostrophecms/ui/ui/apos/components/AposTagApply.vue +40 -35
- 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/_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/modules/@apostrophecms/ui/ui/apos/lib/localized-v-tooltip.js +0 -63
- package/modules/@apostrophecms/ui/ui/apos/lib/tooltip-options.js +0 -13
|
@@ -53,6 +53,7 @@ module.exports = {
|
|
|
53
53
|
};
|
|
54
54
|
self.configureBuilds();
|
|
55
55
|
self.initUploadfs();
|
|
56
|
+
self.enableBrowserData();
|
|
56
57
|
|
|
57
58
|
const {
|
|
58
59
|
extensions = {},
|
|
@@ -325,6 +326,7 @@ module.exports = {
|
|
|
325
326
|
registerComponents: true,
|
|
326
327
|
importLastVersion: true
|
|
327
328
|
});
|
|
329
|
+
/* componentImports = getGlobalVueComponents(self); */
|
|
328
330
|
tiptapExtensionImports = getImports(`${source}/tiptap-extensions`, '*.js', { registerTiptapExtensions: true });
|
|
329
331
|
appImports = getImports(`${source}/apps`, '*.js', {
|
|
330
332
|
invokeApps: true,
|
|
@@ -513,7 +515,6 @@ module.exports = {
|
|
|
513
515
|
}) {
|
|
514
516
|
fs.writeFileSync(importFile, (prologue || '') + stripIndent`
|
|
515
517
|
${(icon && icon.importCode) || ''}
|
|
516
|
-
${(icon && icon.registerCode) || ''}
|
|
517
518
|
${(components && components.importCode) || ''}
|
|
518
519
|
${(tiptap && tiptap.importCode) || ''}
|
|
519
520
|
${(app && app.importCode) || ''}
|
|
@@ -563,16 +564,16 @@ module.exports = {
|
|
|
563
564
|
// Load global vue icon components.
|
|
564
565
|
const output = {
|
|
565
566
|
importCode: '',
|
|
566
|
-
registerCode: ''
|
|
567
|
+
registerCode: 'window.apos.iconComponents = window.apos.iconComponents || {};\n'
|
|
567
568
|
};
|
|
568
569
|
|
|
569
570
|
for (const [ registerAs, importFrom ] of Object.entries(self.iconMap)) {
|
|
570
571
|
if (importFrom.substring(0, 1) === '~') {
|
|
571
572
|
output.importCode += `import ${importFrom}Icon from '${importFrom.substring(1)}';\n`;
|
|
572
573
|
} else {
|
|
573
|
-
output.importCode += `import ${importFrom}Icon from 'vue-material-design-icons/${importFrom}.vue';\n`;
|
|
574
|
+
output.importCode += `import ${importFrom}Icon from '@apostrophecms/vue-material-design-icons/${importFrom}.vue';\n`;
|
|
574
575
|
}
|
|
575
|
-
output.registerCode += `
|
|
576
|
+
output.registerCode += `window.apos.iconComponents['${registerAs}'] = ${importFrom}Icon;\n`;
|
|
576
577
|
}
|
|
577
578
|
|
|
578
579
|
return output;
|
|
@@ -727,9 +728,17 @@ module.exports = {
|
|
|
727
728
|
}
|
|
728
729
|
|
|
729
730
|
function getImportFileOutput (components, options = {}) {
|
|
731
|
+
let registerCode;
|
|
732
|
+
if (options.registerComponents) {
|
|
733
|
+
registerCode = 'window.apos.vueComponents = window.apos.vueComponents || {};\n';
|
|
734
|
+
} else if (options.registerTiptapExtensions) {
|
|
735
|
+
registerCode = 'window.apos.tiptapExtensions = window.apos.tiptapExtensions || [];\n';
|
|
736
|
+
} else {
|
|
737
|
+
registerCode = '';
|
|
738
|
+
}
|
|
730
739
|
const output = {
|
|
731
740
|
importCode: '',
|
|
732
|
-
registerCode
|
|
741
|
+
registerCode,
|
|
733
742
|
invokeCode: '',
|
|
734
743
|
paths: []
|
|
735
744
|
};
|
|
@@ -748,21 +757,21 @@ module.exports = {
|
|
|
748
757
|
const jsFilename = JSON.stringify(component);
|
|
749
758
|
const name = getComponentName(component, options, i);
|
|
750
759
|
const jsName = JSON.stringify(name);
|
|
760
|
+
const importName = `${name}${options.importSuffix || ''}`;
|
|
751
761
|
const importCode = `
|
|
752
|
-
import ${
|
|
762
|
+
import ${importName} from ${jsFilename};
|
|
753
763
|
`;
|
|
754
764
|
|
|
755
765
|
output.paths.push(component);
|
|
756
766
|
output.importCode += `${importCode}\n`;
|
|
757
767
|
|
|
758
768
|
if (options.registerComponents) {
|
|
759
|
-
output.registerCode += `
|
|
769
|
+
output.registerCode += `window.apos.vueComponents[${jsName}] = ${importName};\n`;
|
|
760
770
|
}
|
|
761
771
|
|
|
762
772
|
if (options.registerTiptapExtensions) {
|
|
763
773
|
output.registerCode += stripIndent`
|
|
764
|
-
apos.tiptapExtensions
|
|
765
|
-
apos.tiptapExtensions.push(${name});
|
|
774
|
+
apos.tiptapExtensions.push(${importName});
|
|
766
775
|
`;
|
|
767
776
|
}
|
|
768
777
|
if (options.invokeApps) {
|
|
@@ -1328,9 +1337,13 @@ module.exports = {
|
|
|
1328
1337
|
apos: true,
|
|
1329
1338
|
prologue: stripIndent`
|
|
1330
1339
|
import 'Modules/@apostrophecms/ui/scss/global/import-all.scss';
|
|
1331
|
-
import
|
|
1332
|
-
window.apos.bus =
|
|
1333
|
-
|
|
1340
|
+
import emitter from 'tiny-emitter/instance';
|
|
1341
|
+
window.apos.bus = {
|
|
1342
|
+
$on: (...args) => emitter.on(...args),
|
|
1343
|
+
$once: (...args) => emitter.once(...args),
|
|
1344
|
+
$off: (...args) => emitter.off(...args),
|
|
1345
|
+
$emit: (...args) => emitter.emit(...args)
|
|
1346
|
+
};`,
|
|
1334
1347
|
// Load only in browsers that support ES6 modules
|
|
1335
1348
|
condition: 'module'
|
|
1336
1349
|
}
|
|
@@ -49,7 +49,7 @@ module.exports = ({
|
|
|
49
49
|
// we could extend this with aliases for other apostrophe modules
|
|
50
50
|
// at a later date if needed
|
|
51
51
|
resolveLoader: {
|
|
52
|
-
extensions: [ '
|
|
52
|
+
extensions: [ '.*', '.js', '.vue', '.json' ],
|
|
53
53
|
modules: [
|
|
54
54
|
// 1. Allow webpack to find loaders from core dependencies (pnpm), empty if not pnpm
|
|
55
55
|
...pnpmModulePath,
|
|
@@ -62,9 +62,9 @@ module.exports = ({
|
|
|
62
62
|
]
|
|
63
63
|
},
|
|
64
64
|
resolve: {
|
|
65
|
-
extensions: [ '
|
|
65
|
+
extensions: [ '.*', '.js', '.vue', '.json' ],
|
|
66
66
|
alias: {
|
|
67
|
-
vue$: 'vue/
|
|
67
|
+
vue$: '@vue/runtime-dom',
|
|
68
68
|
// resolve apostrophe modules
|
|
69
69
|
Modules: path.resolve(modulesDir)
|
|
70
70
|
},
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
const webpack = require('webpack');
|
|
1
2
|
const { VueLoaderPlugin } = require('vue-loader');
|
|
2
3
|
|
|
3
4
|
module.exports = (options, apos) => {
|
|
@@ -15,7 +16,12 @@ module.exports = (options, apos) => {
|
|
|
15
16
|
},
|
|
16
17
|
plugins: [
|
|
17
18
|
// make sure to include the plugin for the magic
|
|
18
|
-
new VueLoaderPlugin()
|
|
19
|
+
new VueLoaderPlugin(),
|
|
20
|
+
new webpack.DefinePlugin({
|
|
21
|
+
__VUE_OPTIONS_API__: 'true',
|
|
22
|
+
__VUE_PROD_DEVTOOLS__: 'false',
|
|
23
|
+
__VUE_PROD_HYDRATION_MISMATCH_DETAILS__: 'false'
|
|
24
|
+
})
|
|
19
25
|
]
|
|
20
26
|
};
|
|
21
27
|
};
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import
|
|
1
|
+
import createApp from 'Modules/@apostrophecms/ui/lib/vue';
|
|
2
2
|
|
|
3
3
|
export default function() {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
4
|
+
const component = apos.vueComponents.TheAposBusy;
|
|
5
|
+
const el = document.querySelector('#apos-busy');
|
|
6
|
+
if (!el) {
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
const app = createApp(component);
|
|
10
|
+
app.mount(el);
|
|
10
11
|
};
|
|
@@ -1,34 +1,16 @@
|
|
|
1
|
-
import
|
|
1
|
+
import createApp from 'Modules/@apostrophecms/ui/lib/vue';
|
|
2
2
|
|
|
3
3
|
export default function() {
|
|
4
|
+
const component = apos.vueComponents.TheAposCommandMenu;
|
|
4
5
|
// Careful, login page is in user scene but has no command menu
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
computed: {
|
|
9
|
-
apos () {
|
|
10
|
-
return window.apos;
|
|
11
|
-
}
|
|
12
|
-
},
|
|
13
|
-
methods: {
|
|
14
|
-
getModal() {
|
|
15
|
-
return this.$refs.commandMenu.modal;
|
|
16
|
-
}
|
|
17
|
-
},
|
|
18
|
-
render(h) {
|
|
19
|
-
return h(
|
|
20
|
-
apos.commandMenu.components.the,
|
|
21
|
-
{
|
|
22
|
-
ref: 'commandMenu',
|
|
23
|
-
props: {
|
|
24
|
-
groups: apos.commandMenu.groups,
|
|
25
|
-
modals: apos.commandMenu.modals
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
);
|
|
29
|
-
}
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
apos.commandMenu.getModal = theAposCommandMenu.getModal;
|
|
6
|
+
const el = document.querySelector('#apos-command-menu');
|
|
7
|
+
if (!apos.commandMenu || !el) {
|
|
8
|
+
return;
|
|
33
9
|
}
|
|
10
|
+
const app = createApp(component, {
|
|
11
|
+
modals: apos.commandMenu.modals
|
|
12
|
+
});
|
|
13
|
+
const theAposCommandMenu = app.mount(el);
|
|
14
|
+
|
|
15
|
+
apos.commandMenu.getModal = theAposCommandMenu.getModal;
|
|
34
16
|
}
|
|
@@ -88,7 +88,7 @@ export default {
|
|
|
88
88
|
this.$emit('safe-close');
|
|
89
89
|
}
|
|
90
90
|
},
|
|
91
|
-
|
|
91
|
+
beforeUnmount() {
|
|
92
92
|
apos.bus.$off('modal-launched', this.autoCloseWhenHidden);
|
|
93
93
|
apos.bus.$off('modal-resolved', this.close);
|
|
94
94
|
},
|
|
@@ -125,11 +125,11 @@ export default {
|
|
|
125
125
|
</script>
|
|
126
126
|
|
|
127
127
|
<style lang="scss" scoped>
|
|
128
|
-
|
|
128
|
+
:deep(.apos-modal__body) {
|
|
129
129
|
padding: 0;
|
|
130
130
|
}
|
|
131
131
|
|
|
132
|
-
|
|
132
|
+
:deep(.apos-modal__inner) {
|
|
133
133
|
top: auto;
|
|
134
134
|
left: auto;
|
|
135
135
|
max-width: 700px;
|
|
@@ -137,7 +137,7 @@ export default {
|
|
|
137
137
|
border-radius: $spacing-base + $spacing-half;
|
|
138
138
|
}
|
|
139
139
|
|
|
140
|
-
|
|
140
|
+
:deep(.apos-modal__overlay) {
|
|
141
141
|
display: none;
|
|
142
142
|
}
|
|
143
143
|
|
|
@@ -153,7 +153,7 @@ export default {
|
|
|
153
153
|
padding: 0 $spacing-base + $spacing-half;
|
|
154
154
|
}
|
|
155
155
|
|
|
156
|
-
|
|
156
|
+
:deep(.apos-button) {
|
|
157
157
|
display: inline-flex;
|
|
158
158
|
align-items: center;
|
|
159
159
|
box-sizing: border-box;
|
|
@@ -176,7 +176,7 @@ export default {
|
|
|
176
176
|
}
|
|
177
177
|
|
|
178
178
|
.apos-command-menu-key {
|
|
179
|
-
|
|
179
|
+
:deep(button) {
|
|
180
180
|
width: $spacing-double;
|
|
181
181
|
height: $spacing-double;
|
|
182
182
|
padding: 3px $spacing-half;
|
|
@@ -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);
|
|
@@ -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
|
},
|
|
@@ -27,8 +27,8 @@
|
|
|
27
27
|
<AposButton
|
|
28
28
|
type="default"
|
|
29
29
|
label="apostrophe:cancel"
|
|
30
|
-
@click="close"
|
|
31
30
|
:modifiers="[ 'block' ]"
|
|
31
|
+
@click="close"
|
|
32
32
|
/>
|
|
33
33
|
</div>
|
|
34
34
|
</template>
|
|
@@ -49,12 +49,12 @@
|
|
|
49
49
|
class="apos-wizard__step apos-wizard__step-select-content"
|
|
50
50
|
>
|
|
51
51
|
<AposInputRadio
|
|
52
|
+
v-model="wizard.values.toLocalize"
|
|
52
53
|
:field="{
|
|
53
54
|
name: 'toLocalize',
|
|
54
55
|
label: 'apostrophe:selectContentToLocalize',
|
|
55
56
|
choices: toLocalizeChoices
|
|
56
57
|
}"
|
|
57
|
-
v-model="wizard.values.toLocalize"
|
|
58
58
|
/>
|
|
59
59
|
<p class="apos-wizard__help-text">
|
|
60
60
|
<AposIndicator
|
|
@@ -71,20 +71,20 @@
|
|
|
71
71
|
class="apos-wizard__step apos-wizard__step-select-locales"
|
|
72
72
|
>
|
|
73
73
|
<AposButton
|
|
74
|
-
v-on="{ click: allSelected ? deselectAll : selectAll }"
|
|
75
74
|
class="apos-locale-select-all"
|
|
76
75
|
:label="allSelected
|
|
77
76
|
? $t('apostrophe:deselectAll')
|
|
78
77
|
: $t('apostrophe:selectAll')"
|
|
79
78
|
type="quiet"
|
|
80
79
|
:modifiers="[ 'inline' ]"
|
|
80
|
+
v-on="{ click: allSelected ? deselectAll : selectAll }"
|
|
81
81
|
/>
|
|
82
82
|
<AposInputString
|
|
83
|
+
ref="searchInput"
|
|
83
84
|
v-model="searchValue"
|
|
84
85
|
:field="searchField"
|
|
85
|
-
@input="updateFilter"
|
|
86
86
|
class="apos-locales-filter"
|
|
87
|
-
|
|
87
|
+
@update:model-value="updateFilter"
|
|
88
88
|
/>
|
|
89
89
|
<transition-group
|
|
90
90
|
tag="ul"
|
|
@@ -98,12 +98,12 @@
|
|
|
98
98
|
>
|
|
99
99
|
<AposButton
|
|
100
100
|
type="primary"
|
|
101
|
-
@click.prevent="removeLocale(loc)"
|
|
102
101
|
class="apos-locale-button"
|
|
103
102
|
:modifiers="[ 'small' ]"
|
|
104
103
|
icon="close-icon"
|
|
105
104
|
:icon-size="12"
|
|
106
105
|
:label="loc.label"
|
|
106
|
+
@click.prevent="removeLocale(loc)"
|
|
107
107
|
/>
|
|
108
108
|
</li>
|
|
109
109
|
</transition-group>
|
|
@@ -136,13 +136,13 @@
|
|
|
136
136
|
({{ loc.name }})
|
|
137
137
|
</span>
|
|
138
138
|
<span
|
|
139
|
+
v-apos-tooltip="isLocalized(loc)
|
|
140
|
+
? 'Localized'
|
|
141
|
+
: 'Not Yet Localized'"
|
|
139
142
|
class="apos-locale-localized"
|
|
140
143
|
:class="{
|
|
141
144
|
'apos-state-is-localized': isLocalized(loc),
|
|
142
145
|
}"
|
|
143
|
-
v-apos-tooltip="isLocalized(loc)
|
|
144
|
-
? 'Localized'
|
|
145
|
-
: 'Not Yet Localized'"
|
|
146
146
|
/>
|
|
147
147
|
</span>
|
|
148
148
|
</li>
|
|
@@ -155,9 +155,9 @@
|
|
|
155
155
|
>
|
|
156
156
|
<ul class="apos-selected-locales">
|
|
157
157
|
<li
|
|
158
|
-
class="apos-locale-item--selected"
|
|
159
158
|
v-for="loc in selectedLocales"
|
|
160
159
|
:key="loc.name"
|
|
160
|
+
class="apos-locale-item--selected"
|
|
161
161
|
>
|
|
162
162
|
<AposButton
|
|
163
163
|
type="primary"
|
|
@@ -184,6 +184,7 @@
|
|
|
184
184
|
</p>
|
|
185
185
|
|
|
186
186
|
<AposInputRadio
|
|
187
|
+
v-model="wizard.values.relatedDocSettings"
|
|
187
188
|
:field="{
|
|
188
189
|
name: 'relatedDocSettings',
|
|
189
190
|
choices: [
|
|
@@ -198,13 +199,11 @@
|
|
|
198
199
|
},
|
|
199
200
|
],
|
|
200
201
|
}"
|
|
201
|
-
v-model="wizard.values.relatedDocSettings"
|
|
202
202
|
/>
|
|
203
|
-
|
|
204
203
|
<AposInputCheckboxes
|
|
205
204
|
v-if="relatedDocTypes.length"
|
|
206
|
-
:field="relatedDocTypesField"
|
|
207
205
|
v-model="wizard.values.relatedDocTypesToLocalize"
|
|
206
|
+
:field="relatedDocTypesField"
|
|
208
207
|
/>
|
|
209
208
|
<p v-else class="apos-wizard__help-text">
|
|
210
209
|
<AposIndicator
|
|
@@ -230,19 +229,19 @@
|
|
|
230
229
|
<AposButton
|
|
231
230
|
v-else
|
|
232
231
|
type="primary"
|
|
233
|
-
@click="goToNext()"
|
|
234
232
|
icon="arrow-right-icon"
|
|
235
233
|
:modifiers="['icon-right']"
|
|
236
234
|
:disabled="!complete() || wizard.busy"
|
|
237
235
|
:icon-size="12"
|
|
238
236
|
label="apostrophe:next"
|
|
237
|
+
@click="goToNext()"
|
|
239
238
|
/>
|
|
240
239
|
<AposButton
|
|
241
240
|
v-if="!isFirstStep()"
|
|
242
241
|
type="default"
|
|
243
242
|
:disabled="wizard.busy"
|
|
244
|
-
@click="goToPrevious()"
|
|
245
243
|
label="apostrophe:back"
|
|
244
|
+
@click="goToPrevious()"
|
|
246
245
|
/>
|
|
247
246
|
</template>
|
|
248
247
|
</AposModalBody>
|
|
@@ -545,16 +544,26 @@ export default {
|
|
|
545
544
|
return !!this.localized[locale.name];
|
|
546
545
|
},
|
|
547
546
|
selectAll() {
|
|
548
|
-
this.wizard.values.toLocales.data = this.locales
|
|
547
|
+
this.wizard.values.toLocales.data = this.locales
|
|
548
|
+
.filter(locale => !this.isCurrentLocale(locale) && this.canEditLocale(locale));
|
|
549
549
|
},
|
|
550
550
|
deselectAll() {
|
|
551
551
|
this.wizard.values.toLocales.data = [];
|
|
552
552
|
},
|
|
553
553
|
toggleLocale(locale) {
|
|
554
|
-
if (
|
|
555
|
-
this.
|
|
554
|
+
if (
|
|
555
|
+
!this.isSelected(locale) &&
|
|
556
|
+
!this.isCurrentLocale(locale) &&
|
|
557
|
+
this.canEditLocale(locale)
|
|
558
|
+
) {
|
|
559
|
+
this.wizard.values.toLocales.data = [
|
|
560
|
+
...this.wizard.values.toLocales.data,
|
|
561
|
+
locale
|
|
562
|
+
];
|
|
563
|
+
|
|
556
564
|
} else if (this.isSelected(locale)) {
|
|
557
|
-
this.wizard.values.toLocales.data = this.wizard.values.toLocales.data
|
|
565
|
+
this.wizard.values.toLocales.data = this.wizard.values.toLocales.data
|
|
566
|
+
.filter(l => l !== locale);
|
|
558
567
|
}
|
|
559
568
|
// Reset search filter
|
|
560
569
|
if (this.filteredLocales.length < 2) {
|
|
@@ -831,7 +840,7 @@ export default {
|
|
|
831
840
|
.apos-i18n-localize {
|
|
832
841
|
@include type-base;
|
|
833
842
|
|
|
834
|
-
|
|
843
|
+
:deep(.apos-modal__inner) {
|
|
835
844
|
$width: 565px;
|
|
836
845
|
$vertical-spacing: 95px;
|
|
837
846
|
$horizontal-spacing: calc(calc(100vw - #{$width}) / 2);
|
|
@@ -843,20 +852,20 @@ export default {
|
|
|
843
852
|
height: calc(100vh - #{$vertical-spacing * 2});
|
|
844
853
|
}
|
|
845
854
|
|
|
846
|
-
|
|
855
|
+
:deep(.apos-modal__main--with-left-rail) {
|
|
847
856
|
grid-template-columns: 30% 70%;
|
|
848
857
|
}
|
|
849
858
|
|
|
850
|
-
|
|
859
|
+
:deep(.apos-modal__body-inner) {
|
|
851
860
|
padding: $spacing-triple $spacing-triple $spacing-double;
|
|
852
861
|
}
|
|
853
862
|
|
|
854
|
-
|
|
863
|
+
:deep(.apos-wizard__content .apos-modal__body-footer) {
|
|
855
864
|
flex-direction: row-reverse;
|
|
856
865
|
border-top: 1px solid var(--a-base-9);
|
|
857
866
|
}
|
|
858
867
|
|
|
859
|
-
|
|
868
|
+
:deep(.apos-busy__spinner) {
|
|
860
869
|
display: inline-block;
|
|
861
870
|
}
|
|
862
871
|
}
|
|
@@ -890,7 +899,7 @@ export default {
|
|
|
890
899
|
border: none;
|
|
891
900
|
}
|
|
892
901
|
|
|
893
|
-
|
|
902
|
+
:deep(.apos-field--toLocalize) {
|
|
894
903
|
margin-bottom: $spacing-triple;
|
|
895
904
|
}
|
|
896
905
|
|
|
@@ -901,7 +910,7 @@ export default {
|
|
|
901
910
|
font-weight: 400;
|
|
902
911
|
color: var(--a-base-3);
|
|
903
912
|
|
|
904
|
-
|
|
913
|
+
:deep(.material-design-icon) {
|
|
905
914
|
position: relative;
|
|
906
915
|
top: 3px;
|
|
907
916
|
color: var(--a-base-5);
|
|
@@ -944,7 +953,7 @@ export default {
|
|
|
944
953
|
}
|
|
945
954
|
}
|
|
946
955
|
|
|
947
|
-
.apos-locale-button
|
|
956
|
+
.apos-locale-button :deep(.apos-button) {
|
|
948
957
|
font-size: var(--a-type-small);
|
|
949
958
|
}
|
|
950
959
|
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
{{ docType(item.doc) }}
|
|
28
28
|
</span>
|
|
29
29
|
</div>
|
|
30
|
-
<div class="apos-confirm__notification-detail"
|
|
30
|
+
<div v-if="item.detail" class="apos-confirm__notification-detail">
|
|
31
31
|
{{ $t(item.detail) }}
|
|
32
32
|
</div>
|
|
33
33
|
</div>
|
|
@@ -36,8 +36,8 @@
|
|
|
36
36
|
</template>
|
|
37
37
|
|
|
38
38
|
<script>
|
|
39
|
-
import CheckIcon from 'vue-material-design-icons/Check.vue';
|
|
40
|
-
import CancelIcon from 'vue-material-design-icons/Cancel.vue';
|
|
39
|
+
import CheckIcon from '@apostrophecms/vue-material-design-icons/Check.vue';
|
|
40
|
+
import CancelIcon from '@apostrophecms/vue-material-design-icons/Cancel.vue';
|
|
41
41
|
|
|
42
42
|
export default {
|
|
43
43
|
name: 'AposI18nLocalizeErrors',
|