diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-10-04 12:11:20 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-10-04 12:11:20 +0300 |
commit | 266aad4e70f3c642583ab60894b27b2622095cd8 (patch) | |
tree | ca0959c1c5bf9a11d0ce2ae6f736504b4a48ebbb /app | |
parent | 87e82d6f2cc282a2c70535b4a7fb44b5a6dc8bf0 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app')
21 files changed, 177 insertions, 175 deletions
diff --git a/app/assets/javascripts/admin/users/components/actions/delete.vue b/app/assets/javascripts/admin/users/components/actions/delete.vue index a0f4a4bf382..e6dde5898e7 100644 --- a/app/assets/javascripts/admin/users/components/actions/delete.vue +++ b/app/assets/javascripts/admin/users/components/actions/delete.vue @@ -14,7 +14,7 @@ export default { type: Object, required: true, }, - oncallSchedules: { + userDeletionObstacles: { type: Array, required: false, default: () => [], @@ -29,7 +29,7 @@ export default { :username="username" :paths="paths" :delete-path="paths.delete" - :oncall-schedules="oncallSchedules" + :user-deletion-obstacles="userDeletionObstacles" > <slot></slot> </shared-delete-action> diff --git a/app/assets/javascripts/admin/users/components/actions/delete_with_contributions.vue b/app/assets/javascripts/admin/users/components/actions/delete_with_contributions.vue index 02fd3efafa1..bd920a91516 100644 --- a/app/assets/javascripts/admin/users/components/actions/delete_with_contributions.vue +++ b/app/assets/javascripts/admin/users/components/actions/delete_with_contributions.vue @@ -14,7 +14,7 @@ export default { type: Object, required: true, }, - oncallSchedules: { + userDeletionObstacles: { type: Array, required: false, default: () => [], @@ -29,7 +29,7 @@ export default { :username="username" :paths="paths" :delete-path="paths.deleteWithContributions" - :oncall-schedules="oncallSchedules" + :user-deletion-obstacles="userDeletionObstacles" > <slot></slot> </shared-delete-action> diff --git a/app/assets/javascripts/admin/users/components/actions/shared/shared_delete_action.vue b/app/assets/javascripts/admin/users/components/actions/shared/shared_delete_action.vue index a1589c9d46d..c9f29b55dbf 100644 --- a/app/assets/javascripts/admin/users/components/actions/shared/shared_delete_action.vue +++ b/app/assets/javascripts/admin/users/components/actions/shared/shared_delete_action.vue @@ -22,7 +22,7 @@ export default { type: String, required: true, }, - oncallSchedules: { + userDeletionObstacles: { type: Array, required: true, }, @@ -34,7 +34,7 @@ export default { 'data-delete-user-url': this.deletePath, 'data-gl-modal-action': this.modalType, 'data-username': this.username, - 'data-oncall-schedules': JSON.stringify(this.oncallSchedules), + 'data-user-deletion-obstacles': JSON.stringify(this.userDeletionObstacles), }; }, }, diff --git a/app/assets/javascripts/admin/users/components/modals/delete_user_modal.vue b/app/assets/javascripts/admin/users/components/modals/delete_user_modal.vue index aaf2ff313a0..ed90343777d 100644 --- a/app/assets/javascripts/admin/users/components/modals/delete_user_modal.vue +++ b/app/assets/javascripts/admin/users/components/modals/delete_user_modal.vue @@ -2,7 +2,7 @@ import { GlModal, GlButton, GlFormInput, GlSprintf } from '@gitlab/ui'; import * as Sentry from '@sentry/browser'; import { s__, sprintf } from '~/locale'; -import OncallSchedulesList from '~/vue_shared/components/oncall_schedules_list.vue'; +import UserDeletionObstaclesList from '~/vue_shared/components/user_deletion_obstacles/user_deletion_obstacles_list.vue'; export default { components: { @@ -10,7 +10,7 @@ export default { GlButton, GlFormInput, GlSprintf, - OncallSchedulesList, + UserDeletionObstaclesList, }, props: { title: { @@ -45,7 +45,7 @@ export default { type: String, required: true, }, - oncallSchedules: { + userDeletionObstacles: { type: String, required: false, default: '[]', @@ -66,9 +66,9 @@ export default { canSubmit() { return this.enteredUsername === this.username; }, - schedules() { + obstacles() { try { - return JSON.parse(this.oncallSchedules); + return JSON.parse(this.userDeletionObstacles); } catch (e) { Sentry.captureException(e); } @@ -112,7 +112,11 @@ export default { </gl-sprintf> </p> - <oncall-schedules-list v-if="schedules.length" :schedules="schedules" :user-name="username" /> + <user-deletion-obstacles-list + v-if="obstacles.length" + :obstacles="obstacles" + :user-name="username" + /> <p> <gl-sprintf :message="s__('AdminUsers|To confirm, type %{username}')"> diff --git a/app/assets/javascripts/admin/users/components/user_actions.vue b/app/assets/javascripts/admin/users/components/user_actions.vue index c076e0bedf0..4f4e2947341 100644 --- a/app/assets/javascripts/admin/users/components/user_actions.vue +++ b/app/assets/javascripts/admin/users/components/user_actions.vue @@ -9,6 +9,7 @@ import { } from '@gitlab/ui'; import { convertArrayToCamelCase } from '~/lib/utils/common_utils'; import { capitalizeFirstCharacter } from '~/lib/utils/text_utility'; +import { parseUserDeletionObstacles } from '~/vue_shared/components/user_deletion_obstacles/utils'; import { I18N_USER_ACTIONS } from '../constants'; import { generateUserPaths } from '../utils'; import Actions from './actions'; @@ -72,6 +73,9 @@ export default { href: this.userPaths.edit, }; }, + obstaclesForUserDeletion() { + return parseUserDeletionObstacles(this.user); + }, }, methods: { isLdapAction(action) { @@ -141,7 +145,7 @@ export default { :key="action" :paths="userPaths" :username="user.name" - :oncall-schedules="user.oncallSchedules" + :user-deletion-obstacles="obstaclesForUserDeletion" :data-testid="`delete-${action}`" > {{ $options.i18n[action] }} diff --git a/app/assets/javascripts/members/components/action_buttons/remove_member_button.vue b/app/assets/javascripts/members/components/action_buttons/remove_member_button.vue index 665e8ee69f7..69137ce615b 100644 --- a/app/assets/javascripts/members/components/action_buttons/remove_member_button.vue +++ b/app/assets/javascripts/members/components/action_buttons/remove_member_button.vue @@ -42,7 +42,7 @@ export default { required: false, default: false, }, - oncallSchedules: { + userDeletionObstacles: { type: Object, required: false, default: () => ({}), @@ -61,7 +61,7 @@ export default { memberPath: this.memberPath.replace(':id', this.memberId), memberType: this.memberType, message: this.message, - oncallSchedules: this.oncallSchedules, + userDeletionObstacles: this.userDeletionObstacles, }; }, }, diff --git a/app/assets/javascripts/members/components/action_buttons/user_action_buttons.vue b/app/assets/javascripts/members/components/action_buttons/user_action_buttons.vue index 0c20f935d50..44d658c90a0 100644 --- a/app/assets/javascripts/members/components/action_buttons/user_action_buttons.vue +++ b/app/assets/javascripts/members/components/action_buttons/user_action_buttons.vue @@ -1,5 +1,6 @@ <script> import { s__, sprintf } from '~/locale'; +import { parseUserDeletionObstacles } from '~/vue_shared/components/user_deletion_obstacles/utils'; import ActionButtonGroup from './action_button_group.vue'; import LeaveButton from './leave_button.vue'; import RemoveMemberButton from './remove_member_button.vue'; @@ -49,9 +50,11 @@ export default { }, ); }, - oncallScheduleUserData() { - const { user: { name, oncallSchedules: schedules } = {} } = this.member; - return { name, schedules }; + userDeletionObstaclesUserData() { + return { + name: this.member.user?.name, + obstacles: parseUserDeletionObstacles(this.member.user), + }; }, }, }; @@ -65,7 +68,7 @@ export default { v-else :member-id="member.id" :member-type="member.type" - :oncall-schedules="oncallScheduleUserData" + :user-deletion-obstacles="userDeletionObstaclesUserData" :message="message" :title="s__('Member|Remove member')" /> diff --git a/app/assets/javascripts/members/components/modals/leave_modal.vue b/app/assets/javascripts/members/components/modals/leave_modal.vue index 44178981136..e39669e17dd 100644 --- a/app/assets/javascripts/members/components/modals/leave_modal.vue +++ b/app/assets/javascripts/members/components/modals/leave_modal.vue @@ -3,7 +3,8 @@ import { GlModal, GlForm, GlSprintf, GlTooltipDirective } from '@gitlab/ui'; import { mapState } from 'vuex'; import csrf from '~/lib/utils/csrf'; import { __, s__, sprintf } from '~/locale'; -import OncallSchedulesList from '~/vue_shared/components/oncall_schedules_list.vue'; +import UserDeletionObstaclesList from '~/vue_shared/components/user_deletion_obstacles/user_deletion_obstacles_list.vue'; +import { parseUserDeletionObstacles } from '~/vue_shared/components/user_deletion_obstacles/utils'; import { LEAVE_MODAL_ID } from '../../constants'; export default { @@ -20,7 +21,7 @@ export default { csrf, modalId: LEAVE_MODAL_ID, modalContent: s__('Members|Are you sure you want to leave "%{source}"?'), - components: { GlModal, GlForm, GlSprintf, OncallSchedulesList }, + components: { GlModal, GlForm, GlSprintf, UserDeletionObstaclesList }, directives: { GlTooltip: GlTooltipDirective, }, @@ -43,11 +44,11 @@ export default { modalTitle() { return sprintf(s__('Members|Leave "%{source}"'), { source: this.member.source.fullName }); }, - schedules() { - return this.member.user?.oncallSchedules; + obstacles() { + return parseUserDeletionObstacles(this.member.user); }, - isPartOfOnCallSchedules() { - return this.schedules?.length; + hasObstaclesToUserDeletion() { + return this.obstacles?.length; }, }, methods: { @@ -74,9 +75,9 @@ export default { </gl-sprintf> </p> - <oncall-schedules-list - v-if="isPartOfOnCallSchedules" - :schedules="schedules" + <user-deletion-obstacles-list + v-if="hasObstaclesToUserDeletion" + :obstacles="obstacles" :is-current-user="true" /> diff --git a/app/assets/javascripts/members/components/modals/remove_member_modal.vue b/app/assets/javascripts/members/components/modals/remove_member_modal.vue index 00b6ebf9a73..b82fb0030ff 100644 --- a/app/assets/javascripts/members/components/modals/remove_member_modal.vue +++ b/app/assets/javascripts/members/components/modals/remove_member_modal.vue @@ -3,7 +3,7 @@ import { GlFormCheckbox, GlModal } from '@gitlab/ui'; import { mapActions, mapState } from 'vuex'; import csrf from '~/lib/utils/csrf'; import { s__, __ } from '~/locale'; -import OncallSchedulesList from '~/vue_shared/components/oncall_schedules_list.vue'; +import UserDeletionObstaclesList from '~/vue_shared/components/user_deletion_obstacles/user_deletion_obstacles_list.vue'; export default { actionCancel: { @@ -13,7 +13,7 @@ export default { components: { GlFormCheckbox, GlModal, - OncallSchedulesList, + UserDeletionObstaclesList, }, inject: ['namespace'], computed: { @@ -33,8 +33,8 @@ export default { message(state) { return state[this.namespace].removeMemberModalData.message; }, - oncallSchedules(state) { - return state[this.namespace].removeMemberModalData.oncallSchedules ?? {}; + userDeletionObstacles(state) { + return state[this.namespace].removeMemberModalData.userDeletionObstacles ?? {}; }, removeMemberModalVisible(state) { return state[this.namespace].removeMemberModalVisible; @@ -60,11 +60,11 @@ export default { }, }; }, - showUnassignIssuablesCheckbox() { + hasWorkspaceAccess() { return !this.isAccessRequest && !this.isInvite; }, - isPartOfOncallSchedules() { - return !this.isAccessRequest && this.oncallSchedules.schedules?.length; + hasObstaclesToUserDeletion() { + return this.hasWorkspaceAccess && this.userDeletionObstacles.obstacles?.length; }, }, methods: { @@ -95,10 +95,10 @@ export default { <form ref="form" :action="memberPath" method="post"> <p>{{ message }}</p> - <oncall-schedules-list - v-if="isPartOfOncallSchedules" - :schedules="oncallSchedules.schedules" - :user-name="oncallSchedules.name" + <user-deletion-obstacles-list + v-if="hasObstaclesToUserDeletion" + :obstacles="userDeletionObstacles.obstacles" + :user-name="userDeletionObstacles.name" /> <input ref="method" type="hidden" name="_method" value="delete" /> @@ -106,7 +106,7 @@ export default { <gl-form-checkbox v-if="isGroupMember" name="remove_sub_memberships"> {{ __('Also remove direct user membership from subgroups and projects') }} </gl-form-checkbox> - <gl-form-checkbox v-if="showUnassignIssuablesCheckbox" name="unassign_issuables"> + <gl-form-checkbox v-if="hasWorkspaceAccess" name="unassign_issuables"> {{ __('Also unassign this user from related issues and merge requests') }} </gl-form-checkbox> </form> diff --git a/app/assets/javascripts/vue_shared/components/project_selector/project_list_item.stories.js b/app/assets/javascripts/vue_shared/components/project_selector/project_list_item.stories.js new file mode 100644 index 00000000000..9700117a3da --- /dev/null +++ b/app/assets/javascripts/vue_shared/components/project_selector/project_list_item.stories.js @@ -0,0 +1,34 @@ +import ProjectListItem from './project_list_item.vue'; + +export default { + component: ProjectListItem, + title: 'vue_shared/components/project_selector/project_list_item', +}; + +const Template = (args, { argTypes }) => ({ + components: { ProjectListItem }, + props: Object.keys(argTypes), + template: '<project-list-item v-bind="$props" />', +}); + +export const Default = Template.bind({}); +Default.args = { + project: { + id: '1', + name: 'MyProject', + name_with_namespace: 'path / to / MyProject', + }, + selected: false, +}; + +export const SelectedProject = Template.bind({}); +SelectedProject.args = { + ...Default.args, + selected: true, +}; + +export const MatchedProject = Template.bind({}); +MatchedProject.args = { + ...Default.args, + matcher: 'proj', +}; diff --git a/app/assets/javascripts/vue_shared/components/project_selector/project_list_item.vue b/app/assets/javascripts/vue_shared/components/project_selector/project_list_item.vue index 36d3696ec36..0bd57c84018 100644 --- a/app/assets/javascripts/vue_shared/components/project_selector/project_list_item.vue +++ b/app/assets/javascripts/vue_shared/components/project_selector/project_list_item.vue @@ -1,5 +1,5 @@ <script> -import { GlButton, GlIcon } from '@gitlab/ui'; +import { GlButton, GlIcon, GlSafeHtmlDirective as SafeHtml } from '@gitlab/ui'; import { isString } from 'lodash'; import highlight from '~/lib/utils/highlight'; import { truncateNamespace } from '~/lib/utils/text_utility'; @@ -8,6 +8,7 @@ import ProjectAvatar from '~/vue_shared/components/deprecated_project_avatar/def export default { name: 'ProjectListItem', components: { GlIcon, ProjectAvatar, GlButton }, + directives: { SafeHtml }, props: { project: { type: Object, @@ -58,9 +59,9 @@ export default { <span v-if="truncatedNamespace" class="text-secondary">/ </span> </div> <div + v-safe-html="highlightedProjectName" :title="project.name" class="js-project-name text-truncate" - v-html="highlightedProjectName /* eslint-disable-line vue/no-v-html */" ></div> </div> </gl-button> diff --git a/app/assets/javascripts/vue_shared/components/user_deletion_obstacles/constants.js b/app/assets/javascripts/vue_shared/components/user_deletion_obstacles/constants.js new file mode 100644 index 00000000000..256db2ea1ce --- /dev/null +++ b/app/assets/javascripts/vue_shared/components/user_deletion_obstacles/constants.js @@ -0,0 +1,5 @@ +// Types of obstacles to user deletion +export const OBSTACLE_TYPES = Object.freeze({ + oncallSchedules: 'ONCALL_SCHEDULE', + escalationPolicies: 'ESCALATION_POLICY', +}); diff --git a/app/assets/javascripts/vue_shared/components/user_deletion_obstacles/user_deletion_obstacles_list.stories.js b/app/assets/javascripts/vue_shared/components/user_deletion_obstacles/user_deletion_obstacles_list.stories.js new file mode 100644 index 00000000000..d2030c14029 --- /dev/null +++ b/app/assets/javascripts/vue_shared/components/user_deletion_obstacles/user_deletion_obstacles_list.stories.js @@ -0,0 +1,37 @@ +/* eslint-disable @gitlab/require-i18n-strings */ + +import { OBSTACLE_TYPES } from './constants'; +import UserDeletionObstaclesList from './user_deletion_obstacles_list.vue'; + +export default { + component: UserDeletionObstaclesList, + title: 'vue_shared/components/user_deletion_obstacles/user_deletion_obstacles_list', +}; + +const Template = (args, { argTypes }) => ({ + components: { UserDeletionObstaclesList }, + props: Object.keys(argTypes), + template: '<user-deletion-obstacles-list v-bind="$props" v-on="$props" />', +}); + +export const Default = Template.bind({}); +Default.args = { + obstacles: [ + { + type: OBSTACLE_TYPES.oncallSchedules, + name: 'APAC', + url: 'https://domain.com/group/main-application/oncall_schedules', + projectName: 'main-application', + projectUrl: 'https://domain.com/group/main-application', + }, + { + type: OBSTACLE_TYPES.escalationPolicies, + name: 'Engineering On-call', + url: 'https://domain.com/group/microservice-backend/escalation_policies', + projectName: 'Microservice Backend', + projectUrl: 'https://domain.com/group/microservice-backend', + }, + ], + userName: 'Thomspon Smith', + isCurrentUser: false, +}; diff --git a/app/assets/javascripts/vue_shared/components/oncall_schedules_list.vue b/app/assets/javascripts/vue_shared/components/user_deletion_obstacles/user_deletion_obstacles_list.vue index e37a663ace3..1eea660d527 100644 --- a/app/assets/javascripts/vue_shared/components/oncall_schedules_list.vue +++ b/app/assets/javascripts/vue_shared/components/user_deletion_obstacles/user_deletion_obstacles_list.vue @@ -1,6 +1,16 @@ <script> import { GlSprintf, GlLink } from '@gitlab/ui'; import { sprintf, s__ } from '~/locale'; +import { OBSTACLE_TYPES } from './constants'; + +const OBSTACLE_TEXT = { + [OBSTACLE_TYPES.oncallSchedules]: s__( + 'OnCallSchedules|On-call schedule %{obstacle} in Project %{project}', + ), + [OBSTACLE_TYPES.escalationPolicies]: s__( + 'EscalationPolicies|Escalation policy %{obstacle} in Project %{project}', + ), +}; export default { components: { @@ -8,7 +18,7 @@ export default { GlLink, }, props: { - schedules: { + obstacles: { type: Array, required: true, }, @@ -45,6 +55,15 @@ export default { ); }, }, + methods: { + textForObstacle(obstacle) { + return OBSTACLE_TEXT[obstacle.type]; + }, + urlForObstacle(obstacle) { + // Fallback to scheduleUrl for backwards compatibility + return obstacle.url || obstacle.scheduleUrl; + }, + }, }; </script> @@ -52,17 +71,15 @@ export default { <div> <p data-testid="title">{{ title }}</p> - <ul data-testid="schedules-list"> - <li v-for="(schedule, index) in schedules" :key="`${schedule.name}-${index}`"> - <gl-sprintf - :message="s__('OnCallSchedules|On-call schedule %{schedule} in Project %{project}')" - > - <template #schedule> - <gl-link :href="schedule.scheduleUrl" target="_blank">{{ schedule.name }}</gl-link> + <ul data-testid="obstacles-list"> + <li v-for="(obstacle, index) in obstacles" :key="`${obstacle.name}-${index}`"> + <gl-sprintf :message="textForObstacle(obstacle)"> + <template #obstacle> + <gl-link :href="urlForObstacle(obstacle)" target="_blank">{{ obstacle.name }}</gl-link> </template> <template #project> - <gl-link :href="schedule.projectUrl" target="_blank">{{ - schedule.projectName + <gl-link :href="obstacle.projectUrl" target="_blank">{{ + obstacle.projectName }}</gl-link> </template> </gl-sprintf> diff --git a/app/assets/javascripts/vue_shared/components/user_deletion_obstacles/utils.js b/app/assets/javascripts/vue_shared/components/user_deletion_obstacles/utils.js new file mode 100644 index 00000000000..502302a1ef2 --- /dev/null +++ b/app/assets/javascripts/vue_shared/components/user_deletion_obstacles/utils.js @@ -0,0 +1,19 @@ +import { OBSTACLE_TYPES } from './constants'; + +const addTypeToObstacles = (obstacles, type) => { + if (!obstacles) return []; + + return obstacles?.map((obstacle) => ({ type, ...obstacle })); +}; + +// For use with user objects formatted via internal REST API. +// If the removal/deletion of a user could cause critical +// problems, return a single array containing all affected +// associations including their type. +export const parseUserDeletionObstacles = (user) => { + if (!user) return []; + + return Object.keys(OBSTACLE_TYPES).flatMap((type) => { + return addTypeToObstacles(user[type], OBSTACLE_TYPES[type]); + }); +}; diff --git a/app/assets/stylesheets/_page_specific_files.scss b/app/assets/stylesheets/_page_specific_files.scss index dfbdee8e1c8..8f3b5b3b7cc 100644 --- a/app/assets/stylesheets/_page_specific_files.scss +++ b/app/assets/stylesheets/_page_specific_files.scss @@ -1,5 +1,4 @@ @import './pages/branches'; -@import './pages/ci_projects'; @import './pages/clusters'; @import './pages/commits'; @import './pages/deploy_keys'; diff --git a/app/assets/stylesheets/components/design_management/design_version_dropdown.scss b/app/assets/stylesheets/components/design_management/design_version_dropdown.scss deleted file mode 100644 index f79d672e238..00000000000 --- a/app/assets/stylesheets/components/design_management/design_version_dropdown.scss +++ /dev/null @@ -1,3 +0,0 @@ -.design-version-dropdown > button { - background: inherit; -} diff --git a/app/assets/stylesheets/components/project_list_item.scss b/app/assets/stylesheets/components/project_list_item.scss deleted file mode 100644 index 8e7c2c4398c..00000000000 --- a/app/assets/stylesheets/components/project_list_item.scss +++ /dev/null @@ -1,24 +0,0 @@ -.project-list-item { - &:not(:disabled):not(.disabled) { - &:focus, - &:active, - &:focus:active { - outline: none; - box-shadow: none; - } - } -} - -// When housed inside a modal, the edge of each item -// should extend to the edge of the modal. -.modal-body { - .project-list-item { - border-radius: 0; - margin-left: -$gl-padding; - margin-right: -$gl-padding; - - .project-namespace-name-container { - overflow: hidden; - } - } -} diff --git a/app/assets/stylesheets/framework.scss b/app/assets/stylesheets/framework.scss index 804cc205279..06a8694eb3d 100644 --- a/app/assets/stylesheets/framework.scss +++ b/app/assets/stylesheets/framework.scss @@ -9,7 +9,6 @@ @import 'framework/animations'; @import 'framework/vue_transitions'; -@import 'framework/banner'; @import 'framework/blocks'; @import 'framework/buttons'; @import 'framework/badges'; diff --git a/app/assets/stylesheets/framework/banner.scss b/app/assets/stylesheets/framework/banner.scss deleted file mode 100644 index 71bbab2065d..00000000000 --- a/app/assets/stylesheets/framework/banner.scss +++ /dev/null @@ -1,40 +0,0 @@ -.banner-callout { - display: flex; - position: relative; - align-items: start; - - .banner-close { - position: absolute; - top: 10px; - right: 10px; - opacity: 1; - - .dismiss-icon { - color: $gl-text-color; - font-size: $gl-font-size; - } - } - - .banner-graphic { - margin: 0 $gl-padding $gl-padding 0; - } - - &.banner-non-empty-state { - border-bottom: 1px solid $border-color; - } - - @include media-breakpoint-down(xs) { - justify-content: center; - flex-direction: column; - align-items: center; - - .banner-title, - .banner-buttons { - text-align: center; - } - - .banner-graphic { - margin-left: $gl-padding; - } - } -} diff --git a/app/assets/stylesheets/pages/ci_projects.scss b/app/assets/stylesheets/pages/ci_projects.scss deleted file mode 100644 index fbe1f3081a0..00000000000 --- a/app/assets/stylesheets/pages/ci_projects.scss +++ /dev/null @@ -1,54 +0,0 @@ -.ci-body { - .project-title { - margin: 0; - color: $common-gray-dark; - font-size: 20px; - line-height: 1.5; - } - - .builds, - .projects-table { - .light { - border-color: $border-color; - } - - th, - td { - padding: 10px $gl-padding; - } - - td { - color: $gl-text-color; - vertical-align: middle !important; - - a { - font-weight: $gl-font-weight-normal; - text-decoration: none; - } - } - } - - .commit-info { - .attr-name { - margin-right: 5px; - } - - pre.commit-message { - background: none; - padding: 0; - border: 0; - margin: 20px 0; - border-radius: 0; - } - } - - .loading { - font-size: 20px; - } - - .ci-charts { - fieldset { - margin-bottom: 16px; - } - } -} |