Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/helpers/nav/top_nav_helper.rb')
-rw-r--r--app/helpers/nav/top_nav_helper.rb340
1 files changed, 0 insertions, 340 deletions
diff --git a/app/helpers/nav/top_nav_helper.rb b/app/helpers/nav/top_nav_helper.rb
deleted file mode 100644
index d74efac76aa..00000000000
--- a/app/helpers/nav/top_nav_helper.rb
+++ /dev/null
@@ -1,340 +0,0 @@
-# frozen_string_literal: true
-
-module Nav
- module TopNavHelper
- PROJECTS_VIEW = :projects
- GROUPS_VIEW = :groups
- NEW_VIEW = :new
- SEARCH_VIEW = :search
-
- def top_nav_view_model(project:, group:)
- builder = ::Gitlab::Nav::TopNavViewModelBuilder.new
-
- build_base_view_model(builder: builder, project: project, group: group)
-
- builder.build
- end
-
- def top_nav_responsive_view_model(project:, group:)
- builder = ::Gitlab::Nav::TopNavViewModelBuilder.new
-
- build_base_view_model(builder: builder, project: project, group: group)
-
- new_view_model = new_dropdown_view_model(project: project, group: group)
-
- if new_view_model && new_view_model.fetch(:menu_sections)&.any?
- builder.add_view(NEW_VIEW, new_view_model)
- end
-
- if top_nav_show_search
- builder.add_view(SEARCH_VIEW, ::Gitlab::Nav::TopNavMenuItem.build(**top_nav_search_menu_item_attrs))
- end
-
- builder.build
- end
-
- def top_nav_show_search
- header_link?(:search)
- end
-
- def top_nav_search_menu_item_attrs
- {
- id: 'search',
- title: _('Search'),
- icon: 'search',
- href: search_context.search_url
- }
- end
-
- private
-
- def top_nav_localized_headers
- {
- explore: s_('TopNav|Explore'),
- switch_to: s_('TopNav|Switch to')
- }.freeze
- end
-
- def build_base_view_model(builder:, project:, group:)
- if current_user
- build_view_model(builder: builder, project: project, group: group)
- else
- build_anonymous_view_model(builder: builder)
- end
- end
-
- def build_anonymous_view_model(builder:)
- if explore_nav_link?(:projects)
- builder.add_primary_menu_item_with_shortcut(
- header: top_nav_localized_headers[:explore],
- href: explore_root_path,
- active: nav == 'project' || active_nav_link?(path: %w[dashboard#show root#show projects#trending projects#starred projects#index]),
- **projects_menu_item_attrs
- )
- end
-
- if explore_nav_link?(:groups)
- builder.add_primary_menu_item_with_shortcut(
- header: top_nav_localized_headers[:explore],
- href: explore_groups_path,
- active: nav == 'group' || active_nav_link?(controller: [:groups, 'groups/milestones', 'groups/group_members']),
- **groups_menu_item_attrs
- )
- end
-
- if explore_nav_link?(:topics)
- builder.add_primary_menu_item_with_shortcut(
- header: top_nav_localized_headers[:explore],
- active: active_nav_link?(page: topics_explore_projects_path, path: 'projects#topic'),
- href: topics_explore_projects_path,
- **topics_menu_item_attrs
- )
- end
-
- if explore_nav_link?(:snippets)
- builder.add_primary_menu_item_with_shortcut(
- header: top_nav_localized_headers[:explore],
- active: active_nav_link?(controller: :snippets),
- href: explore_snippets_path,
- **snippets_menu_item_attrs
- )
- end
- end
-
- def build_view_model(builder:, project:, group:)
- # These come from `app/views/layouts/nav/_dashboard.html.haml`
- if dashboard_nav_link?(:projects)
- current_item = project ? current_project(project: project) : {}
-
- builder.add_primary_menu_item_with_shortcut(
- header: top_nav_localized_headers[:switch_to],
- active: nav == 'project' || active_nav_link?(path: %w[root#index projects#trending projects#starred dashboard/projects#index]),
- data: { track_label: "projects_dropdown", track_action: "click_dropdown", track_property: "navigation_top", testid: "projects_dropdown" },
- view: PROJECTS_VIEW,
- shortcut_href: dashboard_projects_path,
- **projects_menu_item_attrs
- )
- builder.add_view(PROJECTS_VIEW, container_view_props(namespace: 'projects', current_item: current_item, submenu: projects_submenu))
- end
-
- if dashboard_nav_link?(:groups)
- current_item = group ? current_group(group: group) : {}
-
- builder.add_primary_menu_item_with_shortcut(
- header: top_nav_localized_headers[:switch_to],
- active: nav == 'group' || active_nav_link?(path: %w[dashboard/groups explore/groups]),
- data: { track_label: "groups_dropdown", track_action: "click_dropdown", track_property: "navigation_top", testid: "groups_dropdown" },
- view: GROUPS_VIEW,
- shortcut_href: dashboard_groups_path,
- **groups_menu_item_attrs
- )
- builder.add_view(GROUPS_VIEW, container_view_props(namespace: 'groups', current_item: current_item, submenu: groups_submenu))
- end
-
- if dashboard_nav_link?(:your_work)
- builder.add_primary_menu_item(
- id: 'your-work',
- header: top_nav_localized_headers[:switch_to],
- title: _('Your work'),
- href: dashboard_projects_path,
- active: active_nav_link?(controller: []),
- icon: 'work',
- data: { **menu_data_tracking_attrs('your-work') }
- )
- end
-
- if dashboard_nav_link?(:explore)
- builder.add_primary_menu_item(
- id: 'explore',
- header: top_nav_localized_headers[:switch_to],
- title: _('Explore'),
- href: explore_projects_path,
- active: active_nav_link?(controller: ["explore/groups", "explore/snippets"], page: ["/explore/projects", "/explore", "/explore/projects/topics"], path: ["projects#topic"]),
- icon: 'compass',
- data: { **menu_data_tracking_attrs('explore') }
- )
- end
-
- if dashboard_nav_link?(:milestones)
- builder.add_shortcut(
- id: 'milestones-shortcut',
- title: _('Milestones'),
- href: dashboard_milestones_path,
- css_class: 'dashboard-shortcuts-milestones'
- )
- end
-
- if dashboard_nav_link?(:snippets)
- builder.add_shortcut(
- id: 'snippets-shortcut',
- title: _('Snippets'),
- href: dashboard_snippets_path,
- css_class: 'dashboard-shortcuts-snippets'
- )
- end
-
- if dashboard_nav_link?(:activity)
- builder.add_shortcut(
- id: 'activity-shortcut',
- title: _('Activity'),
- href: activity_dashboard_path,
- css_class: 'dashboard-shortcuts-activity'
- )
- end
-
- # Using admin? is generally discouraged because it does not check for
- # "admin_mode". In this case we are migrating code and check both, so
- # we should be good.
- # rubocop: disable Cop/UserAdmin
- if current_user&.admin?
- title = _('Admin')
-
- builder.add_secondary_menu_item(
- id: 'admin',
- title: title,
- active: active_nav_link?(controller: 'admin/dashboard'),
- icon: 'admin',
- href: admin_root_path,
- data: { qa_selector: 'admin_area_link', **menu_data_tracking_attrs(title) }
- )
- end
-
- if Gitlab::CurrentSettings.admin_mode
- if header_link?(:admin_mode)
- builder.add_secondary_menu_item(
- id: 'leave_admin_mode',
- title: _('Leave admin mode'),
- active: active_nav_link?(controller: 'admin/sessions'),
- icon: 'lock-open',
- href: destroy_admin_session_path,
- data: { method: 'post', **menu_data_tracking_attrs('leave_admin_mode') }
- )
- elsif current_user.admin?
- title = _('Enter admin mode')
-
- builder.add_secondary_menu_item(
- id: 'enter_admin_mode',
- title: title,
- active: active_nav_link?(controller: 'admin/sessions'),
- icon: 'lock',
- href: new_admin_session_path,
- data: { testid: 'menu_item_link', qa_title: title, **menu_data_tracking_attrs(title) }
- )
- end
- end
- # rubocop: enable Cop/UserAdmin
- end
-
- def projects_menu_item_attrs
- {
- id: 'project',
- title: _('Projects'),
- icon: 'project',
- shortcut_class: 'dashboard-shortcuts-projects'
- }
- end
-
- def groups_menu_item_attrs
- {
- id: 'groups',
- title: _('Groups'),
- icon: 'group',
- shortcut_class: 'dashboard-shortcuts-groups'
- }
- end
-
- def topics_menu_item_attrs
- {
- id: 'topics',
- title: _('Topics'),
- icon: 'labels',
- shortcut_class: 'dashboard-shortcuts-topics'
- }
- end
-
- def snippets_menu_item_attrs
- {
- id: 'snippets',
- title: _('Snippets'),
- icon: 'snippet',
- shortcut_class: 'dashboard-shortcuts-snippets'
- }
- end
-
- def menu_data_tracking_attrs(label)
- tracking_attrs(
- "menu_#{label.underscore.parameterize(separator: '_')}",
- 'click_dropdown',
- 'navigation_top'
- )[:data] || {}
- end
-
- def container_view_props(namespace:, current_item:, submenu:)
- {
- namespace: namespace,
- currentUserName: current_user&.username,
- currentItem: current_item,
- linksPrimary: submenu[:primary],
- linksSecondary: submenu[:secondary]
- }
- end
-
- def current_project(project:)
- return {} unless project.persisted?
-
- {
- id: project.id,
- name: project.name,
- namespace: project.full_name,
- webUrl: project_path(project),
- avatarUrl: project.avatar_url
- }
- end
-
- def current_group(group:)
- return {} unless group.persisted?
-
- {
- id: group.id,
- name: group.name,
- namespace: group.full_name,
- webUrl: group_path(group),
- avatarUrl: group.avatar_url
- }
- end
-
- def projects_submenu
- builder = ::Gitlab::Nav::TopNavMenuBuilder.new
- projects_submenu_items(builder: builder)
- builder.build
- end
-
- def projects_submenu_items(builder:)
- title = _('View all projects')
-
- builder.add_primary_menu_item(
- id: 'your',
- title: title,
- href: dashboard_projects_path,
- data: { testid: 'menu_item_link', qa_title: title, **menu_data_tracking_attrs(title) }
- )
- end
-
- def groups_submenu
- # These group links come from `app/views/layouts/nav/groups_dropdown/_show.html.haml`
- builder = ::Gitlab::Nav::TopNavMenuBuilder.new
-
- title = _('View all groups')
-
- builder.add_primary_menu_item(
- id: 'your',
- title: title,
- href: dashboard_groups_path,
- data: { testid: 'menu_item_link', qa_title: title, **menu_data_tracking_attrs(title) }
- )
- builder.build
- end
- end
-end
-
-Nav::TopNavHelper.prepend_mod