From 75081d0eab8aecf8da83ee3bb52632785c67342b Mon Sep 17 00:00:00 2001 From: maartenvn Date: Sat, 17 Oct 2020 11:54:33 +0200 Subject: [PATCH 01/19] Correctly await setLanguage when hydrating the app --- app/src/hydrate.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/hydrate.ts b/app/src/hydrate.ts index 76909ba75a..e8b1144d64 100644 --- a/app/src/hydrate.ts +++ b/app/src/hydrate.ts @@ -57,7 +57,7 @@ export async function hydrate(stores = useStores()) { */ await userStore.hydrate(); - setLanguage((userStore.state.currentUser?.language as Language) || 'en-US'); + await setLanguage((userStore.state.currentUser?.language as Language) || 'en-US'); await Promise.all(stores.filter(({ id }) => id !== 'userStore').map((store) => store.hydrate?.())); From 81dc11ceb3e9480594afc40efa1742dd0a4ac620 Mon Sep 17 00:00:00 2001 From: e01 Date: Sat, 17 Oct 2020 13:44:52 +0300 Subject: [PATCH 02/19] Fix tables in docs constrast UX --- app/src/modules/docs/components/markdown.vue | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/src/modules/docs/components/markdown.vue b/app/src/modules/docs/components/markdown.vue index 2437b10e18..6e10a3025e 100644 --- a/app/src/modules/docs/components/markdown.vue +++ b/app/src/modules/docs/components/markdown.vue @@ -338,10 +338,14 @@ export default defineComponent({ table tr { margin: 0; padding: 0; - background-color: white; + background-color: var(--background-normal); border-top: 1px solid var(--background-normal); } + table thead tr { + background-color: var(--background-normal-alt); + } + table tr:nth-child(2n) { background-color: var(--background-page); } From 9ec172ce20bbadf60d6def832659bac8627c59ec Mon Sep 17 00:00:00 2001 From: Nicola Krumschmidt Date: Sat, 17 Oct 2020 16:48:56 +0200 Subject: [PATCH 03/19] Fix dbsafe prop of v-input component --- app/src/components/v-input/v-input.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/components/v-input/v-input.vue b/app/src/components/v-input/v-input.vue index b1802baa03..1ffa81823c 100644 --- a/app/src/components/v-input/v-input.vue +++ b/app/src/components/v-input/v-input.vue @@ -161,7 +161,7 @@ export default defineComponent({ } } - if (props.slug === true) { + if (props.dbSafe === true) { const dbSafeCharacters = 'abcdefghijklmnopqrstuvwxyz01234567890-_~ '.split(''); const isAllowed = dbSafeCharacters.includes(key) || systemKeys.includes(key); From de5e827c64b81808f27e71a523374bcebbf2dcbe Mon Sep 17 00:00:00 2001 From: Nicola Krumschmidt Date: Sat, 17 Oct 2020 17:05:31 +0200 Subject: [PATCH 04/19] Clear search query of icon interface on select --- app/src/interfaces/icon/icon.vue | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/interfaces/icon/icon.vue b/app/src/interfaces/icon/icon.vue index e9791ba2d1..5ad613c35d 100644 --- a/app/src/interfaces/icon/icon.vue +++ b/app/src/interfaces/icon/icon.vue @@ -91,6 +91,8 @@ export default defineComponent({ }; function setIcon(icon: string | null) { + searchQuery.value = ''; + emit('input', icon); } }, From 4c3fad74675e54c715364155a4f4e56564df4c59 Mon Sep 17 00:00:00 2001 From: Ben Haynes Date: Sat, 17 Oct 2020 17:01:39 -0400 Subject: [PATCH 05/19] Collection naming --- app/src/lang/en-US/index.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/lang/en-US/index.json b/app/src/lang/en-US/index.json index 3a792830e2..fad743f221 100644 --- a/app/src/lang/en-US/index.json +++ b/app/src/lang/en-US/index.json @@ -162,8 +162,8 @@ "create_field": "Create Field", "update_field": "Update Field", - "creating_new_field": "{collection}: New Field", - "updating_field_field": "{collection}: \"{field}\" Field", + "creating_new_field": "New Field ({collection})", + "updating_field_field": "{field} ({collection})", "within_collection": "Within {collection}", "field_standard": "Standard", From 552fbff5ed8336ebbee1973751cfa8429e0a3799 Mon Sep 17 00:00:00 2001 From: e01 Date: Sun, 18 Oct 2020 20:11:32 +0300 Subject: [PATCH 06/19] Small UX touches --- app/src/modules/activity/components/navigation.vue | 2 +- app/src/modules/files/components/navigation.vue | 2 +- .../revisions-drawer-detail/revisions-drawer-detail.vue | 5 ----- .../private/components/sidebar-detail/sidebar-detail.vue | 2 ++ docs/nav-app.yaml | 2 +- 5 files changed, 5 insertions(+), 8 deletions(-) diff --git a/app/src/modules/activity/components/navigation.vue b/app/src/modules/activity/components/navigation.vue index 3b4eeb62e7..618fe17928 100644 --- a/app/src/modules/activity/components/navigation.vue +++ b/app/src/modules/activity/components/navigation.vue @@ -49,7 +49,7 @@ - + {{ $t('comment') }} diff --git a/app/src/modules/files/components/navigation.vue b/app/src/modules/files/components/navigation.vue index a83a327841..a2af1e58cc 100644 --- a/app/src/modules/files/components/navigation.vue +++ b/app/src/modules/files/components/navigation.vue @@ -34,7 +34,7 @@ - + {{ $t('my_files') }} diff --git a/app/src/views/private/components/revisions-drawer-detail/revisions-drawer-detail.vue b/app/src/views/private/components/revisions-drawer-detail/revisions-drawer-detail.vue index 757efa1ee8..329c8655d3 100644 --- a/app/src/views/private/components/revisions-drawer-detail/revisions-drawer-detail.vue +++ b/app/src/views/private/components/revisions-drawer-detail/revisions-drawer-detail.vue @@ -191,11 +191,6 @@ export default defineComponent({ From f03bdbe132f0eceef2f35ebd3ad414e40e803649 Mon Sep 17 00:00:00 2001 From: Nitwel Date: Mon, 19 Oct 2020 16:59:10 +0200 Subject: [PATCH 11/19] clean up wysiwyg interface style --- .../interfaces/wysiwyg/tinymce-overrides.css | 92 ++++++++++++++++++- 1 file changed, 87 insertions(+), 5 deletions(-) diff --git a/app/src/interfaces/wysiwyg/tinymce-overrides.css b/app/src/interfaces/wysiwyg/tinymce-overrides.css index b5029b72fa..7505d21f60 100644 --- a/app/src/interfaces/wysiwyg/tinymce-overrides.css +++ b/app/src/interfaces/wysiwyg/tinymce-overrides.css @@ -1,5 +1,9 @@ /* stylelint-disable font-family-no-missing-generic-family-keyword */ +.tox { + font-family: 'Inter', -apple-system, 'BlinkMacSystemFont', 'Segoe UI', 'Roboto', 'Helvetica', 'Arial', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; +} + .tox .tox-tbtn { margin: 2px 2px 4px 0; color: var(--foreground-normal); @@ -138,8 +142,9 @@ body.dark .tox .tox-toolbar__overflow { } .tox .tox-dialog__header { - padding: 16px 24px 0 24px; + padding: 20px; color: var(--foreground-normal); + font-size: 16px; background-color: var(--background-page); } @@ -156,18 +161,61 @@ body.dark .tox .tox-toolbar__overflow { } .tox .tox-textfield, +.tox .tox-listboxfield .tox-listbox, .tox .tox-toolbar-textfield, .tox .tox-selectfield select, .tox .tox-textarea { padding: 12px; color: var(--foreground-normal); - font-family: monospace; + font-weight: 500; + font-size: 14px; + font-family: 'Inter', -apple-system, 'BlinkMacSystemFont', 'Segoe UI', 'Roboto', 'Helvetica', 'Arial', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; background-color: var(--background-page); border: 2px solid var(--border-normal); border-radius: var(--border-radius); transition: var(--fast) var(--transition); } +.tox .tox-textarea { + font-family: monospace; +} + +.tox .tox-textfield:focus, +.tox .tox-listboxfield .tox-listbox:focus, +.tox .tox-toolbar-textfield:focus, +.tox .tox-selectfield select:focus, +.tox .tox-textarea:focus { + background-color: var(--background-page); +} + +.tox .tox-menu { + box-sizing: border-box; + padding: 4px !important; + color: var(--foreground-normal); + font-family: 'Inter', -apple-system, 'BlinkMacSystemFont', 'Segoe UI', 'Roboto', 'Helvetica', 'Arial', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; + background-color: var(--background-subdued); + border: 2px solid var(--border-normal); + border-radius: var(--border-radius); +} + +.tox .tox-collection__item { + border-radius: var(--border-radius); +} + +.tox .tox-collection--list .tox-collection__item { + color: var(--foreground-normal); +} + +.tox .tox-collection--list .tox-collection__item--active { + color: var(--foreground-normal) !important; + background-color: var(--background-page) !important; +} + +.tox .tox-collection--list .tox-collection__item--enabled { + color: var(--foreground-normal); + background-color: var(--background-page); +} + .tox .tox-textfield:focus, .tox .tox-selectfield select:focus, .tox .tox-textarea:focus { @@ -184,6 +232,7 @@ body.dark .tox .tox-toolbar__overflow { color: var(--white); font-weight: 500; font-size: 16px; + font-family: 'Inter', -apple-system, 'BlinkMacSystemFont', 'Segoe UI', 'Roboto', 'Helvetica', 'Arial', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; line-height: 19px; background-color: var(--primary); border: 2px solid var(--primary); @@ -228,12 +277,45 @@ body.dark .tox .tox-toolbar__overflow { } .tox .tox-form__group { - margin-top: 24px; + margin-bottom: 24px; } .tox .tox-label, .tox .tox-toolbar-label { - margin-bottom: 10px; + margin-bottom: 4px; color: var(--foreground-normal); - font-size: 14px; + font-weight: 500; + font-size: 16px; } + +.tox .tox-dialog__body-nav-item { + box-sizing: border-box; + width: 100%; + margin-bottom: 4px; + padding: 12px 16px; + color: var(--foreground-normal); + font-weight: 500; + font-size: 14px; + border-bottom: none; + border-radius: var(--border-radius); + transition: var(--fast) var(--transition); + transition-property: background-color, color; +} + +.tox .tox-dialog__body-nav-item:hover { + background-color: var(--background-normal-alt); +} + +.tox .tox-dialog__body-nav-item--active { + background-color: var(--background-normal-alt); +} + +.tox .tox-dialog__body-nav-item--active:focus { + background-color: var(--background-normal-alt); +} + +@media screen and (max-width: 767px) { + .tox .tox-dialog__body-nav-item { + text-align: center; + } +} \ No newline at end of file From a69235b36b5509770f513cfb25530540ee832473 Mon Sep 17 00:00:00 2001 From: rijkvanzanten Date: Mon, 19 Oct 2020 11:17:26 -0400 Subject: [PATCH 12/19] Don't attempt loading app data for non-role users --- app/src/hydrate.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/src/hydrate.ts b/app/src/hydrate.ts index e8b1144d64..603ed6a16a 100644 --- a/app/src/hydrate.ts +++ b/app/src/hydrate.ts @@ -57,11 +57,11 @@ export async function hydrate(stores = useStores()) { */ await userStore.hydrate(); - await setLanguage((userStore.state.currentUser?.language as Language) || 'en-US'); - - await Promise.all(stores.filter(({ id }) => id !== 'userStore').map((store) => store.hydrate?.())); - - await registerModules(); + if (userStore.state.currentUser?.role) { + await setLanguage((userStore.state.currentUser?.language as Language) || 'en-US'); + await Promise.all(stores.filter(({ id }) => id !== 'userStore').map((store) => store.hydrate?.())); + await registerModules(); + } } catch (error) { appStore.state.error = error; } finally { From c3c18b5b9e55306fcc231e2bf64510a216f5e2b8 Mon Sep 17 00:00:00 2001 From: rijkvanzanten Date: Mon, 19 Oct 2020 11:17:31 -0400 Subject: [PATCH 13/19] Fix colors on no-app-access warning --- app/src/app.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/app.vue b/app/src/app.vue index aac919bf04..bde780507c 100644 --- a/app/src/app.vue +++ b/app/src/app.vue @@ -88,7 +88,7 @@ export default defineComponent({ document.body.classList.remove('light'); document.body.classList.remove('auto'); - if (newUser !== undefined && newUser !== null) { + if (newUser !== undefined && newUser !== null && newUser.theme) { document.body.classList.add(newUser.theme); } else { // Default to light mode From fa1674c41b0d5c0513f112f941a9477330184e19 Mon Sep 17 00:00:00 2001 From: rijkvanzanten Date: Mon, 19 Oct 2020 11:17:51 -0400 Subject: [PATCH 14/19] Don't require user to have role in permissions/me --- api/src/controllers/permissions.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/src/controllers/permissions.ts b/api/src/controllers/permissions.ts index ca8a6b91b3..568bae09b9 100644 --- a/api/src/controllers/permissions.ts +++ b/api/src/controllers/permissions.ts @@ -49,7 +49,7 @@ router.get( router.get( '/me', asyncHandler(async (req, res, next) => { - if (!req.accountability?.user || !req.accountability?.role) { + if (!req.accountability?.user) { throw new InvalidCredentialsException(); } From 09d8f670f54691cfa3e29591cf07981ff5a331b2 Mon Sep 17 00:00:00 2001 From: rijkvanzanten Date: Mon, 19 Oct 2020 11:18:58 -0400 Subject: [PATCH 15/19] Return user id as minimum data in /users/me --- api/src/controllers/users.ts | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/api/src/controllers/users.ts b/api/src/controllers/users.ts index 2e0888141e..b3b7ce4eb1 100644 --- a/api/src/controllers/users.ts +++ b/api/src/controllers/users.ts @@ -58,11 +58,21 @@ router.get( if (!req.accountability?.user) { throw new InvalidCredentialsException(); } + const service = new UsersService({ accountability: req.accountability }); - const item = await service.readByKey(req.accountability.user, req.sanitizedQuery); + try { + const item = await service.readByKey(req.accountability.user, req.sanitizedQuery); + res.locals.payload = { data: item || null }; + } catch (error) { + if (error instanceof ForbiddenException) { + res.locals.payload = { data: { id: req.accountability.user } }; + return next(); + } + + throw error; + } - res.locals.payload = { data: item || null }; return next(); }), respond From 4d5d09d5e1b935ee555bde579e5340e0441ce585 Mon Sep 17 00:00:00 2001 From: Nitwel Date: Mon, 19 Oct 2020 17:25:12 +0200 Subject: [PATCH 16/19] use css vars --- app/src/interfaces/wysiwyg/tinymce-overrides.css | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/src/interfaces/wysiwyg/tinymce-overrides.css b/app/src/interfaces/wysiwyg/tinymce-overrides.css index 7505d21f60..716e9a1276 100644 --- a/app/src/interfaces/wysiwyg/tinymce-overrides.css +++ b/app/src/interfaces/wysiwyg/tinymce-overrides.css @@ -1,7 +1,7 @@ /* stylelint-disable font-family-no-missing-generic-family-keyword */ .tox { - font-family: 'Inter', -apple-system, 'BlinkMacSystemFont', 'Segoe UI', 'Roboto', 'Helvetica', 'Arial', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; + font-family: var(--family-sans-serif); } .tox .tox-tbtn { @@ -169,7 +169,7 @@ body.dark .tox .tox-toolbar__overflow { color: var(--foreground-normal); font-weight: 500; font-size: 14px; - font-family: 'Inter', -apple-system, 'BlinkMacSystemFont', 'Segoe UI', 'Roboto', 'Helvetica', 'Arial', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; + font-family: var(--family-sans-serif); background-color: var(--background-page); border: 2px solid var(--border-normal); border-radius: var(--border-radius); @@ -177,7 +177,7 @@ body.dark .tox .tox-toolbar__overflow { } .tox .tox-textarea { - font-family: monospace; + font-family: var(--family-monospace); } .tox .tox-textfield:focus, @@ -192,7 +192,7 @@ body.dark .tox .tox-toolbar__overflow { box-sizing: border-box; padding: 4px !important; color: var(--foreground-normal); - font-family: 'Inter', -apple-system, 'BlinkMacSystemFont', 'Segoe UI', 'Roboto', 'Helvetica', 'Arial', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; + font-family: var(--family-sans-serif); background-color: var(--background-subdued); border: 2px solid var(--border-normal); border-radius: var(--border-radius); @@ -232,7 +232,7 @@ body.dark .tox .tox-toolbar__overflow { color: var(--white); font-weight: 500; font-size: 16px; - font-family: 'Inter', -apple-system, 'BlinkMacSystemFont', 'Segoe UI', 'Roboto', 'Helvetica', 'Arial', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; + font-family: var(--family-sans-serif); line-height: 19px; background-color: var(--primary); border: 2px solid var(--primary); From 3abd5a2cef24f8a3b815782c0d07e0ab67899109 Mon Sep 17 00:00:00 2001 From: rijkvanzanten Date: Mon, 19 Oct 2020 11:28:49 -0400 Subject: [PATCH 17/19] Move no-app-access check to private views only --- app/src/app.vue | 17 ++--------------- app/src/views/private/private-view.vue | 16 +++++++++++++++- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/app/src/app.vue b/app/src/app.vue index bde780507c..3d63279fbb 100644 --- a/app/src/app.vue +++ b/app/src/app.vue @@ -14,15 +14,7 @@ - - - - {{ $t('no_app_access_copy') }} - - - + @@ -108,11 +100,6 @@ export default defineComponent({ return settingsStore.state?.settings?.custom_css || ''; }); - const appAccess = computed(() => { - if (!userStore.state.currentUser) return true; - return userStore.state.currentUser?.role?.app_access || false; - }); - const error = computed(() => appStore.state.error); /** @@ -124,7 +111,7 @@ export default defineComponent({ axios, }); - return { hydrating, brandStyle, appAccess, error, customCSS }; + return { hydrating, brandStyle, error, customCSS }; }, }); diff --git a/app/src/views/private/private-view.vue b/app/src/views/private/private-view.vue index 1340e7b011..878e196ce7 100644 --- a/app/src/views/private/private-view.vue +++ b/app/src/views/private/private-view.vue @@ -1,5 +1,13 @@