_home_panel.html.haml 4.92 KB
Newer Older
1
- empty_repo = @project.empty_repo?
2
- show_auto_devops_callout = show_auto_devops_callout?(@project)
3
- emails_disabled = @project.emails_disabled?
4
- cache_enabled = Feature.enabled?(:cache_home_panel, @project, type: :development, default_enabled: :yaml)
5

6
.project-home-panel.js-show-on-project-root.gl-my-5{ class: [("empty-project" if empty_repo)] }
7 8
  .gl-display-flex.gl-justify-content-space-between.gl-flex-wrap.gl-sm-flex-direction-column.gl-mb-3
    .home-panel-title-row.gl-display-flex
9
      %div{ class: 'avatar-container rect-avatar s64 home-panel-avatar gl-flex-shrink-0 gl-w-11 gl-h-11 gl-mr-3! float-none' }
10
        = project_icon(@project, alt: @project.name, class: 'avatar avatar-tile s64', width: 64, height: 64, itemprop: 'image')
11 12
      .d-flex.flex-column.flex-wrap.align-items-baseline
        .d-inline-flex.align-items-baseline
13
          %h1.home-panel-title.gl-mt-3.gl-mb-2.gl-font-size-h1.gl-line-height-24.gl-font-weight-bold.gl-ml-3{ data: { qa_selector: 'project_name_content' }, itemprop: 'name' }
14
            = @project.name
15
            %span.visibility-icon.text-secondary.gl-ml-2.has-tooltip{ data: { container: 'body' }, title: visibility_icon_description(@project) }
16
              = visibility_level_icon(@project.visibility_level, options: { class: 'icon' })
17
            = render_if_exists 'compliance_management/compliance_framework/compliance_framework_badge', project: @project
18
        .home-panel-metadata.d-flex.flex-wrap.text-secondary.gl-font-base.gl-font-weight-normal.gl-line-height-normal
19
          - if can?(current_user, :read_project, @project)
20
            - button_class = "btn gl-button btn-sm btn-tertiary btn-default-tertiary home-panel-metadata"
21 22
            - button_text = s_('ProjectPage|Project ID: %{project_id}') % { project_id: @project.id }
            = clipboard_button(title: s_('ProjectPage|Copy project ID'), text: @project.id, hide_button_icon: true, button_text: button_text, class: button_class, qa_selector: 'project_id_content', itemprop: 'identifier')
23
          - if current_user
Jose Vargas's avatar
Jose Vargas committed
24
            %span.access-request-links.gl-ml-3
25
              = render 'shared/members/access_request_links', source: @project
26

27 28
          .gl-mt-3.gl-pl-3.gl-w-full
            = render "shared/projects/topics", project: @project, cache_enabled: cache_enabled
Martin Wortschack's avatar
Martin Wortschack committed
29

30 31 32
    = cache_if(cache_enabled, [@project, :buttons, current_user, @notification_setting], expires_in: 1.day) do
      .project-repo-buttons.gl-display-flex.gl-justify-content-md-end.gl-align-items-start.gl-flex-wrap.gl-mt-5
        - if current_user
33
          - if current_user.admin?
34
            = link_to [:admin, @project], class: 'btn gl-button btn-icon gl-align-self-start gl-py-2! gl-mr-3', title: _('View project in admin area'),
35 36
              data: {toggle: 'tooltip', placement: 'bottom', container: 'body'} do
              = sprite_icon('admin')
37 38 39
          .gl-display-flex.gl-align-items-start.gl-mr-3
            - if @notification_setting
              .js-vue-notification-dropdown{ data: { button_size: "small", disabled: emails_disabled.to_s, dropdown_items: notification_dropdown_items(@notification_setting).to_json, notification_level: @notification_setting.level, help_page_path: help_page_path('user/profile/notifications'), project_id: @project.id } }
40

41 42 43
        .count-buttons.gl-display-flex.gl-align-items-flex-start
          = render 'projects/buttons/star'
          = render 'projects/buttons/fork'
44

45
  - if can?(current_user, :download_code, @project)
46 47 48 49 50 51 52
    = cache_if(cache_enabled, [@project, :download_code], expires_in: 1.minute) do
      %nav.project-stats
        .nav-links.quick-links
          - if @project.empty_repo?
            = render 'stat_anchor_list', anchors: @project.empty_repo_statistics_anchors
          - else
            = render 'stat_anchor_list', anchors: @project.statistics_anchors(show_auto_devops_callout: show_auto_devops_callout)
53

54
  .home-panel-home-desc.mt-1
55
    - if @project.description.present?
56
      .home-panel-description.text-break
57
        .home-panel-description-markdown.read-more-container{ itemprop: 'description' }
58
          = markdown_field(@project, :description)
59
        %button.btn.gl-button.btn-blank.btn-link.js-read-more-trigger.d-lg-none{ type: "button" }
60 61 62 63
          = _("Read more")

    - if @project.forked?
      %p
64 65
        - source = visible_fork_source(@project)
        - if source
66
          #{ s_('ForkedFromProjectPath|Forked from') }
67
          = link_to source.full_name, project_path(source), data: { qa_selector: 'forked_from_link' }
68
        - else
69
          = s_('ForkedFromProjectPath|Forked from an inaccessible project')
70

71 72
    = render_if_exists "projects/home_mirror"

73
  - if @project.badges.present?
Robert May's avatar
Robert May committed
74 75 76 77 78 79 80 81
    .project-badges.mb-2
      - @project.badges.each do |badge|
        %a.gl-mr-3{ href: badge.rendered_link_url(@project),
          target: '_blank',
          rel: 'noopener noreferrer' }>
          %img.project-badge{ src: badge.rendered_image_url(@project),
            'aria-hidden': true,
            alt: 'Project badge' }>