diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-04-27 18:10:01 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-04-27 18:10:01 +0300 |
commit | 6d82b3a0c58f427e90bb8665cd13931128753a23 (patch) | |
tree | f89d05cab91e0b56d6fae7194c8b048d75314846 /app | |
parent | 863ba7d77355b305b06112b0c6c3cab3c09898b0 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app')
76 files changed, 448 insertions, 256 deletions
diff --git a/app/assets/images/apple-touch-icon.png b/app/assets/images/apple-touch-icon.png Binary files differnew file mode 100644 index 00000000000..90507f61099 --- /dev/null +++ b/app/assets/images/apple-touch-icon.png diff --git a/app/assets/images/ext_snippet_icons/logo.svg b/app/assets/images/ext_snippet_icons/logo.svg index 9cb3042213a..d76e9cb3e5c 100644 --- a/app/assets/images/ext_snippet_icons/logo.svg +++ b/app/assets/images/ext_snippet_icons/logo.svg @@ -1 +1,12 @@ -<svg width="100" height="32" xmlns="http://www.w3.org/2000/svg"><g fill-rule="nonzero" fill="none"><path fill="#8C929D" d="M67.67 8.11h-2.06l.009 15.364h8.348v-1.9H67.68l-.01-13.465zM81.913 20.778a3.517 3.517 0 01-2.553 1.078c-1.57 0-2.203-.775-2.203-1.787 0-1.522 1.059-2.25 3.309-2.25.487.002.974.04 1.456.113v2.846h-.01zm-2.137-9.313a6.826 6.826 0 00-4.387 1.579l.728 1.267c.841-.492 1.872-.983 3.356-.983 1.693 0 2.44.87 2.44 2.326v.747a9.4 9.4 0 00-1.428-.114c-3.612 0-5.446 1.267-5.446 3.914 0 2.374 1.456 3.565 3.659 3.565 1.484 0 2.912-.68 3.404-1.787l.378 1.503h1.456v-7.866c-.01-2.487-1.087-4.151-4.16-4.151zM90.587 21.926c-.776 0-1.456-.094-1.967-.33v-7.102c.7-.586 1.57-1.011 2.676-1.011 1.995 0 2.76 1.408 2.76 3.687 0 3.234-1.238 4.756-3.47 4.756m.87-10.457a3.775 3.775 0 00-2.836 1.257V10.74l-.01-2.629h-2.013l.01 14.987c1.01.425 2.391.652 3.895.652 3.848 0 5.701-2.458 5.701-6.704-.01-3.356-1.72-5.578-4.746-5.578M45.228 9.776c1.825 0 3.006.605 3.772 1.22l.889-1.541c-1.2-1.06-2.827-1.627-4.567-1.627-4.387 0-7.46 2.676-7.46 8.075 0 5.654 3.319 7.857 7.11 7.857a12.083 12.083 0 004.577-.888L49.5 16.83v-1.9h-5.63v1.9h3.594l.047 4.586c-.473.236-1.286.425-2.392.425-3.045 0-5.087-1.92-5.087-5.957-.01-4.113 2.1-6.108 5.19-6.108M59.744 8.107H57.73l.01 2.582v8.916c0 2.487 1.078 4.15 4.15 4.15.416.002.83-.036 1.24-.113v-1.806c-.31.047-.624.07-.937.066-1.692 0-2.44-.87-2.44-2.326v-6.145h3.376v-1.683h-3.373l-.009-3.64h-.003zM52.608 23.474h2.014V11.75h-2.014zM52.608 10.133h2.014V8.119h-2.014z"/><path d="M31.864 17.907l-1.788-5.496-3.538-10.9a.612.612 0 00-1.16 0L21.84 12.406H10.085L6.547 1.512a.612.612 0 00-1.16 0L1.855 12.405.066 17.907c-.162.5.015 1.05.44 1.36L15.963 30.5l15.456-11.233a1.22 1.22 0 00.446-1.36" fill="#FC6D26"/><path d="M15.966 30.49l5.875-18.086H10.09z" fill="#E24329"/><path d="M15.962 30.49l-5.877-18.086H1.859z" fill="#FC6D26"/><path d="M1.852 12.41L.063 17.906c-.162.5.015 1.05.441 1.36L15.959 30.5 1.852 12.41z" fill="#FCA326"/><path d="M1.854 12.41h8.237L6.546 1.517a.612.612 0 00-1.16 0L1.854 12.41z" fill="#E24329"/><path d="M15.966 30.49l5.875-18.086h8.236z" fill="#FC6D26"/><path d="M30.074 12.41l1.79 5.496a1.219 1.219 0 01-.44 1.36L15.966 30.49l14.107-18.08z" fill="#FCA326"/><path d="M30.079 12.41H21.84L25.38 1.517a.612.612 0 011.16 0l3.539 10.893z" fill="#E24329"/></g></svg>
\ No newline at end of file +<svg width="111" height="24" viewBox="0 0 111 24" fill="none" xmlns="http://www.w3.org/2000/svg"> + <path d="M44.814 9.042h3.645c-.608-3.875-3.963-6.574-8.33-6.574-5.166 0-9.043 3.798-9.043 10.16 0 6.248 3.703 10.123 9.15 10.123 4.887 0 8.386-3.144 8.386-8.234v-2.37h-8.01v2.794h4.55c-.058 2.816-1.938 4.599-4.908 4.599-3.305 0-5.57-2.477-5.57-6.95 0-4.445 2.303-6.913 5.494-6.913 2.38 0 4.01 1.272 4.636 3.365Zm6.218 13.438h3.49V7.68h-3.49v14.8Zm1.76-17.151c1.109 0 2.014-.85 2.014-1.89s-.905-1.9-2.014-1.9c-1.109 0-2.024.849-2.024 1.9s.9 1.89 2.017 1.89h.007ZM64.971 7.68H62.05V4.126h-3.49v3.556h-2.1v2.699h2.1v8.233c-.018 2.786 2.007 4.16 4.628 4.079a7.089 7.089 0 0 0 2.055-.348l-.59-2.73a4.247 4.247 0 0 1-1.02.137c-.878 0-1.582-.309-1.582-1.717v-7.662h2.921V7.68Zm2.701 14.8h12.272v-2.998H71.25V2.737h-3.578V22.48Zm18.957.3c2.323 0 3.71-1.09 4.347-2.333h.115v2.033h3.36v-9.91c0-3.913-3.19-5.09-6.016-5.09-3.113 0-5.504 1.388-6.275 4.087l3.26.464c.345-1.013 1.329-1.88 3.04-1.88 1.62 0 2.506.829 2.506 2.285v.057c0 1.002-1.05 1.051-3.664 1.33-2.872.309-5.619 1.166-5.619 4.502-.01 2.912 2.12 4.455 4.946 4.455Zm1.147-2.56c-1.456 0-2.498-.666-2.498-1.948 0-1.34 1.167-1.899 2.72-2.121.917-.125 2.75-.357 3.2-.722v1.744c.01 1.643-1.321 3.042-3.422 3.042v.005Zm9.244 2.26h3.433v-2.332h.201c.551 1.08 1.698 2.593 4.244 2.593 3.489 0 6.102-2.768 6.102-7.644 0-4.936-2.69-7.616-6.112-7.616-2.613 0-3.702 1.57-4.234 2.641h-.147V2.737h-3.486V22.48Zm3.423-7.403c0-2.88 1.234-4.734 3.48-4.734 2.323 0 3.52 1.976 3.52 4.734 0 2.759-1.214 4.8-3.52 4.8-2.227 0-3.48-1.928-3.48-4.8Z" + fill="#171321"/> + <path d="m24.507 9.5-.034-.09L21.082.562a.896.896 0 0 0-1.694.091l-2.29 7.01H7.825L5.535.653a.898.898 0 0 0-1.694-.09L.451 9.411.416 9.5a6.297 6.297 0 0 0 2.09 7.278l.012.01.03.022 5.16 3.867 2.56 1.935 1.554 1.176a1.051 1.051 0 0 0 1.268 0l1.555-1.176 2.56-1.935 5.197-3.89.014-.01A6.297 6.297 0 0 0 24.507 9.5Z" + fill="#E24329"/> + <path d="m24.507 9.5-.034-.09a11.44 11.44 0 0 0-4.56 2.051l-7.447 5.632 4.742 3.584 5.197-3.89.014-.01A6.297 6.297 0 0 0 24.507 9.5Z" + fill="#FC6D26"/> + <path d="m7.707 20.677 2.56 1.935 1.555 1.176a1.051 1.051 0 0 0 1.268 0l1.555-1.176 2.56-1.935-4.743-3.584-4.755 3.584Z" + fill="#FCA326"/> + <path d="M5.01 11.461a11.43 11.43 0 0 0-4.56-2.05L.416 9.5a6.297 6.297 0 0 0 2.09 7.278l.012.01.03.022 5.16 3.867 4.745-3.584-7.444-5.632Z" + fill="#FC6D26"/> +</svg> diff --git a/app/assets/images/favicon-blue.png b/app/assets/images/favicon-blue.png Binary files differindex 2229fe79462..4829a48a0ea 100644 --- a/app/assets/images/favicon-blue.png +++ b/app/assets/images/favicon-blue.png diff --git a/app/assets/images/favicon-yellow.png b/app/assets/images/favicon-yellow.png Binary files differindex a80827808fc..fa0a23d54e5 100644 --- a/app/assets/images/favicon-yellow.png +++ b/app/assets/images/favicon-yellow.png diff --git a/app/assets/images/favicon.png b/app/assets/images/favicon.png Binary files differindex 845e0ec34a5..feeff619345 100644 --- a/app/assets/images/favicon.png +++ b/app/assets/images/favicon.png diff --git a/app/assets/images/gitlab_logo.png b/app/assets/images/gitlab_logo.png Binary files differindex ca30b459019..12525056939 100644 --- a/app/assets/images/gitlab_logo.png +++ b/app/assets/images/gitlab_logo.png diff --git a/app/assets/images/logo.svg b/app/assets/images/logo.svg index f4e19b67008..c650177c960 100644 --- a/app/assets/images/logo.svg +++ b/app/assets/images/logo.svg @@ -1,26 +1,10 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg width="210px" height="210px" viewBox="0 0 210 210" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns"> - <!-- Generator: Sketch 3.3.2 (12043) - http://www.bohemiancoding.com/sketch --> - <title>Slice 1</title> - <desc>Created with Sketch.</desc> - <defs></defs> - <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage"> - <g id="logo" sketch:type="MSLayerGroup" transform="translate(0.000000, 10.000000)"> - <g id="Page-1" sketch:type="MSShapeGroup"> - <g id="Fill-1-+-Group-24"> - <g id="Group-24"> - <g id="Group"> - <path d="M105.0614,193.655 L105.0614,193.655 L143.7014,74.734 L66.4214,74.734 L105.0614,193.655 L105.0614,193.655 Z" id="Fill-4" fill="#E24329" class="tanuki-shape"></path> - <path d="M105.0614,193.6548 L66.4214,74.7338 L12.2684,74.7338 L105.0614,193.6548 L105.0614,193.6548 Z" id="Fill-8" fill="#FC6D26" class="tanuki-shape"></path> - <path d="M12.2685,74.7341 L12.2685,74.7341 L0.5265,110.8731 C-0.5445,114.1691 0.6285,117.7801 3.4325,119.8171 L105.0615,193.6551 L12.2685,74.7341 L12.2685,74.7341 Z" id="Fill-12" fill="#FCA326" class="tanuki-shape"></path> - <path d="M12.2685,74.7342 L66.4215,74.7342 L43.1485,3.1092 C41.9515,-0.5768 36.7375,-0.5758 35.5405,3.1092 L12.2685,74.7342 L12.2685,74.7342 Z" id="Fill-16" fill="#E24329" class="tanuki-shape"></path> - <path d="M105.0614,193.6548 L143.7014,74.7338 L197.8544,74.7338 L105.0614,193.6548 L105.0614,193.6548 Z" id="Fill-18" fill="#FC6D26" class="tanuki-shape"></path> - <path d="M197.8544,74.7341 L197.8544,74.7341 L209.5964,110.8731 C210.6674,114.1691 209.4944,117.7801 206.6904,119.8171 L105.0614,193.6551 L197.8544,74.7341 L197.8544,74.7341 Z" id="Fill-20" fill="#FCA326" class="tanuki-shape"></path> - <path d="M197.8544,74.7342 L143.7014,74.7342 L166.9744,3.1092 C168.1714,-0.5768 173.3854,-0.5758 174.5824,3.1092 L197.8544,74.7342 L197.8544,74.7342 Z" id="Fill-22" fill="#E24329" class="tanuki-shape"></path> - </g> - </g> - </g> - </g> - </g> - </g> +<svg width="200" height="192" class="tanuki-logo" viewBox="0 0 50 48" fill="none" xmlns="http://www.w3.org/2000/svg"> + <path class="tanuki-shape tanuki" d="m49.014 19-.067-.18-6.784-17.696a1.792 1.792 0 0 0-3.389.182l-4.579 14.02H15.651l-4.58-14.02a1.795 1.795 0 0 0-3.388-.182l-6.78 17.7-.071.175A12.595 12.595 0 0 0 5.01 33.556l.026.02.057.044 10.32 7.734 5.12 3.87 3.11 2.351a2.102 2.102 0 0 0 2.535 0l3.11-2.352 5.12-3.869 10.394-7.779.029-.022a12.595 12.595 0 0 0 4.182-14.554Z" + fill="#E24329"/> + <path class="tanuki-shape right-cheek" d="m49.014 19-.067-.18a22.88 22.88 0 0 0-9.12 4.103L24.931 34.187l9.485 7.167 10.393-7.779.03-.022a12.595 12.595 0 0 0 4.175-14.554Z" + fill="#FC6D26"/> + <path class="tanuki-shape chin" d="m15.414 41.354 5.12 3.87 3.11 2.351a2.102 2.102 0 0 0 2.535 0l3.11-2.352 5.12-3.869-9.484-7.167-9.51 7.167Z" + fill="#FCA326"/> + <path class="tanuki-shape left-cheek" d="M10.019 22.923a22.86 22.86 0 0 0-9.117-4.1L.832 19A12.595 12.595 0 0 0 5.01 33.556l.026.02.057.044 10.32 7.734 9.491-7.167L10.02 22.923Z" + fill="#FC6D26"/> </svg> diff --git a/app/assets/images/mailers/ci_pipeline_notif_v1/gitlab-logo-full-horizontal.gif b/app/assets/images/mailers/ci_pipeline_notif_v1/gitlab-logo-full-horizontal.gif Binary files differdeleted file mode 100644 index 3f4ef31947b..00000000000 --- a/app/assets/images/mailers/ci_pipeline_notif_v1/gitlab-logo-full-horizontal.gif +++ /dev/null diff --git a/app/assets/images/mailers/ci_pipeline_notif_v1/gitlab-logo.gif b/app/assets/images/mailers/ci_pipeline_notif_v1/gitlab-logo.gif Binary files differdeleted file mode 100644 index 387628f831c..00000000000 --- a/app/assets/images/mailers/ci_pipeline_notif_v1/gitlab-logo.gif +++ /dev/null diff --git a/app/assets/images/mailers/gitlab_footer_logo.gif b/app/assets/images/mailers/gitlab_footer_logo.gif Binary files differdeleted file mode 100644 index 3f4ef31947b..00000000000 --- a/app/assets/images/mailers/gitlab_footer_logo.gif +++ /dev/null diff --git a/app/assets/images/mailers/gitlab_header_logo.gif b/app/assets/images/mailers/gitlab_header_logo.gif Binary files differdeleted file mode 100644 index 387628f831c..00000000000 --- a/app/assets/images/mailers/gitlab_header_logo.gif +++ /dev/null diff --git a/app/assets/images/mailers/gitlab_header_logo.png b/app/assets/images/mailers/gitlab_header_logo.png Binary files differdeleted file mode 100644 index 35ca1860887..00000000000 --- a/app/assets/images/mailers/gitlab_header_logo.png +++ /dev/null diff --git a/app/assets/images/mailers/gitlab_logo.png b/app/assets/images/mailers/gitlab_logo.png Binary files differnew file mode 100644 index 00000000000..12525056939 --- /dev/null +++ b/app/assets/images/mailers/gitlab_logo.png diff --git a/app/assets/images/mailers/gitlab_logo_black_text.png b/app/assets/images/mailers/gitlab_logo_black_text.png Binary files differnew file mode 100644 index 00000000000..ed8f05a633e --- /dev/null +++ b/app/assets/images/mailers/gitlab_logo_black_text.png diff --git a/app/assets/images/mailers/gitlab_tanuki_2x.png b/app/assets/images/mailers/gitlab_tanuki_2x.png Binary files differdeleted file mode 100644 index 551dd6ce2ce..00000000000 --- a/app/assets/images/mailers/gitlab_tanuki_2x.png +++ /dev/null diff --git a/app/assets/images/mailers/in_product_marketing/gitlab-logo-gray-rgb.png b/app/assets/images/mailers/in_product_marketing/gitlab-logo-gray-rgb.png Binary files differdeleted file mode 100644 index 31083af512e..00000000000 --- a/app/assets/images/mailers/in_product_marketing/gitlab-logo-gray-rgb.png +++ /dev/null diff --git a/app/assets/images/msapplication-tile.png b/app/assets/images/msapplication-tile.png Binary files differdeleted file mode 100644 index 1e0e2ed73ce..00000000000 --- a/app/assets/images/msapplication-tile.png +++ /dev/null diff --git a/app/assets/images/touch-icon-ipad-retina.png b/app/assets/images/touch-icon-ipad-retina.png Binary files differdeleted file mode 100644 index 516dc2f4710..00000000000 --- a/app/assets/images/touch-icon-ipad-retina.png +++ /dev/null diff --git a/app/assets/images/touch-icon-ipad.png b/app/assets/images/touch-icon-ipad.png Binary files differdeleted file mode 100644 index b2093d015b8..00000000000 --- a/app/assets/images/touch-icon-ipad.png +++ /dev/null diff --git a/app/assets/images/touch-icon-iphone-retina.png b/app/assets/images/touch-icon-iphone-retina.png Binary files differdeleted file mode 100644 index 438654e0d20..00000000000 --- a/app/assets/images/touch-icon-iphone-retina.png +++ /dev/null diff --git a/app/assets/images/touch-icon-iphone.png b/app/assets/images/touch-icon-iphone.png Binary files differdeleted file mode 100644 index e5f87fbbcf6..00000000000 --- a/app/assets/images/touch-icon-iphone.png +++ /dev/null diff --git a/app/assets/images/twitter_card.jpg b/app/assets/images/twitter_card.jpg Binary files differnew file mode 100644 index 00000000000..6b998ab731c --- /dev/null +++ b/app/assets/images/twitter_card.jpg diff --git a/app/assets/javascripts/clusters/agents/components/revoke_token_button.vue b/app/assets/javascripts/clusters/agents/components/revoke_token_button.vue new file mode 100644 index 00000000000..7d36cbb170d --- /dev/null +++ b/app/assets/javascripts/clusters/agents/components/revoke_token_button.vue @@ -0,0 +1,201 @@ +<script> +import { + GlButton, + GlModalDirective, + GlTooltip, + GlModal, + GlFormGroup, + GlFormInput, + GlSprintf, +} from '@gitlab/ui'; +import { s__, __, sprintf } from '~/locale'; +import { REVOKE_TOKEN_MODAL_ID, TOKEN_STATUS_ACTIVE } from '../constants'; +import revokeAgentToken from '../graphql/mutations/revoke_token.mutation.graphql'; +import getClusterAgentQuery from '../graphql/queries/get_cluster_agent.query.graphql'; +import { removeTokenFromStore } from '../graphql/cache_update'; + +export default { + components: { + GlButton, + GlTooltip, + GlModal, + GlFormGroup, + GlFormInput, + GlSprintf, + }, + directives: { + GlModalDirective, + }, + inject: ['agentName', 'projectPath', 'canAdminCluster'], + props: { + token: { + required: true, + type: Object, + validator: (value) => ['id', 'name'].every((prop) => value[prop]), + }, + cursor: { + required: true, + type: Object, + }, + }, + i18n: { + revokeButton: s__('ClusterAgents|Revoke token'), + dropdownDisabledHint: s__( + 'ClusterAgents|Requires a Maintainer or greater role to perform this action', + ), + modalTitle: s__('ClusterAgents|Revoke access token?'), + modalBody: s__( + 'ClusterAgents|Are you sure you want to revoke this token? You cannot undo this action.', + ), + modalInputLabel: s__('ClusterAgents|To revoke the token, type %{name} to confirm:'), + modalCancel: __('Cancel'), + successMessage: s__('ClusterAgents|%{name} successfully revoked'), + defaultError: __('An error occurred. Please try again.'), + }, + data() { + return { + loading: false, + error: null, + revokeConfirmText: null, + tokenName: null, + variables: { + agentName: this.agentName, + projectPath: this.projectPath, + tokenStatus: TOKEN_STATUS_ACTIVE, + ...this.cursor, + }, + }; + }, + computed: { + revokeBtnDisabled() { + return this.loading || !this.canAdminCluster; + }, + modalId() { + return sprintf(REVOKE_TOKEN_MODAL_ID, { + tokenName: this.token.name, + }); + }, + primaryModalProps() { + return { + text: this.$options.i18n.revokeButton, + attributes: [ + { disabled: this.loading || this.disableModalSubmit, loading: this.loading }, + { variant: 'danger' }, + ], + }; + }, + cancelModalProps() { + return { + text: this.$options.i18n.modalCancel, + attributes: [], + }; + }, + disableModalSubmit() { + return this.revokeConfirmText !== this.token.name; + }, + }, + methods: { + async revokeToken() { + if (this.disableModalSubmit || this.loading) { + return; + } + + this.loading = true; + this.error = null; + this.tokenName = this.token.name; + + try { + const { errors } = await this.revokeTokenMutation(); + + if (errors.length) { + throw new Error(errors[0]); + } + } catch (error) { + this.error = error?.message || this.$options.i18n.defaultError; + } finally { + this.loading = false; + const successMessage = sprintf(this.$options.i18n.successMessage, { + name: this.tokenName, + }); + + this.$toast.show(this.error || successMessage); + + this.hideModal(); + } + }, + revokeTokenMutation() { + return this.$apollo + .mutate({ + mutation: revokeAgentToken, + variables: { + input: { + id: this.token.id, + }, + }, + update: (store) => { + removeTokenFromStore(store, this.token, getClusterAgentQuery, this.variables); + }, + }) + + .then(({ data: { clusterAgentTokenRevoke } }) => { + return clusterAgentTokenRevoke; + }); + }, + resetModal() { + this.loading = false; + this.error = null; + this.revokeConfirmText = null; + }, + hideModal() { + this.resetModal(); + this.$refs.modal.hide(); + }, + }, +}; +</script> + +<template> + <div> + <div ref="revokeToken" class="gl-display-inline-block"> + <gl-button + v-gl-modal-directive="modalId" + icon="remove" + category="secondary" + variant="danger" + :disabled="revokeBtnDisabled" + :title="$options.i18n.revokeButton" + :aria-label="$options.i18n.revokeButton" + /> + + <gl-tooltip + v-if="!canAdminCluster" + :target="() => $refs.revokeToken" + :title="$options.i18n.dropdownDisabledHint" + /> + </div> + + <gl-modal + ref="modal" + :modal-id="modalId" + :title="$options.i18n.modalTitle" + :action-primary="primaryModalProps" + :action-cancel="cancelModalProps" + size="sm" + @primary="revokeToken" + @hide="hideModal" + > + <p>{{ $options.i18n.modalBody }}</p> + + <gl-form-group> + <template #label> + <gl-sprintf :message="$options.i18n.modalInputLabel"> + <template #name> + <code>{{ token.name }}</code> + </template> + </gl-sprintf> + </template> + <gl-form-input v-model="revokeConfirmText" @keydown.enter="revokeToken" /> + </gl-form-group> + </gl-modal> + </div> +</template> diff --git a/app/assets/javascripts/clusters/agents/components/token_table.vue b/app/assets/javascripts/clusters/agents/components/token_table.vue index fbb39c28d78..9e64c9da712 100644 --- a/app/assets/javascripts/clusters/agents/components/token_table.vue +++ b/app/assets/javascripts/clusters/agents/components/token_table.vue @@ -3,6 +3,7 @@ import { GlEmptyState, GlTable, GlTooltip, GlTruncate } from '@gitlab/ui'; import { s__ } from '~/locale'; import TimeAgoTooltip from '~/vue_shared/components/time_ago_tooltip.vue'; import CreateTokenButton from './create_token_button.vue'; +import RevokeTokenButton from './revoke_token_button.vue'; export default { components: { @@ -12,6 +13,7 @@ export default { GlTruncate, TimeAgoTooltip, CreateTokenButton, + RevokeTokenButton, }, i18n: { createdBy: s__('ClusterAgents|Created by'), @@ -66,6 +68,11 @@ export default { label: this.$options.i18n.description, tdAttr: { 'data-testid': 'agent-token-description' }, }, + { + key: 'actions', + label: '', + tdAttr: { 'data-testid': 'agent-token-revoke' }, + }, ]; }, }, @@ -119,6 +126,10 @@ export default { </gl-tooltip> </div> </template> + + <template #cell(actions)="{ item }"> + <revoke-token-button :token="item" :cluster-agent-id="clusterAgentId" :cursor="cursor" /> + </template> </gl-table> </div> diff --git a/app/assets/javascripts/clusters/agents/constants.js b/app/assets/javascripts/clusters/agents/constants.js index 50d8f5e9e40..962fa243903 100644 --- a/app/assets/javascripts/clusters/agents/constants.js +++ b/app/assets/javascripts/clusters/agents/constants.js @@ -44,3 +44,5 @@ export const EVENT_ACTIONS_OPEN = 'open_modal'; export const EVENT_ACTIONS_CLICK = 'click_button'; export const TOKEN_NAME_LIMIT = 255; + +export const REVOKE_TOKEN_MODAL_ID = 'revoke-token-%{tokenName}'; diff --git a/app/assets/javascripts/clusters/agents/graphql/cache_update.js b/app/assets/javascripts/clusters/agents/graphql/cache_update.js index 0219c4150eb..8db79c82708 100644 --- a/app/assets/javascripts/clusters/agents/graphql/cache_update.js +++ b/app/assets/javascripts/clusters/agents/graphql/cache_update.js @@ -22,3 +22,25 @@ export function addAgentTokenToStore(store, clusterAgentTokenCreate, query, vari }); } } + +export function removeTokenFromStore(store, revokeToken, query, variables) { + if (!hasErrors(revokeToken)) { + const sourceData = store.readQuery({ + query, + variables, + }); + + const data = produce(sourceData, (draftData) => { + draftData.project.clusterAgent.tokens.nodes = draftData.project.clusterAgent.tokens.nodes.filter( + ({ id }) => id !== revokeToken.id, + ); + draftData.project.clusterAgent.tokens.count -= 1; + }); + + store.writeQuery({ + query, + variables, + data, + }); + } +} diff --git a/app/assets/javascripts/clusters/agents/graphql/mutations/revoke_token.mutation.graphql b/app/assets/javascripts/clusters/agents/graphql/mutations/revoke_token.mutation.graphql new file mode 100644 index 00000000000..6f1c6a66690 --- /dev/null +++ b/app/assets/javascripts/clusters/agents/graphql/mutations/revoke_token.mutation.graphql @@ -0,0 +1,5 @@ +mutation revokeAgentToken($input: ClusterAgentTokenRevokeInput!) { + clusterAgentTokenRevoke(input: $input) { + errors + } +} diff --git a/app/assets/javascripts/diffs/components/compare_versions.vue b/app/assets/javascripts/diffs/components/compare_versions.vue index 4dfd672f99b..8a5325cf218 100644 --- a/app/assets/javascripts/diffs/components/compare_versions.vue +++ b/app/assets/javascripts/diffs/components/compare_versions.vue @@ -79,7 +79,7 @@ export default { </script> <template> - <div class="mr-version-controls border-top"> + <div class="mr-version-controls"> <div class="mr-version-menus-container content-block"> <gl-button v-if="hasChanges" diff --git a/app/assets/javascripts/security_configuration/index.js b/app/assets/javascripts/security_configuration/index.js index 65cf1ec27a3..dcc41a38067 100644 --- a/app/assets/javascripts/security_configuration/index.js +++ b/app/assets/javascripts/security_configuration/index.js @@ -37,6 +37,7 @@ export const initSecurityConfiguration = (el) => { return new Vue({ el, apolloProvider, + name: 'SecurityConfigurationRoot', provide: { projectFullPath, upgradePath, diff --git a/app/assets/stylesheets/framework/diffs.scss b/app/assets/stylesheets/framework/diffs.scss index 6c14eeafc0b..7a77256398e 100644 --- a/app/assets/stylesheets/framework/diffs.scss +++ b/app/assets/stylesheets/framework/diffs.scss @@ -34,7 +34,7 @@ @media (min-width: map-get($grid-breakpoints, md)) { // The `+11` is to ensure the file header border shows when scrolled - // the bottom of the compare-versions header and the top of the file header - $mr-file-header-top: calc(#{$mr-version-controls-height} + #{$header-height} + #{$mr-tabs-height} + 11px); + $mr-file-header-top: calc(#{$header-height} + #{$mr-tabs-height}); position: -webkit-sticky; position: sticky; diff --git a/app/assets/stylesheets/framework/header.scss b/app/assets/stylesheets/framework/header.scss index 12b4d3ac0cc..f8ac3adebb5 100644 --- a/app/assets/stylesheets/framework/header.scss +++ b/app/assets/stylesheets/framework/header.scss @@ -10,17 +10,6 @@ right: 0; border-radius: 0; - .logo-text { - line-height: initial; - - svg { - width: 55px; - height: 14px; - margin: 0; - fill: $white; - } - } - .close-icon { display: none; } @@ -71,7 +60,7 @@ display: flex; align-items: center; padding: 2px 8px; - margin: 5px 2px 5px -12px; + margin: 4px 2px 4px -12px; border-radius: $border-radius-default; } diff --git a/app/assets/stylesheets/framework/logo.scss b/app/assets/stylesheets/framework/logo.scss index c5feefb8c54..1845438eedb 100644 --- a/app/assets/stylesheets/framework/logo.scss +++ b/app/assets/stylesheets/framework/logo.scss @@ -9,19 +9,16 @@ } .tanuki-logo { - .tanuki-left-ear, - .tanuki-right-ear, - .tanuki-nose { + .tanuki { @include tanuki-logo-colors($tanuki-red); } - .tanuki-left-eye, - .tanuki-right-eye { + .left-cheek, + .right-cheek { @include tanuki-logo-colors($tanuki-orange); } - .tanuki-left-cheek, - .tanuki-right-cheek { + .chin { @include tanuki-logo-colors($tanuki-yellow); } @@ -31,98 +28,54 @@ @include webkit-prefix(animation-iteration-count, infinite); } - .tanuki-left-cheek { - @include include-keyframes(animate-tanuki-left-cheek) { + .tanuki { + @include include-keyframes(animate-tanuki-base) { 0%, - 10%, - 100% { - fill: lighten($tanuki-yellow, 25%); - } - - 90% { - fill: $tanuki-yellow; - } - } - } - - .tanuki-left-eye { - @include include-keyframes(animate-tanuki-left-eye) { - 10%, - 80% { - fill: $tanuki-orange; - } - - 20%, - 90% { - fill: lighten($tanuki-orange, 25%); - } - } - } - - .tanuki-left-ear { - @include include-keyframes(animate-tanuki-left-ear) { - 10%, - 80% { + 50% { fill: $tanuki-red; } - 20%, - 90% { + 25% { fill: lighten($tanuki-red, 25%); } } } - .tanuki-nose { - @include include-keyframes(animate-tanuki-nose) { - 20%, - 70% { - fill: $tanuki-red; - } - - 30%, - 80% { - fill: lighten($tanuki-red, 25%); - } - } - } - - .tanuki-right-eye { - @include include-keyframes(animate-tanuki-right-eye) { - 30%, - 60% { + .right-cheek { + @include include-keyframes(animate-tanuki-right-cheek) { + 25%, + 75% { fill: $tanuki-orange; } - 40%, - 70% { + 50% { fill: lighten($tanuki-orange, 25%); } } } - .tanuki-right-ear { - @include include-keyframes(animate-tanuki-right-ear) { - 30%, - 60% { - fill: $tanuki-red; + .chin { + @include include-keyframes(animate-tanuki-chin) { + 50%, + 100% { + fill: $tanuki-yellow; } - 40%, - 70% { - fill: lighten($tanuki-red, 25%); + 75% { + fill: lighten($tanuki-yellow, 25%); } } } - .tanuki-right-cheek { - @include include-keyframes(animate-tanuki-right-cheek) { - 40% { - fill: $tanuki-yellow; + .left-cheek { + @include include-keyframes(animate-tanuki-left-cheek) { + 25%, + 75% { + fill: $tanuki-orange; } - 60% { - fill: lighten($tanuki-yellow, 25%); + 100% { + fill: lighten($tanuki-orange, 25%); } } } diff --git a/app/assets/stylesheets/framework/variables.scss b/app/assets/stylesheets/framework/variables.scss index 57504124f00..a5f57cdafd2 100644 --- a/app/assets/stylesheets/framework/variables.scss +++ b/app/assets/stylesheets/framework/variables.scss @@ -933,7 +933,6 @@ $issues-analytics-popover-boarder-color: rgba(0, 0, 0, 0.15); Merge requests */ $mr-tabs-height: 48px; -$mr-version-controls-height: 56px; /* Compare Branches diff --git a/app/assets/stylesheets/mailer.scss b/app/assets/stylesheets/mailer.scss index 5f50489555b..b8cbe64df38 100644 --- a/app/assets/stylesheets/mailer.scss +++ b/app/assets/stylesheets/mailer.scss @@ -197,6 +197,5 @@ tr.footer td { .footer-logo { width: 90px; - height: 33px; } } diff --git a/app/assets/stylesheets/page_bundles/merge_requests.scss b/app/assets/stylesheets/page_bundles/merge_requests.scss index 34a3d936a67..2d66b44ed13 100644 --- a/app/assets/stylesheets/page_bundles/merge_requests.scss +++ b/app/assets/stylesheets/page_bundles/merge_requests.scss @@ -41,7 +41,7 @@ $tabs-holder-z-index: 250; // If they don't match, the file tree and the diff files stick // to the top at different heights, which is a bad-looking defect $diff-file-header-top: 11px; - $top-pos: calc(#{$header-height} + #{$mr-tabs-height} + #{$mr-version-controls-height} + #{$diff-file-header-top}); + $top-pos: calc(#{$header-height} + #{$mr-tabs-height} + #{$diff-file-header-top}); position: -webkit-sticky; position: sticky; @@ -677,11 +677,8 @@ $tabs-holder-z-index: 250; } .mr-version-controls { - position: relative; - z-index: $tabs-holder-z-index + 10; background: var(--white, $white); color: var(--gl-text-color, $gl-text-color); - margin-top: -1px; .mr-version-menus-container { display: flex; @@ -703,7 +700,7 @@ $tabs-holder-z-index: 250; } .content-block { - padding: $gl-padding; + padding: $gl-padding-8 $gl-padding; border-bottom: 0; } @@ -721,28 +718,6 @@ $tabs-holder-z-index: 250; .btn { height: 34px; } - - @include media-breakpoint-up(md) { - position: -webkit-sticky; - position: sticky; - top: calc(#{$header-height} + #{$mr-tabs-height}); - - .with-system-header & { - top: calc(#{$header-height} + #{$mr-tabs-height} + #{$system-header-height}); - } - - .with-system-header.with-performance-bar & { - top: calc(#{$header-height} + #{$mr-tabs-height} + #{$system-header-height} + #{$performance-bar-height}); - } - - .mr-version-menus-container { - flex-wrap: nowrap; - } - - .with-performance-bar & { - top: calc(#{$header-height} + #{$performance-bar-height} + #{$mr-tabs-height}); - } - } } .mr-section-container .resize-observer > object { diff --git a/app/assets/stylesheets/page_bundles/terms.scss b/app/assets/stylesheets/page_bundles/terms.scss index 8eb66e58aed..9dff3e9c99c 100644 --- a/app/assets/stylesheets/page_bundles/terms.scss +++ b/app/assets/stylesheets/page_bundles/terms.scss @@ -22,14 +22,6 @@ justify-content: space-between; line-height: $line-height-base; - .logo-text { - width: 55px; - height: 24px; - display: flex; - flex-direction: column; - justify-content: center; - } - .navbar-collapse { padding-right: 0; flex-grow: 0; diff --git a/app/assets/stylesheets/pages/issuable.scss b/app/assets/stylesheets/pages/issuable.scss index b4fa98f6ccc..896ca5134ea 100644 --- a/app/assets/stylesheets/pages/issuable.scss +++ b/app/assets/stylesheets/pages/issuable.scss @@ -210,16 +210,6 @@ } } - .cross-project-reference { - span { - width: 85%; - } - - button { - padding: 1px 5px; - } - } - .selectbox { display: none; diff --git a/app/assets/stylesheets/startup/startup-dark.scss b/app/assets/stylesheets/startup/startup-dark.scss index d8d0eda9478..0683123c778 100644 --- a/app/assets/stylesheets/startup/startup-dark.scss +++ b/app/assets/stylesheets/startup/startup-dark.scss @@ -771,15 +771,6 @@ input { right: 0; border-radius: 0; } -.navbar-gitlab .logo-text { - line-height: initial; -} -.navbar-gitlab .logo-text svg { - width: 55px; - height: 14px; - margin: 0; - fill: #333; -} .navbar-gitlab .close-icon { display: none; } @@ -818,7 +809,7 @@ input { display: flex; align-items: center; padding: 2px 8px; - margin: 5px 2px 5px -12px; + margin: 4px 2px 4px -12px; border-radius: 4px; } .navbar-gitlab .header-content .navbar-collapse > ul.nav > li:not(.d-none) { @@ -998,6 +989,16 @@ input { .top-nav-toggle .dropdown-icon { margin-right: 0.5rem; } +.tanuki-logo .tanuki { + fill: #e24329; +} +.tanuki-logo .left-cheek, +.tanuki-logo .right-cheek { + fill: #fc6d26; +} +.tanuki-logo .chin { + fill: #fca326; +} .context-header { position: relative; margin-right: 2px; @@ -1902,9 +1903,6 @@ body.gl-dark .nav-sidebar .fly-out-top-item .fly-out-top-item-container { background-color: var(--gray-100, #303030); color: var(--gray-900, #fafafa); } -body.gl-dark .logo-text svg { - fill: var(--gl-text-color); -} body.gl-dark .navbar-gitlab { background-color: var(--gray-50); box-shadow: 0 1px 0 0 var(--gray-100); @@ -2048,6 +2046,19 @@ body.gl-dark { .gl-display-none { display: none; } +@media (min-width: 992px) { + .gl-lg-display-none\! { + display: none !important; + } +} +.gl-display-flex { + display: flex; +} +@media (min-width: 992px) { + .gl-lg-display-flex { + display: flex; + } +} @media (min-width: 576px) { .gl-sm-display-block { display: block; diff --git a/app/assets/stylesheets/startup/startup-general.scss b/app/assets/stylesheets/startup/startup-general.scss index 61d1b055d02..18d788a141d 100644 --- a/app/assets/stylesheets/startup/startup-general.scss +++ b/app/assets/stylesheets/startup/startup-general.scss @@ -756,15 +756,6 @@ input { right: 0; border-radius: 0; } -.navbar-gitlab .logo-text { - line-height: initial; -} -.navbar-gitlab .logo-text svg { - width: 55px; - height: 14px; - margin: 0; - fill: #fff; -} .navbar-gitlab .close-icon { display: none; } @@ -803,7 +794,7 @@ input { display: flex; align-items: center; padding: 2px 8px; - margin: 5px 2px 5px -12px; + margin: 4px 2px 4px -12px; border-radius: 4px; } .navbar-gitlab .header-content .navbar-collapse > ul.nav > li:not(.d-none) { @@ -983,6 +974,16 @@ input { .top-nav-toggle .dropdown-icon { margin-right: 0.5rem; } +.tanuki-logo .tanuki { + fill: #e24329; +} +.tanuki-logo .left-cheek, +.tanuki-logo .right-cheek { + fill: #fc6d26; +} +.tanuki-logo .chin { + fill: #fca326; +} .context-header { position: relative; margin-right: 2px; @@ -1706,6 +1707,19 @@ svg.s16 { .gl-display-none { display: none; } +@media (min-width: 992px) { + .gl-lg-display-none\! { + display: none !important; + } +} +.gl-display-flex { + display: flex; +} +@media (min-width: 992px) { + .gl-lg-display-flex { + display: flex; + } +} @media (min-width: 576px) { .gl-sm-display-block { display: block; diff --git a/app/assets/stylesheets/startup/startup-signin.scss b/app/assets/stylesheets/startup/startup-signin.scss index 751ad26ca21..de6b8e6e672 100644 --- a/app/assets/stylesheets/startup/startup-signin.scss +++ b/app/assets/stylesheets/startup/startup-signin.scss @@ -519,6 +519,16 @@ label.label-bold { .navbar-empty .brand-header-logo { max-height: 100%; } +.tanuki-logo .tanuki { + fill: #e24329; +} +.tanuki-logo .left-cheek, +.tanuki-logo .right-cheek { + fill: #fc6d26; +} +.tanuki-logo .chin { + fill: #fca326; +} input::-moz-placeholder { color: #868686; opacity: 1; diff --git a/app/assets/stylesheets/themes/dark_mode_overrides.scss b/app/assets/stylesheets/themes/dark_mode_overrides.scss index 83254fe1a52..dbb961fe71f 100644 --- a/app/assets/stylesheets/themes/dark_mode_overrides.scss +++ b/app/assets/stylesheets/themes/dark_mode_overrides.scss @@ -71,10 +71,13 @@ body.gl-dark { @include gitlab-theme($gray-900, $gray-400, $gray-500, $gray-900, $gray-900, $white); - .logo-text svg { - fill: var(--gl-text-color); + .terms { + .logo-text { + fill: var(--black); + } } + .navbar-gitlab { background-color: var(--gray-50); box-shadow: 0 1px 0 0 var(--gray-100); diff --git a/app/assets/stylesheets/themes/theme_light.scss b/app/assets/stylesheets/themes/theme_light.scss index f2fdd499781..10e03fb885c 100644 --- a/app/assets/stylesheets/themes/theme_light.scss +++ b/app/assets/stylesheets/themes/theme_light.scss @@ -15,8 +15,8 @@ body { background-color: $gray-50; box-shadow: 0 1px 0 0 $border-color; - .logo-text svg { - fill: $gray-900; + .logo-text { + fill: #171321; } .navbar-sub-nav, diff --git a/app/controllers/admin/application_settings_controller.rb b/app/controllers/admin/application_settings_controller.rb index 75d1e4bf6a0..dff6a44f9a3 100644 --- a/app/controllers/admin/application_settings_controller.rb +++ b/app/controllers/admin/application_settings_controller.rb @@ -27,6 +27,7 @@ class Admin::ApplicationSettingsController < Admin::ApplicationController feature_category :source_code_management, [:repository, :clear_repository_check_states] feature_category :continuous_integration, [:ci_cd, :reset_registration_token] + urgency :low, [:ci_cd, :reset_registration_token] feature_category :service_ping, [:usage_data, :service_usage_data] feature_category :integrations, [:integrations] feature_category :pages, [:lets_encrypt_terms_of_service] diff --git a/app/controllers/admin/jobs_controller.rb b/app/controllers/admin/jobs_controller.rb index b800ca79d6b..ef9264d1615 100644 --- a/app/controllers/admin/jobs_controller.rb +++ b/app/controllers/admin/jobs_controller.rb @@ -4,6 +4,7 @@ class Admin::JobsController < Admin::ApplicationController BUILDS_PER_PAGE = 30 feature_category :continuous_integration + urgency :low def index # We need all builds for tabs counters diff --git a/app/controllers/groups/settings/ci_cd_controller.rb b/app/controllers/groups/settings/ci_cd_controller.rb index a5a624145fd..4b75cec19f7 100644 --- a/app/controllers/groups/settings/ci_cd_controller.rb +++ b/app/controllers/groups/settings/ci_cd_controller.rb @@ -11,6 +11,7 @@ module Groups before_action :push_licensed_features, only: [:show] feature_category :continuous_integration + urgency :low def show end diff --git a/app/controllers/projects/graphs_controller.rb b/app/controllers/projects/graphs_controller.rb index 606f6ac7941..63309cce1e5 100644 --- a/app/controllers/projects/graphs_controller.rb +++ b/app/controllers/projects/graphs_controller.rb @@ -15,6 +15,7 @@ class Projects::GraphsController < Projects::ApplicationController urgency :low, [:show] feature_category :continuous_integration, [:ci] + urgency :low, [:ci] def show respond_to do |format| diff --git a/app/controllers/projects/jobs_controller.rb b/app/controllers/projects/jobs_controller.rb index 4189419c3ba..b8e4e80d3c1 100644 --- a/app/controllers/projects/jobs_controller.rb +++ b/app/controllers/projects/jobs_controller.rb @@ -28,6 +28,7 @@ class Projects::JobsController < Projects::ApplicationController layout 'project' feature_category :continuous_integration + urgency :low def index # We need all builds for tabs counters diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb index ba325950aab..eb6a341ead0 100644 --- a/app/controllers/projects/merge_requests_controller.rb +++ b/app/controllers/projects/merge_requests_controller.rb @@ -88,6 +88,7 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo :codequality_mr_diff_reports, :codequality_reports ] + urgency :low, [:pipeline_status, :pipelines, :exposed_artifacts] def index @merge_requests = @issuables diff --git a/app/controllers/projects/pipeline_schedules_controller.rb b/app/controllers/projects/pipeline_schedules_controller.rb index ac94cc001dd..e82bddc3a61 100644 --- a/app/controllers/projects/pipeline_schedules_controller.rb +++ b/app/controllers/projects/pipeline_schedules_controller.rb @@ -11,6 +11,7 @@ class Projects::PipelineSchedulesController < Projects::ApplicationController before_action :authorize_admin_pipeline_schedule!, only: [:destroy] feature_category :continuous_integration + urgency :low # rubocop: disable CodeReuse/ActiveRecord def index diff --git a/app/controllers/projects/pipelines/application_controller.rb b/app/controllers/projects/pipelines/application_controller.rb index c147d697888..e9dc71a0f4a 100644 --- a/app/controllers/projects/pipelines/application_controller.rb +++ b/app/controllers/projects/pipelines/application_controller.rb @@ -11,6 +11,7 @@ module Projects before_action :authorize_read_pipeline! feature_category :continuous_integration + urgency :low private diff --git a/app/controllers/projects/pipelines_controller.rb b/app/controllers/projects/pipelines_controller.rb index fe65d1f9572..ffe617f0204 100644 --- a/app/controllers/projects/pipelines_controller.rb +++ b/app/controllers/projects/pipelines_controller.rb @@ -5,7 +5,11 @@ class Projects::PipelinesController < Projects::ApplicationController include RedisTracking urgency :default, [:status] - urgency :low, [:index, :new, :builds, :show, :failures, :create, :stage, :retry, :dag, :cancel, :test_report] + urgency :low, [ + :index, :new, :builds, :show, :failures, :create, + :stage, :retry, :dag, :cancel, :test_report, + :charts, :config_variables, :destroy + ] before_action :disable_query_limiting, only: [:create, :retry] before_action :pipeline, except: [:index, :new, :create, :charts, :config_variables] diff --git a/app/controllers/projects/pipelines_settings_controller.rb b/app/controllers/projects/pipelines_settings_controller.rb index 6e08a889520..9adec4dcf00 100644 --- a/app/controllers/projects/pipelines_settings_controller.rb +++ b/app/controllers/projects/pipelines_settings_controller.rb @@ -4,6 +4,7 @@ class Projects::PipelinesSettingsController < Projects::ApplicationController before_action :authorize_admin_pipeline! feature_category :continuous_integration + urgency :low def show redirect_to project_settings_ci_cd_path(@project, params: params.to_unsafe_h) diff --git a/app/controllers/projects/settings/ci_cd_controller.rb b/app/controllers/projects/settings/ci_cd_controller.rb index 8a6202990d4..a56b07c8577 100644 --- a/app/controllers/projects/settings/ci_cd_controller.rb +++ b/app/controllers/projects/settings/ci_cd_controller.rb @@ -18,6 +18,7 @@ module Projects helper_method :highlight_badge feature_category :continuous_integration + urgency :low def show if Feature.enabled?(:ci_pipeline_triggers_settings_vue_ui, @project) diff --git a/app/controllers/projects/triggers_controller.rb b/app/controllers/projects/triggers_controller.rb index eec35fcec8d..f43c7e75fee 100644 --- a/app/controllers/projects/triggers_controller.rb +++ b/app/controllers/projects/triggers_controller.rb @@ -9,6 +9,7 @@ class Projects::TriggersController < Projects::ApplicationController layout 'project_settings' feature_category :continuous_integration + urgency :low def index redirect_to project_settings_ci_cd_path(@project, anchor: 'js-pipeline-triggers') diff --git a/app/helpers/appearances_helper.rb b/app/helpers/appearances_helper.rb index cb43d911a2f..6dbd0f7bd7b 100644 --- a/app/helpers/appearances_helper.rb +++ b/app/helpers/appearances_helper.rb @@ -35,23 +35,21 @@ module AppearancesHelper end end - def brand_header_logo + def brand_header_logo(options = {}) + add_gitlab_white_text = options[:add_gitlab_white_text] || false + add_gitlab_black_text = options[:add_gitlab_black_text] || false + if current_appearance&.header_logo? image_tag current_appearance.header_logo_path, class: 'brand-header-logo' - elsif Feature.enabled?(:ukraine_support_tanuki) - render partial: 'shared/logo_ukraine', formats: :svg + elsif add_gitlab_white_text + render partial: 'shared/logo_with_white_text', formats: :svg + elsif add_gitlab_black_text + render partial: 'shared/logo_with_black_text', formats: :svg else render partial: 'shared/logo', formats: :svg end end - # Skip the 'GitLab' type logo when custom brand logo is set - def brand_header_logo_type - unless current_appearance&.header_logo? - render partial: 'shared/logo_type', formats: :svg - end - end - def header_message return unless current_appearance&.show_header? diff --git a/app/helpers/emails_helper.rb b/app/helpers/emails_helper.rb index 79b04ae0e2b..59731dc2f6f 100644 --- a/app/helpers/emails_helper.rb +++ b/app/helpers/emails_helper.rb @@ -69,8 +69,8 @@ module EmailsHelper ) else image_tag( - image_url('mailers/gitlab_header_logo.gif'), - size: '55x50', + image_url('mailers/gitlab_logo.png'), + size: '55x55', alt: 'GitLab' ) end diff --git a/app/helpers/page_layout_helper.rb b/app/helpers/page_layout_helper.rb index fb74a52fcda..0c057a29bec 100644 --- a/app/helpers/page_layout_helper.rb +++ b/app/helpers/page_layout_helper.rb @@ -55,7 +55,7 @@ module PageLayoutHelper end def page_image - default = image_url('gitlab_logo.png') + default = image_url('twitter_card.jpg') subject = @project || @user || @group diff --git a/app/helpers/storage_helper.rb b/app/helpers/storage_helper.rb index a075ccc38f5..cb1a5f5ce0c 100644 --- a/app/helpers/storage_helper.rb +++ b/app/helpers/storage_helper.rb @@ -32,8 +32,9 @@ module StorageHelper { text: html_escape_once(s_("UsageQuota|From %{storage_enforcement_date} storage limits will apply to this namespace. " \ - "View and manage your usage in %{strong_start}%{namespace_type} settings > Usage quotas%{strong_end}.")).html_safe % - { storage_enforcement_date: namespace.storage_enforcement_date, strong_start: "<strong>".html_safe, strong_end: "</strong>".html_safe, namespace_type: namespace.type }, + "You are currently using %{used_storage} of namespace storage. " \ + "View and manage your usage from %{strong_start}%{namespace_type} settings > Usage quotas%{strong_end}.")).html_safe % + { storage_enforcement_date: namespace.storage_enforcement_date, used_storage: storage_counter(namespace.root_storage_statistics&.storage_size || 0), strong_start: "<strong>".html_safe, strong_end: "</strong>".html_safe, namespace_type: namespace.type }, variant: 'warning', callouts_path: namespace.user_namespace? ? callouts_path : group_callouts_path, callouts_feature_name: storage_enforcement_banner_user_callouts_feature_name(namespace), diff --git a/app/views/ci/runner/_how_to_setup_runner.html.haml b/app/views/ci/runner/_how_to_setup_runner.html.haml index f0a9936112b..8f4cc41822b 100644 --- a/app/views/ci/runner/_how_to_setup_runner.html.haml +++ b/app/views/ci/runner/_how_to_setup_runner.html.haml @@ -8,13 +8,13 @@ = _("Register the runner with this URL:") %br %code#coordinator_address= root_url(only_path: false) - = clipboard_button(target: '#coordinator_address', title: _("Copy URL"), class: "btn-transparent btn-clipboard") + = clipboard_button(target: '#coordinator_address', title: _("Copy URL")) %br %br = _("And this registration token:") %br %code#registration_token{ data: {testid: 'registration_token' } }= registration_token - = clipboard_button(target: '#registration_token', title: _("Copy token"), class: "btn-transparent btn-clipboard") + = clipboard_button(target: '#registration_token', title: _("Copy token")) .gl-mt-3.gl-mb-3 = button_to _("Reset registration token"), reset_token_url, diff --git a/app/views/ci/runner/_setup_runner_in_aws.html.haml b/app/views/ci/runner/_setup_runner_in_aws.html.haml index b0a5b40f2ad..09fa0176da6 100644 --- a/app/views/ci/runner/_setup_runner_in_aws.html.haml +++ b/app/views/ci/runner/_setup_runner_in_aws.html.haml @@ -8,7 +8,7 @@ = _('Copy this registration token.') %br %code#registration_token{ data: { testid: 'registration_token' } }= registration_token - = clipboard_button(target: '#registration_token', title: _('Copy token'), class: 'btn-transparent btn-clipboard') + = clipboard_button(target: '#registration_token', title: _('Copy token')) %li = _('Choose the preferred Runner and populate the AWS CFT.') = link_to _('Learn more.'), 'https://gitlab.com/guided-explorations/aws/gitlab-runner-autoscaling-aws-asg', target: '_blank', rel: 'noopener noreferrer' diff --git a/app/views/groups/_home_panel.html.haml b/app/views/groups/_home_panel.html.haml index 9b3a8c31d54..bd893ca3162 100644 --- a/app/views/groups/_home_panel.html.haml +++ b/app/views/groups/_home_panel.html.haml @@ -17,8 +17,7 @@ - if can?(current_user, :read_group, @group) %span.gl-display-inline-block.gl-vertical-align-middle = s_("GroupPage|Group ID: %{group_id}") % { group_id: @group.id } - - button_class = "btn gl-button btn-sm btn-tertiary btn-default-tertiary home-panel-metadata" - = clipboard_button(title: s_('GroupPage|Copy group ID'), text: @group.id, class: button_class) + = clipboard_button(title: s_('GroupPage|Copy group ID'), text: @group.id) - if current_user %span.gl-ml-3.gl-mb-3 = render 'shared/members/access_request_links', source: @group diff --git a/app/views/layouts/_head.html.haml b/app/views/layouts/_head.html.haml index 48b9015ccc0..55c66454d0b 100644 --- a/app/views/layouts/_head.html.haml +++ b/app/views/layouts/_head.html.haml @@ -76,19 +76,11 @@ = action_cable_meta_tag -# Apple Safari/iOS home screen icons - = favicon_link_tag 'touch-icon-iphone.png', rel: 'apple-touch-icon' - = favicon_link_tag 'touch-icon-ipad.png', rel: 'apple-touch-icon', sizes: '76x76' - = favicon_link_tag 'touch-icon-iphone-retina.png', rel: 'apple-touch-icon', sizes: '120x120' - = favicon_link_tag 'touch-icon-ipad-retina.png', rel: 'apple-touch-icon', sizes: '152x152' - %link{ rel: 'mask-icon', href: image_path('logo.svg'), color: 'rgb(226, 67, 41)' } + = favicon_link_tag 'apple-touch-icon.png', rel: 'apple-touch-icon' -# OpenSearch %link{ href: search_opensearch_path(format: :xml), rel: 'search', title: 'Search GitLab', type: 'application/opensearchdescription+xml' } - -# Windows 8 pinned site tile - %meta{ name: 'msapplication-TileImage', content: image_path('msapplication-tile.png') } - %meta{ name: 'msapplication-TileColor', content: '#30353E' } - = yield :meta_tags = render 'layouts/google_analytics' if extra_config.has_key?('google_analytics_id') diff --git a/app/views/layouts/header/_default.html.haml b/app/views/layouts/header/_default.html.haml index c15a5e54a42..ddd7dc721cd 100644 --- a/app/views/layouts/header/_default.html.haml +++ b/app/views/layouts/header/_default.html.haml @@ -9,11 +9,10 @@ %h1.title %span.gl-sr-only GitLab = link_to root_path, title: _('Dashboard'), id: 'logo', **tracking_attrs('main_navigation', 'click_gitlab_logo_link', 'navigation') do - = brand_header_logo - - logo_text = brand_header_logo_type - - if logo_text.present? - %span.logo-text.d-none.d-lg-block.gl-ml-3 - = logo_text + %span{ :class => "gl-display-none gl-lg-display-flex" } + = brand_header_logo({add_gitlab_white_text: true}) + %span{ :class => "gl-lg-display-none! gl-display-flex" } + = brand_header_logo - if Gitlab.com_and_canary? = link_to Gitlab::Saas.canary_toggle_com_url, class: 'canary-badge bg-transparent', data: { qa_selector: 'canary_badge_link' }, target: :_blank, rel: 'noopener noreferrer' do = gl_badge_tag({ variant: :success, size: :sm }) do diff --git a/app/views/layouts/header/_logo_with_title.html.haml b/app/views/layouts/header/_logo_with_title.html.haml index 0b9d4e2eea4..66614bdb21e 100644 --- a/app/views/layouts/header/_logo_with_title.html.haml +++ b/app/views/layouts/header/_logo_with_title.html.haml @@ -1,4 +1,5 @@ %header.navbar.fixed-top.navbar-gitlab.justify-content-center - = render partial: 'shared/logo', formats: :svg - %span.logo-text.d-none.d-lg-block.gl-ml-3.pt-1 - = render partial: 'shared/logo_type', formats: :svg + .gl-display-none.gl-lg-display-block + = render partial: 'shared/logo_with_white_text', formats: :svg + .gl-lg-display-none + = render partial: 'shared/logo', formats: :svg diff --git a/app/views/layouts/in_product_marketing_mailer.html.haml b/app/views/layouts/in_product_marketing_mailer.html.haml index 679a2d4b8b3..65c68c95d9a 100644 --- a/app/views/layouts/in_product_marketing_mailer.html.haml +++ b/app/views/layouts/in_product_marketing_mailer.html.haml @@ -170,7 +170,7 @@ %table{ border: "0", cellpadding: "0", cellspacing: "0", role: "presentation", width: "100%" } %tr %td{ align: "left", style: "padding: 0 20px;" } - = about_link('mailers/in_product_marketing/gitlab-logo-gray-rgb.png', 200) + = about_link('mailers/gitlab_logo_black_text.png', 200) %tr %td{ "aria-hidden" => "true", height: "30", style: "font-size: 0; line-height: 0;" } diff --git a/app/views/layouts/mailer.html.haml b/app/views/layouts/mailer.html.haml index c2eb6b68024..580b8e67a3c 100644 --- a/app/views/layouts/mailer.html.haml +++ b/app/views/layouts/mailer.html.haml @@ -1,7 +1,7 @@ = content_for :footer do %tr.footer %td - %img.footer-logo{ alt: "GitLab", src: image_url('mailers/gitlab_footer_logo.gif') } + %img.footer-logo{ alt: "GitLab", src: image_url('mailers/gitlab_logo_black_text.png') } %div - manage_notifications_link = link_to(_("Manage all notifications"), profile_notifications_url, class: 'mng-notif-link') - help_link = link_to(_("Help"), help_url, class: 'help-link') diff --git a/app/views/layouts/terms.html.haml b/app/views/layouts/terms.html.haml index caa46b7bc56..91301e1e226 100644 --- a/app/views/layouts/terms.html.haml +++ b/app/views/layouts/terms.html.haml @@ -1,10 +1,11 @@ !!! 5 - add_page_specific_style 'page_bundles/terms' - @hide_breadcrumbs = true +- body_classes = [user_application_theme] %html{ lang: I18n.locale, class: page_class } = render "layouts/head" - %body{ data: { page: body_data_page } } + %body{ class: body_classes, data: { page: body_data_page } } .layout-page.terms{ class: page_class } .content-wrapper.gl-pb-5 .mobile-overlay @@ -17,11 +18,7 @@ .content{ id: "content-body" } .gl-card .gl-card-header - = brand_header_logo - - logo_text = brand_header_logo_type - - if logo_text.present? - %span.logo-text.gl-ml-3 - = logo_text + = brand_header_logo({add_gitlab_black_text: true}) - if header_link?(:user_dropdown) .navbar-collapse %ul.nav.navbar-nav diff --git a/app/views/layouts/unknown_user_mailer.html.haml b/app/views/layouts/unknown_user_mailer.html.haml index 2eb7b400604..7f0d1dc01dd 100644 --- a/app/views/layouts/unknown_user_mailer.html.haml +++ b/app/views/layouts/unknown_user_mailer.html.haml @@ -1,7 +1,7 @@ = content_for :footer do %tr.footer %td.gitlab-info - %img.footer-logo{ alt: "GitLab", src: image_url('mailers/gitlab_footer_logo.gif') } + %img.footer-logo{ alt: "GitLab", src: image_url('mailers/gitlab_logo_black_text.png') } %p.gitlab-info-text = html_escape(_("GitLab is a complete DevOps platform, delivered as a single application, fundamentally changing the way%{br_tag}Development, Security, and Ops teams collaborate")) % { br_tag: '<br/>'.html_safe } diff --git a/app/views/notify/merge_when_pipeline_succeeds_email.html.haml b/app/views/notify/merge_when_pipeline_succeeds_email.html.haml index e7c51c8fb13..e4d138cce96 100644 --- a/app/views/notify/merge_when_pipeline_succeeds_email.html.haml +++ b/app/views/notify/merge_when_pipeline_succeeds_email.html.haml @@ -61,7 +61,7 @@ %td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;background-color:#6b4fbb;height:4px;font-size:4px;line-height:4px;" } %tr.header %td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;padding:25px 0;font-size:13px;line-height:1.6;color:#5c5c5c;" } - %img{ alt: "GitLab", height: "50", src: image_url('mailers/ci_pipeline_notif_v1/gitlab-logo.gif'), width: "55" } + %img{ alt: "GitLab", height: "55", src: image_url('mailers/gitlab_logo.png'), width: "55" } %tr %td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;" } %table.wrapper{ border: "0", cellpadding: "0", cellspacing: "0", style: "width:640px;margin:0 auto;border-collapse:separate;border-spacing:0;" } @@ -146,7 +146,7 @@ %tr.footer %td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;padding:25px 0;font-size:13px;line-height:1.6;color:#5c5c5c;" } - %img{ alt: "GitLab", height: "33", src: image_url('mailers/ci_pipeline_notif_v1/gitlab-logo-full-horizontal.gif'), style: "display:block;margin:0 auto 1em;", width: "90" } + %img{ alt: "GitLab", src: image_url('mailers/gitlab_logo_black_text.png'), style: "display:block;margin:0 auto 1em;", width: "90" } %div - manage_notifications_link = link_to(_("Manage all notifications"), profile_notifications_url, style: "color:#3777b0;text-decoration:none;") - help_link = link_to(_("Help"), help_url, style: "color:#3777b0;text-decoration:none;") diff --git a/app/views/projects/_home_panel.html.haml b/app/views/projects/_home_panel.html.haml index 8e6cc6da65d..e896ad38780 100644 --- a/app/views/projects/_home_panel.html.haml +++ b/app/views/projects/_home_panel.html.haml @@ -19,8 +19,7 @@ - if can?(current_user, :read_project, @project) %span.gl-display-inline-block.gl-vertical-align-middle = s_('ProjectPage|Project ID: %{project_id}') % { project_id: @project.id } - - button_class = "btn gl-button btn-sm btn-tertiary btn-default-tertiary home-panel-metadata" - = clipboard_button(title: s_('ProjectPage|Copy project ID'), text: @project.id, class: button_class) + = clipboard_button(title: s_('ProjectPage|Copy project ID'), text: @project.id) - if current_user %span.gl-ml-3.gl-mb-3 = render 'shared/members/access_request_links', source: @project diff --git a/app/views/shared/_logo.svg b/app/views/shared/_logo.svg index 0ef9de5fed6..83f6fe5c16c 100644 --- a/app/views/shared/_logo.svg +++ b/app/views/shared/_logo.svg @@ -1,9 +1,10 @@ -<svg width="24" height="24" class="tanuki-logo" viewBox="0 0 36 36"> - <path class="tanuki-shape tanuki-left-ear" fill="#e24329" d="M2 14l9.38 9v-9l-4-12.28c-.205-.632-1.176-.632-1.38 0z"/> - <path class="tanuki-shape tanuki-right-ear" fill="#e24329" d="M34 14l-9.38 9v-9l4-12.28c.205-.632 1.176-.632 1.38 0z"/> - <path class="tanuki-shape tanuki-nose" fill="#e24329" d="M18,34.38 3,14 33,14 Z"/> - <path class="tanuki-shape tanuki-left-eye" fill="#fc6d26" d="M18,34.38 11.38,14 2,14 6,25Z"/> - <path class="tanuki-shape tanuki-right-eye" fill="#fc6d26" d="M18,34.38 24.62,14 34,14 30,25Z"/> - <path class="tanuki-shape tanuki-left-cheek" fill="#fca326" d="M2 14L.1 20.16c-.18.565 0 1.2.5 1.56l17.42 12.66z"/> - <path class="tanuki-shape tanuki-right-cheek" fill="#fca326" d="M34 14l1.9 6.16c.18.565 0 1.2-.5 1.56L18 34.38z"/> +<svg class="tanuki-logo" width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg"> + <path class="tanuki-shape tanuki" d="m24.507 9.5-.034-.09L21.082.562a.896.896 0 0 0-1.694.091l-2.29 7.01H7.825L5.535.653a.898.898 0 0 0-1.694-.09L.451 9.411.416 9.5a6.297 6.297 0 0 0 2.09 7.278l.012.01.03.022 5.16 3.867 2.56 1.935 1.554 1.176a1.051 1.051 0 0 0 1.268 0l1.555-1.176 2.56-1.935 5.197-3.89.014-.01A6.297 6.297 0 0 0 24.507 9.5Z" + fill="#E24329"/> + <path class="tanuki-shape right-cheek" d="m24.507 9.5-.034-.09a11.44 11.44 0 0 0-4.56 2.051l-7.447 5.632 4.742 3.584 5.197-3.89.014-.01A6.297 6.297 0 0 0 24.507 9.5Z" + fill="#FC6D26"/> + <path class="tanuki-shape chin" d="m7.707 20.677 2.56 1.935 1.555 1.176a1.051 1.051 0 0 0 1.268 0l1.555-1.176 2.56-1.935-4.743-3.584-4.755 3.584Z" + fill="#FCA326"/> + <path class="tanuki-shape left-cheek" d="M5.01 11.461a11.43 11.43 0 0 0-4.56-2.05L.416 9.5a6.297 6.297 0 0 0 2.09 7.278l.012.01.03.022 5.16 3.867 4.745-3.584-7.444-5.632Z" + fill="#FC6D26"/> </svg> diff --git a/app/views/shared/_logo_type.svg b/app/views/shared/_logo_type.svg deleted file mode 100644 index cb07e2634a9..00000000000 --- a/app/views/shared/_logo_type.svg +++ /dev/null @@ -1 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 617 169"><path d="M315.26 2.97h-21.8l.1 162.5h88.3v-20.1h-66.5l-.1-142.4M465.89 136.95c-5.5 5.7-14.6 11.4-27 11.4-16.6 0-23.3-8.2-23.3-18.9 0-16.1 11.2-23.8 35-23.8 4.5 0 11.7.5 15.4 1.2v30.1h-.1m-22.6-98.5c-17.6 0-33.8 6.2-46.4 16.7l7.7 13.4c8.9-5.2 19.8-10.4 35.5-10.4 17.9 0 25.8 9.2 25.8 24.6v7.9c-3.5-.7-10.7-1.2-15.1-1.2-38.2 0-57.6 13.4-57.6 41.4 0 25.1 15.4 37.7 38.7 37.7 15.7 0 30.8-7.2 36-18.9l4 15.9h15.4v-83.2c-.1-26.3-11.5-43.9-44-43.9M557.63 149.1c-8.2 0-15.4-1-20.8-3.5V70.5c7.4-6.2 16.6-10.7 28.3-10.7 21.1 0 29.2 14.9 29.2 39 0 34.2-13.1 50.3-36.7 50.3m9.2-110.6c-19.5 0-30 13.3-30 13.3v-21l-.1-27.8h-21.3l.1 158.5c10.7 4.5 25.3 6.9 41.2 6.9 40.7 0 60.3-26 60.3-70.9-.1-35.5-18.2-59-50.2-59M77.9 20.6c19.3 0 31.8 6.4 39.9 12.9l9.4-16.3C114.5 6 97.3 0 78.9 0 32.5 0 0 28.3 0 85.4c0 59.8 35.1 83.1 75.2 83.1 20.1 0 37.2-4.7 48.4-9.4l-.5-63.9V75.1H63.6v20.1h38l.5 48.5c-5 2.5-13.6 4.5-25.3 4.5-32.2 0-53.8-20.3-53.8-63-.1-43.5 22.2-64.6 54.9-64.6M231.43 2.95h-21.3l.1 27.3v94.3c0 26.3 11.4 43.9 43.9 43.9 4.5 0 8.9-.4 13.1-1.2v-19.1c-3.1.5-6.4.7-9.9.7-17.9 0-25.8-9.2-25.8-24.6v-65h35.7v-17.8h-35.7l-.1-38.5M155.96 165.47h21.3v-124h-21.3v124M155.96 24.37h21.3V3.07h-21.3v21.3"/></svg> diff --git a/app/views/shared/_logo_ukraine.svg b/app/views/shared/_logo_ukraine.svg deleted file mode 100644 index e2c2bb3855d..00000000000 --- a/app/views/shared/_logo_ukraine.svg +++ /dev/null @@ -1,5 +0,0 @@ -<svg width="24" height="24" class="tanuki-logo" viewBox="0 0 24 24"> - <path d="M4.89929534,0.3165 L7.56629534,8.5025 L16.3922953,8.5025 L19.0592953,0.3165 C19.1962953,-0.1055 19.8432953,-0.1055 19.9792953,0.3165 L23.9122953,12.6095 C23.9722953,12.7935 23.9722953,12.9895 23.9192953,13.1695 L0.0392953418,13.1695 C-0.0143874393,12.9863283 -0.0119492421,12.7912726 0.0462953418,12.6095 L3.97929534,0.3165 C4.11529534,-0.1055 4.76229534,-0.1055 4.89929534,0.3165 Z" id="Path" fill="#005BBB"></path> - <path d="M7.20329534,9.0025 L16.7552953,9.0025 L16.8682953,8.6575 L19.5182953,0.5185 L23.4362953,12.7615 C23.4961172,12.9376949 23.435535,13.1323657 23.2862953,13.2435 L23.2852953,13.2455 L11.9852953,21.4655 L11.9792953,21.4715 L0.673295342,13.2455 C0.522422013,13.1321007 0.462258936,12.9374792 0.522295342,12.7615 L4.43929534,0.5185 L7.09029534,8.6585 L7.20329534,9.0025 Z" id="Shape" stroke="#FFFFFF" opacity="0.32" stroke-linejoin="round"></path> - <path d="M0.0012953418,12.8575 C-0.0152229638,13.1685309 0.127095079,13.4667211 0.379295342,13.6495 L11.9792953,22.0895 L11.9862953,22.0845 L11.9922953,22.0895 L11.9872953,22.0835 L23.5792953,13.6495 C23.8319507,13.466647 23.9743476,13.1679148 23.9572953,12.8565 L0.0012953418,12.8565 L0.0012953418,12.8575 Z" id="Path" fill="#FFD500"></path> -</svg>
\ No newline at end of file diff --git a/app/views/shared/_logo_with_black_text.svg b/app/views/shared/_logo_with_black_text.svg new file mode 100644 index 00000000000..f5b0b70618b --- /dev/null +++ b/app/views/shared/_logo_with_black_text.svg @@ -0,0 +1,12 @@ +<svg class="tanuki-logo" width="111" height="24" viewBox="0 0 111 24" fill="none" xmlns="http://www.w3.org/2000/svg"> + <path class="logo-text" d="M44.814 9.042h3.645c-.608-3.875-3.963-6.574-8.33-6.574-5.166 0-9.043 3.798-9.043 10.16 0 6.248 3.703 10.123 9.15 10.123 4.887 0 8.386-3.144 8.386-8.234v-2.37h-8.01v2.794h4.55c-.058 2.816-1.938 4.599-4.908 4.599-3.305 0-5.57-2.477-5.57-6.95 0-4.445 2.303-6.913 5.494-6.913 2.38 0 4.01 1.272 4.636 3.365Zm6.218 13.438h3.49V7.68h-3.49v14.8Zm1.76-17.151c1.109 0 2.014-.85 2.014-1.89s-.905-1.9-2.014-1.9c-1.109 0-2.024.849-2.024 1.9s.9 1.89 2.017 1.89h.007ZM64.971 7.68H62.05V4.126h-3.49v3.556h-2.1v2.699h2.1v8.233c-.018 2.786 2.007 4.16 4.628 4.079a7.089 7.089 0 0 0 2.055-.348l-.59-2.73a4.247 4.247 0 0 1-1.02.137c-.878 0-1.582-.309-1.582-1.717v-7.662h2.921V7.68Zm2.701 14.8h12.272v-2.998H71.25V2.737h-3.578V22.48Zm18.957.3c2.323 0 3.71-1.09 4.347-2.333h.115v2.033h3.36v-9.91c0-3.913-3.19-5.09-6.016-5.09-3.113 0-5.504 1.388-6.275 4.087l3.26.464c.345-1.013 1.329-1.88 3.04-1.88 1.62 0 2.506.829 2.506 2.285v.057c0 1.002-1.05 1.051-3.664 1.33-2.872.309-5.619 1.166-5.619 4.502-.01 2.912 2.12 4.455 4.946 4.455Zm1.147-2.56c-1.456 0-2.498-.666-2.498-1.948 0-1.34 1.167-1.899 2.72-2.121.917-.125 2.75-.357 3.2-.722v1.744c.01 1.643-1.321 3.042-3.422 3.042v.005Zm9.244 2.26h3.433v-2.332h.201c.551 1.08 1.698 2.593 4.244 2.593 3.489 0 6.102-2.768 6.102-7.644 0-4.936-2.69-7.616-6.112-7.616-2.613 0-3.702 1.57-4.234 2.641h-.147V2.737h-3.486V22.48Zm3.423-7.403c0-2.88 1.234-4.734 3.48-4.734 2.323 0 3.52 1.976 3.52 4.734 0 2.759-1.214 4.8-3.52 4.8-2.227 0-3.48-1.928-3.48-4.8Z" + fill="#171321"/> + <path class="tanuki-shape tanuki" d="m24.507 9.5-.034-.09L21.082.562a.896.896 0 0 0-1.694.091l-2.29 7.01H7.825L5.535.653a.898.898 0 0 0-1.694-.09L.451 9.411.416 9.5a6.297 6.297 0 0 0 2.09 7.278l.012.01.03.022 5.16 3.867 2.56 1.935 1.554 1.176a1.051 1.051 0 0 0 1.268 0l1.555-1.176 2.56-1.935 5.197-3.89.014-.01A6.297 6.297 0 0 0 24.507 9.5Z" + fill="#E24329"/> + <path class="tanuki-shape right-cheek" d="m24.507 9.5-.034-.09a11.44 11.44 0 0 0-4.56 2.051l-7.447 5.632 4.742 3.584 5.197-3.89.014-.01A6.297 6.297 0 0 0 24.507 9.5Z" + fill="#FC6D26"/> + <path class="tanuki-shape chin" d="m7.707 20.677 2.56 1.935 1.555 1.176a1.051 1.051 0 0 0 1.268 0l1.555-1.176 2.56-1.935-4.743-3.584-4.755 3.584Z" + fill="#FCA326"/> + <path class="tanuki-shape left-cheek" d="M5.01 11.461a11.43 11.43 0 0 0-4.56-2.05L.416 9.5a6.297 6.297 0 0 0 2.09 7.278l.012.01.03.022 5.16 3.867 4.745-3.584-7.444-5.632Z" + fill="#FC6D26"/> +</svg> diff --git a/app/views/shared/_logo_with_white_text.svg b/app/views/shared/_logo_with_white_text.svg new file mode 100644 index 00000000000..d0067538058 --- /dev/null +++ b/app/views/shared/_logo_with_white_text.svg @@ -0,0 +1,12 @@ +<svg class="tanuki-logo" width="111" height="24" viewBox="0 0 111 24" fill="none" xmlns="http://www.w3.org/2000/svg"> + <path class="logo-text" d="M44.814 9.042h3.645c-.608-3.875-3.963-6.574-8.33-6.574-5.166 0-9.043 3.798-9.043 10.16 0 6.248 3.703 10.123 9.15 10.123 4.887 0 8.386-3.144 8.386-8.234v-2.37h-8.01v2.794h4.55c-.058 2.816-1.938 4.599-4.908 4.599-3.305 0-5.57-2.477-5.57-6.95 0-4.445 2.303-6.913 5.494-6.913 2.38 0 4.01 1.272 4.636 3.365Zm6.218 13.438h3.49V7.68h-3.49v14.8Zm1.76-17.151c1.109 0 2.014-.85 2.014-1.89s-.905-1.9-2.014-1.9c-1.109 0-2.024.849-2.024 1.9s.9 1.89 2.017 1.89h.007ZM64.971 7.68H62.05V4.126h-3.49v3.556h-2.1v2.699h2.1v8.233c-.018 2.786 2.007 4.16 4.628 4.079a7.089 7.089 0 0 0 2.055-.348l-.59-2.73a4.247 4.247 0 0 1-1.02.137c-.878 0-1.582-.309-1.582-1.717v-7.662h2.921V7.68Zm2.701 14.8h12.272v-2.998H71.25V2.737h-3.578V22.48Zm18.957.3c2.323 0 3.71-1.09 4.347-2.333h.115v2.033h3.36v-9.91c0-3.913-3.19-5.09-6.016-5.09-3.113 0-5.504 1.388-6.275 4.087l3.26.464c.345-1.013 1.329-1.88 3.04-1.88 1.62 0 2.506.829 2.506 2.285v.057c0 1.002-1.05 1.051-3.664 1.33-2.872.309-5.619 1.166-5.619 4.502-.01 2.912 2.12 4.455 4.946 4.455Zm1.147-2.56c-1.456 0-2.498-.666-2.498-1.948 0-1.34 1.167-1.899 2.72-2.121.917-.125 2.75-.357 3.2-.722v1.744c.01 1.643-1.321 3.042-3.422 3.042v.005Zm9.244 2.26h3.433v-2.332h.201c.551 1.08 1.698 2.593 4.244 2.593 3.489 0 6.102-2.768 6.102-7.644 0-4.936-2.69-7.616-6.112-7.616-2.613 0-3.702 1.57-4.234 2.641h-.147V2.737h-3.486V22.48Zm3.423-7.403c0-2.88 1.234-4.734 3.48-4.734 2.323 0 3.52 1.976 3.52 4.734 0 2.759-1.214 4.8-3.52 4.8-2.227 0-3.48-1.928-3.48-4.8Z" + fill="#fff"/> + <path class="tanuki-shape tanuki" d="m24.507 9.5-.034-.09L21.082.562a.896.896 0 0 0-1.694.091l-2.29 7.01H7.825L5.535.653a.898.898 0 0 0-1.694-.09L.451 9.411.416 9.5a6.297 6.297 0 0 0 2.09 7.278l.012.01.03.022 5.16 3.867 2.56 1.935 1.554 1.176a1.051 1.051 0 0 0 1.268 0l1.555-1.176 2.56-1.935 5.197-3.89.014-.01A6.297 6.297 0 0 0 24.507 9.5Z" + fill="#E24329"/> + <path class="tanuki-shape right-cheek" d="m24.507 9.5-.034-.09a11.44 11.44 0 0 0-4.56 2.051l-7.447 5.632 4.742 3.584 5.197-3.89.014-.01A6.297 6.297 0 0 0 24.507 9.5Z" + fill="#FC6D26"/> + <path class="tanuki-shape chin" d="m7.707 20.677 2.56 1.935 1.555 1.176a1.051 1.051 0 0 0 1.268 0l1.555-1.176 2.56-1.935-4.743-3.584-4.755 3.584Z" + fill="#FCA326"/> + <path class="tanuki-shape left-cheek" d="M5.01 11.461a11.43 11.43 0 0 0-4.56-2.05L.416 9.5a6.297 6.297 0 0 0 2.09 7.278l.012.01.03.022 5.16 3.867 4.745-3.584-7.444-5.632Z" + fill="#FC6D26"/> +</svg> diff --git a/app/views/shared/milestones/_sidebar.html.haml b/app/views/shared/milestones/_sidebar.html.haml index a1e94172ec3..12026b89429 100644 --- a/app/views/shared/milestones/_sidebar.html.haml +++ b/app/views/shared/milestones/_sidebar.html.haml @@ -163,9 +163,9 @@ .block.reference .sidebar-collapsed-icon.js-dont-change-state = clipboard_button(text: milestone_ref, title: s_('MilestoneSidebar|Copy reference'), placement: "left", boundary: 'viewport') - .cross-project-reference.hide-collapsed - %span.gl-display-inline-block.gl-text-truncate + .gl-display-flex.gl-align-items-center.gl-justify-content-space-between.gl-mb-2.hide-collapsed + %span.gl-overflow-hidden.gl-text-overflow-ellipsis.gl-white-space-nowrap = s_('MilestoneSidebar|Reference:') %span{ title: milestone_ref } = milestone_ref - = clipboard_button(text: milestone_ref, title: s_('MilestoneSidebar|Copy reference'), placement: "left", boundary: 'viewport', class: 'btn-clipboard btn-transparent gl-float-right gl-bg-gray-10') + = clipboard_button(text: milestone_ref, title: s_('MilestoneSidebar|Copy reference'), placement: "left", boundary: 'viewport') |