...@@ -9,7 +9,6 @@ export default class Store { ...@@ -9,7 +9,6 @@ export default class Store {
lockedWarningVisible: false, lockedWarningVisible: false,
updateLoading: false, updateLoading: false,
lock_version: 0, lock_version: 0,
issuableTemplates: [],
}; };
} }
... ...
......
<script>
import LogLine from './line.vue';
import LogLineHeader from './line_header.vue';
export default {
name: 'CollpasibleLogSection',
components: {
LogLine,
LogLineHeader,
},
props: {
section: {
type: Object,
required: true,
},
traceEndpoint: {
type: String,
required: true,
},
},
computed: {
badgeDuration() {
return this.section.line && this.section.line.section_duration;
},
},
methods: {
handleOnClickCollapsibleLine(section) {
this.$emit('onClickCollapsibleLine', section);
},
},
};
</script>
<template>
<div>
<log-line-header
:line="section.line"
:duration="badgeDuration"
:path="traceEndpoint"
:is-closed="section.isClosed"
@toggleLine="handleOnClickCollapsibleLine(section)"
/>
<template v-if="!section.isClosed">
<template v-for="line in section.lines">
<collpasible-log-section
v-if="line.isHeader"
:key="`collapsible-nested-${line.offset}`"
:section="line"
:trace-endpoint="traceEndpoint"
@toggleLine="handleOnClickCollapsibleLine"
/>
<log-line v-else :key="line.offset" :line="line" :path="traceEndpoint" />
</template>
</template>
</div>
</template>
<script> <script>
import { mapState, mapActions } from 'vuex'; import { mapState, mapActions } from 'vuex';
import CollpasibleLogSection from './collapsible_section.vue';
import LogLine from './line.vue'; import LogLine from './line.vue';
import LogLineHeader from './line_header.vue';
export default { export default {
components: { components: {
CollpasibleLogSection,
LogLine, LogLine,
LogLineHeader,
}, },
computed: { computed: {
...mapState(['traceEndpoint', 'trace', 'isTraceComplete']), ...mapState(['traceEndpoint', 'trace', 'isTraceComplete']),
...@@ -22,13 +22,24 @@ export default { ...@@ -22,13 +22,24 @@ export default {
<template> <template>
<code class="job-log d-block"> <code class="job-log d-block">
<template v-for="(section, index) in trace"> <template v-for="(section, index) in trace">
<collpasible-log-section <template v-if="section.isHeader">
v-if="section.isHeader" <log-line-header
:key="`collapsible-${index}`" :key="`collapsible-${index}`"
:section="section" :line="section.line"
:trace-endpoint="traceEndpoint" :duration="section.section_duration"
@onClickCollapsibleLine="handleOnClickCollapsibleLine" :path="traceEndpoint"
:is-closed="section.isClosed"
@toggleLine="handleOnClickCollapsibleLine(section)"
/> />
<template v-if="!section.isClosed">
<log-line
v-for="line in section.lines"
:key="line.offset"
:line="line"
:path="traceEndpoint"
/>
</template>
</template>
<log-line v-else :key="section.offset" :line="section" :path="traceEndpoint" /> <log-line v-else :key="section.offset" :line="section" :path="traceEndpoint" />
</template> </template>
... ...
......
...@@ -8,19 +8,19 @@ axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; ...@@ -8,19 +8,19 @@ axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
// Maintain a global counter for active requests // Maintain a global counter for active requests
// see: spec/support/wait_for_requests.rb // see: spec/support/wait_for_requests.rb
axios.interceptors.request.use(config => { axios.interceptors.request.use(config => {
window.pendingRequests = window.pendingRequests || 0; window.activeVueResources = window.activeVueResources || 0;
window.pendingRequests += 1; window.activeVueResources += 1;
return config; return config;
}); });
// Remove the global counter // Remove the global counter
axios.interceptors.response.use( axios.interceptors.response.use(
response => { response => {
window.pendingRequests -= 1; window.activeVueResources -= 1;
return response; return response;
}, },
err => { err => {
window.pendingRequests -= 1; window.activeVueResources -= 1;
return Promise.reject(err); return Promise.reject(err);
}, },
); );
... ...
......
...@@ -37,7 +37,6 @@ import GlFieldErrors from './gl_field_errors'; ...@@ -37,7 +37,6 @@ import GlFieldErrors from './gl_field_errors';
import initUserPopovers from './user_popovers'; import initUserPopovers from './user_popovers';
import { initUserTracking } from './tracking'; import { initUserTracking } from './tracking';
import { __ } from './locale'; import { __ } from './locale';
import initPrivacyPolicyUpdateCallout from './privacy_policy_update_callout';
import 'ee_else_ce/main_ee'; import 'ee_else_ce/main_ee';
...@@ -97,7 +96,6 @@ function deferredInitialisation() { ...@@ -97,7 +96,6 @@ function deferredInitialisation() {
initUsagePingConsent(); initUsagePingConsent();
initUserPopovers(); initUserPopovers();
initUserTracking(); initUserTracking();
initPrivacyPolicyUpdateCallout();
if (document.querySelector('.search')) initSearchAutocomplete(); if (document.querySelector('.search')) initSearchAutocomplete();
...@@ -314,7 +312,6 @@ document.addEventListener('DOMContentLoaded', () => { ...@@ -314,7 +312,6 @@ document.addEventListener('DOMContentLoaded', () => {
const action = `${this.action}${link.search === '' ? '?' : '&'}`; const action = `${this.action}${link.search === '' ? '?' : '&'}`;
event.preventDefault(); event.preventDefault();
// eslint-disable-next-line no-jquery/no-serialize
visitUrl(`${action}${$(this).serialize()}`); visitUrl(`${action}${$(this).serialize()}`);
}); });
... ...
......
/* eslint-disable func-names, no-else-return, prefer-template, prefer-arrow-callback */ /* eslint-disable func-names, no-else-return, prefer-template, prefer-arrow-callback */
import $ from 'jquery'; import $ from 'jquery';
import '~/gl_dropdown';
import Api from './api'; import Api from './api';
import { mergeUrlParams } from './lib/utils/url_utility'; import { mergeUrlParams } from './lib/utils/url_utility';
import { parseBoolean } from '~/lib/utils/common_utils'; import { parseBoolean } from '~/lib/utils/common_utils';
... ...
......
...@@ -1461,7 +1461,6 @@ export default class Notes { ...@@ -1461,7 +1461,6 @@ export default class Notes {
getFormData($form) { getFormData($form) {
const content = $form.find('.js-note-text').val(); const content = $form.find('.js-note-text').val();
return { return {
// eslint-disable-next-line no-jquery/no-serialize
formData: $form.serialize(), formData: $form.serialize(),
formContent: _.escape(content), formContent: _.escape(content),
formAction: $form.attr('action'), formAction: $form.attr('action'),
... ...
......
...@@ -19,9 +19,7 @@ export default { ...@@ -19,9 +19,7 @@ export default {
<gl-button <gl-button
ref="button" ref="button"
v-gl-tooltip v-gl-tooltip
class="note-action-button" class="note-action-button js-note-action-reply"
data-track-event="click_button"
data-track-label="reply_comment_button"
variant="transparent" variant="transparent"
:title="__('Reply to comment')" :title="__('Reply to comment')"
@click="$emit('startReplying')" @click="$emit('startReplying')"
... ...
......
import Vue from 'vue'; import Vue from 'vue';
import initNoteStats from 'ee_else_ce/event_tracking/notes';
import notesApp from './components/notes_app.vue'; import notesApp from './components/notes_app.vue';
import initDiscussionFilters from './discussion_filters'; import initDiscussionFilters from './discussion_filters';
import createStore from './stores'; import createStore from './stores';
...@@ -38,6 +39,9 @@ document.addEventListener('DOMContentLoaded', () => { ...@@ -38,6 +39,9 @@ document.addEventListener('DOMContentLoaded', () => {
notesData: JSON.parse(notesDataset.notesData), notesData: JSON.parse(notesDataset.notesData),
}; };
}, },
mounted() {
initNoteStats();
},
render(createElement) { render(createElement) {
return createElement('notes-app', { return createElement('notes-app', {
props: { props: {
... ...
......
<script> <script>
import axios from '~/lib/utils/axios_utils'; import axios from '~/lib/utils/axios_utils';
import createFlash from '~/flash'; import createFlash from '~/flash';
import DeprecatedModal2 from '~/vue_shared/components/deprecated_modal_2.vue'; import GlModal from '~/vue_shared/components/gl_modal.vue';
import { redirectTo } from '~/lib/utils/url_utility'; import { redirectTo } from '~/lib/utils/url_utility';
import { s__ } from '~/locale'; import { s__ } from '~/locale';
export default { export default {
components: { components: {
GlModal: DeprecatedModal2, GlModal,
}, },
props: { props: {
url: { url: {
... ...
......
/* eslint-disable class-methods-use-this, no-unneeded-ternary */ /* eslint-disable class-methods-use-this, no-unneeded-ternary */
import $ from 'jquery'; import $ from 'jquery';
import '~/gl_dropdown';
import { visitUrl } from '~/lib/utils/url_utility'; import { visitUrl } from '~/lib/utils/url_utility';
import UsersSelect from '~/users_select'; import UsersSelect from '~/users_select';
import { isMetaClick } from '~/lib/utils/common_utils'; import { isMetaClick } from '~/lib/utils/common_utils';
import { addDelimiter } from '~/lib/utils/text_utility';
import { __ } from '~/locale'; import { __ } from '~/locale';
import flash from '~/flash'; import flash from '~/flash';
import axios from '~/lib/utils/axios_utils'; import axios from '~/lib/utils/axios_utils';
...@@ -147,8 +145,8 @@ export default class Todos { ...@@ -147,8 +145,8 @@ export default class Todos {
updateBadges(data) { updateBadges(data) {
$(document).trigger('todo:toggle', data.count); $(document).trigger('todo:toggle', data.count);
document.querySelector('.todos-pending .badge').innerHTML = addDelimiter(data.count); document.querySelector('.todos-pending .badge').innerHTML = data.count;
document.querySelector('.todos-done .badge').innerHTML = addDelimiter(data.done_count); document.querySelector('.todos-done .badge').innerHTML = data.done_count;
} }
goToTodoUrl(e) { goToTodoUrl(e) {
... ...
......
<script> <script>
import axios from '~/lib/utils/axios_utils'; import axios from '~/lib/utils/axios_utils';
import createFlash from '~/flash'; import createFlash from '~/flash';
import DeprecatedModal2 from '~/vue_shared/components/deprecated_modal_2.vue'; import GlModal from '~/vue_shared/components/gl_modal.vue';
import { s__, sprintf } from '~/locale'; import { s__, sprintf } from '~/locale';
import { visitUrl } from '~/lib/utils/url_utility'; import { visitUrl } from '~/lib/utils/url_utility';
import eventHub from '../event_hub'; import eventHub from '../event_hub';
export default { export default {
components: { components: {
GlModal: DeprecatedModal2, GlModal,
}, },
props: { props: {
milestoneTitle: { milestoneTitle: {
... ...
......
...@@ -6,7 +6,6 @@ document.addEventListener('DOMContentLoaded', () => { ...@@ -6,7 +6,6 @@ document.addEventListener('DOMContentLoaded', () => {
new MiniPipelineGraph({ new MiniPipelineGraph({
container: '.js-commit-pipeline-graph', container: '.js-commit-pipeline-graph',
}).bindEvents(); }).bindEvents();
// eslint-disable-next-line no-jquery/no-load
$('.commit-info.branches').load(document.querySelector('.js-commit-box').dataset.commitPath); $('.commit-info.branches').load(document.querySelector('.js-commit-box').dataset.commitPath);
initPipelines(); initPipelines();
}); });
...@@ -21,7 +21,6 @@ document.addEventListener('DOMContentLoaded', () => { ...@@ -21,7 +21,6 @@ document.addEventListener('DOMContentLoaded', () => {
}).bindEvents(); }).bindEvents();
initNotes(); initNotes();
initChangesDropdown(document.querySelector('.navbar-gitlab').offsetHeight + performanceHeight); initChangesDropdown(document.querySelector('.navbar-gitlab').offsetHeight + performanceHeight);
// eslint-disable-next-line no-jquery/no-load
$('.commit-info.branches').load(document.querySelector('.js-commit-box').dataset.commitPath); $('.commit-info.branches').load(document.querySelector('.js-commit-box').dataset.commitPath);
fetchCommitMergeRequests(); fetchCommitMergeRequests();
initDiffNotes(); initDiffNotes();
... ...
......
...@@ -2,14 +2,14 @@ ...@@ -2,14 +2,14 @@
import _ from 'underscore'; import _ from 'underscore';
import axios from '~/lib/utils/axios_utils'; import axios from '~/lib/utils/axios_utils';
import createFlash from '~/flash'; import createFlash from '~/flash';
import DeprecatedModal2 from '~/vue_shared/components/deprecated_modal_2.vue'; import GlModal from '~/vue_shared/components/gl_modal.vue';
import { s__, sprintf } from '~/locale'; import { s__, sprintf } from '~/locale';
import { visitUrl } from '~/lib/utils/url_utility'; import { visitUrl } from '~/lib/utils/url_utility';
import eventHub from '../event_hub'; import eventHub from '../event_hub';
export default { export default {
components: { components: {
GlModal: DeprecatedModal2, GlModal,
}, },
props: { props: {
url: { url: {
... ...
......
import $ from 'jquery'; import $ from 'jquery';
import '~/gl_dropdown';
import Flash from '~/flash'; import Flash from '~/flash';
import Api from '~/api'; import Api from '~/api';
import { __ } from '~/locale'; import { __ } from '~/locale';
... ...
......
<script> <script>
import DeprecatedModal2 from '~/vue_shared/components/deprecated_modal_2.vue'; import GlModal from '~/vue_shared/components/gl_modal.vue';
import Icon from '~/vue_shared/components/icon.vue'; import Icon from '~/vue_shared/components/icon.vue';
export default { export default {
components: { components: {
GlModal: DeprecatedModal2, GlModal,
Icon, Icon,
}, },
props: { props: {
... ...
......
<script> <script>
import _ from 'underscore'; import _ from 'underscore';
import DeprecatedModal2 from '~/vue_shared/components/deprecated_modal_2.vue'; import GlModal from '~/vue_shared/components/gl_modal.vue';
import { GlLink } from '@gitlab/ui'; import { GlLink } from '@gitlab/ui';
import ClipboardButton from '~/vue_shared/components/clipboard_button.vue'; import ClipboardButton from '~/vue_shared/components/clipboard_button.vue';
import CiIcon from '~/vue_shared/components/ci_icon.vue'; import CiIcon from '~/vue_shared/components/ci_icon.vue';
...@@ -13,7 +13,7 @@ import { s__, sprintf } from '~/locale'; ...@@ -13,7 +13,7 @@ import { s__, sprintf } from '~/locale';
*/ */
export default { export default {
components: { components: {
GlModal: DeprecatedModal2, GlModal,
GlLink, GlLink,
ClipboardButton, ClipboardButton,
CiIcon, CiIcon,
... ...
......
import PersistentUserCallout from '~/persistent_user_callout'; import PersistentUserCallout from '~/persistent_user_callout';
function initPrivacyPolicyUpdateCallout() { function initPrivacyPolicyUpdateCallout() {
const callout = document.querySelector('.js-privacy-policy-update'); const callout = document.querySelector('.privacy-policy-update-64341');
PersistentUserCallout.factory(callout); PersistentUserCallout.factory(callout);
} }
... ...
......
<script> <script>
import _ from 'underscore'; import _ from 'underscore';
import axios from '~/lib/utils/axios_utils'; import axios from '~/lib/utils/axios_utils';
import DeprecatedModal2 from '~/vue_shared/components/deprecated_modal_2.vue'; import GlModal from '~/vue_shared/components/gl_modal.vue';
import { s__, sprintf } from '~/locale'; import { s__, sprintf } from '~/locale';
import Flash from '~/flash'; import Flash from '~/flash';
export default { export default {
components: { components: {
GlModal: DeprecatedModal2, GlModal,
}, },
props: { props: {
actionUrl: { actionUrl: {
... ...
......