diff --git a/docs/theming.md b/docs/theming.md index 088c855b..f39af540 100644 --- a/docs/theming.md +++ b/docs/theming.md @@ -20,6 +20,11 @@ Please review the default configuration that is applied to understand your custo You can just update the files in [helmfile/files/theme](../helmfile/files/theme) to change logos, favicons etc. Note that the `.svg` versions of the favicons are also used for the portal tiles. +> **Note**
+> Theming focusses on colors, iconography and imagery. If you like to adapt the default links in the portal pointing to external +> resources (like "Support", "Legal Notice") please check the `functional.portal` section +> in [`functional.yaml.gotmpl`](../helmfile/environments/default/functional.yaml.gotmpl) + # Known limitations - Portal and Keycloak screen styles, especially colors, must be applied in the [`portalStylesheets.css`](../helmfile/files/theme/portalStylesheet.css), diff --git a/helmfile/apps/nubus/values-nubus.yaml.gotmpl b/helmfile/apps/nubus/values-nubus.yaml.gotmpl index cc135925..7e82bda5 100644 --- a/helmfile/apps/nubus/values-nubus.yaml.gotmpl +++ b/helmfile/apps/nubus/values-nubus.yaml.gotmpl @@ -409,8 +409,12 @@ nubusPortalFrontend: portalFrontend: branding: css: {{ .Values.theme.styles.portal.main | toJson }} - # Requires .ico, .svg does not work. favicon: {{ .Values.theme.imagery.portal.faviconIco | toJson }} + faviconSvg: {{ .Values.theme.imagery.portal.faviconSvg | toJson }} + favicon96Png: {{ .Values.theme.imagery.portal.favicon96Png | toJson }} + appleTouchIcon: {{ .Values.theme.imagery.portal.appleTouchIcon | toJson }} + webManifestIcon192: {{ .Values.theme.imagery.portal.webManifestIcon192 | toJson }} + webManifestIcon512: {{ .Values.theme.imagery.portal.webManifestIcon512 | toJson }} # The actual `logo` is set in customizing image, the logo down here is for waiting spinner. logo: {{ .Values.theme.imagery.portal.waitingSpinnerSvg | toJson }} backgroundImage: {{ .Values.theme.imagery.portal.backgroundSvg | toJson }} @@ -680,7 +684,6 @@ nubusPortalServer: {{- with .Values.annotations.nubusPortalServer.ingress }} {{ . | toYaml | nindent 8 }} {{- end }} - certManager: enabled: false tls: @@ -704,6 +707,25 @@ nubusPortalServer: sharedSecret: {{ .Values.secrets.centralnavigation.apiKey | quote }} featureToggles: notifications_api: false + centered_layout: true + newsfeed: {{ .Values.apps.xwiki.enabled }} + umc_session_refresh: true + welcome_message: true + newsfeed: + feedType: "xwiki" + feedUrl: + en_US: {{ printf "https://%s.%s/wiki/bin/get/Blog/BlogRss?xpage=plain&blog=openDesk.Newsfeed.WebHome" .Values.global.hosts.intercomService .Values.global.domain }} + de_DE: {{ printf "https://%s.%s/wiki/bin/get/Blog/BlogRss?xpage=plain&blog=openDesk.Newsfeed.WebHome" .Values.global.hosts.intercomService .Values.global.domain }} + homeUrl: + en_US: {{ printf "https://%s.%s/bin/view/openDesk/Newsfeed/" .Values.global.hosts.xwiki .Values.global.domain }} + de_DE: {{ printf "https://%s.%s/bin/view/openDesk/Newsfeed/" .Values.global.hosts.xwiki .Values.global.domain }} + icsSilentLoginUrl: {{ printf "https://%s.%s/silent" .Values.global.hosts.intercomService .Values.global.domain }} + objectStorageEndpoint: {{ printf "https://%s" (.Values.objectstores.nubus.endpoint | default (printf "%s.%s" .Values.global.hosts.minioApi .Values.global.domain)) | quote }} + objectStorageBucket: {{ .Values.objectstores.nubus.bucket | quote }} + objectStorageCredentialSecret: + name: "ums-portal-server-minio-opendesk-credentials" + accessKeyKey: "access-key-id" + secretKeyKey: "secret-key-id" replicaCount: {{ .Values.replicas.umsPortalServer }} resources: {{ .Values.resources.umsPortalServer | toYaml | nindent 4 }} diff --git a/helmfile/environments/default/images.yaml.gotmpl b/helmfile/environments/default/images.yaml.gotmpl index c015d6f6..e816b61a 100644 --- a/helmfile/environments/default/images.yaml.gotmpl +++ b/helmfile/environments/default/images.yaml.gotmpl @@ -550,7 +550,7 @@ images: # upstreamRepository: "bmi/opendesk/components/platform-development/images/opendesk-nubus" registry: "registry.opencode.de" repository: "bmi/opendesk/components/platform-development/images/opendesk-nubus" - tag: "1.14.4@sha256:cf0e22c1eef138a413a90a60c5405126dc769195dd4dd37229a27afaa82ef3b3" + tag: "1.14.7@sha256:e00b6829b765dc1319593c1a1f8369950fc179308d65b79838539ca2967eb5ac" nubusOpendeskExtensionA2gMapper: # providerCategory: "Platform" # providerResponsible: "openDesk" @@ -604,9 +604,11 @@ images: # providerResponsible: "Univention" # upstreamRegistry: "https://artifacts.software-univention.de" # upstreamRepository: "nubus/images/portal-frontend" + # upstreamMirrorTagFilterRegEx: '^(\d+)\.(\d+)\.(\d+)$' + # upstreamMirrorStartFrom: ["0", "67", "0"] registry: "registry.opencode.de" - repository: "bmi/opendesk/components/platform-development/images/opendesk-nubus-portal-update" - tag: "1.10.14@sha256:fbdec057958fd7e728431cf96896b8453c2f5b390ce3d2f169a7766f49926b1b" + repository: "bmi/opendesk/components/supplier/univention/images-mirror/portal-frontend" + tag: "0.70.0@sha256:9e0826c954e99b36b3c7b9ce6dfa1f567a3432158fb78af13337760197f94997" nubusPortalServer: # providerCategory: "Supplier" # providerResponsible: "Univention" diff --git a/helmfile/environments/default/theme.yaml.gotmpl b/helmfile/environments/default/theme.yaml.gotmpl index 3c53520a..55e0a52a 100644 --- a/helmfile/environments/default/theme.yaml.gotmpl +++ b/helmfile/environments/default/theme.yaml.gotmpl @@ -66,7 +66,13 @@ theme: faviconIco: {{ readFile "./../../files/theme/notes/favicon.ico" | b64enc | quote }} portal: - faviconIco: {{ readFile "./../../files/theme/portal/favicon.ico" | b64enc | quote }} + faviconIco: {{ readFile "./../../files/theme/portal/favicon/favicon.ico" | b64enc | quote }} + faviconSvg: {{ readFile "./../../files/theme/portal/favicon/favicon.svg" | b64enc | quote }} + favicon96Png: {{ readFile "./../../files/theme/portal/favicon/favicon-96x96.png" | b64enc | quote }} + appleTouchIcon: {{ readFile "./../../files/theme/portal/favicon/apple-touch-icon.png" | b64enc | quote }} + webManifestIcon192: {{ readFile "./../../files/theme/portal/favicon/web-app-manifest-192x192.png" | b64enc | quote }} + webManifestIcon512: {{ readFile "./../../files/theme/portal/favicon/web-app-manifest-512x512.png" | b64enc | quote }} + waitingSpinnerSvg: {{ readFile "./../../files/theme/portal/waiting-spinner.svg" | b64enc }} backgroundSvg: {{ readFile "./../../files/theme/portal/background.svg" | b64enc | quote }} portalTiles: @@ -89,6 +95,10 @@ theme: notes: {{ readFile "./../../files/theme/notes/favicon.svg" | b64enc | quote }} realtimeCollaboration: {{ readFile "./../../files/theme/chat/favicon.svg" | b64enc | quote }} realtimeVideoconference: {{ readFile "./../../files/theme/videoconference/favicon.svg" | b64enc | quote }} + # links + documentation: {{ readFile "./../../files/theme/link_documentation/favicon.svg" | b64enc | quote }} + feedback: {{ readFile "./../../files/theme/link_feedback/favicon.svg" | b64enc | quote }} + support: {{ readFile "./../../files/theme/link_support/favicon.svg" | b64enc | quote }} # empty.svg empty: {{ readFile "./../../files/theme/_dev/empty.svg" | b64enc | quote }} fileshareActivity: {{ readFile "./../../files/theme/_dev/empty.svg" | b64enc | quote }} diff --git a/helmfile/files/theme/link_documentation/favicon.svg b/helmfile/files/theme/link_documentation/favicon.svg new file mode 100644 index 00000000..2f5af092 --- /dev/null +++ b/helmfile/files/theme/link_documentation/favicon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/helmfile/files/theme/link_feedback/favicon.svg b/helmfile/files/theme/link_feedback/favicon.svg new file mode 100644 index 00000000..70242620 --- /dev/null +++ b/helmfile/files/theme/link_feedback/favicon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/helmfile/files/theme/link_support/favicon.svg b/helmfile/files/theme/link_support/favicon.svg new file mode 100644 index 00000000..5992ecbd --- /dev/null +++ b/helmfile/files/theme/link_support/favicon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/helmfile/files/theme/portal/favicon.ico b/helmfile/files/theme/portal/favicon.ico deleted file mode 100644 index 90f0b212..00000000 Binary files a/helmfile/files/theme/portal/favicon.ico and /dev/null differ diff --git a/helmfile/files/theme/portal/favicon.png b/helmfile/files/theme/portal/favicon.png deleted file mode 100644 index bf4be257..00000000 Binary files a/helmfile/files/theme/portal/favicon.png and /dev/null differ diff --git a/helmfile/files/theme/portal/favicon.svg b/helmfile/files/theme/portal/favicon.svg deleted file mode 100644 index fabe610b..00000000 --- a/helmfile/files/theme/portal/favicon.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/helmfile/files/theme/portal/favicon/apple-touch-icon.png b/helmfile/files/theme/portal/favicon/apple-touch-icon.png new file mode 100644 index 00000000..a3a11701 Binary files /dev/null and b/helmfile/files/theme/portal/favicon/apple-touch-icon.png differ diff --git a/helmfile/files/theme/portal/favicon/favicon-96x96.png b/helmfile/files/theme/portal/favicon/favicon-96x96.png new file mode 100644 index 00000000..1a1d5860 Binary files /dev/null and b/helmfile/files/theme/portal/favicon/favicon-96x96.png differ diff --git a/helmfile/files/theme/portal/favicon/favicon.ico b/helmfile/files/theme/portal/favicon/favicon.ico new file mode 100644 index 00000000..182400de Binary files /dev/null and b/helmfile/files/theme/portal/favicon/favicon.ico differ diff --git a/helmfile/files/theme/portal/favicon/favicon.svg b/helmfile/files/theme/portal/favicon/favicon.svg new file mode 100644 index 00000000..20af59cf --- /dev/null +++ b/helmfile/files/theme/portal/favicon/favicon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/helmfile/files/theme/portal/favicon/web-app-manifest-192x192.png b/helmfile/files/theme/portal/favicon/web-app-manifest-192x192.png new file mode 100644 index 00000000..7a190519 Binary files /dev/null and b/helmfile/files/theme/portal/favicon/web-app-manifest-192x192.png differ diff --git a/helmfile/files/theme/portal/favicon/web-app-manifest-512x512.png b/helmfile/files/theme/portal/favicon/web-app-manifest-512x512.png new file mode 100644 index 00000000..51e11b5d Binary files /dev/null and b/helmfile/files/theme/portal/favicon/web-app-manifest-512x512.png differ diff --git a/helmfile/files/theme/portal/stylesheet.css b/helmfile/files/theme/portal/stylesheet.css index 9438e4e7..d326dd7d 100644 --- a/helmfile/files/theme/portal/stylesheet.css +++ b/helmfile/files/theme/portal/stylesheet.css @@ -97,6 +97,11 @@ --login-logo: url("/static-files/login/logo.svg") no-repeat center; } +/* Speed of flyout mennu */ +.flyout-wrapper, .flyout-wrapper--isVisible { + transition: transform .5s cubic-bezier(0,0,.2,1); +} + /* Keycloak user screens begin */ #kc-login, #kc-logout, @@ -492,4 +497,174 @@ textarea { overflow: hidden; clip: rect(0, 0, 0, 0); border: 0; +} + +/* openDesk customization for nubus-frontend below */ + +.portal-quick-draft { + background-color: var(--color-accent); + color: #fff; + border: 1px solid #d3d7de; +} + +.portal-quick-draft__img { + filter: grayscale(1) invert(1); +} + +.portal-quick-draft:hover, +.portal-quick-draft__toggle:hover { + background-color: #4519c2; +} + +.portal-quick-draft:focus-within { + box-shadow: 0px 0px 0px 3px #c8b9fd; +} + +.portal-quick-draft--open:focus-within { + box-shadow: unset; +} + +.portal-quick-draft__toggle:focus { + border-color: var(--color-focus); +} + +.portal-quick-draft--open, +.portal-quick-draft--open:hover, +.portal-quick-draft--open .portal-quick-draft__toggle:hover { + background-color: #341291; +} + +.portal-quick-draft__item { + color: #fff; +} + +.portal-quick-draft__item:hover, +.portal-quick-draft__item:focus-visible { + color: hsla(0,0%,100%,.7); +} + +.portal-category__title { + margin-bottom: calc(var(--layout-spacing-unit) * 2); + font-size: var(--font-size-3); + font-weight: 700; +} + +.portal-category .portal-category__tiles { + --app-tile-side-length: 5.5rem; + --border-radius-apptile: var(--layout-spacing-unit); + grid-gap: calc(var(--layout-spacing-unit) * 2.5) calc(var(--layout-spacing-unit) * 4.5); +} + +.portal-tile__box { + box-shadow: none; + border: 1px solid #d9d9d9; + margin-bottom: calc(var(--layout-spacing-unit) * 1); +} + +.portal-tile__box--with-scaling-hover:hover { + scale: 1; +} + +.portal-tile:hover .portal-tile__box { + border-color: #99a1b2; +} + +.portal-tile:focus .portal-tile__box { + border-color: #99a1b2; + box-shadow: 0 0 0 3px #c8b9fd; +} + +.portal-corner__inner { + background-color: #203257; +} + +.portal-corner__link { + color: #fff; +} + +.portal-corner__link:focus-visible, +.portal-corner__link:hover { + color: hsla(0, 0%, 100%, .7); + outline: none; + outline-offset: none; +} + +.portal-corner__item:after { + color: hsla(0,0%,100%,.5); +} + +.newsfeed-meta__btn { + border: 1px solid var(--bgc-announcements-info); + color: var(--color-accent); + background-color: var(--color-opendesk-white); +} + +.newsfeed-meta__btn:focus, +.newsfeed-meta__btn:hover { + border-color: var(--newsfeed-link-hover-color); +} + +#header-button-menu { + width: auto; +} + +.portal-header__right .header-button[data-test=searchbutton] { + display: none; +} + +.portal-sidebar__flyout { + border-radius: 0; +} + +.portal-sidenavigation__login-header { + order: 1; +} + +.portal-sidenavigation__login-header + .divider { + display: none; +} + +.portal-sidenavigation__user-row { + display: block; + height: auto; +} + +.portal-sidenavigation__user-text-content { + display: block; + padding: 0; +} + +.portal-sidenavigation--username { + display: none; +} + +.portal-sidenavigation__logout-link { + padding: 1em 0 1em 20px; + cursor: pointer; + height: auto; + width: 100%; + text-align: left; + font-size: var(--font-size-4); + color: var(--font-color-contrast-high); + font-weight: 600; + text-transform: uppercase; + background-color: transparent; + border: none; + margin: 0; + scale: 1; + display: block; + border-radius: 0; +} + +.portal-sidenavigation__logout-link:hover { + background-color: #f5f5f5; + transition: all var(--portal-transition-duration); +} + +.portal-category__title::before { + display: block; + content: ""; + width: 20px; + height: 20px; + background: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgeG1sbnM6dj0iaHR0cHM6Ly92ZWN0YS5pby9uYW5vIj48cGF0aCBkPSJNNS45MzggNC42ODhhMS4yNSAxLjI1IDAgMCAxLS43NzIgMS4xNTUgMS4yNSAxLjI1IDAgMCAxLTEuMzYyLS4yNzEgMS4yNSAxLjI1IDAgMCAxLS4yNzEtMS4zNjIgMS4yNSAxLjI1IDAgMCAxIDEuMTU1LS43NzIgMS4yNSAxLjI1IDAgMCAxIDEuMjUgMS4yNXpNMTAgMy40MzhhMS4yNSAxLjI1IDAgMCAwLTEuMTU1Ljc3MiAxLjI1IDEuMjUgMCAwIDAgLjI3MSAxLjM2MiAxLjI1IDEuMjUgMCAwIDAgMS4zNjIuMjcxIDEuMjUgMS4yNSAwIDAgMCAuNzcyLTEuMTU1QTEuMjUgMS4yNSAwIDAgMCAxMCAzLjQzOHptNS4zMTMgMi41YTEuMjUgMS4yNSAwIDAgMCAxLjE1NS0uNzcyIDEuMjUgMS4yNSAwIDAgMC0uMjcxLTEuMzYyIDEuMjUgMS4yNSAwIDAgMC0xLjM2Mi0uMjcxIDEuMjUgMS4yNSAwIDAgMC0uNzcyIDEuMTU1IDEuMjUgMS4yNSAwIDAgMCAxLjI1IDEuMjV6TTQuNjg4IDguNzVhMS4yNSAxLjI1IDAgMCAwLTEuMTU1Ljc3MiAxLjI1IDEuMjUgMCAwIDAgLjI3MSAxLjM2MiAxLjI1IDEuMjUgMCAwIDAgMS4zNjIuMjcxQTEuMjUgMS4yNSAwIDAgMCA1LjkzOCAxMGExLjI1IDEuMjUgMCAwIDAtMS4yNS0xLjI1em01LjMxMyAwYTEuMjUgMS4yNSAwIDAgMC0xLjE1NS43NzIgMS4yNSAxLjI1IDAgMCAwIC4yNzEgMS4zNjIgMS4yNSAxLjI1IDAgMCAwIDEuMzYyLjI3MUExLjI1IDEuMjUgMCAwIDAgMTEuMjUgMTAgMS4yNSAxLjI1IDAgMCAwIDEwIDguNzV6bTUuMzEzIDBhMS4yNSAxLjI1IDAgMCAwLTEuMTU1Ljc3MiAxLjI1IDEuMjUgMCAwIDAgLjI3MSAxLjM2MiAxLjI1IDEuMjUgMCAwIDAgMS4zNjIuMjcxQTEuMjUgMS4yNSAwIDAgMCAxNi41NjMgMTBhMS4yNSAxLjI1IDAgMCAwLTEuMjUtMS4yNXpNNC42ODggMTQuMDYzYTEuMjUgMS4yNSAwIDAgMC0xLjE1NS43NzIgMS4yNSAxLjI1IDAgMCAwIC4yNzEgMS4zNjIgMS4yNSAxLjI1IDAgMCAwIDEuMzYyLjI3MSAxLjI1IDEuMjUgMCAwIDAgLjc3Mi0xLjE1NSAxLjI1IDEuMjUgMCAwIDAtMS4yNS0xLjI1em01LjMxMyAwYTEuMjUgMS4yNSAwIDAgMC0xLjE1NS43NzIgMS4yNSAxLjI1IDAgMCAwIC4yNzEgMS4zNjIgMS4yNSAxLjI1IDAgMCAwIDEuMzYyLjI3MSAxLjI1IDEuMjUgMCAwIDAgLjc3Mi0xLjE1NSAxLjI1IDEuMjUgMCAwIDAtMS4yNS0xLjI1em01LjMxMyAwYTEuMjUgMS4yNSAwIDAgMC0xLjE1NS43NzIgMS4yNSAxLjI1IDAgMCAwIC4yNzEgMS4zNjIgMS4yNSAxLjI1IDAgMCAwIDEuMzYyLjI3MSAxLjI1IDEuMjUgMCAwIDAgLjc3Mi0xLjE1NSAxLjI1IDEuMjUgMCAwIDAtMS4yNS0xLjI1eiIgZmlsbD0iIzAwMCIvPjwvc3ZnPg=='); } \ No newline at end of file