diff options
Diffstat (limited to 'app/views/groups')
22 files changed, 181 insertions, 88 deletions
diff --git a/app/views/groups/_activities.html.haml b/app/views/groups/_activities.html.haml index 47e7e27de48..769455dc951 100644 --- a/app/views/groups/_activities.html.haml +++ b/app/views/groups/_activities.html.haml @@ -1,10 +1,9 @@ .nav-block.activities = render 'shared/event_filter', show_group_events: @group.supports_events? .controls - = link_to group_path(@group, rss_url_options), class: 'btn d-none d-sm-inline-block has-tooltip' , title: 'Subscribe' do - %i.fa.fa-rss + = link_to group_path(@group, rss_url_options), class: 'btn gl-button btn-default btn-icon d-none d-sm-inline-flex has-tooltip' , title: 'Subscribe' do + = sprite_icon('rss', css_class: 'qa-rss-icon gl-icon') .content_list .loading .spinner.spinner-md - diff --git a/app/views/groups/_flash_messages.html.haml b/app/views/groups/_flash_messages.html.haml index d1fea0e60c6..fa1a9d2cca4 100644 --- a/app/views/groups/_flash_messages.html.haml +++ b/app/views/groups/_flash_messages.html.haml @@ -1,3 +1,2 @@ = content_for :flash_message do = render_if_exists 'shared/shared_runners_minutes_limit', namespace: @group, classes: [container_class, ("limit-container-width" unless fluid_layout)] - = render_if_exists 'shared/namespace_storage_limit_alert', namespace: @group, classes: [container_class, ("limit-container-width" unless fluid_layout)] diff --git a/app/views/groups/_home_panel.html.haml b/app/views/groups/_home_panel.html.haml index 2cf94695482..97e48cdec8c 100644 --- a/app/views/groups/_home_panel.html.haml +++ b/app/views/groups/_home_panel.html.haml @@ -12,7 +12,7 @@ %h1.home-panel-title.gl-mt-3.gl-mb-2 = @group.name %span.visibility-icon.text-secondary.gl-ml-2.has-tooltip{ data: { container: 'body' }, title: visibility_icon_description(@group) } - = visibility_level_icon(@group.visibility_level, fw: false, options: {class: 'icon'}) + = visibility_level_icon(@group.visibility_level, options: {class: 'icon'}) .home-panel-metadata.d-flex.align-items-center.text-secondary %span = _("Group ID: %{group_id}") % { group_id: @group.id } diff --git a/app/views/groups/edit.html.haml b/app/views/groups/edit.html.haml index 1e04b2761f6..eafee325500 100644 --- a/app/views/groups/edit.html.haml +++ b/app/views/groups/edit.html.haml @@ -15,7 +15,7 @@ .settings-content = render 'groups/settings/general' -%section.settings.gs-permissions.no-animate#js-permissions-settings{ class: ('expanded' if expanded), data: { qa_selector: 'permission_lfs_2fa_section' } } +%section.settings.gs-permissions.no-animate#js-permissions-settings{ class: ('expanded' if expanded), data: { qa_selector: 'permission_lfs_2fa_content' } } .settings-header %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only{ role: 'button' } = _('Permissions, LFS, 2FA') diff --git a/app/views/groups/group_members/index.html.haml b/app/views/groups/group_members/index.html.haml index b9ea8316bbc..c8e58a50b18 100644 --- a/app/views/groups/group_members/index.html.haml +++ b/app/views/groups/group_members/index.html.haml @@ -1,84 +1,99 @@ -- page_title _("Group members") +- page_title _('Group members') - can_manage_members = can?(current_user, :admin_group_member, @group) - show_invited_members = can_manage_members && @invited_members.exists? -- pending_active = params[:search_invited].present? -- total_count = @members.count + @group.shared_with_group_links.count +- show_access_requests = can_manage_members && @requesters.exists? +- invited_active = params[:search_invited].present? || params[:invited_members_page].present? + +- form_item_label_css_class = 'label-bold gl-mr-2 gl-mb-0 gl-py-2 align-self-md-center' .js-remove-member-modal .project-members-page.gl-mt-3 %h4 - = _("Group members") + = _('Group members') %hr - if can_manage_members %ul.nav-links.nav.nav-tabs.gitlab-tabs{ role: 'tablist' } %li.nav-tab{ role: 'presentation' } - %a.nav-link.active{ href: '#invite-member-pane', id: 'invite-member-tab', data: { toggle: 'tab' }, role: 'tab' }= _("Invite member") + %a.nav-link.active{ href: '#invite-member-pane', id: 'invite-member-tab', data: { toggle: 'tab' }, role: 'tab' }= _('Invite member') %li.nav-tab{ role: 'presentation' } - %a.nav-link{ href: '#invite-group-pane', id: 'invite-group-tab', data: { toggle: 'tab', qa_selector: 'invite_group_tab' }, role: 'tab' }= _("Invite group") + %a.nav-link{ href: '#invite-group-pane', id: 'invite-group-tab', data: { toggle: 'tab', qa_selector: 'invite_group_tab' }, role: 'tab' }= _('Invite group') .tab-content.gitlab-tab-content .tab-pane.active{ id: 'invite-member-pane', role: 'tabpanel' } = render_invite_member_for_group(@group, @group_member.access_level) .tab-pane{ id: 'invite-group-pane', role: 'tabpanel' } = render 'shared/members/invite_group', submit_url: group_group_links_path(@group), access_levels: GroupMember.access_level_roles, default_access_level: @group_member.access_level, group_link_field: 'shared_with_group_id', group_access_field: 'shared_group_access' - = render 'shared/members/requests', membership_source: @group, requesters: @requesters - = render_if_exists 'groups/group_members/ldap_sync' - %ul.nav-links.mobile-separator.nav.nav-tabs.clearfix + %ul.nav-links.mobile-separator.nav.nav-tabs %li.nav-item - = link_to "#existing_shares", class: ["nav-link", ("active" unless pending_active)] , 'data-toggle' => 'tab' do + = link_to '#tab-members', class: ['nav-link', ('active' unless invited_active)], data: { toggle: 'tab' } do %span - = _("Existing shares") - %span.badge.badge-pill= total_count + = _('Members') + %span.badge.badge-pill= @members.total_count + - if @group.shared_with_group_links.any? + %li.nav-item + = link_to '#tab-groups', class: ['nav-link'] , data: { toggle: 'tab', qa_selector: 'groups_list_tab' } do + %span + = _('Groups') + %span.badge.badge-pill= @group.shared_with_group_links.count - if show_invited_members %li.nav-item - = link_to "#invited_members", class: ["nav-link", ("active" if pending_active)], 'data-toggle' => 'tab' do + = link_to '#tab-invited-members', class: ['nav-link', ('active' if invited_active)], data: { toggle: 'tab' } do %span - = _("Pending") + = _('Invited') %span.badge.badge-pill= @invited_members.total_count - + - if show_access_requests + %li.nav-item + = link_to '#tab-access-requests', class: 'nav-link', data: { toggle: 'tab' } do + %span + = _('Access requests') + %span.badge.badge-pill= @requesters.count .tab-content - #existing_shares.tab-pane{ :class => ("active" unless pending_active) } - - if @group.shared_with_group_links.any? - .card.card-without-border - .d-flex.flex-column.flex-md-row.row-content-block.second-block - %span.flex-grow-1.align-self-md-center.col-form-label - = _("Groups with access to %{strong_start}%{group_name}%{strong_end}").html_safe % { group_name: @group.name, strong_start: '<strong>'.html_safe, strong_end: '</strong>'.html_safe } - %ul.content-list.members-list{ data: { qa_selector: "groups_list" } } - - can_admin_member = can?(current_user, :admin_group_member, @group) - - @group.shared_with_group_links.each do |group_link| - = render 'shared/members/group', group_link: group_link, can_admin_member: can_admin_member, group_link_path: group_group_link_path(@group, group_link) + #tab-members.tab-pane{ class: ('active' unless invited_active) } .card.card-without-border - .d-flex.flex-column.flex-md-row.row-content-block.second-block - %span.flex-grow-1.align-self-md-center.col-form-label - = _("Members with access to %{strong_start}%{group_name}%{strong_end}").html_safe % { group_name: @group.name, strong_start: '<strong>'.html_safe, strong_end: '</strong>'.html_safe } - = form_tag group_group_members_path(@group), method: :get, class: 'form-inline user-search-form' do - .form-group.flex-grow - .position-relative.mr-md-2 - = search_field_tag :search, params[:search], { placeholder: _('Search'), class: 'form-control', spellcheck: false } - %button.user-search-btn.border-left{ type: "submit", "aria-label" => _("Submit search") } - = icon("search") - - if can_manage_members - = label_tag '2fa', '2FA', class: 'col-form-label label-bold pr-md-2' + = render 'groups/group_members/tab_pane/header' do + = render 'groups/group_members/tab_pane/title' do + = html_escape(_('Members with access to %{strong_start}%{group_name}%{strong_end}')) % { group_name: @group.name, strong_start: '<strong>'.html_safe, strong_end: '</strong>'.html_safe } + = form_tag group_group_members_path(@group), method: :get, class: 'user-search-form gl-display-flex gl-md-align-items-center gl-flex-wrap gl-flex-direction-column gl-md-flex-direction-row gl-mx-n3 gl-my-n3', data: { testid: 'user-search-form' } do + .gl-px-3.gl-py-2 + .search-control-wrap.gl-relative + = render 'shared/members/search_field' + - if can_manage_members + = render 'groups/group_members/tab_pane/form_item' do + = label_tag '2fa', _('2FA'), class: form_item_label_css_class = render 'shared/members/filter_2fa_dropdown' + = render 'groups/group_members/tab_pane/form_item' do + = label_tag :sort_by, _('Sort by'), class: form_item_label_css_class = render 'shared/members/sort_dropdown' - %ul.content-list.members-list{ data: { qa_selector: "members_list" } } + %ul.content-list.members-list{ data: { qa_selector: 'members_list' } } = render partial: 'shared/members/member', collection: @members, as: :member - = paginate @members, theme: 'gitlab' - + = paginate @members, theme: 'gitlab', params: { invited_members_page: nil, search_invited: nil } + - if @group.shared_with_group_links.any? + #tab-groups.tab-pane + .card.card-without-border + = render 'groups/group_members/tab_pane/header' do + = render 'groups/group_members/tab_pane/title' do + = html_escape(_('Groups with access to %{strong_start}%{group_name}%{strong_end}')) % { group_name: @group.name, strong_start: '<strong>'.html_safe, strong_end: '</strong>'.html_safe } + %ul.content-list.members-list{ data: { qa_selector: 'groups_list' } } + - @group.shared_with_group_links.each do |group_link| + = render 'shared/members/group', group_link: group_link, can_admin_member: can_manage_members, group_link_path: group_group_link_path(@group, group_link) - if show_invited_members - #invited_members.tab-pane{ :class => ("active" if pending_active) } + #tab-invited-members.tab-pane{ class: ('active' if invited_active) } .card.card-without-border - .d-flex.flex-column.flex-md-row.row-content-block.second-block - %span.flex-grow-1 - = _("Members with pending access to %{strong_start}%{group_name}%{strong_end}").html_safe % { group_name: @group.name, strong_start: '<strong>'.html_safe, strong_end: '</strong>'.html_safe } - = form_tag group_group_members_path(@group), method: :get, class: 'form-inline user-search-form' do - .form-group - .position-relative.mr-md-2 - = search_field_tag :search_invited, params[:search_invited], { placeholder: _('Search'), class: 'form-control', spellcheck: false } - %button.user-search-btn.border-left{ type: "submit", "aria-label" => _("Submit search") } - = icon("search") + = render 'groups/group_members/tab_pane/header' do + = render 'groups/group_members/tab_pane/title' do + = html_escape(_('Members invited to %{strong_start}%{group_name}%{strong_end}')) % { group_name: @group.name, strong_start: '<strong>'.html_safe, strong_end: '</strong>'.html_safe } + = form_tag group_group_members_path(@group), method: :get, class: 'user-search-form', data: { testid: 'user-search-form' } do + = render 'shared/members/search_field', name: 'search_invited' %ul.content-list.members-list = render partial: 'shared/members/member', collection: @invited_members, as: :member - = paginate @invited_members, param_name: 'invited_members_page', theme: 'gitlab' + = paginate @invited_members, param_name: 'invited_members_page', theme: 'gitlab', params: { page: nil } + - if show_access_requests + #tab-access-requests.tab-pane + .card.card-without-border + = render 'groups/group_members/tab_pane/header' do + = render 'groups/group_members/tab_pane/title' do + = html_escape(_('Users requesting access to %{strong_start}%{group_name}%{strong_end}')) % { group_name: @group.name, strong_start: '<strong>'.html_safe, strong_end: '</strong>'.html_safe } + %ul.content-list.members-list + = render partial: 'shared/members/member', collection: @requesters, as: :member diff --git a/app/views/groups/group_members/tab_pane/_form_item.html.haml b/app/views/groups/group_members/tab_pane/_form_item.html.haml new file mode 100644 index 00000000000..9e57d3329d7 --- /dev/null +++ b/app/views/groups/group_members/tab_pane/_form_item.html.haml @@ -0,0 +1,2 @@ +.gl-px-3.gl-py-3.gl-display-flex.gl-flex-direction-column.gl-md-flex-direction-row + = yield diff --git a/app/views/groups/group_members/tab_pane/_header.html.haml b/app/views/groups/group_members/tab_pane/_header.html.haml new file mode 100644 index 00000000000..a02bf90eddf --- /dev/null +++ b/app/views/groups/group_members/tab_pane/_header.html.haml @@ -0,0 +1,2 @@ +.gl-display-flex.gl-md-align-items-center.gl-flex-direction-column.gl-md-flex-direction-row.row-content-block.second-block + = yield diff --git a/app/views/groups/group_members/tab_pane/_title.html.haml b/app/views/groups/group_members/tab_pane/_title.html.haml new file mode 100644 index 00000000000..c1418a5f7c8 --- /dev/null +++ b/app/views/groups/group_members/tab_pane/_title.html.haml @@ -0,0 +1,2 @@ +%span.gl-flex-grow-1.gl-py-3.gl-pr-3 + = yield diff --git a/app/views/groups/issues.html.haml b/app/views/groups/issues.html.haml index 59432e5f015..1358e848154 100644 --- a/app/views/groups/issues.html.haml +++ b/app/views/groups/issues.html.haml @@ -4,7 +4,7 @@ = content_for :meta_tags do = auto_discovery_link_tag(:atom, safe_params.merge(rss_url_options).to_h, title: "#{@group.name} issues") -- if group_issues_count(state: 'all').zero? +- if group_issues_count(state: 'all') == 0 = render 'shared/empty_states/issues', project_select_button: true - else .top-area @@ -25,7 +25,7 @@ - if Feature.enabled?(:vue_issuables_list, @group) .js-issuables-list{ data: { endpoint: expose_url(api_v4_groups_issues_path(id: @group.id)), 'can-bulk-edit': @can_bulk_update.to_json, - 'empty-svg-path': image_path('illustrations/issues.svg'), + 'empty-state-meta': { svg_path: image_path('illustrations/issues.svg') }, 'sort-key': @sort } } - else = render 'shared/issues' diff --git a/app/views/groups/merge_requests.html.haml b/app/views/groups/merge_requests.html.haml index 1828f850d35..15e777f5c36 100644 --- a/app/views/groups/merge_requests.html.haml +++ b/app/views/groups/merge_requests.html.haml @@ -2,7 +2,7 @@ - page_title _("Merge Requests") -- if group_merge_requests_count(state: 'all').zero? +- if group_merge_requests_count(state: 'all') == 0 = render 'shared/empty_states/merge_requests', project_select_button: true - else .top-area diff --git a/app/views/groups/packages/_legacy_package_list.haml b/app/views/groups/packages/_legacy_package_list.haml new file mode 100644 index 00000000000..481a0dbb6e8 --- /dev/null +++ b/app/views/groups/packages/_legacy_package_list.haml @@ -0,0 +1,59 @@ +- sort_value = @sort +- sort_title = packages_sort_option_title(sort_value) + +- if @packages.any? + .d-flex.justify-content-end + .dropdown.inline.gl-mt-3.gl-mb-3.package-sort-dropdown + .btn-group{ role: 'group' } + .btn-group{ role: 'group' } + %button.dropdown-menu-toggle{ type: 'button', data: { toggle: 'dropdown', display: 'static', 'qa-selector': 'sort-dropdown-button' }, class: 'btn btn-default' } + = sort_title + = icon('chevron-down') + %ul.dropdown-menu.dropdown-menu-right.dropdown-menu-selectable.dropdown-menu-sort + %li + = sortable_item(sort_title_created_date, package_sort_path(sort: sort_value_recently_created), sort_title) + = sortable_item(sort_title_name, package_sort_path(sort: sort_value_name_desc), sort_title) + = sortable_item(sort_title_project_name, package_sort_path(sort: sort_value_project_name_desc), sort_title) + = sortable_item(sort_title_version, package_sort_path(sort: sort_value_version_desc), sort_title) + = sortable_item(sort_title_type, package_sort_path(sort: sort_value_type_desc), sort_title) + = packages_sort_direction_button(sort_value) + + .table-holder + .gl-responsive-table-row.table-row-header.bg-secondary-50.px-2.border-top{ role: 'row' } + .table-section.section-30{ role: 'rowheader' } + = _('Name') + .table-section.section-20{ role: 'rowheader' } + = _('Project') + .table-section.section-20{ role: 'rowheader' } + = _('Version') + .table-section.section-10{ role: 'rowheader' } + = _('Type') + .table-section.section-20{ role: 'rowheader' } + = _('Created') + - @packages.each do |package| + .gl-responsive-table-row{ data: { 'qa-selector': 'package-row' } } + .table-section.section-30 + .table-mobile-header{ role: "rowheader" }= _("Name") + .table-mobile-content.flex-truncate-parent + = link_to package.name, project_package_path(package.project, package), class: 'flex-truncate-child' + .table-section.section-20 + .table-mobile-header{ role: "rowheader" }= _("Project") + .table-mobile-content + = link_to_project(package.project) + .table-section.section-20 + .table-mobile-header{ role: "rowheader" }= _("Version") + .table-mobile-content + = package.version + .table-section.section-10 + .table-mobile-header{ role: "rowheader" }= _("Type") + .table-mobile-content + = package.package_type + .table-section.section-20 + .table-mobile-header{ role: "rowheader" }= _("Created") + .table-mobile-content + = time_ago_with_tooltip(package.created_at) + = paginate @packages, theme: "gitlab" +- else + .row.empty-state + .col-12 + = render 'shared/packages/no_packages' diff --git a/app/views/groups/packages/index.html.haml b/app/views/groups/packages/index.html.haml new file mode 100644 index 00000000000..b07c08f50ca --- /dev/null +++ b/app/views/groups/packages/index.html.haml @@ -0,0 +1,5 @@ +- page_title _("Packages") + +.row + .col-12 + #js-vue-packages-list{ data: packages_list_data('groups', @group) } diff --git a/app/views/groups/projects.html.haml b/app/views/groups/projects.html.haml index bf9d89da24a..555c4004a3f 100644 --- a/app/views/groups/projects.html.haml +++ b/app/views/groups/projects.html.haml @@ -15,7 +15,7 @@ .controls = link_to _('Members'), project_project_members_path(project), id: "edit_#{dom_id(project)}", class: "btn" = link_to _('Edit'), edit_project_path(project), id: "edit_#{dom_id(project)}", class: "btn" - = link_to _('Remove'), project, data: { confirm: remove_project_message(project)}, method: :delete, class: "btn btn-remove" + = link_to _('Delete'), project, data: { confirm: remove_project_message(project)}, method: :delete, class: "btn btn-remove" .stats %span.badge.badge-pill diff --git a/app/views/groups/runners/_runner.html.haml b/app/views/groups/runners/_runner.html.haml index df615eb189a..07cbcd8401e 100644 --- a/app/views/groups/runners/_runner.html.haml +++ b/app/views/groups/runners/_runner.html.haml @@ -68,14 +68,14 @@ .btn-group.table-action-buttons .btn-group = link_to edit_group_runner_path(@group, runner), class: 'btn btn-default has-tooltip', title: _('Edit'), ref: 'tooltip', aria: { label: _('Edit') }, data: { placement: 'top', container: 'body'} do - = icon('pencil') + = sprite_icon('pencil') .btn-group - if runner.active? = link_to pause_group_runner_path(@group, runner), method: :post, class: 'btn btn-default has-tooltip', title: _('Pause'), ref: 'tooltip', aria: { label: _('Pause') }, data: { placement: 'top', container: 'body', confirm: _('Are you sure?') } do - = icon('pause') + = sprite_icon('pause') - else = link_to resume_group_runner_path(@group, runner), method: :post, class: 'btn btn-default has-tooltip', title: _('Resume'), ref: 'tooltip', aria: { label: _('Resume') }, data: { placement: 'top', container: 'body'} do - = icon('play') + = sprite_icon('play') - if runner.belongs_to_more_than_one_project? .btn-group .btn.btn-danger.has-tooltip{ 'aria-label' => 'Remove', 'data-container' => 'body', 'data-original-title' => _('Multi-project Runners cannot be removed'), 'data-placement' => 'top', disabled: 'disabled' } diff --git a/app/views/groups/settings/_advanced.html.haml b/app/views/groups/settings/_advanced.html.haml index 0df82898644..98f4acaa5e3 100644 --- a/app/views/groups/settings/_advanced.html.haml +++ b/app/views/groups/settings/_advanced.html.haml @@ -1,12 +1,12 @@ = render 'groups/settings/export', group: @group .sub-section - %h4.warning-title= s_('GroupSettings|Change group path') + %h4.warning-title= s_('GroupSettings|Change group URL') = form_for @group, html: { multipart: true, class: 'gl-show-field-errors' }, authenticity_token: true do |f| = form_errors(@group) .form-group %p - = s_('GroupSettings|Changing group path can have unintended side effects.') + = s_('GroupSettings|Changing group URL can have unintended side effects.') = succeed '.' do = link_to _('Learn more'), help_page_path('user/group/index', anchor: 'changing-a-groups-path'), target: '_blank' @@ -20,10 +20,10 @@ = f.text_field :path, placeholder: 'open-source', class: 'form-control', autofocus: local_assigns[:autofocus] || false, required: true, pattern: Gitlab::PathRegex::NAMESPACE_FORMAT_REGEX_JS, - title: s_('GroupSettings|Please choose a group path with no special characters.'), + title: s_('GroupSettings|Please choose a group URL with no special characters.'), "data-bind-in" => "#{'create_chat_team' if Gitlab.config.mattermost.enabled}" - - = f.submit s_('GroupSettings|Change group path'), class: 'btn btn-warning' + .gl-display-flex.gl-justify-content-end + = f.submit s_('GroupSettings|Change group URL'), class: 'btn btn-warning' .sub-section %h4.warning-title= s_('GroupSettings|Transfer group') @@ -39,7 +39,8 @@ %li= s_('GroupSettings|You can only transfer the group to a group you manage.') %li= s_('GroupSettings|You will need to update your local repositories to point to the new location.') %li= s_("GroupSettings|If the parent group's visibility is lower than the group current visibility, visibility levels for subgroups and projects will be changed to match the new parent group's visibility.") - = f.submit s_('GroupSettings|Transfer group'), class: 'btn btn-warning' + .gl-display-flex.gl-justify-content-end + = f.submit s_('GroupSettings|Transfer group'), class: 'btn btn-warning' = render 'groups/settings/remove', group: @group = render_if_exists 'groups/settings/restore', group: @group diff --git a/app/views/groups/settings/_export.html.haml b/app/views/groups/settings/_export.html.haml index 94466b76ac8..af06cfff397 100644 --- a/app/views/groups/settings/_export.html.haml +++ b/app/views/groups/settings/_export.html.haml @@ -24,5 +24,6 @@ = link_to _('Download export'), download_export_group_path(group), rel: 'nofollow', method: :get, class: 'btn btn-default', data: { qa_selector: 'download_export_link' } - else - = link_to _('Export group'), export_group_path(group), - method: :post, class: 'btn btn-default', data: { qa_selector: 'export_group_link' } + .gl-display-flex.gl-justify-content-end + = link_to _('Export group'), export_group_path(group), + method: :post, class: 'btn btn-default', data: { qa_selector: 'export_group_link' } diff --git a/app/views/groups/settings/_general.html.haml b/app/views/groups/settings/_general.html.haml index 0094104e07d..e43d49b229e 100644 --- a/app/views/groups/settings/_general.html.haml +++ b/app/views/groups/settings/_general.html.haml @@ -19,7 +19,7 @@ = render_if_exists 'shared/repository_size_limit_setting', form: f, type: :group - .form-group.gl-mt-3.append-bottom-20 + .form-group.gl-mt-3.gl-mb-6 .avatar-container.rect-avatar.s90 = group_icon(@group, alt: '', class: 'avatar group-avatar s90') = f.label :avatar, _('Group avatar'), class: 'label-bold d-block' @@ -29,5 +29,5 @@ = link_to _('Remove avatar'), group_avatar_path(@group.to_param), data: { confirm: _('Avatar will be removed. Are you sure?')}, method: :delete, class: 'btn btn-link' = render 'shared/visibility_level', f: f, visibility_level: @group.visibility_level, can_change_visibility_level: can_change_group_visibility_level?(@group), form_model: @group - - = f.submit _('Save changes'), class: 'btn btn-success mt-4 js-dirty-submit', data: { qa_selector: 'save_name_visibility_settings_button' } + .gl-display-flex.gl-justify-content-end + = f.submit _('Save changes'), class: 'btn btn-success mt-4 js-dirty-submit', data: { qa_selector: 'save_name_visibility_settings_button' } diff --git a/app/views/groups/settings/_pages_settings.html.haml b/app/views/groups/settings/_pages_settings.html.haml index 9e1932185da..b6cf05d96ab 100644 --- a/app/views/groups/settings/_pages_settings.html.haml +++ b/app/views/groups/settings/_pages_settings.html.haml @@ -1,5 +1,5 @@ = form_for @group, html: { multipart: true, class: 'gl-show-field-errors' }, authenticity_token: true do |f| = render_if_exists 'shared/pages/max_pages_size_input', form: f - .prepend-top-10 + .gl-mt-3 = f.submit s_('GitLabPages|Save'), class: 'btn btn-success' diff --git a/app/views/groups/settings/_permanent_deletion.html.haml b/app/views/groups/settings/_permanent_deletion.html.haml index 155efc03ffe..063ff6dd132 100644 --- a/app/views/groups/settings/_permanent_deletion.html.haml +++ b/app/views/groups/settings/_permanent_deletion.html.haml @@ -5,5 +5,5 @@ = _('Removing this group also removes all child projects, including archived projects, and their resources.') %br %strong= _('Removed group can not be restored!') - - = button_to _('Remove group'), '#', class: 'btn btn-remove js-confirm-danger', data: { 'confirm-danger-message' => remove_group_message(group) } + .gl-display-flex.gl-justify-content-end + = button_to _('Remove group'), '#', class: 'btn btn-remove js-confirm-danger', data: { 'confirm-danger-message' => remove_group_message(group) } diff --git a/app/views/groups/settings/_permissions.html.haml b/app/views/groups/settings/_permissions.html.haml index 507246d573e..86f49672d66 100644 --- a/app/views/groups/settings/_permissions.html.haml +++ b/app/views/groups/settings/_permissions.html.haml @@ -37,8 +37,9 @@ = render 'groups/settings/default_branch_protection', f: f, group: @group = render 'groups/settings/project_creation_level', f: f, group: @group = render 'groups/settings/subgroup_creation_level', f: f, group: @group + = render_if_exists 'groups/settings/prevent_forking', f: f, group: @group = render 'groups/settings/two_factor_auth', f: f = render_if_exists 'groups/personal_access_token_expiration_policy', f: f, group: @group = render_if_exists 'groups/member_lock_setting', f: f, group: @group - - = f.submit _('Save changes'), class: 'btn btn-success gl-mt-3 js-dirty-submit', data: { qa_selector: 'save_permissions_changes_button' } + .gl-display-flex.gl-justify-content-end + = f.submit _('Save changes'), class: 'btn btn-success gl-mt-3 js-dirty-submit', data: { qa_selector: 'save_permissions_changes_button' } diff --git a/app/views/groups/settings/ci_cd/_auto_devops_form.html.haml b/app/views/groups/settings/ci_cd/_auto_devops_form.html.haml index e7efc0237c8..2b5019222f8 100644 --- a/app/views/groups/settings/ci_cd/_auto_devops_form.html.haml +++ b/app/views/groups/settings/ci_cd/_auto_devops_form.html.haml @@ -12,4 +12,4 @@ .form-text.text-muted = s_('GroupSettings|The Auto DevOps pipeline will run if no alternative CI configuration file is found.') = link_to _('More information'), help_page_path('topics/autodevops/index.md'), target: '_blank' - = f.submit _('Save changes'), class: 'btn btn-success prepend-top-15' + = f.submit _('Save changes'), class: 'btn btn-success gl-mt-5' diff --git a/app/views/groups/sidebar/_packages.html.haml b/app/views/groups/sidebar/_packages.html.haml index 59061a048b3..54510d5df0c 100644 --- a/app/views/groups/sidebar/_packages.html.haml +++ b/app/views/groups/sidebar/_packages.html.haml @@ -1,16 +1,23 @@ -- if group_container_registry_nav? - = nav_link(controller: 'groups/registry/repositories') do - = link_to group_container_registries_path(@group), title: _('Container Registry') do +- packages_link = group_packages_list_nav? ? group_packages_path(@group) : group_container_registries_path(@group) + +- if group_packages_nav? + = nav_link(controller: ['groups/packages', 'groups/registry/repositories']) do + = link_to packages_link, title: _('Packages') do .nav-icon-container = sprite_icon('package') %span.nav-item-name = _('Packages & Registries') %ul.sidebar-sub-level-items - = nav_link(controller: 'groups/registry/repositories', html_options: { class: "fly-out-top-item" } ) do - = link_to group_container_registries_path(@group), title: _('Container Registry') do + = nav_link(controller: [:packages, :repositories], html_options: { class: "fly-out-top-item" } ) do + = link_to packages_link, title: _('Packages & Registries') do %strong.fly-out-top-item-name = _('Packages & Registries') %li.divider.fly-out-top-item - = nav_link(controller: 'groups/registry/repositories') do - = link_to group_container_registries_path(@group), title: _('Container Registry') do - %span= _('Container Registry') + - if group_packages_list_nav? + = nav_link(controller: 'groups/packages') do + = link_to group_packages_path(@group), title: _('Packages') do + %span= _('Package Registry') + - if group_container_registry_nav? + = nav_link(controller: 'groups/registry/repositories') do + = link_to group_container_registries_path(@group), title: _('Container Registry') do + %span= _('Container Registry') |