diff --git a/app/components/add_button_component.html.erb b/app/components/add_button_component.html.erb index bfe3065020dc..179a0cf89981 100644 --- a/app/components/add_button_component.html.erb +++ b/app/components/add_button_component.html.erb @@ -1,9 +1,11 @@ - - <%= icon %> - <%= label %> - - +<%= render(Primer::ButtonComponent.new(scheme: :primary, + aria: { label: aria_label }, + title:, + test_selector:, + tag: :a, + id:, + href: dynamic_path) ) do |button| + button.with_leading_visual_icon(icon: :plus) + label_text +end +%> diff --git a/app/components/add_button_component.rb b/app/components/add_button_component.rb index 3b971f87af90..973e2283ece8 100644 --- a/app/components/add_button_component.rb +++ b/app/components/add_button_component.rb @@ -48,12 +48,6 @@ def title accessibility_label_text end - def label - content_tag(:span, - label_text, - class: "button--text") - end - def aria_label accessibility_label_text end @@ -65,12 +59,4 @@ def accessibility_label_text def label_text raise "Specify the label text to be used for this component" end - - def link_css_class - "button -primary" - end - - def icon - helpers.op_icon("button--icon icon-add") - end end diff --git a/app/components/notifications/index_page_header_component.rb b/app/components/notifications/index_page_header_component.rb index 2589da0ccec6..3af873f9b5db 100644 --- a/app/components/notifications/index_page_header_component.rb +++ b/app/components/notifications/index_page_header_component.rb @@ -47,7 +47,7 @@ def breadcrumb_items end def parent_element - { href: home_path, text: I18n.t(:label_home) } + { href: home_path, text: helpers.organization_name } end end end diff --git a/app/components/projects/index_page_header_component.rb b/app/components/projects/index_page_header_component.rb index 8ca4bc72499c..0e5902d8185c 100644 --- a/app/components/projects/index_page_header_component.rb +++ b/app/components/projects/index_page_header_component.rb @@ -112,6 +112,7 @@ def currently_favored? = query.favored_by?(current_user) def breadcrumb_items [ + { href: home_path, text: helpers.organization_name }, { href: projects_path, text: t(:label_project_plural) }, current_breadcrumb_element ] diff --git a/app/views/activities/index.html.erb b/app/views/activities/index.html.erb index 84c6cd0629e0..0094b403794d 100644 --- a/app/views/activities/index.html.erb +++ b/app/views/activities/index.html.erb @@ -33,8 +33,8 @@ See COPYRIGHT and LICENSE files for more details. render Primer::OpenProject::PageHeader.new do |header| header.with_title { (@author.nil? ? t(:label_activity) : t(:label_user_activity, value: link_to_user(@author))).html_safe } header.with_description { t(:label_date_from_to, start: format_date(@date_to - @days), end: format_date(@date_to-1)) } - header.with_breadcrumbs([{ href: home_path, text: organization_name}, - *([href: project_overview_path(@project.id), text: @project.name] if @project), + header.with_breadcrumbs([*([ href: home_path, text: organization_name ] unless @project), + *([ href: project_overview_path(@project.id), text: @project.name ] if @project), t(:label_activity)]) end %> diff --git a/app/views/homescreen/index.html.erb b/app/views/homescreen/index.html.erb index cd717e8e4442..83f8a84873b0 100644 --- a/app/views/homescreen/index.html.erb +++ b/app/views/homescreen/index.html.erb @@ -33,11 +33,6 @@ See COPYRIGHT and LICENSE files for more details. end %> -

- <%= organization_icon %> - <%= organization_name %> -

- <%= render partial: 'announcements/show' %> <% if @homescreen[:blocks].any? %> diff --git a/app/views/news/index.html.erb b/app/views/news/index.html.erb index 59cd801d4d7b..968d66ba0867 100644 --- a/app/views/news/index.html.erb +++ b/app/views/news/index.html.erb @@ -33,9 +33,9 @@ See COPYRIGHT and LICENSE files for more details. <%= render Primer::OpenProject::PageHeader.new do |header| header.with_title { t(:label_news_plural) } - header.with_breadcrumbs([{ href: home_path, text: organization_name}, - *([href: project_overview_path(@project.id), text: @project.name] if @project), - t(:label_news_plural)]) + header.with_breadcrumbs([*([ href: home_path, text: organization_name ] unless @project), + *([ href: project_overview_path(@project.id), text: @project.name ] if @project), + t(:label_news_plural)]) end %> <% if managable %> diff --git a/modules/boards/app/components/boards/add_button_component.rb b/modules/boards/app/components/boards/add_button_component.rb index fb2eac3cf06e..495cde364bb2 100644 --- a/modules/boards/app/components/boards/add_button_component.rb +++ b/modules/boards/app/components/boards/add_button_component.rb @@ -47,6 +47,10 @@ def id "add-board-button" end + def test_selector + "add-board-button" + end + def accessibility_label_text I18n.t("boards.label_create_new_board") end diff --git a/modules/boards/app/views/boards/boards/index.html.erb b/modules/boards/app/views/boards/boards/index.html.erb index 33c4d40e6ec7..256a0c4ae14b 100644 --- a/modules/boards/app/views/boards/boards/index.html.erb +++ b/modules/boards/app/views/boards/boards/index.html.erb @@ -32,15 +32,15 @@ See COPYRIGHT and LICENSE files for more details. <%= render Primer::OpenProject::PageHeader.new do |header| header.with_title { t("boards.label_boards") } - header.with_breadcrumbs([{ href: home_path, text: organization_name}, - *([href: project_overview_path(@project.id), text: @project.name] if @project), + header.with_breadcrumbs([*([ href: home_path, text: organization_name ] unless @project), + *([ href: project_overview_path(@project.id), text: @project.name ] if @project), t("boards.label_boards")]) end %> <%= render Primer::OpenProject::SubHeader.new do |subheader| - subheader.with_action_component(data: { "test-selector": "add-board-button"}) do + subheader.with_action_component do render Boards::AddButtonComponent.new(current_project: @project) end end diff --git a/modules/boards/spec/features/support/board_index_page.rb b/modules/boards/spec/features/support/board_index_page.rb index 96083f2371c8..bdcae4a11fd8 100644 --- a/modules/boards/spec/features/support/board_index_page.rb +++ b/modules/boards/spec/features/support/board_index_page.rb @@ -59,11 +59,9 @@ def expect_board(name, present: true) def create_board(action: "Basic", title: "#{action} Board", expect_empty: false, via_toolbar: true) if via_toolbar - within '[data-test-selector="add-board-button"]' do - click_link "Board" - end + page.find_test_selector("add-board-button").click else - find('[data-test-selector="boards--create-button"]').click + page.find_test_selector("boards--create-button").click end new_board_page = NewBoard.new diff --git a/modules/boards/spec/features/support/board_list_page.rb b/modules/boards/spec/features/support/board_list_page.rb index 921ae9ad1340..e7720229b8be 100644 --- a/modules/boards/spec/features/support/board_list_page.rb +++ b/modules/boards/spec/features/support/board_list_page.rb @@ -35,15 +35,11 @@ def visit! end def expect_create_button - within '[data-test-selector="add-board-button"]' do - expect(page).to have_link "Board" - end + expect(page).to have_test_selector "add-board-button" end def expect_no_create_button - within '[data-test-selector="add-board-button"]' do - expect(page).to have_no_link "Board" - end + expect(page).not_to have_test_selector "add-board-button" end def expect_delete_buttons(*boards) diff --git a/modules/boards/spec/features/support/board_new_page.rb b/modules/boards/spec/features/support/board_new_page.rb index 869040a692ed..f41ffca0ba24 100644 --- a/modules/boards/spec/features/support/board_new_page.rb +++ b/modules/boards/spec/features/support/board_new_page.rb @@ -13,9 +13,7 @@ def visit! def navigate_by_create_button visit work_package_boards_path unless page.current_path == work_package_boards_path - within '[data-test-selector="add-board-button"]' do - click_link "Board" - end + page.find_test_selector("add-board-button").click end def set_title(title) diff --git a/modules/calendar/app/components/calendar/add_button_component.html.erb b/modules/calendar/app/components/calendar/add_button_component.html.erb deleted file mode 100644 index b1da75b2a660..000000000000 --- a/modules/calendar/app/components/calendar/add_button_component.html.erb +++ /dev/null @@ -1,8 +0,0 @@ - - <%= icon %> - <%= label %> - diff --git a/modules/calendar/app/components/calendar/add_button_component.rb b/modules/calendar/app/components/calendar/add_button_component.rb index 95d23f979aaa..c825653bccea 100644 --- a/modules/calendar/app/components/calendar/add_button_component.rb +++ b/modules/calendar/app/components/calendar/add_button_component.rb @@ -51,6 +51,10 @@ def id "add-calendar-button" end + def test_selector + "add-calendar-button" + end + def accessibility_label_text I18n.t("js.calendar.create_new") end diff --git a/modules/calendar/app/views/calendar/calendars/index.html.erb b/modules/calendar/app/views/calendar/calendars/index.html.erb index 36ac02c23962..f380220465b4 100644 --- a/modules/calendar/app/views/calendar/calendars/index.html.erb +++ b/modules/calendar/app/views/calendar/calendars/index.html.erb @@ -31,15 +31,15 @@ See COPYRIGHT and LICENSE files for more details. <%= render Primer::OpenProject::PageHeader.new do |header| header.with_title { t(:label_calendar_plural) } - header.with_breadcrumbs([{ href: home_path, text: organization_name}, - *([href: project_overview_path(@project.id), text: @project.name] if @project), + header.with_breadcrumbs([*([ href: home_path, text: organization_name ] unless @project), + *([ href: project_overview_path(@project.id), text: @project.name ] if @project), t(:label_calendar_plural)]) end %> <%= render Primer::OpenProject::SubHeader.new do |subheader| - subheader.with_action_component(data: { "test-selector": "add-calendar-button"}) do + subheader.with_action_component do render Calendar::AddButtonComponent.new(current_project: @project) end end diff --git a/modules/calendar/spec/features/calendar_sharing_spec.rb b/modules/calendar/spec/features/calendar_sharing_spec.rb index 46dd7c32aecc..dc75f286c404 100644 --- a/modules/calendar/spec/features/calendar_sharing_spec.rb +++ b/modules/calendar/spec/features/calendar_sharing_spec.rb @@ -140,7 +140,7 @@ it "shows disabled sharing menu item" do visit project_calendars_path(project) - click_link "Create new calendar" + page.find_test_selector("add-calendar-button").click # wait for settings button to become visible expect(page).to have_css("#work-packages-settings-button") diff --git a/modules/calendar/spec/support/pages/calendar.rb b/modules/calendar/spec/support/pages/calendar.rb index 1f04bb41fc4a..be68b344b297 100644 --- a/modules/calendar/spec/support/pages/calendar.rb +++ b/modules/calendar/spec/support/pages/calendar.rb @@ -140,9 +140,7 @@ def click_on_submit end def click_on_create_button - within '[data-test-selector="add-calendar-button"]' do - click_link "Calendar" - end + page.find_test_selector("add-calendar-button").click end def click_on_cancel_button @@ -150,19 +148,19 @@ def click_on_cancel_button end def expect_create_button - expect(page).to have_css ".button", text: "Calendar" + expect(page).to have_test_selector "add-calendar-button" end def expect_no_create_button - expect(page).to have_no_css ".button", text: "Calendar" + expect(page).not_to have_test_selector "add-calendar-button" end def expect_delete_button(query) - expect(page).to have_css "[data-test-selector='calendar-remove-#{query.id}']" + expect(page).to have_test_selector "calendar-remove-#{query.id}" end def expect_no_delete_button(query) - expect(page).to have_no_css "[data-test-selector='calendar-remove-#{query.id}']" + expect(page).not_to have_test_selector "calendar-remove-#{query.id}" end def expect_no_views_visible diff --git a/modules/meeting/app/components/meetings/header_component.rb b/modules/meeting/app/components/meetings/header_component.rb index 08bcba7912fa..4aba72081558 100644 --- a/modules/meeting/app/components/meetings/header_component.rb +++ b/modules/meeting/app/components/meetings/header_component.rb @@ -66,7 +66,7 @@ def parent_element if @project.present? { href: project_overview_path(@project.id), text: @project.name } else - { href: home_path, text: I18n.t(:label_home) } + { href: home_path, text: helpers.organization_name } end end end diff --git a/modules/meeting/app/components/meetings/index_page_header_component.rb b/modules/meeting/app/components/meetings/index_page_header_component.rb index 33c19d89547c..c32223b61a17 100644 --- a/modules/meeting/app/components/meetings/index_page_header_component.rb +++ b/modules/meeting/app/components/meetings/index_page_header_component.rb @@ -50,7 +50,7 @@ def parent_element if @project.present? { href: project_overview_path(@project.id), text: @project.name } else - { href: home_path, text: I18n.t(:label_home) } + { href: home_path, text: helpers.organization_name } end end end diff --git a/modules/meeting/app/views/meetings/new.html.erb b/modules/meeting/app/views/meetings/new.html.erb index 4f732bb526dc..6a1abeaa7b2e 100644 --- a/modules/meeting/app/views/meetings/new.html.erb +++ b/modules/meeting/app/views/meetings/new.html.erb @@ -42,7 +42,7 @@ See COPYRIGHT and LICENSE files for more details. header.with_title { page_title } header.with_breadcrumbs([@project.present? ? { href: project_overview_path(@project.id), text: @project.name } : - { href: home_path, text: I18n.t(:label_home) }, + { href: home_path, text: organization_name }, { href: @project.present? ? project_meetings_path(@project.id) : meetings_path, text: I18n.t(:label_meeting_plural) }, breadcrumb_element.html_safe]) diff --git a/modules/reporting/app/views/cost_reports/index.html.erb b/modules/reporting/app/views/cost_reports/index.html.erb index bfef6d0b984a..5fd3a12c9142 100644 --- a/modules/reporting/app/views/cost_reports/index.html.erb +++ b/modules/reporting/app/views/cost_reports/index.html.erb @@ -38,27 +38,27 @@ See COPYRIGHT and LICENSE files for more details. <%= render Primer::OpenProject::PageHeader.new do |header| header.with_title { render_widget Widget::Controls::QueryName, @query, :can_rename => allowed_in_report?(:rename, @query, current_user) } - header.with_breadcrumbs([{ href: home_path, text: organization_name}, - *([href: project_overview_path(@project.id), text: @project.name] if @project), - t(:label_news_plural)]) - end -%> -<% if User.current.allowed_in_any_work_package?(:export_work_packages, in_project: @project) %> - <%= - render(Primer::OpenProject::SubHeader.new) do |subheader| - subheader.with_action_button(scheme: :default, - aria: { label: t(:export_to_excel)}, - title: t(:export_to_excel), - tag: :a, - href: url_for({ controller: "cost_reports" , action: :index, format: 'xls', project_id: @project }) - ) do |button| + header.with_breadcrumbs([*([ href: home_path, text: organization_name ] unless @project), + *([ href: project_overview_path(@project.id), text: @project.name ] if @project), + { href: url_for({ controller: "cost_reports" , action: :index, project_id: @project }), text: I18n.t(:cost_reports_title)}, + (@query.persisted? ? "#{@query.name}" : t(:label_new_report))]) + + if User.current.allowed_in_any_work_package?(:export_work_packages, in_project: @project) + header.with_action_button(scheme: :default, + aria: { label: t(:export_to_excel)}, + title: t(:export_to_excel), + mobile_icon: "op-file-xls-descriptions", + mobile_label: t(:export_to_excel), + tag: :a, + href: url_for({ controller: "cost_reports" , action: :index, format: 'xls', project_id: @project }) + ) do |button| button.with_leading_visual_icon(icon: "op-file-xls-descriptions") t(:export_to_excel) end + call_hook(:view_cost_report_toolbar) end - %> - <%= call_hook(:view_cost_report_toolbar) %> -<% end %> + end +%> <%= render_widget Widget::Settings, @query, :cost_types => @cost_types, :selected_type_id => @unit_id %> diff --git a/modules/team_planner/app/components/team_planner/add_button_component.rb b/modules/team_planner/app/components/team_planner/add_button_component.rb index 3724dee5c52b..19653b26861c 100644 --- a/modules/team_planner/app/components/team_planner/add_button_component.rb +++ b/modules/team_planner/app/components/team_planner/add_button_component.rb @@ -47,6 +47,10 @@ def id "add-team-planner-button" end + def test_selector + "add-team-planner-button" + end + def accessibility_label_text I18n.t("team_planner.label_create_new_team_planner") end diff --git a/modules/team_planner/app/views/team_planner/team_planner/index.html.erb b/modules/team_planner/app/views/team_planner/team_planner/index.html.erb index a8e6d21fd431..73b03fe6f657 100644 --- a/modules/team_planner/app/views/team_planner/team_planner/index.html.erb +++ b/modules/team_planner/app/views/team_planner/team_planner/index.html.erb @@ -3,15 +3,14 @@ <%= render Primer::OpenProject::PageHeader.new do |header| header.with_title { t('team_planner.label_team_planner_plural') } - header.with_breadcrumbs([{ href: home_path, text: organization_name}, - { href: project_overview_path(@project.id), text: @project.name }, + header.with_breadcrumbs([{ href: project_overview_path(@project.id), text: @project.name }, t('team_planner.label_team_planner_plural')]) end %> <%= render Primer::OpenProject::SubHeader.new do |subheader| - subheader.with_action_component(data: { "test-selector": "add-team-planner-button"}) do + subheader.with_action_component do render ::TeamPlanner::AddButtonComponent.new(current_project: @project) end end diff --git a/modules/team_planner/app/views/team_planner/team_planner/overview.html.erb b/modules/team_planner/app/views/team_planner/team_planner/overview.html.erb index 0cfe3fd8cd6e..a123874b152e 100644 --- a/modules/team_planner/app/views/team_planner/team_planner/overview.html.erb +++ b/modules/team_planner/app/views/team_planner/team_planner/overview.html.erb @@ -9,7 +9,7 @@ <%= render Primer::OpenProject::SubHeader.new do |subheader| - subheader.with_action_component(data: { "test-selector": "add-team-planner-button"}) do + subheader.with_action_component do render ::TeamPlanner::AddButtonComponent.new end end diff --git a/modules/team_planner/spec/features/team_planner_spec.rb b/modules/team_planner/spec/features/team_planner_spec.rb index 5fd1465fc866..b29c0e4304a9 100644 --- a/modules/team_planner/spec/features/team_planner_spec.rb +++ b/modules/team_planner/spec/features/team_planner_spec.rb @@ -43,7 +43,7 @@ end expect(page).to have_content "There is currently nothing to display." - click_on "Create", match: :first + page.find_test_selector("add-team-planner-button").click team_planner.expect_title diff --git a/modules/team_planner/spec/support/pages/team_planner.rb b/modules/team_planner/spec/support/pages/team_planner.rb index 99cbfb085911..637517408968 100644 --- a/modules/team_planner/spec/support/pages/team_planner.rb +++ b/modules/team_planner/spec/support/pages/team_planner.rb @@ -172,15 +172,11 @@ def expect_view_not_rendered(query) end def expect_create_button - within '[data-test-selector="add-team-planner-button"]' do - expect(page).to have_link text: "Team planner" - end + expect(page).to have_test_selector "add-team-planner-button" end def expect_no_create_button - within '[data-test-selector="add-team-planner-button"]' do - expect(page).to have_no_link text: "Team planner" - end + expect(page).not_to have_test_selector "add-team-planner-button" end def expect_views_listed_in_order(*queries) @@ -192,9 +188,7 @@ def expect_views_listed_in_order(*queries) end def click_on_create_button - within '[data-test-selector="add-team-planner-button"]' do - click_link "Team planner" - end + page.find_test_selector("add-team-planner-button").click end def click_on_cancel_button