Add latest changes from gitlab-org/gitlab@master

This commit is contained in:
GitLab Bot 2021-09-15 18:11:29 +00:00
parent 6e2dde590e
commit 27d1ed4ddf
196 changed files with 2369 additions and 382 deletions

View File

@ -165,7 +165,7 @@ export default {
:title="$options.i18n.proceedButton"
variant="confirm"
data-qa-selector="proceed_button"
data-track-event="click_button"
data-track-action="click_button"
:data-track-label="`${$options.trackingLabelPrefix}proceed_button`"
>{{ $options.i18n.proceedButton }}</gl-button
>

View File

@ -124,7 +124,7 @@ export default {
:href="goToMergeRequestPath"
:data-track-property="humanAccess"
:data-track-value="$options.goToTrackValueMergeRequest"
:data-track-event="$options.trackEvent"
:data-track-action="$options.trackEvent"
:data-track-label="trackLabel"
>
{{ $options.i18n.mergeRequestButton }}
@ -135,7 +135,7 @@ export default {
variant="success"
:data-track-property="humanAccess"
:data-track-value="$options.goToTrackValuePipelines"
:data-track-event="$options.trackEvent"
:data-track-action="$options.trackEvent"
:data-track-label="trackLabel"
>
{{ $options.i18n.pipelinesButton }}

View File

@ -121,7 +121,7 @@ export default {
icon="close"
:data-track-property="humanAccess"
:data-track-value="$options.dismissTrackValue"
:data-track-event="$options.clickTrackValue"
:data-track-action="$options.clickTrackValue"
:data-track-label="trackLabel"
@click="onDismiss"
/>

View File

@ -107,7 +107,7 @@ function createLink(data, selected, options, index) {
}
if (options.trackSuggestionClickedLabel) {
link.setAttribute('data-track-event', 'click_text');
link.setAttribute('data-track-action', 'click_text');
link.setAttribute('data-track-label', options.trackSuggestionClickedLabel);
link.setAttribute('data-track-value', index);
link.setAttribute('data-track-property', slugify(data.category || 'no-category'));

View File

@ -123,7 +123,7 @@ export default {
category="primary"
variant="confirm"
type="submit"
data-track-event="click_button"
data-track-action="click_button"
data-qa-selector="save_comment_button"
@click="$emit('submit-form')"
>

View File

@ -341,7 +341,7 @@ export default {
:gfm="gfmCopyText"
data-testid="diff-file-copy-clipboard"
category="tertiary"
data-track-event="click_copy_file_button"
data-track-action="click_copy_file_button"
data-track-label="diff_copy_file_path_button"
data-track-property="diff_copy_file"
/>
@ -382,7 +382,7 @@ export default {
:title="externalUrlLabel"
:aria-label="externalUrlLabel"
target="_blank"
data-track-event="click_toggle_external_button"
data-track-action="click_toggle_external_button"
data-track-label="diff_toggle_external_button"
data-track-property="diff_toggle_external"
icon="external-link"

View File

@ -48,7 +48,7 @@ export default {
<gl-toggle
:value="active"
data-testid="feature-flag-status-toggle"
data-track-event="click_button"
data-track-action="click_button"
data-track-label="feature_flag_toggle"
class="gl-mr-4"
:label="__('Feature flag status')"

View File

@ -115,7 +115,7 @@ export default {
:label="$options.i18n.toggleLabel"
label-position="hidden"
data-testid="feature-flag-status-toggle"
data-track-event="click_button"
data-track-action="click_button"
data-track-label="feature_flag_toggle"
@change="toggleFeatureFlag(featureFlag)"
/>

View File

@ -1,7 +1,10 @@
<script>
import { GlSearchBoxByType, GlOutsideDirective as Outside } from '@gitlab/ui';
import { mapState, mapActions, mapGetters } from 'vuex';
import { visitUrl } from '~/lib/utils/url_utility';
import { __ } from '~/locale';
import HeaderSearchDefaultItems from './header_search_default_items.vue';
import HeaderSearchScopedItems from './header_search_scoped_items.vue';
export default {
name: 'HeaderSearchApp',
@ -12,6 +15,7 @@ export default {
components: {
GlSearchBoxByType,
HeaderSearchDefaultItems,
HeaderSearchScopedItems,
},
data() {
return {
@ -19,17 +23,34 @@ export default {
};
},
computed: {
...mapState(['search']),
...mapGetters(['searchQuery']),
searchText: {
get() {
return this.search;
},
set(value) {
this.setSearch(value);
},
},
showSearchDropdown() {
return this.showDropdown && gon?.current_username;
},
showDefaultItems() {
return !this.searchText;
},
},
methods: {
...mapActions(['setSearch']),
openDropdown() {
this.showDropdown = true;
},
closeDropdown() {
this.showDropdown = false;
},
submitSearch() {
return visitUrl(this.searchQuery);
},
},
};
</script>
@ -37,10 +58,13 @@ export default {
<template>
<section v-outside="closeDropdown" class="header-search gl-relative">
<gl-search-box-by-type
v-model="searchText"
:debounce="500"
autocomplete="off"
:placeholder="$options.i18n.searchPlaceholder"
@focus="openDropdown"
@click="openDropdown"
@keydown.enter="submitSearch"
@keydown.esc="closeDropdown"
/>
<div
@ -49,7 +73,10 @@ export default {
class="header-search-dropdown-menu gl-overflow-y-auto gl-absolute gl-left-0 gl-z-index-1 gl-w-full gl-bg-white gl-border-1 gl-rounded-base gl-border-solid gl-border-gray-200 gl-shadow-x0-y2-b4-s0"
>
<div class="header-search-dropdown-content gl-overflow-y-auto gl-py-2">
<header-search-default-items />
<header-search-default-items v-if="showDefaultItems" />
<template v-else>
<header-search-scoped-items />
</template>
</div>
</div>
</section>

View File

@ -0,0 +1,31 @@
<script>
import { GlDropdownItem } from '@gitlab/ui';
import { mapState, mapGetters } from 'vuex';
export default {
name: 'HeaderSearchScopedItems',
components: {
GlDropdownItem,
},
computed: {
...mapState(['search']),
...mapGetters(['scopedSearchOptions']),
},
};
</script>
<template>
<div>
<gl-dropdown-item
v-for="(option, index) in scopedSearchOptions"
:id="`scoped-${index}`"
:key="index"
tabindex="-1"
:href="option.url"
>
"<span class="gl-font-weight-bold">{{ search }}</span
>" {{ option.description }}
<span v-if="option.scope" class="gl-font-style-italic">{{ option.scope }}</span>
</gl-dropdown-item>
</div>
</template>

View File

@ -9,3 +9,9 @@ export const MSG_MR_ASSIGNED_TO_ME = __('Merge requests assigned to me');
export const MSG_MR_IM_REVIEWER = __("Merge requests that I'm a reviewer");
export const MSG_MR_IVE_CREATED = __("Merge requests I've created");
export const MSG_IN_ALL_GITLAB = __('in all GitLab');
export const MSG_IN_GROUP = __('in group');
export const MSG_IN_PROJECT = __('in project');

View File

@ -12,13 +12,13 @@ export const initHeaderSearchApp = () => {
return false;
}
const { issuesPath, mrPath } = el.dataset;
const { searchPath, issuesPath, mrPath } = el.dataset;
let { searchContext } = el.dataset;
searchContext = JSON.parse(searchContext);
return new Vue({
el,
store: createStore({ issuesPath, mrPath, searchContext }),
store: createStore({ searchPath, issuesPath, mrPath, searchContext }),
render(createElement) {
return createElement(HeaderSearchApp);
},

View File

@ -0,0 +1,5 @@
import * as types from './mutation_types';
export const setSearch = ({ commit }, value) => {
commit(types.SET_SEARCH, value);
};

View File

@ -1,11 +1,28 @@
import { objectToQuery } from '~/lib/utils/url_utility';
import {
MSG_ISSUES_ASSIGNED_TO_ME,
MSG_ISSUES_IVE_CREATED,
MSG_MR_ASSIGNED_TO_ME,
MSG_MR_IM_REVIEWER,
MSG_MR_IVE_CREATED,
MSG_IN_PROJECT,
MSG_IN_GROUP,
MSG_IN_ALL_GITLAB,
} from '../constants';
export const searchQuery = (state) => {
const query = {
search: state.search,
nav_source: 'navbar',
project_id: state.searchContext.project?.id,
group_id: state.searchContext.group?.id,
scope: state.searchContext.scope,
};
return `${state.searchPath}?${objectToQuery(query)}`;
};
export const scopedIssuesPath = (state) => {
return (
state.searchContext.project_metadata?.issues_path ||
@ -48,3 +65,71 @@ export const defaultSearchOptions = (state, getters) => {
},
];
};
export const projectUrl = (state) => {
if (!state.searchContext.project || !state.searchContext.group) {
return null;
}
const query = {
search: state.search,
nav_source: 'navbar',
project_id: state.searchContext.project.id,
group_id: state.searchContext.group.id,
scope: state.searchContext.scope,
};
return `${state.searchPath}?${objectToQuery(query)}`;
};
export const groupUrl = (state) => {
if (!state.searchContext.group) {
return null;
}
const query = {
search: state.search,
nav_source: 'navbar',
group_id: state.searchContext.group.id,
scope: state.searchContext.scope,
};
return `${state.searchPath}?${objectToQuery(query)}`;
};
export const allUrl = (state) => {
const query = {
search: state.search,
nav_source: 'navbar',
scope: state.searchContext.scope,
};
return `${state.searchPath}?${objectToQuery(query)}`;
};
export const scopedSearchOptions = (state, getters) => {
const options = [];
if (state.searchContext.project) {
options.push({
scope: state.searchContext.project.name,
description: MSG_IN_PROJECT,
url: getters.projectUrl,
});
}
if (state.searchContext.group) {
options.push({
scope: state.searchContext.group.name,
description: MSG_IN_GROUP,
url: getters.groupUrl,
});
}
options.push({
description: MSG_IN_ALL_GITLAB,
url: getters.allUrl,
});
return options;
};

View File

@ -1,13 +1,17 @@
import Vue from 'vue';
import Vuex from 'vuex';
import * as actions from './actions';
import * as getters from './getters';
import mutations from './mutations';
import createState from './state';
Vue.use(Vuex);
export const getStoreConfig = ({ issuesPath, mrPath, searchContext }) => ({
export const getStoreConfig = ({ searchPath, issuesPath, mrPath, searchContext }) => ({
actions,
getters,
state: createState({ issuesPath, mrPath, searchContext }),
mutations,
state: createState({ searchPath, issuesPath, mrPath, searchContext }),
});
const createStore = (config) => new Vuex.Store(getStoreConfig(config));

View File

@ -0,0 +1 @@
export const SET_SEARCH = 'SET_SEARCH';

View File

@ -0,0 +1,7 @@
import * as types from './mutation_types';
export default {
[types.SET_SEARCH](state, value) {
state.search = value;
},
};

View File

@ -1,6 +1,8 @@
const createState = ({ issuesPath, mrPath, searchContext }) => ({
const createState = ({ searchPath, issuesPath, mrPath, searchContext }) => ({
searchPath,
issuesPath,
mrPath,
searchContext,
search: '',
});
export default createState;

View File

@ -65,7 +65,7 @@ export default {
if (this.event && this.label) {
return {
...baseAttributes,
'data-track-event': this.event,
'data-track-action': this.event,
'data-track-label': this.label,
};
}

View File

@ -89,7 +89,7 @@ export default {
:href="exportCsvPath"
data-method="post"
:data-qa-selector="`export_${issuableType}_button`"
data-track-event="click_button"
data-track-action="click_button"
:data-track-label="`export_${issuableType}_csv`"
>
<gl-sprintf :message="__('Export %{name}')">

View File

@ -93,7 +93,7 @@ export default {
data-testid="comment-button"
data-qa-selector="comment_button"
:data-track-label="trackingLabel"
data-track-event="click_button"
data-track-action="click_button"
@click="$emit('click')"
>
<gl-dropdown-item is-check-item :is-checked="isNoteTypeComment" @click="setNoteTypeToComment">

View File

@ -89,7 +89,7 @@ export default {
:title="__('Jump to next unresolved thread')"
:aria-label="__('Jump to next unresolved thread')"
class="discussion-next-btn"
data-track-event="click_button"
data-track-action="click_button"
data-track-label="mr_next_unresolved_thread"
data-track-property="click_next_unresolved_thread_top"
icon="comment-next"

View File

@ -19,7 +19,7 @@ export default {
<template>
<gl-button
v-gl-tooltip
data-track-event="click_button"
data-track-action="click_button"
data-track-label="reply_comment_button"
category="tertiary"
icon="comment"

View File

@ -77,7 +77,7 @@ export default {
);
if (button) {
button.setAttribute('data-track-event', 'click_go_to_preferences');
button.setAttribute('data-track-action', 'click_go_to_preferences');
button.setAttribute('data-track-label', this.trackLabel);
}
},

View File

@ -175,7 +175,7 @@ export default {
<gl-sprintf
:message="
__(
'Please set up a Service Desk email address in order to add a custom suffix. %{linkStart}Learn more%{linkEnd}.',
'To add a custom suffix, set up a Service Desk email address. %{linkStart}Learn more.%{linkEnd}',
)
"
>

View File

@ -53,7 +53,7 @@ export default {
class="js-sidebar-dropdown-toggle edit-link btn gl-text-gray-900! gl-ml-auto hide-collapsed btn-default btn-sm gl-button btn-default-tertiary float-right"
href="#"
data-test-id="edit-link"
data-track-event="click_edit_button"
data-track-action="click_edit_button"
data-track-label="right_sidebar"
data-track-property="assignee"
>

View File

@ -93,7 +93,7 @@ export default {
class="float-right lock-edit btn gl-text-gray-900! gl-ml-auto hide-collapsed btn-default btn-sm gl-button btn-default-tertiary gl-mr-n2"
href="#"
data-testid="edit-link"
data-track-event="click_edit_button"
data-track-action="click_edit_button"
data-track-label="right_sidebar"
data-track-property="lock_issue"
@click.prevent="toggleForm"

View File

@ -40,7 +40,7 @@ export default {
v-if="editable"
class="js-sidebar-dropdown-toggle edit-link btn gl-text-gray-900! gl-ml-auto hide-collapsed btn-default btn-sm gl-button btn-default-tertiary float-right"
href="#"
data-track-event="click_edit_button"
data-track-action="click_edit_button"
data-track-label="right_sidebar"
data-track-property="reviewer"
>

View File

@ -136,7 +136,7 @@ export default {
size="small"
class="gl-text-gray-900! gl-ml-auto hide-collapsed gl-mr-n2"
data-testid="edit-button"
:data-track-event="tracking.event"
:data-track-action="tracking.event"
:data-track-label="tracking.label"
:data-track-property="tracking.property"
data-qa-selector="edit_link"

View File

@ -2,10 +2,12 @@ import $ from 'jquery';
import Tracking from '~/tracking';
export default function initTrackInviteMembers(userDropdown) {
const { trackEvent, trackLabel } = userDropdown.querySelector('.js-invite-members-track').dataset;
const { trackAction, trackLabel } = userDropdown.querySelector(
'.js-invite-members-track',
).dataset;
$(userDropdown).on('shown.bs.dropdown', () => {
Tracking.event(undefined, trackEvent, {
Tracking.event(undefined, trackAction, {
label: trackLabel,
});
});

View File

@ -98,7 +98,7 @@ export default {
data-testid="add-pipeline-link"
:data-track-property="humanAccess"
:data-track-value="$options.SP_LINK_TRACK_VALUE"
:data-track-event="$options.SP_LINK_TRACK_EVENT"
:data-track-action="$options.SP_LINK_TRACK_EVENT"
:data-track-label="$options.SP_TRACK_LABEL"
>
{{ content }}
@ -139,7 +139,7 @@ export default {
:href="pipelinePath"
:data-track-property="humanAccess"
:data-track-value="$options.SP_SHOW_TRACK_VALUE"
:data-track-event="$options.SP_SHOW_TRACK_EVENT"
:data-track-action="$options.SP_SHOW_TRACK_EVENT"
:data-track-label="$options.SP_TRACK_LABEL"
>
{{ __('Show me how to add a pipeline') }}

View File

@ -39,7 +39,7 @@ export default {
target="_blank"
rel="noopener noreferrer nofollow"
:class="cssClass"
data-track-event="open_review_app"
data-track-action="open_review_app"
data-track-label="review_app"
>
{{ display.text }} <gl-icon class="fgray" name="external-link" />

View File

@ -0,0 +1,75 @@
<script>
import { GlButton } from '@gitlab/ui';
import { s__ } from '~/locale';
import notesEventHub from '~/notes/event_hub';
import StatusIcon from '../mr_widget_status_icon.vue';
export default {
i18n: {
pipelineFailed: s__(
'mrWidget|The pipeline for this merge request did not complete. Push a new commit to fix the failure.',
),
approvalNeeded: s__('mrWidget|You can only merge once this merge request is approved.'),
unresolvedDiscussions: s__('mrWidget|Merge blocked: all threads must be resolved.'),
},
components: {
StatusIcon,
GlButton,
},
props: {
mr: {
type: Object,
required: true,
},
},
computed: {
failedText() {
if (this.mr.isPipelineFailed) {
return this.$options.i18n.pipelineFailed;
} else if (this.mr.approvals && !this.mr.isApproved) {
return this.$options.i18n.approvalNeeded;
} else if (this.mr.hasMergeableDiscussionsState) {
return this.$options.i18n.unresolvedDiscussions;
}
return null;
},
},
methods: {
jumpToFirstUnresolvedDiscussion() {
notesEventHub.$emit('jumpToFirstUnresolvedDiscussion');
},
},
};
</script>
<template>
<div class="mr-widget-body media gl-flex-wrap">
<status-icon status="warning" />
<p class="media-body gl-m-0! gl-font-weight-bold gl-text-black-normal!">
{{ failedText }}
<template v-if="failedText == $options.i18n.unresolvedDiscussions">
<gl-button
class="gl-ml-3"
size="small"
variant="confirm"
data-testid="jumpToUnresolved"
@click="jumpToFirstUnresolvedDiscussion"
>
{{ s__('mrWidget|Jump to first unresolved thread') }}
</gl-button>
<gl-button
v-if="mr.createIssueToResolveDiscussionsPath"
:href="mr.createIssueToResolveDiscussionsPath"
class="gl-ml-3"
size="small"
variant="confirm"
category="secondary"
data-testid="resolveIssue"
>
{{ s__('mrWidget|Create issue to resolve all threads') }}
</gl-button>
</template>
</p>
</div>
</template>

View File

@ -104,7 +104,7 @@ export default {
:href="plan.job_path"
target="_blank"
data-testid="terraform-report-link"
data-track-event="click_terraform_mr_plan_button"
data-track-action="click_terraform_mr_plan_button"
data-track-label="mr_widget_terraform_mr_plan_button"
data-track-property="terraform_mr_plan_button"
class="btn btn-sm"

View File

@ -89,6 +89,7 @@ export default {
import('../reports/accessibility_report/grouped_accessibility_reports_app.vue'),
MrWidgetApprovals,
SecurityReportsApp: () => import('~/vue_shared/security_reports/security_reports_app.vue'),
MergeChecksFailed: () => import('./components/states/merge_checks_failed.vue'),
},
apollo: {
state: {

View File

@ -1,7 +1,9 @@
import { stateKey } from './state_maps';
export default function deviseState() {
if (this.projectArchived) {
if (this.hasMergeChecksFailed) {
return stateKey.mergeChecksFailed;
} else if (this.projectArchived) {
return stateKey.archived;
} else if (this.branchMissing) {
return stateKey.missingBranch;

View File

@ -347,4 +347,13 @@ export default class MergeRequestStore {
this.approvals = data;
this.isApproved = data.approved || false;
}
get hasMergeChecksFailed() {
if (!window.gon?.features?.restructuredMrWidget) return false;
return (
this.hasMergeableDiscussionsState ||
(this.onlyAllowMergeIfPipelineSucceeds && this.isPipelineFailed)
);
}
}

View File

@ -18,6 +18,7 @@ const stateToComponentMap = {
autoMergeFailed: 'mr-widget-auto-merge-failed',
shaMismatch: 'sha-mismatch',
rebase: 'mr-widget-rebase',
mergeChecksFailed: 'mergeChecksFailed',
};
const statesToShowHelpWidget = [
@ -50,6 +51,7 @@ export const stateKey = {
readyToMerge: 'readyToMerge',
rebase: 'rebase',
merged: 'merged',
mergeChecksFailed: 'mergeChecksFailed',
};
export default {

View File

@ -75,7 +75,7 @@ export default {
variant="link"
:track-experiment="$options.inviteMembersInComment"
:trigger-source="$options.inviteMembersInComment"
data-track-event="comment_invite_click"
data-track-action="comment_invite_click"
/>
<span class="uploading-progress-container hide">
<gl-icon name="media" />

View File

@ -40,7 +40,7 @@ export default {
:href="feature.url"
target="_blank"
class="gl-display-block"
data-track-event="click_whats_new_item"
data-track-action="click_whats_new_item"
:data-track-label="feature.title"
:data-track-property="feature.url"
>
@ -55,7 +55,7 @@ export default {
:href="feature.url"
target="_blank"
class="whats-new-item-title-link gl-display-block gl-mt-4 gl-mb-1"
data-track-event="click_whats_new_item"
data-track-action="click_whats_new_item"
:data-track-label="feature.title"
:data-track-property="feature.url"
>
@ -79,7 +79,7 @@ export default {
<gl-button
:href="feature.url"
target="_blank"
data-track-event="click_whats_new_item"
data-track-action="click_whats_new_item"
:data-track-label="feature.title"
:data-track-property="feature.url"
>

View File

@ -26,6 +26,7 @@ class Explore::ProjectsController < Explore::ApplicationController
feature_category :projects
def index
show_alert_if_search_is_disabled
@projects = load_projects
respond_to do |format|
@ -120,6 +121,12 @@ class Explore::ProjectsController < Explore::ApplicationController
end
end
end
def show_alert_if_search_is_disabled
return if current_user || params[:name].blank? && params[:search].blank? || !html_request? || Feature.disabled?(:disable_anonymous_search, type: :ops)
flash[:notice] = _('You must sign in to search for specific projects.')
end
end
Explore::ProjectsController.prepend_mod_with('Explore::ProjectsController')

View File

@ -193,6 +193,7 @@ class ProjectsFinder < UnionFinder
def by_search(items)
params[:search] ||= params[:name]
return items if Feature.enabled?(:disable_anonymous_search, type: :ops) && current_user.nil?
return items.none if params[:search].present? && params[:minimum_search_length].present? && params[:search].length < params[:minimum_search_length].to_i
items.optionally_search(params[:search], include_namespace: params[:search_namespaces].present?)

View File

@ -373,7 +373,7 @@ module IssuablesHelper
is_collapsed: is_collapsed,
track_label: "right_sidebar",
track_property: "update_todo",
track_event: "click_button",
track_action: "click_button",
track_value: ""
}
end

View File

@ -32,7 +32,7 @@ module Nav
id: 'new_project',
title: _('New project/repository'),
href: new_project_path(namespace_id: group.id),
data: { track_event: 'click_link_new_project_group', track_label: 'plus_menu_dropdown' }
data: { track_action: 'click_link_new_project_group', track_label: 'plus_menu_dropdown' }
)
)
end
@ -43,7 +43,7 @@ module Nav
id: 'new_subgroup',
title: _('New subgroup'),
href: new_group_path(parent_id: group.id),
data: { track_event: 'click_link_new_subgroup', track_label: 'plus_menu_dropdown' }
data: { track_action: 'click_link_new_subgroup', track_label: 'plus_menu_dropdown' }
)
)
end
@ -74,7 +74,7 @@ module Nav
id: 'new_issue',
title: _('New issue'),
href: new_project_issue_path(project),
data: { track_event: 'click_link_new_issue', track_label: 'plus_menu_dropdown', qa_selector: 'new_issue_link' }
data: { track_action: 'click_link_new_issue', track_label: 'plus_menu_dropdown', qa_selector: 'new_issue_link' }
)
)
end
@ -85,7 +85,7 @@ module Nav
id: 'new_mr',
title: _('New merge request'),
href: project_new_merge_request_path(merge_project),
data: { track_event: 'click_link_new_mr', track_label: 'plus_menu_dropdown' }
data: { track_action: 'click_link_new_mr', track_label: 'plus_menu_dropdown' }
)
)
end
@ -96,7 +96,7 @@ module Nav
id: 'new_snippet',
title: _('New snippet'),
href: new_project_snippet_path(project),
data: { track_event: 'click_link_new_snippet_project', track_label: 'plus_menu_dropdown' }
data: { track_action: 'click_link_new_snippet_project', track_label: 'plus_menu_dropdown' }
)
)
end
@ -124,7 +124,7 @@ module Nav
id: 'general_new_project',
title: _('New project/repository'),
href: new_project_path,
data: { track_event: 'click_link_new_project', track_label: 'plus_menu_dropdown', qa_selector: 'global_new_project_link' }
data: { track_action: 'click_link_new_project', track_label: 'plus_menu_dropdown', qa_selector: 'global_new_project_link' }
)
)
end
@ -135,7 +135,7 @@ module Nav
id: 'general_new_group',
title: _('New group'),
href: new_group_path,
data: { track_event: 'click_link_new_group', track_label: 'plus_menu_dropdown' }
data: { track_action: 'click_link_new_group', track_label: 'plus_menu_dropdown' }
)
)
end
@ -146,7 +146,7 @@ module Nav
id: 'general_new_snippet',
title: _('New snippet'),
href: new_snippet_path,
data: { track_event: 'click_link_new_snippet_parent', track_label: 'plus_menu_dropdown', qa_selector: 'global_new_snippet_link' }
data: { track_action: 'click_link_new_snippet_parent', track_label: 'plus_menu_dropdown', qa_selector: 'global_new_snippet_link' }
)
)
end
@ -164,7 +164,7 @@ module Nav
emoji: ('shaking_hands' if experiment_enabled?(:invite_members_new_dropdown)),
href: href,
data: {
track_event: 'click_link',
track_action: 'click_link',
track_label: tracking_label,
track_property: experiment_tracking_category_and_group(:invite_members_new_dropdown)
}

View File

@ -98,7 +98,7 @@ module Nav
builder.add_primary_menu_item_with_shortcut(
active: nav == 'project' || active_nav_link?(path: %w[root#index projects#trending projects#starred dashboard/projects#index]),
css_class: 'qa-projects-dropdown',
data: { track_label: "projects_dropdown", track_event: "click_dropdown" },
data: { track_label: "projects_dropdown", track_action: "click_dropdown" },
view: PROJECTS_VIEW,
shortcut_href: dashboard_projects_path,
**projects_menu_item_attrs
@ -112,7 +112,7 @@ module Nav
builder.add_primary_menu_item_with_shortcut(
active: nav == 'group' || active_nav_link?(path: %w[dashboard/groups explore/groups]),
css_class: 'qa-groups-dropdown',
data: { track_label: "groups_dropdown", track_event: "click_dropdown" },
data: { track_label: "groups_dropdown", track_action: "click_dropdown" },
view: GROUPS_VIEW,
shortcut_href: dashboard_groups_path,
**groups_menu_item_attrs

View File

@ -147,7 +147,6 @@ class Member < ApplicationRecord
scope :owners, -> { active.where(access_level: OWNER) }
scope :owners_and_maintainers, -> { active.where(access_level: [OWNER, MAINTAINER]) }
scope :with_user, -> (user) { where(user: user) }
scope :with_user_by_email, -> (email) { left_join_users.where(users: { email: email } ) }
scope :preload_user_and_notification_settings, -> { preload(user: :notification_settings) }

View File

@ -6,4 +6,4 @@
%a.nav-link.active{ href: '#login-pane', data: { toggle: 'tab', qa_selector: 'sign_in_tab' }, role: 'tab' }= tab_title
- if render_signup_link && allow_signup?
%li.nav-item{ role: 'presentation' }
%a.nav-link{ href: '#register-pane', data: { track_label: 'sign_in_register', track_property: '', track_event: 'click_button', track_value: '', toggle: 'tab', qa_selector: 'register_tab' }, role: 'tab' } Register
%a.nav-link{ href: '#register-pane', data: { track_label: 'sign_in_register', track_property: '', track_action: 'click_button', track_value: '', toggle: 'tab', qa_selector: 'register_tab' }, role: 'tab' } Register

View File

@ -1,4 +1,4 @@
.search.search-form{ data: { track_label: "navbar_search", track_event: "activate_form_input", track_value: "" } }
.search.search-form{ data: { track_label: "navbar_search", track_action: "activate_form_input", track_value: "" } }
= form_tag search_path, method: :get, class: 'form-inline form-control' do |_f|
.search-input-container
.search-input-wrap

View File

@ -32,6 +32,7 @@
- unless current_controller?(:search)
- if Feature.enabled?(:new_header_search)
#js-header-search.header-search{ data: { 'search-context' => search_context.to_json,
'search-path' => search_path,
'issues-path' => issues_dashboard_path,
'mr-path' => merge_requests_dashboard_path } }
%input{ type: "text", placeholder: _('Search or jump to...'), class: 'form-control gl-form-input' }
@ -45,7 +46,7 @@
= link_to assigned_issues_dashboard_path, title: _('Issues'), class: 'dashboard-shortcuts-issues', aria: { label: _('Issues') },
data: { qa_selector: 'issues_shortcut_button', toggle: 'tooltip', placement: 'bottom',
track_label: 'main_navigation',
track_event: 'click_issues_link',
track_action: 'click_issues_link',
track_property: 'navigation',
container: 'body' } do
= sprite_icon('issues')
@ -59,7 +60,7 @@
toggle: "dropdown",
placement: 'bottom',
track_label: 'main_navigation',
track_event: 'click_merge_link',
track_action: 'click_merge_link',
track_property: 'navigation',
container: 'body' } do
= sprite_icon('git-merge')
@ -85,7 +86,7 @@
= link_to dashboard_todos_path, title: _('To-Do List'), aria: { label: _('To-Do List') }, class: 'shortcuts-todos',
data: { qa_selector: 'todos_shortcut_button', toggle: 'tooltip', placement: 'bottom',
track_label: 'main_navigation',
track_event: 'click_to_do_link',
track_action: 'click_to_do_link',
track_property: 'navigation',
container: 'body' } do
= sprite_icon('todo-done')
@ -101,7 +102,7 @@
.dropdown-menu.dropdown-menu-right
= render 'layouts/header/help_dropdown'
- if header_link?(:user_dropdown)
%li.nav-item.header-user.js-nav-user-dropdown.dropdown{ data: { track_label: "profile_dropdown", track_event: "click_dropdown", track_value: "", qa_selector: 'user_menu' }, class: ('mr-0' if has_impersonation_link) }
%li.nav-item.header-user.js-nav-user-dropdown.dropdown{ data: { track_label: "profile_dropdown", track_action: "click_dropdown", track_value: "", qa_selector: 'user_menu' }, class: ('mr-0' if has_impersonation_link) }
= link_to current_user, class: user_dropdown_class, data: { toggle: "dropdown" } do
= image_tag avatar_icon_for_user(current_user, 23), width: 23, height: 23, class: "header-user-avatar qa-user-avatar", alt: current_user.name
= render_if_exists 'layouts/header/user_notification_dot', project: project, namespace: group

View File

@ -6,7 +6,7 @@
- return if menu_sections.empty?
%li.header-new.dropdown{ class: top_class, data: { track_label: "new_dropdown", track_event: "click_dropdown" } }
%li.header-new.dropdown{ class: top_class, data: { track_label: "new_dropdown", track_action: "click_dropdown" } }
= link_to new_project_path, class: "header-new-dropdown-toggle has-tooltip", id: "js-onboarding-new-project-link", title: title, ref: 'tooltip', aria: { label: title }, data: { toggle: 'dropdown', placement: 'bottom', container: 'body', display: 'static', qa_selector: 'new_menu_toggle' } do
= sprite_icon('plus-square')
= sprite_icon('chevron-down', css_class: 'caret-down')

View File

@ -76,7 +76,7 @@
- if phabricator_import_enabled?
%div
= link_to new_import_phabricator_path, class: 'gl-button btn-default btn import_phabricator', data: { track_label: "#{track_label}", track_event: "click_button", track_property: "phabricator" } do
= link_to new_import_phabricator_path, class: 'gl-button btn-default btn import_phabricator', data: { track_label: "#{track_label}", track_action: "click_button", track_property: "phabricator" } do
.gl-button-icon
= custom_icon('issues')
= _("Phabricator Tasks")

View File

@ -1,6 +1,6 @@
%h4.gl-mt-0.gl-mb-3{ data: { testid: 'invite-member-section',
track_label: 'invite_members_empty_project',
track_event: 'render' } }
track_action: 'render' } }
= s_('InviteMember|Invite your team')
%p= s_('InviteMember|Add members to this project and start collaborating with your team.')
.js-invite-members-trigger{ data: { variant: 'confirm',

View File

@ -8,7 +8,7 @@
.form-group.project-name.col-sm-12
= f.label :name, class: 'label-bold' do
%span= _("Project name")
= f.text_field :name, placeholder: "My awesome project", class: "form-control gl-form-input input-lg", data: { track_label: "#{track_label}", track_event: "activate_form_input", track_property: "project_name", track_value: "" }, required: true, aria: { required: true }
= f.text_field :name, placeholder: "My awesome project", class: "form-control gl-form-input input-lg", data: { track_label: "#{track_label}", track_action: "activate_form_input", track_property: "project_name", track_value: "" }, required: true, aria: { required: true }
.form-group.project-path.col-sm-6
= f.label :namespace_id, class: 'label-bold' do
%span= _('Project URL')
@ -26,7 +26,7 @@
display_path: true,
extra_group: namespace_id),
{},
{ class: 'select2 js-select-namespace qa-project-namespace-select block-truncated', data: { track_label: "#{track_label}", track_event: "activate_form_input", track_property: "project_path", track_value: "", qa_selector: "select_namespace_dropdown" }})
{ class: 'select2 js-select-namespace qa-project-namespace-select block-truncated', data: { track_label: "#{track_label}", track_action: "activate_form_input", track_property: "project_path", track_value: "", qa_selector: "select_namespace_dropdown" }})
- else
.input-group-prepend.static-namespace.flex-shrink-0.has-tooltip{ title: user_url(current_user.username) + '/' }
.input-group-text.border-0
@ -45,7 +45,7 @@
.form-group
= f.label :description, class: 'label-bold' do
= s_('ProjectsNew|Project description %{tag_start}(optional)%{tag_end}').html_safe % { tag_start: '<span>'.html_safe, tag_end: '</span>'.html_safe }
= f.text_area :description, placeholder: s_('ProjectsNew|Description format'), class: "form-control gl-form-input", rows: 3, maxlength: 250, data: { track_label: "#{track_label}", track_event: "activate_form_input", track_property: "project_description", track_value: "" }
= f.text_area :description, placeholder: s_('ProjectsNew|Description format'), class: "form-control gl-form-input", rows: 3, maxlength: 250, data: { track_label: "#{track_label}", track_action: "activate_form_input", track_property: "project_description", track_value: "" }
= f.label :visibility_level, class: 'label-bold' do
= s_('ProjectsNew|Visibility Level')
@ -56,12 +56,12 @@
.form-group.row.initialize-with-readme-setting
%div{ :class => "col-sm-12" }
.form-check
= check_box_tag 'project[initialize_with_readme]', '1', true, class: 'form-check-input', data: { qa_selector: "initialize_with_readme_checkbox", track_label: "#{track_label}", track_event: "activate_form_input", track_property: "init_with_readme", track_value: "" }
= check_box_tag 'project[initialize_with_readme]', '1', true, class: 'form-check-input', data: { qa_selector: "initialize_with_readme_checkbox", track_label: "#{track_label}", track_action: "activate_form_input", track_property: "init_with_readme", track_value: "" }
= label_tag 'project[initialize_with_readme]', class: 'form-check-label' do
.option-title
%strong= s_('ProjectsNew|Initialize repository with a README')
.option-description
= s_('ProjectsNew|Allows you to immediately clone this projects repository. Skip this if you plan to push up an existing repository.')
= f.submit _('Create project'), class: "btn gl-button btn-confirm", data: { track_label: "#{track_label}", track_event: "click_button", track_property: "create_project", track_value: "" }
= link_to _('Cancel'), dashboard_projects_path, class: 'btn gl-button btn-default btn-cancel', data: { track_label: "#{track_label}", track_event: "click_button", track_property: "cancel", track_value: "" }
= f.submit _('Create project'), class: "btn gl-button btn-confirm", data: { track_label: "#{track_label}", track_action: "click_button", track_property: "create_project", track_value: "" }
= link_to _('Cancel'), dashboard_projects_path, class: 'btn gl-button btn-default btn-cancel', data: { track_label: "#{track_label}", track_action: "click_button", track_property: "cancel", track_value: "" }

View File

@ -8,9 +8,9 @@
.text-muted
= template.description
.controls.d-flex.align-items-center
%a.btn.gl-button.btn-default.gl-mr-3{ href: template.preview, rel: 'noopener noreferrer', target: '_blank', data: { track_label: "template_preview", track_property: template.name, track_event: "click_button", track_value: "" } }
%a.btn.gl-button.btn-default.gl-mr-3{ href: template.preview, rel: 'noopener noreferrer', target: '_blank', data: { track_label: "template_preview", track_property: template.name, track_action: "click_button", track_value: "" } }
= _("Preview")
%label.btn.gl-button.btn-confirm.template-button.choose-template.gl-mb-0{ for: template.name }
%input{ type: "radio", autocomplete: "off", name: "project[template_name]", id: template.name, value: template.name, data: { track_label: "template_use", track_property: template.name, track_event: "click_button", track_value: "" } }
%input{ type: "radio", autocomplete: "off", name: "project[template_name]", id: template.name, value: template.name, data: { track_label: "template_use", track_property: template.name, track_action: "click_button", track_value: "" } }
%span{ data: { qa_selector: 'use_template_button' } }
= _("Use template")

View File

@ -1,7 +1,7 @@
.js-blob-result.gl-mt-3.gl-mb-5{ data: { qa_selector: 'result_item_content' } }
.file-holder.file-holder-top-border
.js-file-title.file-title{ data: { qa_selector: 'file_title_content' } }
= link_to blob_link, data: {track_event: 'click_text', track_label: 'blob_path', track_property: 'search_result'} do
= link_to blob_link, data: {track_action: 'click_text', track_label: 'blob_path', track_property: 'search_result'} do
= sprite_icon('document')
%strong
= search_blob_title(project, path)

View File

@ -1 +1 @@
= render 'projects/commits/commit', project: commit.project, commit: commit, ref: nil, show_project_name: @project.nil?, link_data_attrs: {track_event: 'click_text', track_label: 'commit_title', track_property: 'search_result'}
= render 'projects/commits/commit', project: commit.project, commit: commit, ref: nil, show_project_name: @project.nil?, link_data_attrs: {track_action: 'click_text', track_label: 'commit_title', track_property: 'search_result'}

View File

@ -3,7 +3,7 @@
%span.gl-display-flex.gl-align-items-center
%span.badge.badge-pill.gl-badge.sm{ class: "badge-#{issuable_state_to_badge_class(issuable)}" }= issuable_state_text(issuable)
= sprite_icon('eye-slash', css_class: 'gl-text-gray-500 gl-ml-2') if issuable.respond_to?(:confidential?) && issuable.confidential?
= link_to issuable_path(issuable), data: { track_event: 'click_text', track_label: "#{issuable.class.name.downcase}_title", track_property: 'search_result' }, class: 'gl-w-full' do
= link_to issuable_path(issuable), data: { track_action: 'click_text', track_label: "#{issuable.class.name.downcase}_title", track_property: 'search_result' }, class: 'gl-w-full' do
%span.term.str-truncated.gl-font-weight-bold.gl-ml-2= issuable.title
.gl-text-gray-500.gl-my-3
= issuable_project_reference(issuable)

View File

@ -1,6 +1,6 @@
.search-result-row
%h4
= link_to project_milestone_path(milestone.project, milestone), data: {track_event: 'click_text', track_label: 'milestone_title', track_property: 'search_result'} do
= link_to project_milestone_path(milestone.project, milestone), data: {track_action: 'click_text', track_label: 'milestone_title', track_property: 'search_result'} do
%span.term.str-truncated= milestone.title
- if milestone.description.present?

View File

@ -18,7 +18,7 @@
- else
%span #{note.noteable_type.titleize} ##{noteable_identifier}
&middot;
= link_to note.noteable.title, note_url, data: {track_event: 'click_text', track_label: 'noteable_title', track_property: 'search_result'}
= link_to note.noteable.title, note_url, data: {track_action: 'click_text', track_label: 'noteable_title', track_property: 'search_result'}
%span.note-headline-light.note-headline-meta
%span.system-note-separator

View File

@ -3,7 +3,7 @@
%div{ class: 'search-result-row gl-pb-3! gl-mt-5 gl-mb-0!' }
%span.gl-display-flex.gl-align-items-center
= link_to wiki_blob_link, data: { track_event: 'click_text', track_label: "wiki_title", track_property: 'search_result' }, class: 'gl-w-full' do
= link_to wiki_blob_link, data: { track_action: 'click_text', track_label: "wiki_title", track_property: 'search_result' }, class: 'gl-w-full' do
%span.term.str-truncated.gl-font-weight-bold= ::Gitlab::Git::Wiki::GollumSlug.canonicalize_filename(wiki_blob.path)
.description.term.col-sm-10.gl-px-0
= simple_search_highlight_and_truncate(wiki_blob.data, @search_term)

View File

@ -1,2 +1,2 @@
= link_to _("Community forum"), "https://forum.gitlab.com/", target: '_blank', class: 'text-nowrap',
rel: 'noopener noreferrer', data: { 'track_event': 'click_forum', 'track_property': 'question_menu' }
rel: 'noopener noreferrer', data: { 'track_action': 'click_forum', 'track_property': 'question_menu' }

View File

@ -3,7 +3,7 @@
- available_visibility_levels.each do |level|
.form-check
= form.radio_button model_method, level, checked: (selected_level == level), class: 'form-check-input', data: { track_label: "blank_project", track_event: "activate_form_input", track_property: "#{model_method}_#{level}", track_value: "", qa_selector: "#{visibility_level_label(level).downcase}_radio" }
= form.radio_button model_method, level, checked: (selected_level == level), class: 'form-check-input', data: { track_label: "blank_project", track_action: "activate_form_input", track_property: "#{model_method}_#{level}", track_value: "", qa_selector: "#{visibility_level_label(level).downcase}_radio" }
= form.label "#{model_method}_#{level}", class: 'form-check-label' do
= visibility_level_icon(level)
.option-title

View File

@ -51,7 +51,7 @@
= _('Expired')
- else
%span{ class: ('text-warning' if token.expires_soon?) }
= _('In %{time_to_now}') % { time_to_now: distance_of_time_in_words_to_now(token.expires_at) }
= time_ago_with_tooltip(token.expires_at)
- else
%span.token-never-expires-label= _('Never')
- if project

View File

@ -20,7 +20,7 @@
%td
- if token.expires?
%span{ class: ('text-warning' if token.expires_soon?) }
In #{distance_of_time_in_words_to_now(token.expires_at)}
= time_ago_with_tooltip(token.expires_at)
- else
%span.token-never-expires-label= _('Never')
%td= token.scopes.present? ? token.scopes.join(', ') : _('no scopes selected')

View File

@ -88,7 +88,7 @@
= custom_icon('icon_arrow_right')
.dropdown.sidebar-move-issue-dropdown.hide-collapsed
%button.gl-button.btn.btn-default.btn-block.js-sidebar-dropdown-toggle.js-move-issue{ type: 'button',
data: { toggle: 'dropdown', display: 'static', track_label: "right_sidebar", track_property: "move_issue", track_event: "click_button", track_value: "" } }
data: { toggle: 'dropdown', display: 'static', track_label: "right_sidebar", track_property: "move_issue", track_action: "click_button", track_value: "" } }
= _('Move issue')
.dropdown-menu.dropdown-menu-selectable.dropdown-extended-height
= dropdown_title(_('Move issue'))

View File

@ -6,7 +6,7 @@
- options[:footer_content] = true
- options[:wrapper_class] = local_assigns.fetch(:wrapper_class)
- options[:toggle_class] += ' js-invite-members-track'
- data['track-event'] = 'show_invite_members'
- data['track-action'] = 'show_invite_members'
- data['track-label'] = local_assigns.fetch(:track_label)
= dropdown_tag(data['dropdown-title'], options: options) do

View File

@ -21,7 +21,7 @@
%li.js-filter-issuable-type
= link_to new_project_issue_path(@project), class: ("is-active" if issuable.issue?) do
#{sprite_icon(work_item_type_icon(:issue), css_class: 'gl-icon')} #{_("Issue")}
%li.js-filter-issuable-type{ data: { track: { event: "select_issue_type_incident", label: "select_issue_type_incident_dropdown_option" } } }
%li.js-filter-issuable-type{ data: { track: { action: "select_issue_type_incident", label: "select_issue_type_incident_dropdown_option" } } }
= link_to new_project_issue_path(@project, { issuable_template: 'incident', issue: { issue_type: 'incident' } }), class: ("is-active" if issuable.incident?) do
#{sprite_icon(work_item_type_icon(:incident), css_class: 'gl-icon')} #{_("Incident")}

View File

@ -0,0 +1,21 @@
description: "Show alert integrations list"
category: "Alert Integrations"
action: view_alert_integrations_list
label_description: ""
property_description: ""
value_description: ""
extra_properties:
identifiers:
product_section: ops
product_stage: monitor
product_group: group::monitor
product_category:
milestone: "13.5"
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/44549
distributions:
- ce
- ee
tiers:
- free
- premium
- ultimate

View File

@ -0,0 +1,21 @@
description: "Commit CI file dismissed"
category: "code_quality_walkthrough"
action: commit_ci_file_dismissed
label_description: ""
property_description: ""
value_description: ""
extra_properties:
identifiers:
product_section: growth
product_stage: growth
product_group: group::activation
product_category:
milestone: "13.12"
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/58900
distributions:
- ce
- ee
tiers:
- free
- premium
- ultimate

View File

@ -0,0 +1,21 @@
description: "Commit CI file displayed"
category: "code_quality_walkthrough"
action: commit_ci_file_displayed
label_description: ""
property_description: ""
value_description: ""
extra_properties:
identifiers:
product_section: growth
product_stage: growth
product_group: group::activation
product_category:
milestone: "13.12"
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/58900
distributions:
- ce
- ee
tiers:
- free
- premium
- ultimate

View File

@ -0,0 +1,21 @@
description: "Commit created"
category: "code_quality_walkthrough"
action: commit_created
label_description: ""
property_description: ""
value_description: ""
extra_properties:
identifiers:
product_section: growth
product_stage: growth
product_group: group::activation
product_category:
milestone: "13.12"
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/58900
distributions:
- ce
- ee
tiers:
- free
- premium
- ultimate

View File

@ -0,0 +1,21 @@
description: "Click empty state CTA"
category: "code_quality_walkthrough"
action: cta_clicked
label_description: ""
property_description: ""
value_description: ""
extra_properties:
identifiers:
product_section: growth
product_stage: growth
product_group: group::activation
product_category:
milestone: "13.12"
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/58900
distributions:
- ce
- ee
tiers:
- free
- premium
- ultimate

View File

@ -0,0 +1,21 @@
description: "Show failed pipeline"
category: "code_quality_walkthrough"
action: failed_pipeline_displayed
label_description: ""
property_description: ""
value_description: ""
extra_properties:
identifiers:
product_section: growth
product_stage: growth
product_group: group::activation
product_category:
milestone: "13.12"
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/58900
distributions:
- ce
- ee
tiers:
- free
- premium
- ultimate

View File

@ -0,0 +1,21 @@
description: "Show failed pipeline logs"
category: "code_quality_walkthrough"
action: failed_pipeline_view_logs
label_description: ""
property_description: ""
value_description: ""
extra_properties:
identifiers:
product_section: growth
product_stage: growth
product_group: group::activation
product_category:
milestone: "13.12"
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/58900
distributions:
- ce
- ee
tiers:
- free
- premium
- ultimate

View File

@ -0,0 +1,21 @@
description: "Dismiss running pipeline"
category: "code_quality_walkthrough"
action: running_pipeline_dismissed
label_description: ""
property_description: ""
value_description: ""
extra_properties:
identifiers:
product_section: growth
product_stage: growth
product_group: group::activation
product_category:
milestone: "13.12"
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/58900
distributions:
- ce
- ee
tiers:
- free
- premium
- ultimate

View File

@ -0,0 +1,21 @@
description: "Show running pipeline"
category: "code_quality_walkthrough"
action: running_pipeline_displayed
label_description: ""
property_description: ""
value_description: ""
extra_properties:
identifiers:
product_section: growth
product_stage: growth
product_group: group::activation
product_category:
milestone: "13.12"
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/58900
distributions:
- ce
- ee
tiers:
- free
- premium
- ultimate

View File

@ -0,0 +1,21 @@
description: "Show succeeded pipeline"
category: "code_quality_walkthrough"
action: success_pipeline_displayed
label_description: ""
property_description: ""
value_description: ""
extra_properties:
identifiers:
product_section: growth
product_stage: growth
product_group: group::activation
product_category:
milestone: "13.12"
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/58900
distributions:
- ce
- ee
tiers:
- free
- premium
- ultimate

View File

@ -0,0 +1,21 @@
description: "Show succeeded pipeline logs"
category: "code_quality_walkthrough"
action: success_pipeline_view_logs
label_description: ""
property_description: ""
value_description: ""
extra_properties:
identifiers:
product_section: growth
product_stage: growth
product_group: group::activation
product_category:
milestone: "13.12"
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/58900
distributions:
- ce
- ee
tiers:
- free
- premium
- ultimate

View File

@ -0,0 +1,21 @@
description: "Click 2FA codes related buttons: copy, download, print..."
category: default
action: click_button
label_description: "Action button name"
property_description: ""
value_description: ""
extra_properties:
identifiers:
product_section: dev
product_stage: manage
product_group: group::compliance
product_category:
milestone: "13.7"
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/49510
distributions:
- ce
- ee
tiers:
- free
- premium
- ultimate

View File

@ -0,0 +1,21 @@
description: "Copy 2FA codes with keyboard shortcut"
category: default
action: copy_keyboard_shortcut
label_description: "Action button name"
property_description: ""
value_description: ""
extra_properties:
identifiers:
product_section: dev
product_stage: manage
product_group: group::compliance
product_category:
milestone: "13.7"
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/49510
distributions:
- ce
- ee
tiers:
- free
- premium
- ultimate

View File

@ -0,0 +1,21 @@
description: "Click Epic's board switcher"
category: default
action: click_dropdown
label_description: "`board_switcher`"
property_description: ""
value_description: ""
extra_properties:
identifiers:
product_section: dev
product_stage: plan
product_group: group::product_planning
product_category:
milestone: "14.0"
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/63765
distributions:
- ce
- ee
tiers:
- free
- premium
- ultimate

View File

@ -0,0 +1,21 @@
description: "Cancel registry tag deletion"
category: default
action: cancel_delete
label_description: "`[bulk_registry_tag_delete | registry_tag_delete]`"
property_description: ""
value_description: ""
extra_properties:
identifiers:
product_section: ops
product_stage: package
product_group: group::package
product_category:
milestone: "12.8"
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/23154
distributions:
- ce
- ee
tiers:
- free
- premium
- ultimate

View File

@ -0,0 +1,21 @@
description: "Click registry tag delete button"
category: default
action: click_button
label_description: "`[bulk_registry_tag_delete | registry_tag_delete]`"
property_description: ""
value_description: ""
extra_properties:
identifiers:
product_section: ops
product_stage: package
product_group: group::package
product_category:
milestone: "12.8"
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/23154
distributions:
- ce
- ee
tiers:
- free
- premium
- ultimate

View File

@ -0,0 +1,21 @@
description: "Confirm registry tag deletion"
category: default
action: confirm_delete
label_description: "`[bulk_registry_tag_delete | registry_tag_delete]`"
property_description: ""
value_description: ""
extra_properties:
identifiers:
product_section: ops
product_stage: package
product_group: group::package
product_category:
milestone: "12.8"
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/23154
distributions:
- ce
- ee
tiers:
- free
- premium
- ultimate

View File

@ -0,0 +1,21 @@
description: "Change discussion sort direction"
category: default
action: change_discussion_sort_direction
label_description: ""
property_description: "`[asc | desc]`"
value_description: ""
extra_properties:
identifiers:
product_section: dev
product_stage: plan
product_group: group::product_planning
product_category:
milestone: "12.10"
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/28717
distributions:
- ce
- ee
tiers:
- free
- premium
- ultimate

View File

@ -0,0 +1,21 @@
description: "Dismiss home page banner"
category: default
action: click_dismiss
label_description: ""
property_description: ""
value_description: ""
extra_properties:
identifiers:
product_section: growth
product_stage: growth
product_group: group::expansion
product_category:
milestone: "13.4"
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/39752
distributions:
- ce
- ee
tiers:
- free
- premium
- ultimate

View File

@ -0,0 +1,21 @@
description: "Copy Composer package include command"
category: default
action: copy_composer_package_include_command
label_description: "`code_instruction`"
property_description: ""
value_description: ""
extra_properties:
identifiers:
product_section: ops
product_stage: package
product_group: group::package
product_category:
milestone: "13.3"
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/38779
distributions:
- ce
- ee
tiers:
- free
- premium
- ultimate

View File

@ -0,0 +1,21 @@
description: "Copy Composer registry include command"
category: default
action: copy_composer_registry_include_command
label_description: "`code_instruction`"
property_description: ""
value_description: ""
extra_properties:
identifiers:
product_section: ops
product_stage: package
product_group: group::package
product_category:
milestone: "13.3"
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/38779
distributions:
- ce
- ee
tiers:
- free
- premium
- ultimate

View File

@ -0,0 +1,21 @@
description: "Copy Gradle add to source command"
category: default
action: copy_gradle_add_to_source_command
label_description: "`code_instruction`"
property_description: ""
value_description: ""
extra_properties:
identifiers:
product_section: ops
product_stage: package
product_group: group::package
product_category:
milestone: "13.10"
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/55738
distributions:
- ce
- ee
tiers:
- free
- premium
- ultimate

View File

@ -0,0 +1,21 @@
description: "Copy Gradle install command"
category: default
action: copy_gradle_install_command
label_description: "`code_instruction`"
property_description: ""
value_description: ""
extra_properties:
identifiers:
product_section: ops
product_stage: package
product_group: group::package
product_category:
milestone: "13.10"
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/55738
distributions:
- ce
- ee
tiers:
- free
- premium
- ultimate

View File

@ -0,0 +1,21 @@
description: "Copy Kotlin add to source command"
category: default
action: copy_kotlin_add_to_source_command
label_description: "`code_instruction`"
property_description: ""
value_description: ""
extra_properties:
identifiers:
product_section: ops
product_stage: package
product_group: group::package
product_category:
milestone: "13.12"
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/60097
distributions:
- ce
- ee
tiers:
- free
- premium
- ultimate

View File

@ -0,0 +1,21 @@
description: "Copy Kotlin install command"
category: default
action: copy_kotlin_install_command
label_description: "`code_instruction`"
property_description: ""
value_description: ""
extra_properties:
identifiers:
product_section: ops
product_stage: package
product_group: group::package
product_category:
milestone: "13.12"
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/60097
distributions:
- ce
- ee
tiers:
- free
- premium
- ultimate

View File

@ -0,0 +1,21 @@
description: "Show a congratulation on first pipeline"
category: default
action: generic
label_description: "`congratulate_first_pipeline`"
property_description: "`[admin | maintainer | developer | owner]`"
value_description: ""
extra_properties:
identifiers:
product_section: growth
product_stage: growth
product_group: group::expansion
product_category:
milestone: "12.10"
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/28378
distributions:
- ce
- ee
tiers:
- free
- premium
- ultimate

View File

@ -0,0 +1,21 @@
description: "Execute bubble menu control"
category: default
action: execute_bubble_menu_control
label_description: "`content_editor`"
property_description: ""
value_description: ""
extra_properties:
identifiers:
product_section: dev
product_stage: create
product_group: group::editor
product_category:
milestone: "14.2"
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/67363
distributions:
- ce
- ee
tiers:
- free
- premium
- ultimate

View File

@ -0,0 +1,21 @@
description: "Execute input rule"
category: default
action: execute_input_rule
label_description: "`content_editor`"
property_description: ""
value_description: ""
extra_properties:
identifiers:
product_section: dev
product_stage: create
product_group: group::editor
product_category:
milestone: "14.0"
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/61248
distributions:
- ce
- ee
tiers:
- free
- premium
- ultimate

View File

@ -0,0 +1,21 @@
description: "Execute keyboard shortcut"
category: default
action: execute_keyboard_shortcut
label_description: "`content_editor`"
property_description: ""
value_description: ""
extra_properties:
identifiers:
product_section: dev
product_stage: create
product_group: group::editor
product_category:
milestone: "14.0"
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/61248
distributions:
- ce
- ee
tiers:
- free
- premium
- ultimate

View File

@ -0,0 +1,21 @@
description: "Execute toolbar control"
category: default
action: execute_toolbar_control
label_description: "`content_editor`"
property_description: "Content type"
value_description: "Context data: [heading] 3, [heading] 2"
extra_properties:
identifiers:
product_section: dev
product_stage: create
product_group: group::editor
product_category:
milestone: "13.12"
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/61065
distributions:
- ce
- ee
tiers:
- free
- premium
- ultimate

View File

@ -0,0 +1,21 @@
description: "Reset Docker form"
category: default
action: reset_form
label_description: "`docker_container_retention_and_expiration_policies`"
property_description: ""
value_description: ""
extra_properties:
identifiers:
product_section: ops
product_stage: package
product_group: group::package
product_category:
milestone: "12.8"
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/23844
distributions:
- ce
- ee
tiers:
- free
- premium
- ultimate

View File

@ -0,0 +1,21 @@
description: "Submit Docker form"
category: default
action: submit_form
label_description: "`docker_container_retention_and_expiration_policies`"
property_description: ""
value_description: ""
extra_properties:
identifiers:
product_section: ops
product_stage: package
product_group: group::package
product_category:
milestone: "12.8"
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/23844
distributions:
- ce
- ee
tiers:
- free
- premium
- ultimate

View File

@ -0,0 +1,21 @@
description: "Open frequent items dropdown"
category: default
action: click_link
label_description: "`[dropdown_type]_dropdown_frequent_items_list_item`"
property_description: ""
value_description: ""
extra_properties:
identifiers:
product_section: dev
product_stage: create
product_group: group::editor
product_category:
milestone: "13.7"
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/47589
distributions:
- ce
- ee
tiers:
- free
- premium
- ultimate

Some files were not shown because too many files have changed in this diff Show More