Commit 41b5bfa5 authored by Enrique Alcantara's avatar Enrique Alcantara

Update gitlab-ui with new version of bootstrap-vue

- Migrate components to new GlTable slot syntax
- Fix feature tests that made obsolete assertions on the
tooltip component
- Migrate components to new GlTabs slot syntax
- Fix bugs caused by the new Tooltip and Popover components
- Fix bugs introduced by the new modal component.
parent bca8d5c7
...@@ -297,17 +297,17 @@ export default { ...@@ -297,17 +297,17 @@ export default {
stacked="sm" stacked="sm"
tbody-tr-class="table-row mb-4" tbody-tr-class="table-row mb-4"
> >
<template v-slot:head(error)> <template #head(error)>
<div class="d-none d-sm-block">{{ __('Open errors') }}</div> <div class="d-none d-sm-block">{{ __('Open errors') }}</div>
</template> </template>
<template v-slot:head(events)="data"> <template #head(events)="data">
<div class="text-sm-right">{{ data.label }}</div> <div class="text-sm-right">{{ data.label }}</div>
</template> </template>
<template v-slot:head(users)="data"> <template #head(users)="data">
<div class="text-sm-right">{{ data.label }}</div> <div class="text-sm-right">{{ data.label }}</div>
</template> </template>
<template v-slot:error="errors"> <template #cell(error)="errors">
<div class="d-flex flex-column"> <div class="d-flex flex-column">
<gl-link class="d-flex mw-100 text-dark" :href="getDetailsLink(errors.item.id)"> <gl-link class="d-flex mw-100 text-dark" :href="getDetailsLink(errors.item.id)">
<strong class="text-truncate">{{ errors.item.title.trim() }}</strong> <strong class="text-truncate">{{ errors.item.title.trim() }}</strong>
...@@ -317,20 +317,20 @@ export default { ...@@ -317,20 +317,20 @@ export default {
</span> </span>
</div> </div>
</template> </template>
<template v-slot:events="errors"> <template #cell(events)="errors">
<div class="text-right">{{ errors.item.count }}</div> <div class="text-right">{{ errors.item.count }}</div>
</template> </template>
<template v-slot:users="errors"> <template #cell(users)="errors">
<div class="text-right">{{ errors.item.userCount }}</div> <div class="text-right">{{ errors.item.userCount }}</div>
</template> </template>
<template v-slot:lastSeen="errors"> <template #cell(lastSeen)="errors">
<div class="text-md-left text-right"> <div class="text-md-left text-right">
<time-ago :time="errors.item.lastSeen" class="text-secondary" /> <time-ago :time="errors.item.lastSeen" class="text-secondary" />
</div> </div>
</template> </template>
<template v-slot:ignore="errors"> <template #cell(ignore)="errors">
<gl-button <gl-button
ref="ignoreError" ref="ignoreError"
v-gl-tooltip.hover v-gl-tooltip.hover
...@@ -340,7 +340,7 @@ export default { ...@@ -340,7 +340,7 @@ export default {
<gl-icon name="eye-slash" :size="12" /> <gl-icon name="eye-slash" :size="12" />
</gl-button> </gl-button>
</template> </template>
<template v-slot:resolved="errors"> <template #cell(resolved)="errors">
<gl-button <gl-button
ref="resolveError" ref="resolveError"
v-gl-tooltip v-gl-tooltip
...@@ -350,7 +350,7 @@ export default { ...@@ -350,7 +350,7 @@ export default {
<gl-icon name="check-circle" :size="12" /> <gl-icon name="check-circle" :size="12" />
</gl-button> </gl-button>
</template> </template>
<template v-slot:details="errors"> <template #cell(details)="errors">
<gl-button <gl-button
:href="getDetailsLink(errors.item.id)" :href="getDetailsLink(errors.item.id)"
variant="outline-info" variant="outline-info"
...@@ -359,7 +359,7 @@ export default { ...@@ -359,7 +359,7 @@ export default {
{{ __('More details') }} {{ __('More details') }}
</gl-button> </gl-button>
</template> </template>
<template v-slot:empty> <template #empty>
{{ __('No errors to display.') }} {{ __('No errors to display.') }}
<gl-link class="js-try-again" @click="restartPolling"> <gl-link class="js-try-again" @click="restartPolling">
{{ __('Check again') }} {{ __('Check again') }}
......
...@@ -128,8 +128,8 @@ export default { ...@@ -128,8 +128,8 @@ export default {
@click="handleSuggestDismissed" @click="handleSuggestDismissed"
/> />
<gl-popover <gl-popover
v-if="showSuggestPopover" v-if="showSuggestPopover && $refs.suggestButton"
:target="() => $refs.suggestButton" :target="$refs.suggestButton"
:css-classes="['diff-suggest-popover']" :css-classes="['diff-suggest-popover']"
placement="bottom" placement="bottom"
:show="showSuggestPopover" :show="showSuggestPopover"
......
...@@ -82,7 +82,7 @@ export default { ...@@ -82,7 +82,7 @@ export default {
stacked="sm" stacked="sm"
thead-class="thead-white border-bottom" thead-class="thead-white border-bottom"
> >
<template #mr_details="items"> <template #cell(mr_details)="items">
<div class="d-flex flex-column flex-grow align-items-end align-items-sm-start"> <div class="d-flex flex-column flex-grow align-items-end align-items-sm-start">
<div class="mr-title str-truncated my-2"> <div class="mr-title str-truncated my-2">
<gl-link :href="items.item.web_url" target="_blank" class="font-weight-bold text-plain">{{ <gl-link :href="items.item.web_url" target="_blank" class="font-weight-bold text-plain">{{
...@@ -102,7 +102,7 @@ export default { ...@@ -102,7 +102,7 @@ export default {
</div> </div>
</template> </template>
<template #review_time="{ value }"> <template #cell(review_time)="{ value }">
<template v-if="value"> <template v-if="value">
{{ formatReviewTime(value) }} {{ formatReviewTime(value) }}
</template> </template>
...@@ -111,17 +111,17 @@ export default { ...@@ -111,17 +111,17 @@ export default {
</template> </template>
</template> </template>
<template #author="{ value }"> <template #cell(author)="{ value }">
<gl-avatar-link target="blank" :href="value.web_url"> <gl-avatar-link target="blank" :href="value.web_url">
<gl-avatar :size="24" :src="value.avatar_url" :entity-name="value.name" /> <gl-avatar :size="24" :src="value.avatar_url" :entity-name="value.name" />
</gl-avatar-link> </gl-avatar-link>
</template> </template>
<template #diff_stats="{ value }"> <template #cell(diff_stats)="{ value }">
<span>{{ value.commits_count }}</span> <span>{{ value.commits_count }}</span>
</template> </template>
<template #line_changes="items"> <template #cell(line_changes)="items">
<span class="font-weight-bold cgreen"> +{{ items.item.diff_stats.additions }} </span> <span class="font-weight-bold cgreen"> +{{ items.item.diff_stats.additions }} </span>
<span class="font-weight-bold cred"> -{{ items.item.diff_stats.deletions }} </span> <span class="font-weight-bold cred"> -{{ items.item.diff_stats.deletions }} </span>
</template> </template>
......
...@@ -42,7 +42,7 @@ export default { ...@@ -42,7 +42,7 @@ export default {
:size="14" :size="14"
/> />
<gl-popover <gl-popover
:target="() => $refs.reportInfo" :target="() => $refs.reportInfo.$el"
placement="top" placement="top"
triggers="click blur" triggers="click blur"
:title="title" :title="title"
......
...@@ -107,26 +107,26 @@ export default { ...@@ -107,26 +107,26 @@ export default {
head-variant="white" head-variant="white"
> >
<!-- column: Project --> <!-- column: Project -->
<template slot="project" slot-scope="data"> <template #cell(project)="data">
<a :href="`/${data.value.path_with_namespace}`">{{ data.value.name }}</a> <a :href="`/${data.value.path_with_namespace}`">{{ data.value.name }}</a>
</template> </template>
<!-- column: Name --> <!-- column: Name -->
<template slot="name" slot-scope="row"> <template #cell(name)="row">
<a :href="`${row.item.environmentPath}`">{{ row.item.name }}</a> <a :href="`${row.item.environmentPath}`">{{ row.item.name }}</a>
</template> </template>
<!-- column: Job --> <!-- column: Job -->
<template slot="lastDeployment" slot-scope="data"> <template #cell(lastDeployment)="data">
{{ __('deploy') }} #{{ data.value.id }} {{ __('deploy') }} #{{ data.value.id }}
</template> </template>
<!-- column: Pods in use --> <!-- column: Pods in use -->
<template slot="HEAD_rolloutStatus" slot-scope="data"> <template #head(rolloutStatus)="data">
{{ data.label }} <span class="badge badge-pill pods-badge bold">{{ podsInUseCount }}</span> {{ data.label }} <span class="badge badge-pill pods-badge bold">{{ podsInUseCount }}</span>
</template> </template>
<template slot="rolloutStatus" slot-scope="row"> <template #cell(rolloutStatus)="row">
<!-- Loading Rollout --> <!-- Loading Rollout -->
<gl-loading-icon <gl-loading-icon
v-if="isLoadingRollout(row.item.rolloutStatus)" v-if="isLoadingRollout(row.item.rolloutStatus)"
...@@ -160,7 +160,7 @@ export default { ...@@ -160,7 +160,7 @@ export default {
</template> </template>
<!-- column: Last updated --> <!-- column: Last updated -->
<template slot="updatedAt" slot-scope="data"> <template #cell(updatedAt)="data">
<time-ago :time="data.value" /> <time-ago :time="data.value" />
</template> </template>
</gl-table> </gl-table>
......
...@@ -159,7 +159,7 @@ export default { ...@@ -159,7 +159,7 @@ export default {
</template> </template>
<paginated-dependencies-table :namespace="listType.namespace" /> <paginated-dependencies-table :namespace="listType.namespace" />
</gl-tab> </gl-tab>
<template #tabs> <template #tabs-end>
<li class="d-flex align-items-center ml-sm-auto"> <li class="d-flex align-items-center ml-sm-auto">
<dependencies-actions :namespace="currentList" class="my-2 my-sm-0" /> <dependencies-actions :namespace="currentList" class="my-2 my-sm-0" />
</li> </li>
......
<script> <script>
import _ from 'underscore'; import _ from 'underscore';
import { GlButton, GlTooltipDirective, GlModalDirective, GlModal, GlToggle } from '@gitlab/ui'; import { GlButton, GlTooltipDirective, GlModal, GlToggle } from '@gitlab/ui';
import { sprintf, s__ } from '~/locale'; import { sprintf, s__ } from '~/locale';
import Icon from '~/vue_shared/components/icon.vue'; import Icon from '~/vue_shared/components/icon.vue';
import glFeatureFlagMixin from '~/vue_shared/mixins/gl_feature_flags_mixin'; import glFeatureFlagMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
...@@ -14,7 +14,6 @@ export default { ...@@ -14,7 +14,6 @@ export default {
GlToggle, GlToggle,
}, },
directives: { directives: {
GlModalDirective,
GlTooltip: GlTooltipDirective, GlTooltip: GlTooltipDirective,
}, },
mixins: [glFeatureFlagMixin()], mixins: [glFeatureFlagMixin()],
...@@ -90,6 +89,8 @@ export default { ...@@ -90,6 +89,8 @@ export default {
setDeleteModalData(featureFlag) { setDeleteModalData(featureFlag) {
this.deleteFeatureFlagUrl = featureFlag.destroy_path; this.deleteFeatureFlagUrl = featureFlag.destroy_path;
this.deleteFeatureFlagName = featureFlag.name; this.deleteFeatureFlagName = featureFlag.name;
this.$refs[this.modalId].show();
}, },
onSubmit() { onSubmit() {
this.$refs.form.submit(); this.$refs.form.submit();
...@@ -189,7 +190,6 @@ export default { ...@@ -189,7 +190,6 @@ export default {
<template v-if="featureFlag.destroy_path"> <template v-if="featureFlag.destroy_path">
<gl-button <gl-button
v-gl-tooltip.hover.bottom="__('Delete')" v-gl-tooltip.hover.bottom="__('Delete')"
v-gl-modal-directive="modalId"
class="js-feature-flag-delete-button" class="js-feature-flag-delete-button"
variant="danger" variant="danger"
:disabled="!canDeleteFlag(featureFlag)" :disabled="!canDeleteFlag(featureFlag)"
...@@ -204,6 +204,7 @@ export default { ...@@ -204,6 +204,7 @@ export default {
</template> </template>
<gl-modal <gl-modal
:ref="modalId"
:title="modalTitle" :title="modalTitle"
:ok-title="s__('FeatureFlags|Delete feature flag')" :ok-title="s__('FeatureFlags|Delete feature flag')"
:modal-id="modalId" :modal-id="modalId"
......
...@@ -261,7 +261,7 @@ export default { ...@@ -261,7 +261,7 @@ export default {
:items="filesTableRows" :items="filesTableRows"
tbody-tr-class="js-file-row" tbody-tr-class="js-file-row"
> >
<template #name="items"> <template #cell(name)="items">
<gl-icon name="doc-code" class="space-right" /> <gl-icon name="doc-code" class="space-right" />
<gl-link <gl-link
:href="items.item.downloadPath" :href="items.item.downloadPath"
...@@ -272,7 +272,7 @@ export default { ...@@ -272,7 +272,7 @@ export default {
</gl-link> </gl-link>
</template> </template>
<template #created="items"> <template #cell(created)="items">
<span v-gl-tooltip :title="tooltipTitle(items.item.created)">{{ <span v-gl-tooltip :title="tooltipTitle(items.item.created)">{{
timeFormatted(items.item.created) timeFormatted(items.item.created)
}}</span> }}</span>
......
...@@ -190,7 +190,7 @@ export default { ...@@ -190,7 +190,7 @@ export default {
:no-local-sorting="true" :no-local-sorting="true"
stacked="md" stacked="md"
> >
<template #name="{value, item}"> <template #cell(name)="{value, item}">
<div ref="col-name" class="flex-truncate-parent"> <div ref="col-name" class="flex-truncate-parent">
<a <a
:href="item._links.web_path" :href="item._links.web_path"
...@@ -202,21 +202,21 @@ export default { ...@@ -202,21 +202,21 @@ export default {
</div> </div>
</template> </template>
<template #project="{value}"> <template #cell(project)="{value}">
<div ref="col-project" class="flex-truncate-parent"> <div ref="col-project" class="flex-truncate-parent">
<a :href="value" class="flex-truncate-child"> {{ value }} </a> <a :href="value" class="flex-truncate-child"> {{ value }} </a>
</div> </div>
</template> </template>
<template #version="{value}"> <template #cell(version)="{value}">
{{ value }} {{ value }}
</template> </template>
<template #package_type="{value}"> <template #cell(package_type)="{value}">
{{ value }} {{ value }}
</template> </template>
<template #created_at="{value}"> <template #cell(created_at)="{value}">
<time-ago-tooltip :time="value" /> <time-ago-tooltip :time="value" />
</template> </template>
<template #actions="{item}"> <template #cell(actions)="{item}">
<gl-button <gl-button
ref="action-delete" ref="action-delete"
variant="danger" variant="danger"
......
...@@ -39,7 +39,7 @@ export default { ...@@ -39,7 +39,7 @@ export default {
<div class="prepend-top-default"> <div class="prepend-top-default">
<gl-skeleton-loading v-if="isInitialLoadInProgress" /> <gl-skeleton-loading v-if="isInitialLoadInProgress" />
<gl-table v-else :items="members" :fields="$options.fields"> <gl-table v-else :items="members" :fields="$options.fields">
<template #name="{ item }"> <template #cell(name)="{ item }">
<span class="d-flex"> <span class="d-flex">
<gl-avatar v-gl-tooltip :src="item.avatar_url" :size="48" /> <gl-avatar v-gl-tooltip :src="item.avatar_url" :size="48" />
<div class="ml-2"> <div class="ml-2">
...@@ -57,7 +57,7 @@ export default { ...@@ -57,7 +57,7 @@ export default {
</div> </div>
</span> </span>
</template> </template>
<template #identity="{ value }"> <template #cell(identity)="{ value }">
<span class="font-weight-bold">{{ value }}</span> <span class="font-weight-bold">{{ value }}</span>
</template> </template>
</gl-table> </gl-table>
......
...@@ -126,15 +126,15 @@ export default { ...@@ -126,15 +126,15 @@ export default {
thead-class="thead-white" thead-class="thead-white"
class="js-vulnerabilities-chart-severity-level-breakdown mb-2" class="js-vulnerabilities-chart-severity-level-breakdown mb-2"
> >
<template #HEAD_changeInPercent="{ label }"> <template #head(changeInPercent)="{ label }">
<span v-gl-tooltip :title="__('Difference between start date and now')">{{ label }}</span> <span v-gl-tooltip :title="__('Difference between start date and now')">{{ label }}</span>
</template> </template>
<template #HEAD_currentVulnerabilitiesCount="{ label }"> <template #head(currentVulnerabilitiesCount)="{ label }">
<span v-gl-tooltip :title="__('Current vulnerabilities count')">{{ label }}</span> <span v-gl-tooltip :title="__('Current vulnerabilities count')">{{ label }}</span>
</template> </template>
<template #severityLevel="{ value }"> <template #cell(severityLevel)="{ value }">
<div class="gl-font-size-large"> <div class="gl-font-size-large">
<severity-badge <severity-badge
:ref="`severityBadge${value}`" :ref="`severityBadge${value}`"
...@@ -143,7 +143,7 @@ export default { ...@@ -143,7 +143,7 @@ export default {
/> />
</div> </div>
</template> </template>
<template #chartData="{ item }"> <template #cell(chartData)="{ item }">
<div class="position-relative h-32-px"> <div class="position-relative h-32-px">
<gl-sparkline-chart <gl-sparkline-chart
:ref="`sparklineChart${item.severityLevel}`" :ref="`sparklineChart${item.severityLevel}`"
...@@ -155,10 +155,10 @@ export default { ...@@ -155,10 +155,10 @@ export default {
/> />
</div> </div>
</template> </template>
<template #changeInPercent="{ value }"> <template #cell(changeInPercent)="{ value }">
<span ref="changeInPercent">{{ value }}</span> <span ref="changeInPercent">{{ value }}</span>
</template> </template>
<template #currentVulnerabilitiesCount="{ value }"> <template #cell(currentVulnerabilitiesCount)="{ value }">
<span ref="currentVulnerabilitiesCount">{{ value }}</span> <span ref="currentVulnerabilitiesCount">{{ value }}</span>
</template> </template>
</gl-table> </gl-table>
......
...@@ -52,7 +52,7 @@ describe 'Environments page', :js do ...@@ -52,7 +52,7 @@ describe 'Environments page', :js do
end end
it 'shows a stop button' do it 'shows a stop button' do
stop_button_selector = %q{button[data-original-title="Stop environment"]} stop_button_selector = %q{button[title="Stop environment"]}
expect(page).to have_selector(stop_button_selector) expect(page).to have_selector(stop_button_selector)
end end
...@@ -92,7 +92,7 @@ describe 'Environments page', :js do ...@@ -92,7 +92,7 @@ describe 'Environments page', :js do
end end
it 'shows re deploy button' do it 'shows re deploy button' do
redeploy_button_selector = %q{button[data-original-title="Re-deploy to environment"]} redeploy_button_selector = %q{button[title="Re-deploy to environment"]}
expect(page).to have_selector(redeploy_button_selector) expect(page).to have_selector(redeploy_button_selector)
end end
...@@ -136,7 +136,7 @@ describe 'Environments page', :js do ...@@ -136,7 +136,7 @@ describe 'Environments page', :js do
end end
it 'does not show a stop button' do it 'does not show a stop button' do
stop_button_selector = %q{button[data-original-title="Stop environment"]} stop_button_selector = %q{button[title="Stop environment"]}
expect(page).not_to have_selector(stop_button_selector) expect(page).not_to have_selector(stop_button_selector)
end end
...@@ -176,7 +176,7 @@ describe 'Environments page', :js do ...@@ -176,7 +176,7 @@ describe 'Environments page', :js do
end end
it 'does not show a re deploy button' do it 'does not show a re deploy button' do
redeploy_button_selector = %q{button[data-original-title="Re-deploy to environment"]} redeploy_button_selector = %q{button[title="Re-deploy to environment"]}
expect(page).not_to have_selector(redeploy_button_selector) expect(page).not_to have_selector(redeploy_button_selector)
end end
......
...@@ -4,9 +4,9 @@ exports[`MergeRequestTable component template matches the snapshot 1`] = ` ...@@ -4,9 +4,9 @@ exports[`MergeRequestTable component template matches the snapshot 1`] = `
<table <table
aria-busy="false" aria-busy="false"
aria-colcount="6" aria-colcount="6"
aria-describedby="__BVID__13__caption_" aria-describedby="__BVID__31__caption_"
class="table b-table gl-table my-3 b-table-stacked-sm" class="table b-table gl-table my-3 b-table-stacked-sm"
id="__BVID__13" id="__BVID__31"
role="table" role="table"
> >
<!----> <!---->
...@@ -17,6 +17,7 @@ exports[`MergeRequestTable component template matches the snapshot 1`] = ` ...@@ -17,6 +17,7 @@ exports[`MergeRequestTable component template matches the snapshot 1`] = `
> >
<!----> <!---->
<tr <tr
class=""
role="row" role="row"
> >
<th <th
...@@ -69,14 +70,9 @@ exports[`MergeRequestTable component template matches the snapshot 1`] = ` ...@@ -69,14 +70,9 @@ exports[`MergeRequestTable component template matches the snapshot 1`] = `
</th> </th>
</tr> </tr>
</thead> </thead>
<!---->
<tbody <tbody
class=""
role="rowgroup" role="rowgroup"
> />
<!----> <!---->
<!---->
<!---->
</tbody>
</table> </table>
`; `;
...@@ -35,6 +35,7 @@ exports[`dashboard should match the snapshot 1`] = ` ...@@ -35,6 +35,7 @@ exports[`dashboard should match the snapshot 1`] = `
class="js-add-projects-button btn btn-success" class="js-add-projects-button btn btn-success"
role="button" role="button"
size="md" size="md"
tabindex="0"
variant="secondary" variant="secondary"
> >
......
...@@ -20,6 +20,7 @@ describe('Filter component', () => { ...@@ -20,6 +20,7 @@ describe('Filter component', () => {
}, },
propsData, propsData,
store, store,
attachToDocument: true,
}); });
}; };
......
...@@ -11,7 +11,7 @@ describe 'Resolving all open threads in a merge request from an issue', :js do ...@@ -11,7 +11,7 @@ describe 'Resolving all open threads in a merge request from an issue', :js do
def resolve_all_discussions_link_selector def resolve_all_discussions_link_selector
text = "Resolve all threads in new issue" text = "Resolve all threads in new issue"
url = new_project_issue_path(project, merge_request_to_resolve_discussions_of: merge_request.iid) url = new_project_issue_path(project, merge_request_to_resolve_discussions_of: merge_request.iid)
%Q{a[data-original-title="#{text}"][href="#{url}"]} %Q{a[title="#{text}"][href="#{url}"]}
end end
describe 'as a user with access to the project' do describe 'as a user with access to the project' do
......
...@@ -11,7 +11,7 @@ describe 'Resolve an open thread in a merge request by creating an issue', :js d ...@@ -11,7 +11,7 @@ describe 'Resolve an open thread in a merge request by creating an issue', :js d
def resolve_discussion_selector def resolve_discussion_selector
title = 'Resolve this thread in a new issue' title = 'Resolve this thread in a new issue'
url = new_project_issue_path(project, discussion_to_resolve: discussion.id, merge_request_to_resolve_discussions_of: merge_request.iid) url = new_project_issue_path(project, discussion_to_resolve: discussion.id, merge_request_to_resolve_discussions_of: merge_request.iid)
"a[data-original-title=\"#{title}\"][href=\"#{url}\"]" "a[title=\"#{title}\"][href=\"#{url}\"]"
end end
describe 'As a user with access to the project' do describe 'As a user with access to the project' do
......
...@@ -16,7 +16,7 @@ describe 'Merge request > User edits assignees sidebar', :js do ...@@ -16,7 +16,7 @@ describe 'Merge request > User edits assignees sidebar', :js do
# DOM finders to simplify and improve readability # DOM finders to simplify and improve readability
let(:sidebar_assignee_block) { page.find('.js-issuable-sidebar .assignee') } let(:sidebar_assignee_block) { page.find('.js-issuable-sidebar .assignee') }
let(:sidebar_assignee_avatar_link) { sidebar_assignee_block.find_all('a').find { |a| a['href'].include? assignee.username } } let(:sidebar_assignee_avatar_link) { sidebar_assignee_block.find_all('a').find { |a| a['href'].include? assignee.username } }
let(:sidebar_assignee_tooltip) { sidebar_assignee_avatar_link['data-original-title'] || '' } let(:sidebar_assignee_tooltip) { sidebar_assignee_avatar_link['title'] || '' }
let(:sidebar_assignee_dropdown_item) { sidebar_assignee_block.find(".dropdown-menu li[data-user-id=\"#{assignee.id}\"]") } let(:sidebar_assignee_dropdown_item) { sidebar_assignee_block.find(".dropdown-menu li[data-user-id=\"#{assignee.id}\"]") }
let(:sidebar_assignee_dropdown_tooltip) { sidebar_assignee_dropdown_item.find('a')['data-title'] || '' } let(:sidebar_assignee_dropdown_tooltip) { sidebar_assignee_dropdown_item.find('a')['data-title'] || '' }
......
...@@ -29,7 +29,7 @@ describe 'Merge request > User sees deployment widget', :js do ...@@ -29,7 +29,7 @@ describe 'Merge request > User sees deployment widget', :js do
wait_for_requests wait_for_requests
expect(page).to have_content("Deployed to #{environment.name}") expect(page).to have_content("Deployed to #{environment.name}")
expect(find('.js-deploy-time')['data-original-title']).to eq(deployment.created_at.to_time.in_time_zone.to_s(:medium)) expect(find('.js-deploy-time')['title']).to eq(deployment.created_at.to_time.in_time_zone.to_s(:medium))
end end
context 'when a user created a new merge request with the same SHA' do context 'when a user created a new merge request with the same SHA' do
......
...@@ -112,7 +112,7 @@ describe 'User comments on a diff', :js do ...@@ -112,7 +112,7 @@ describe 'User comments on a diff', :js do
changes = sample_compare(expanded_changes).changes.last(expanded_changes.size) changes = sample_compare(expanded_changes).changes.last(expanded_changes.size)
page.within("[id='#{hash}']") do page.within("[id='#{hash}']") do
find("button[data-original-title='Show full file']").click find("button[title='Show full file']").click
wait_for_requests wait_for_requests
click_diff_line(find("[id='#{changes.first[:line_code]}']")) click_diff_line(find("[id='#{changes.first[:line_code]}']"))
......
...@@ -13,7 +13,7 @@ describe 'Environments page', :js do ...@@ -13,7 +13,7 @@ describe 'Environments page', :js do
end end
def stop_button_selector def stop_button_selector
%q{button[data-original-title="Stop environment"]} %q{button[title="Stop environment"]}
end end
describe 'page tabs' do describe 'page tabs' do
......
...@@ -217,7 +217,7 @@ describe 'Pipeline', :js do ...@@ -217,7 +217,7 @@ describe 'Pipeline', :js do
it 'includes the failure reason' do it 'includes the failure reason' do
page.within('#ci-badge-test') do page.within('#ci-badge-test') do
build_link = page.find('.js-pipeline-graph-job-link') build_link = page.find('.js-pipeline-graph-job-link')
expect(build_link['data-original-title']).to eq('test - failed - (unknown failure)') expect(build_link['title']).to eq('test - failed - (unknown failure)')
end end
end end
end end
......
...@@ -270,7 +270,7 @@ describe 'Pipelines', :js do ...@@ -270,7 +270,7 @@ describe 'Pipelines', :js do
it 'contains badge with tooltip which contains error' do it 'contains badge with tooltip which contains error' do
expect(pipeline).to have_yaml_errors expect(pipeline).to have_yaml_errors
expect(page).to have_selector( expect(page).to have_selector(
%Q{span[data-original-title="#{pipeline.yaml_errors}"]}) %Q{span[title="#{pipeline.yaml_errors}"]})
end end
it 'contains badge that indicates failure reason' do it 'contains badge that indicates failure reason' do
...@@ -280,7 +280,7 @@ describe 'Pipelines', :js do ...@@ -280,7 +280,7 @@ describe 'Pipelines', :js do
it 'contains badge with tooltip which contains failure reason' do it 'contains badge with tooltip which contains failure reason' do
expect(pipeline.failure_reason?).to eq true expect(pipeline.failure_reason?).to eq true
expect(page).to have_selector( expect(page).to have_selector(
%Q{span[data-original-title="#{pipeline.present.failure_reason}"]}) %Q{span[title="#{pipeline.present.failure_reason}"]})
end end
end end
...@@ -569,7 +569,7 @@ describe 'Pipelines', :js do ...@@ -569,7 +569,7 @@ describe 'Pipelines', :js do
within('.js-builds-dropdown-list') do within('.js-builds-dropdown-list') do
build_element = page.find('.mini-pipeline-graph-dropdown-item') build_element = page.find('.mini-pipeline-graph-dropdown-item')
expect(build_element['data-original-title']).to eq('build - failed - (unknown failure)') expect(build_element['title']).to eq('build - failed - (unknown failure)')
end end
end end
end end
......
...@@ -65,7 +65,7 @@ describe 'View on environment', :js do ...@@ -65,7 +65,7 @@ describe 'View on environment', :js do
within '.diffs' do within '.diffs' do
text = 'View on feature.review.example.com' text = 'View on feature.review.example.com'
url = 'http://feature.review.example.com/ruby/feature' url = 'http://feature.review.example.com/ruby/feature'
expect(page).to have_selector("a[data-original-title='#{text}'][href='#{url}']") expect(page).to have_selector("a[title='#{text}'][href='#{url}']")
end end
end end
end end
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
exports[`Remove cluster confirmation modal renders splitbutton with modal included 1`] = ` exports[`Remove cluster confirmation modal renders splitbutton with modal included 1`] = `
<div> <div>
<div <div
class="dropdown btn-group b-dropdown gl-dropdown" class="dropdown b-dropdown gl-dropdown btn-group"
> >
<button <button
class="btn btn-danger" class="btn btn-danger"
...@@ -31,7 +31,9 @@ exports[`Remove cluster confirmation modal renders splitbutton with modal includ ...@@ -31,7 +31,9 @@ exports[`Remove cluster confirmation modal renders splitbutton with modal includ
role="menu" role="menu"
tabindex="-1" tabindex="-1"
> >
<li> <li
role="presentation"
>
<button <button
class="dropdown-item is-active" class="dropdown-item is-active"
role="menuitem" role="menuitem"
...@@ -47,14 +49,18 @@ exports[`Remove cluster confirmation modal renders splitbutton with modal includ ...@@ -47,14 +49,18 @@ exports[`Remove cluster confirmation modal renders splitbutton with modal includ
</button> </button>
</li> </li>
<li> <li
role="presentation"
>
<hr <hr
aria-orientation="horizontal" aria-orientation="horizontal"
class="dropdown-divider" class="dropdown-divider"
role="separator" role="separator"
/> />
</li> </li>
<li> <li
role="presentation"
>
<button <button
class="dropdown-item" class="dropdown-item"
role="menuitem" role="menuitem"
......
...@@ -8,7 +8,7 @@ shared_examples 'error tracking index page' do ...@@ -8,7 +8,7 @@ shared_examples 'error tracking index page' do
end end
within('div.error-list') do within('div.error-list') do
expect(page).to have_content('Error') expect(page).to have_content('Open errors')
expect(page).to have_content('Events') expect(page).to have_content('Events')
expect(page).to have_content('Users') expect(page).to have_content('Users')
expect(page).to have_content('Last Seen') expect(page).to have_content('Last Seen')
......
...@@ -737,14 +737,14 @@ ...@@ -737,14 +737,14 @@
resolved "https://registry.yarnpkg.com/@gitlab/svgs/-/svgs-1.90.0.tgz#e6fe0ca3d353fcdbd792c10d82444383c33f539d" resolved "https://registry.yarnpkg.com/@gitlab/svgs/-/svgs-1.90.0.tgz#e6fe0ca3d353fcdbd792c10d82444383c33f539d"
integrity sha512-6UikaIMGosmrDAd6Lf3QIJWDM4FwhoGIN+CJuFcWeHDMbZT69LnTabuGfvOQmp2+nlI68baRTSDufaux7m9Ajw== integrity sha512-6UikaIMGosmrDAd6Lf3QIJWDM4FwhoGIN+CJuFcWeHDMbZT69LnTabuGfvOQmp2+nlI68baRTSDufaux7m9Ajw==
"@gitlab/ui@^8.21.0": "@gitlab/ui@^9.0.0":
version "8.21.0" version "9.0.0"
resolved "https://registry.yarnpkg.com/@gitlab/ui/-/ui-8.21.0.tgz#30869847251d525c8402487cea16886b43f134e9" resolved "https://registry.yarnpkg.com/@gitlab/ui/-/ui-9.0.0.tgz#16d637f47ba0537100fd1c6d452b56174b50171b"
integrity sha512-CLtpvF11aNOt+ttdE4xZTGM3sg124U/nYPrmGkre5FLcLqmSoK1LmRkflLHMUAwHWXz7CvxmSDZa2YshC3SsyQ== integrity sha512-OfP8UAticpqKkqbPBZ+7bbCBsd9Fxq3eL55Uq5nEwxJ8gGXm+nSc+HFnbzX/ryv0iz5+7nCI4DfIfgy9E4QAeQ==
dependencies: dependencies:
"@babel/standalone" "^7.0.0" "@babel/standalone" "^7.0.0"
"@gitlab/vue-toasted" "^1.3.0" "@gitlab/vue-toasted" "^1.3.0"
bootstrap-vue "2.0.0-rc.27" bootstrap-vue "2.1.0"
copy-to-clipboard "^3.0.8" copy-to-clipboard "^3.0.8"
echarts "^4.2.1" echarts "^4.2.1"
highlight.js "^9.13.1" highlight.js "^9.13.1"
...@@ -925,14 +925,14 @@ ...@@ -925,14 +925,14 @@
resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b"
integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==
"@nuxt/opencollective@^0.2.2": "@nuxt/opencollective@^0.3.0":
version "0.2.2" version "0.3.0"
resolved "https://registry.yarnpkg.com/@nuxt/opencollective/-/opencollective-0.2.2.tgz#17adc7d380457379cd14cbb64a435ea196cc4a6e" resolved "https://registry.yarnpkg.com/@nuxt/opencollective/-/opencollective-0.3.0.tgz#11d8944dcf2d526e31660bb69570be03f8fb72b7"
integrity sha512-ie50SpS47L+0gLsW4yP23zI/PtjsDRglyozX2G09jeiUazC1AJlGPZo0JUs9iuCDUoIgsDEf66y7/bSfig0BpA== integrity sha512-Vf09BxCdj1iT2IRqVwX5snaY2WCTkvM0O4cWWSO1ThCFuc4if0Q/nNwAgCxRU0FeYHJ7DdyMUNSdswCLKlVqeg==
dependencies: dependencies:
chalk "^2.4.1" chalk "^2.4.2"
consola "^2.3.0" consola "^2.10.1"
node-fetch "^2.3.0" node-fetch "^2.6.0"
"@sentry/browser@^5.10.2": "@sentry/browser@^5.10.2":
version "5.10.2" version "5.10.2"
...@@ -2061,18 +2061,18 @@ bonjour@^3.5.0: ...@@ -2061,18 +2061,18 @@ bonjour@^3.5.0:
multicast-dns "^6.0.1" multicast-dns "^6.0.1"
multicast-dns-service-types "^1.1.0" multicast-dns-service-types "^1.1.0"
bootstrap-vue@2.0.0-rc.27: bootstrap-vue@2.1.0:
version "2.0.0-rc.27" version "2.1.0"
resolved "https://registry.yarnpkg.com/bootstrap-vue/-/bootstrap-vue-2.0.0-rc.27.tgz#884a46a71948d13c9729134cb564467f79a7b2b9" resolved "https://registry.yarnpkg.com/bootstrap-vue/-/bootstrap-vue-2.1.0.tgz#41c0cd265a6cea14ffe29eeea71543ec396d1789"
integrity sha512-gXdpt2IsKbmC3SU0bf/RgldWwgrXK7G47yslOtkk4OA1z6fOzb2orM2vU5L8NCNZQomYax9LapRucv+8PByfdA== integrity sha512-dftb5fc42x7QLv814nN+3Cx8MMuCB+xrGQjOmSXH81ET0+yo7KYb4lUN3/pOnf+8Tkv8oaawZ1OOth5/AZfktg==
dependencies: dependencies:
"@nuxt/opencollective" "^0.2.2" "@nuxt/opencollective" "^0.3.0"
bootstrap "^4.3.1" bootstrap ">=4.3.1 <5.0.0"
popper.js "^1.15.0" popper.js "^1.16.0"
portal-vue "^2.1.5" portal-vue "^2.1.6"
vue-functional-data-merge "^3.1.0" vue-functional-data-merge "^3.1.0"
bootstrap@4.3.1, bootstrap@^4.3.1: bootstrap@4.3.1, "bootstrap@>=4.3.1 <5.0.0":
version "4.3.1" version "4.3.1"
resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-4.3.1.tgz#280ca8f610504d99d7b6b4bfc4b68cec601704ac" resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-4.3.1.tgz#280ca8f610504d99d7b6b4bfc4b68cec601704ac"
integrity sha512-rXqOmH1VilAt2DyPzluTi2blhk17bO7ef+zLLPlWvG494pDxcM234pJ8wTc/6R40UWizAIIMgxjvxZg5kmsbag== integrity sha512-rXqOmH1VilAt2DyPzluTi2blhk17bO7ef+zLLPlWvG494pDxcM234pJ8wTc/6R40UWizAIIMgxjvxZg5kmsbag==
...@@ -2893,10 +2893,10 @@ connect@^3.6.0: ...@@ -2893,10 +2893,10 @@ connect@^3.6.0:
parseurl "~1.3.2" parseurl "~1.3.2"
utils-merge "1.0.1" utils-merge "1.0.1"
consola@^2.3.0: consola@^2.10.1:
version "2.11.3" version "2.10.1"
resolved "https://registry.yarnpkg.com/consola/-/consola-2.11.3.tgz#f7315836224c143ac5094b47fd4c816c2cd1560e" resolved "https://registry.yarnpkg.com/consola/-/consola-2.10.1.tgz#4693edba714677c878d520e4c7e4f69306b4b927"
integrity sha512-aoW0YIIAmeftGR8GSpw6CGQluNdkWMWh3yEFjH/hmynTYnMtibXszii3lxCXmk8YxJtI3FAK5aTiquA5VH68Gw== integrity sha512-4sxpH6SGFYLADfUip4vuY65f/gEogrzJoniVhNUYkJHtng0l8ZjnDCqxxrSVRHOHwKxsy8Vm5ONZh1wOR3/l/w==
console-browserify@^1.1.0: console-browserify@^1.1.0:
version "1.1.0" version "1.1.0"
...@@ -7964,7 +7964,7 @@ node-ensure@^0.0.0: ...@@ -7964,7 +7964,7 @@ node-ensure@^0.0.0:
resolved "https://registry.yarnpkg.com/node-ensure/-/node-ensure-0.0.0.tgz#ecae764150de99861ec5c810fd5d096b183932a7" resolved "https://registry.yarnpkg.com/node-ensure/-/node-ensure-0.0.0.tgz#ecae764150de99861ec5c810fd5d096b183932a7"
integrity sha1-7K52QVDemYYexcgQ/V0Jaxg5Mqc= integrity sha1-7K52QVDemYYexcgQ/V0Jaxg5Mqc=
node-fetch@^2.3.0: node-fetch@^2.6.0:
version "2.6.0" version "2.6.0"
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd"
integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==
...@@ -8800,15 +8800,15 @@ pofile@^1: ...@@ -8800,15 +8800,15 @@ pofile@^1:
resolved "https://registry.yarnpkg.com/pofile/-/pofile-1.0.11.tgz#35aff58c17491d127a07336d5522ebc9df57c954" resolved "https://registry.yarnpkg.com/pofile/-/pofile-1.0.11.tgz#35aff58c17491d127a07336d5522ebc9df57c954"
integrity sha512-Vy9eH1dRD9wHjYt/QqXcTz+RnX/zg53xK+KljFSX30PvdDMb2z+c6uDUeblUGqqJgz3QFsdlA0IJvHziPmWtQg== integrity sha512-Vy9eH1dRD9wHjYt/QqXcTz+RnX/zg53xK+KljFSX30PvdDMb2z+c6uDUeblUGqqJgz3QFsdlA0IJvHziPmWtQg==
popper.js@^1.14.7, popper.js@^1.15.0: popper.js@^1.14.7, popper.js@^1.16.0:
version "1.16.0" version "1.16.0"
resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.0.tgz#2e1816bcbbaa518ea6c2e15a466f4cb9c6e2fbb3" resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.0.tgz#2e1816bcbbaa518ea6c2e15a466f4cb9c6e2fbb3"
integrity sha512-+G+EkOPoE5S/zChTpmBSSDYmhXJ5PsW8eMhH8cP/CQHMFPBG/kC9Y5IIw6qNYgdJ+/COf0ddY2li28iHaZRSjw== integrity sha512-+G+EkOPoE5S/zChTpmBSSDYmhXJ5PsW8eMhH8cP/CQHMFPBG/kC9Y5IIw6qNYgdJ+/COf0ddY2li28iHaZRSjw==
portal-vue@^2.1.5, portal-vue@^2.1.6: portal-vue@^2.1.6:
version "2.1.7" version "2.1.6"
resolved "https://registry.yarnpkg.com/portal-vue/-/portal-vue-2.1.7.tgz#ea08069b25b640ca08a5b86f67c612f15f4e4ad4" resolved "https://registry.yarnpkg.com/portal-vue/-/portal-vue-2.1.6.tgz#a7d4790b14a79af7fd159a60ec88c30cddc6c639"
integrity sha512-+yCno2oB3xA7irTt0EU5Ezw22L2J51uKAacE/6hMPMoO/mx3h4rXFkkBkT4GFsMDv/vEe8TNKC3ujJJ0PTwb6g== integrity sha512-lvCF85D4e8whd0nN32D8FqKwwkk7nYUI3Ku8UAEx4Z1reomu75dv5evRUTZNaj1EalxxWNXiNl0EHRq36fG8WA==
portfinder@^1.0.24: portfinder@^1.0.24:
version "1.0.24" version "1.0.24"
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment