diff --git a/app/assets/javascripts/label_manager.js b/app/assets/javascripts/label_manager.js index f134a54dd5361efc4651302324d3e7330881ec89..4d304c5fe69fc5fcab067c0b3d2b72c09ebe5c0b 100644 --- a/app/assets/javascripts/label_manager.js +++ b/app/assets/javascripts/label_manager.js @@ -14,13 +14,16 @@ export default class LabelManager { this.errorMessage = 'Unable to update label prioritization at this time'; this.emptyState = document.querySelector('#js-priority-labels-empty-state'); this.$badgeItemTemplate = $('#js-badge-item-template'); - this.sortable = Sortable.create(this.prioritizedLabels.get(0), { - filter: '.empty-message', - forceFallback: true, - fallbackClass: 'is-dragging', - dataIdAttr: 'data-id', - onUpdate: this.onPrioritySortUpdate.bind(this), - }); + + if ('sortable' in this.prioritizedLabels.data()) { + Sortable.create(this.prioritizedLabels.get(0), { + filter: '.empty-message', + forceFallback: true, + fallbackClass: 'is-dragging', + dataIdAttr: 'data-id', + onUpdate: this.onPrioritySortUpdate.bind(this), + }); + } this.bindEvents(); } diff --git a/app/assets/stylesheets/pages/labels.scss b/app/assets/stylesheets/pages/labels.scss index e3d0d0b0fa2e68ad5dc271222e17d67669cd037f..60a840aac1b75a6026446f6205a941a0fb636d6b 100644 --- a/app/assets/stylesheets/pages/labels.scss +++ b/app/assets/stylesheets/pages/labels.scss @@ -75,7 +75,7 @@ padding: 0; margin-bottom: 0; - > li:not(.empty-message):not(.is-not-draggable) { + > li:not(.empty-message):not(.no-border) { background-color: $white-light; margin-bottom: 5px; display: flex; @@ -92,7 +92,7 @@ opacity: 0.3; } - .prioritized-labels & { + .prioritized-labels:not(.is-not-draggable) & { box-shadow: 0 1px 2px $issue-boards-card-shadow; cursor: move; cursor: grab; @@ -353,7 +353,7 @@ @media (max-width: map-get($grid-breakpoints, md)-1) { .manage-labels-list { - > li:not(.empty-message):not(.is-not-draggable) { + > li:not(.empty-message):not(.no-border) { flex-wrap: wrap; } diff --git a/app/views/projects/labels/index.html.haml b/app/views/projects/labels/index.html.haml index bb7c297ba1ffb5e573d34c8df36a48cd5dc509d9..5d73d832170d0c406d1ada39e2987ac27de6b59e 100644 --- a/app/views/projects/labels/index.html.haml +++ b/app/views/projects/labels/index.html.haml @@ -11,29 +11,28 @@ = render 'shared/labels/nav', labels_or_filters: labels_or_filters, can_admin_label: can_admin_label .labels-container.prepend-top-10 - - if can_admin_label - - if search.blank? - %p.text-muted - = _('Labels can be applied to issues and merge requests.') - %br - = _('Star a label to make it a priority label. Order the prioritized labels to change their relative priority, by dragging.') - -# Only show it in the first page - - hide = @available_labels.empty? || (params[:page].present? && params[:page] != '1') - .prioritized-labels{ class: ('hide' if hide) } - %h5.prepend-top-10= _('Prioritized Labels') - .content-list.manage-labels-list.js-prioritized-labels{ "data-url" => set_priorities_project_labels_path(@project) } - #js-priority-labels-empty-state.priority-labels-empty-state{ class: "#{'hidden' unless @prioritized_labels.empty? && search.blank?}" } - = render 'shared/empty_states/priority_labels' - - if @prioritized_labels.present? - = render partial: 'shared/label', subject: @project, collection: @prioritized_labels, as: :label, locals: { force_priority: true } - - elsif search.present? - .nothing-here-block - = _('No prioritised labels with such name or description') + - if can_admin_label && search.blank? + %p.text-muted + = _('Labels can be applied to issues and merge requests.') + %br + = _('Star a label to make it a priority label. Order the prioritized labels to change their relative priority, by dragging.') + + -# Only show it in the first page + - hide = @available_labels.empty? || (params[:page].present? && params[:page] != '1') + .prioritized-labels{ class: [('hide' if hide), ('is-not-draggable' unless can_admin_label)] } + %h5.prepend-top-10= _('Prioritized Labels') + .content-list.manage-labels-list.js-prioritized-labels{ data: { url: set_priorities_project_labels_path(@project), sortable: can_admin_label } } + #js-priority-labels-empty-state.priority-labels-empty-state{ class: "#{'hidden' unless @prioritized_labels.empty? && search.blank?}" } + = render 'shared/empty_states/priority_labels' + - if @prioritized_labels.present? + = render partial: 'shared/label', subject: @project, collection: @prioritized_labels, as: :label, locals: { force_priority: true } + - elsif search.present? + .nothing-here-block + = _('No prioritised labels with such name or description') - if @labels.present? .other-labels - - if can_admin_label - %h5{ class: ('hide' if hide) }= _('Other Labels') + %h5{ class: ('hide' if hide) }= _('Other Labels') .content-list.manage-labels-list.js-other-labels = render partial: 'shared/label', subject: @project, collection: @labels, as: :label = paginate @labels, theme: 'gitlab' diff --git a/app/views/shared/milestones/_labels_tab.html.haml b/app/views/shared/milestones/_labels_tab.html.haml index 6b0640bd8cbc6b227b45e4554af8dea92da4d2c4..ecab037e378d8c59711e5e6321ded62aed9f36ce 100644 --- a/app/views/shared/milestones/_labels_tab.html.haml +++ b/app/views/shared/milestones/_labels_tab.html.haml @@ -2,7 +2,7 @@ - labels.each do |label| - options = { milestone_title: @milestone.title, label_name: label.title } - %li.is-not-draggable + %li.no-border %span.label-row %span.label-name = render_label(label, tooltip: false, link: milestones_label_path(options)) diff --git a/changelogs/unreleased/57247-show-prioritized-labels-to-guests.yml b/changelogs/unreleased/57247-show-prioritized-labels-to-guests.yml new file mode 100644 index 0000000000000000000000000000000000000000..5210ff0ccef640a334b5a66247d2210da4151cd2 --- /dev/null +++ b/changelogs/unreleased/57247-show-prioritized-labels-to-guests.yml @@ -0,0 +1,5 @@ +--- +title: Show prioritized labels to guests +merge_request: 27307 +author: +type: fixed diff --git a/spec/features/projects/labels/update_prioritization_spec.rb b/spec/features/projects/labels/update_prioritization_spec.rb index d36f043f8800eac8e0ecbb0ec468234c8bc5a5dd..f32b155790fcea0a8b4562bd47021795cedd253d 100644 --- a/spec/features/projects/labels/update_prioritization_spec.rb +++ b/spec/features/projects/labels/update_prioritization_spec.rb @@ -138,29 +138,41 @@ describe 'Prioritize labels' do end context 'as a guest' do - it 'does not prioritize labels' do + before do + create(:label_priority, project: project, label: bug, priority: 1) + create(:label_priority, project: project, label: feature, priority: 2) + guest = create(:user) sign_in guest visit project_labels_path(project) + end + it 'cannot prioritize labels' do expect(page).to have_content 'bug' expect(page).to have_content 'wontfix' expect(page).to have_content 'feature' - expect(page).not_to have_css('.prioritized-labels') expect(page).not_to have_content 'Star a label' end + + it 'cannot sort prioritized labels', :js do + drag_to(selector: '.prioritized-labels .label-list-item', from_index: 1, to_index: 2) + + page.within('.prioritized-labels') do + expect(first('.label-list-item')).to have_content('bug') + expect(page.all('.label-list-item').last).to have_content('feature') + end + end end context 'as a non signed in user' do - it 'does not prioritize labels' do + it 'cannot prioritize labels' do visit project_labels_path(project) expect(page).to have_content 'bug' expect(page).to have_content 'wontfix' expect(page).to have_content 'feature' - expect(page).not_to have_css('.prioritized-labels') expect(page).not_to have_content 'Star a label' end end diff --git a/spec/features/projects/labels/user_views_labels_spec.rb b/spec/features/projects/labels/user_views_labels_spec.rb index 2c8267764bd0470bdaa0ce43b1ce9f87b854f217..a6f7968c535f89f59dbf29cfe5626ed441afa694 100644 --- a/spec/features/projects/labels/user_views_labels_spec.rb +++ b/spec/features/projects/labels/user_views_labels_spec.rb @@ -7,6 +7,7 @@ describe "User views labels" do set(:user) { create(:user) } let(:label_titles) { %w[bug enhancement feature] } + let!(:prioritized_label) { create(:label, project: project, title: 'prioritized-label-name', priority: 1) } before do label_titles.each { |title| create(:label, project: project, title: title) } @@ -18,6 +19,10 @@ describe "User views labels" do end it "shows all labels" do + page.within('.prioritized-labels .manage-labels-list') do + expect(page).to have_content('prioritized-label-name') + end + page.within('.other-labels .manage-labels-list') do label_titles.each { |title| expect(page).to have_content(title) } end