Commit 62c8c275 authored by GitLab Bot's avatar GitLab Bot

Merge remote-tracking branch 'upstream/master' into ce-to-ee-2018-09-19

# Conflicts:
#	app/views/admin/users/index.html.haml
#	app/views/projects/mirrors/_mirror_repos.html.haml
#	app/views/projects/project_members/_new_project_member.html.haml

[ci skip]
parents 372c641d 3172de0d
import './autosize'; import './autosize';
import './bind_in_out'; import './bind_in_out';
import './markdown/render_gfm'; import './markdown/render_gfm';
import initGFMInput from './markdown/gfm_auto_complete';
import initCopyAsGFM from './markdown/copy_as_gfm'; import initCopyAsGFM from './markdown/copy_as_gfm';
import initCopyToClipboard from './copy_to_clipboard'; import initCopyToClipboard from './copy_to_clipboard';
import './details_behavior'; import './details_behavior';
import installGlEmojiElement from './gl_emoji'; import installGlEmojiElement from './gl_emoji';
import './quick_submit'; import './quick_submit';
import './requires_input'; import './requires_input';
import initPageShortcuts from './shortcuts';
import './toggler_behavior'; import './toggler_behavior';
import '../preview_markdown'; import './preview_markdown';
installGlEmojiElement(); installGlEmojiElement();
initGFMInput();
initCopyAsGFM(); initCopyAsGFM();
initCopyToClipboard(); initCopyToClipboard();
initPageShortcuts();
import $ from 'jquery';
import { convertPermissionToBoolean } from '~/lib/utils/common_utils';
import GfmAutoComplete from '~/gfm_auto_complete';
export default function initGFMInput() {
$('.js-gfm-input:not(.js-vue-textarea)').each((i, el) => {
const gfm = new GfmAutoComplete(gl.GfmAutoComplete && gl.GfmAutoComplete.dataSources);
const enableGFM = convertPermissionToBoolean(el.dataset.supportsAutocomplete);
gfm.setup($(el), {
emojis: true,
members: enableGFM,
issues: enableGFM,
milestones: enableGFM,
mergeRequests: enableGFM,
labels: enableGFM,
});
});
}
/* eslint-disable consistent-return, no-new */ import Shortcuts from './shortcuts/shortcuts';
import $ from 'jquery'; export default function initPageShortcuts() {
import GfmAutoComplete from './gfm_auto_complete'; const { page } = document.body.dataset;
import { convertPermissionToBoolean } from './lib/utils/common_utils';
import GlFieldErrors from './gl_field_errors';
import Shortcuts from './shortcuts';
import SearchAutocomplete from './search_autocomplete';
import performanceBar from './performance_bar';
function initSearch() {
// Only when search form is present
if ($('.search').length) {
return new SearchAutocomplete();
}
}
function initFieldErrors() {
$('.gl-show-field-errors').each((i, form) => {
new GlFieldErrors(form);
});
}
function initPageShortcuts(page) {
const pagesWithCustomShortcuts = [ const pagesWithCustomShortcuts = [
'projects:activity', 'projects:activity',
'projects:artifacts:browse', 'projects:artifacts:browse',
...@@ -46,44 +26,10 @@ function initPageShortcuts(page) { ...@@ -46,44 +26,10 @@ function initPageShortcuts(page) {
'groups:show', 'groups:show',
]; ];
if (pagesWithCustomShortcuts.indexOf(page) === -1) { // the pages above have their own shortcuts sub-classes instantiated elsewhere
new Shortcuts(); // TODO: replace this whitelist with something more automated/maintainable
} if (page && !pagesWithCustomShortcuts.includes(page)) {
} return new Shortcuts();
function initGFMInput() {
$('.js-gfm-input:not(.js-vue-textarea)').each((i, el) => {
const gfm = new GfmAutoComplete(
gl.GfmAutoComplete && gl.GfmAutoComplete.dataSources,
);
const enableGFM = convertPermissionToBoolean(
el.dataset.supportsAutocomplete,
);
gfm.setup($(el), {
emojis: true,
members: enableGFM,
issues: enableGFM,
milestones: enableGFM,
mergeRequests: enableGFM,
labels: enableGFM,
});
});
}
function initPerformanceBar() {
if (document.querySelector('#js-peek')) {
performanceBar({ container: '#js-peek' });
} }
return false;
} }
export default () => {
initSearch();
initFieldErrors();
const page = $('body').attr('data-page');
if (page) {
initPageShortcuts(page);
initGFMInput();
initPerformanceBar();
}
};
import $ from 'jquery'; import $ from 'jquery';
import Cookies from 'js-cookie'; import Cookies from 'js-cookie';
import Mousetrap from 'mousetrap'; import Mousetrap from 'mousetrap';
import axios from './lib/utils/axios_utils'; import axios from '../../lib/utils/axios_utils';
import { refreshCurrentPage, visitUrl } from './lib/utils/url_utility'; import { refreshCurrentPage, visitUrl } from '../../lib/utils/url_utility';
import findAndFollowLink from './shortcuts_dashboard_navigation'; import findAndFollowLink from '../../lib/utils/navigation_utility';
const defaultStopCallback = Mousetrap.stopCallback; const defaultStopCallback = Mousetrap.stopCallback;
Mousetrap.stopCallback = (e, element, combo) => { Mousetrap.stopCallback = (e, element, combo) => {
......
import Mousetrap from 'mousetrap'; import Mousetrap from 'mousetrap';
import { getLocationHash, visitUrl } from './lib/utils/url_utility'; import { getLocationHash, visitUrl } from '../../lib/utils/url_utility';
import Shortcuts from './shortcuts'; import Shortcuts from './shortcuts';
const defaults = { const defaults = {
......
import $ from 'jquery'; import $ from 'jquery';
import Mousetrap from 'mousetrap'; import Mousetrap from 'mousetrap';
import _ from 'underscore'; import _ from 'underscore';
import Sidebar from './right_sidebar'; import Sidebar from '../../right_sidebar';
import Shortcuts from './shortcuts'; import Shortcuts from './shortcuts';
import { CopyAsGFM } from './behaviors/markdown/copy_as_gfm'; import { CopyAsGFM } from '../markdown/copy_as_gfm';
export default class ShortcutsIssuable extends Shortcuts { export default class ShortcutsIssuable extends Shortcuts {
constructor(isMergeRequest) { constructor(isMergeRequest) {
......
import Mousetrap from 'mousetrap'; import Mousetrap from 'mousetrap';
import findAndFollowLink from './shortcuts_dashboard_navigation'; import findAndFollowLink from '../../lib/utils/navigation_utility';
import Shortcuts from './shortcuts'; import Shortcuts from './shortcuts';
export default class ShortcutsNavigation extends Shortcuts { export default class ShortcutsNavigation extends Shortcuts {
......
import Mousetrap from 'mousetrap'; import Mousetrap from 'mousetrap';
import ShortcutsNavigation from './shortcuts_navigation'; import ShortcutsNavigation from './shortcuts_navigation';
import findAndFollowLink from './shortcuts_dashboard_navigation'; import findAndFollowLink from '../../lib/utils/navigation_utility';
export default class ShortcutsWiki extends ShortcutsNavigation { export default class ShortcutsWiki extends ShortcutsNavigation {
constructor() { constructor() {
......
...@@ -14,10 +14,10 @@ import 'core-js/es6/map'; ...@@ -14,10 +14,10 @@ import 'core-js/es6/map';
import 'core-js/es6/weak-map'; import 'core-js/es6/weak-map';
// Browser polyfills // Browser polyfills
import 'classlist-polyfill';
import 'formdata-polyfill'; import 'formdata-polyfill';
import './polyfills/custom_event'; import './polyfills/custom_event';
import './polyfills/element'; import './polyfills/element';
import './polyfills/event'; import './polyfills/event';
import './polyfills/nodelist'; import './polyfills/nodelist';
import './polyfills/request_idle_callback'; import './polyfills/request_idle_callback';
import './polyfills/svg';
Element.prototype.closest = Element.prototype.closest || // polyfill Element.classList and DOMTokenList with classList.js
import 'classlist-polyfill';
Element.prototype.closest =
Element.prototype.closest ||
function closest(selector, selectedElement = this) { function closest(selector, selectedElement = this) {
if (!selectedElement) return null; if (!selectedElement) return null;
return selectedElement.matches(selector) ? return selectedElement.matches(selector)
selectedElement : ? selectedElement
Element.prototype.closest(selector, selectedElement.parentElement); : Element.prototype.closest(selector, selectedElement.parentElement);
}; };
Element.prototype.matches = Element.prototype.matches || Element.prototype.matches =
Element.prototype.matches ||
Element.prototype.matchesSelector || Element.prototype.matchesSelector ||
Element.prototype.mozMatchesSelector || Element.prototype.mozMatchesSelector ||
Element.prototype.msMatchesSelector || Element.prototype.msMatchesSelector ||
...@@ -15,13 +20,15 @@ Element.prototype.matches = Element.prototype.matches || ...@@ -15,13 +20,15 @@ Element.prototype.matches = Element.prototype.matches ||
function matches(selector) { function matches(selector) {
const elms = (this.document || this.ownerDocument).querySelectorAll(selector); const elms = (this.document || this.ownerDocument).querySelectorAll(selector);
let i = elms.length - 1; let i = elms.length - 1;
while (i >= 0 && elms.item(i) !== this) { i -= 1; } while (i >= 0 && elms.item(i) !== this) {
i -= 1;
}
return i > -1; return i > -1;
}; };
// From the polyfill on MDN, https://developer.mozilla.org/en-US/docs/Web/API/ChildNode/remove#Polyfill // From the polyfill on MDN, https://developer.mozilla.org/en-US/docs/Web/API/ChildNode/remove#Polyfill
((arr) => { (arr => {
arr.forEach((item) => { arr.forEach(item => {
if (Object.prototype.hasOwnProperty.call(item, 'remove')) { if (Object.prototype.hasOwnProperty.call(item, 'remove')) {
return; return;
} }
......
import svg4everybody from 'svg4everybody';
// polyfill support for external SVG file references via <use xlink:href>
// @see https://css-tricks.com/svg-use-external-source/
svg4everybody();
import $ from 'jquery'; import $ from 'jquery';
import Dropzone from 'dropzone'; import Dropzone from 'dropzone';
import _ from 'underscore'; import _ from 'underscore';
import './preview_markdown'; import './behaviors/preview_markdown';
import csrf from './lib/utils/csrf'; import csrf from './lib/utils/csrf';
import axios from './lib/utils/axios_utils'; import axios from './lib/utils/axios_utils';
......
import { visitUrl } from './lib/utils/url_utility'; import { visitUrl } from './url_utility';
/** /**
* Helper function that finds the href of the fiven selector and updates the location. * Helper function that finds the href of the fiven selector and updates the location.
......
...@@ -2,7 +2,6 @@ ...@@ -2,7 +2,6 @@
import jQuery from 'jquery'; import jQuery from 'jquery';
import Cookies from 'js-cookie'; import Cookies from 'js-cookie';
import svg4everybody from 'svg4everybody';
// bootstrap webpack, common libs, polyfills, and behaviors // bootstrap webpack, common libs, polyfills, and behaviors
import './webpack'; import './webpack';
...@@ -25,11 +24,12 @@ import initLayoutNav from './layout_nav'; ...@@ -25,11 +24,12 @@ import initLayoutNav from './layout_nav';
import './feature_highlight/feature_highlight_options'; import './feature_highlight/feature_highlight_options';
import LazyLoader from './lazy_loader'; import LazyLoader from './lazy_loader';
import initLogoAnimation from './logo'; import initLogoAnimation from './logo';
import './milestone_select';
import './frequent_items'; import './frequent_items';
import initBreadcrumbs from './breadcrumb'; import initBreadcrumbs from './breadcrumb';
import initDispatcher from './dispatcher';
import initUsagePingConsent from './usage_ping_consent'; import initUsagePingConsent from './usage_ping_consent';
import initPerformanceBar from './performance_bar';
import initSearchAutocomplete from './search_autocomplete';
import GlFieldErrors from './gl_field_errors';
// EE-only scripts // EE-only scripts
import 'ee/main'; // eslint-disable-line import/first import 'ee/main'; // eslint-disable-line import/first
...@@ -44,8 +44,6 @@ if (process.env.NODE_ENV !== 'production' && gon && gon.test_env) { ...@@ -44,8 +44,6 @@ if (process.env.NODE_ENV !== 'production' && gon && gon.test_env) {
import(/* webpackMode: "eager" */ './test_utils/'); import(/* webpackMode: "eager" */ './test_utils/');
} }
svg4everybody();
document.addEventListener('beforeunload', () => { document.addEventListener('beforeunload', () => {
// Unbind scroll events // Unbind scroll events
$(document).off('scroll'); $(document).off('scroll');
...@@ -84,6 +82,9 @@ document.addEventListener('DOMContentLoaded', () => { ...@@ -84,6 +82,9 @@ document.addEventListener('DOMContentLoaded', () => {
initLogoAnimation(); initLogoAnimation();
initUsagePingConsent(); initUsagePingConsent();
if (document.querySelector('.search')) initSearchAutocomplete();
if (document.querySelector('#js-peek')) initPerformanceBar({ container: '#js-peek' });
// Set the default path for all cookies to GitLab's root directory // Set the default path for all cookies to GitLab's root directory
Cookies.defaults.path = gon.relative_url_root || '/'; Cookies.defaults.path = gon.relative_url_root || '/';
...@@ -273,5 +274,6 @@ document.addEventListener('DOMContentLoaded', () => { ...@@ -273,5 +274,6 @@ document.addEventListener('DOMContentLoaded', () => {
}); });
} }
initDispatcher(); // initialize field errors
$('.gl-show-field-errors').each((i, form) => new GlFieldErrors(form));
}); });
import UsersSelect from '~/users_select'; import UsersSelect from '~/users_select';
import ShortcutsNavigation from '~/shortcuts_navigation'; import ShortcutsNavigation from '~/behaviors/shortcuts/shortcuts_navigation';
import initBoards from '~/boards'; import initBoards from '~/boards';
document.addEventListener('DOMContentLoaded', () => { document.addEventListener('DOMContentLoaded', () => {
......
...@@ -6,7 +6,7 @@ import NewGroupChild from '~/groups/new_group_child'; ...@@ -6,7 +6,7 @@ import NewGroupChild from '~/groups/new_group_child';
import notificationsDropdown from '~/notifications_dropdown'; import notificationsDropdown from '~/notifications_dropdown';
import NotificationsForm from '~/notifications_form'; import NotificationsForm from '~/notifications_form';
import ProjectsList from '~/projects_list'; import ProjectsList from '~/projects_list';
import ShortcutsNavigation from '~/shortcuts_navigation'; import ShortcutsNavigation from '~/behaviors/shortcuts/shortcuts_navigation';
import GroupTabs from './group_tabs'; import GroupTabs from './group_tabs';
document.addEventListener('DOMContentLoaded', () => { document.addEventListener('DOMContentLoaded', () => {
......
import Activities from '~/activities'; import Activities from '~/activities';
import ShortcutsNavigation from '~/shortcuts_navigation'; import ShortcutsNavigation from '~/behaviors/shortcuts/shortcuts_navigation';
document.addEventListener('DOMContentLoaded', () => { document.addEventListener('DOMContentLoaded', () => {
new Activities(); // eslint-disable-line no-new new Activities(); // eslint-disable-line no-new
......
import BuildArtifacts from '~/build_artifacts'; import BuildArtifacts from '~/build_artifacts';
import ShortcutsNavigation from '~/shortcuts_navigation'; import ShortcutsNavigation from '~/behaviors/shortcuts/shortcuts_navigation';
document.addEventListener('DOMContentLoaded', () => { document.addEventListener('DOMContentLoaded', () => {
new ShortcutsNavigation(); // eslint-disable-line no-new new ShortcutsNavigation(); // eslint-disable-line no-new
......
import BlobViewer from '~/blob/viewer/index'; import BlobViewer from '~/blob/viewer/index';
import ShortcutsNavigation from '~/shortcuts_navigation'; import ShortcutsNavigation from '~/behaviors/shortcuts/shortcuts_navigation';
document.addEventListener('DOMContentLoaded', () => { document.addEventListener('DOMContentLoaded', () => {
new ShortcutsNavigation(); // eslint-disable-line no-new new ShortcutsNavigation(); // eslint-disable-line no-new
......
import UsersSelect from '~/users_select'; import UsersSelect from '~/users_select';
import ShortcutsNavigation from '~/shortcuts_navigation'; import ShortcutsNavigation from '~/behaviors/shortcuts/shortcuts_navigation';
import initBoards from '~/boards'; import initBoards from '~/boards';
document.addEventListener('DOMContentLoaded', () => { document.addEventListener('DOMContentLoaded', () => {
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
import $ from 'jquery'; import $ from 'jquery';
import Diff from '~/diff'; import Diff from '~/diff';
import ZenMode from '~/zen_mode'; import ZenMode from '~/zen_mode';
import ShortcutsNavigation from '~/shortcuts_navigation'; import ShortcutsNavigation from '~/behaviors/shortcuts/shortcuts_navigation';
import MiniPipelineGraph from '~/mini_pipeline_graph_dropdown'; import MiniPipelineGraph from '~/mini_pipeline_graph_dropdown';
import initNotes from '~/init_notes'; import initNotes from '~/init_notes';
import initChangesDropdown from '~/init_changes_dropdown'; import initChangesDropdown from '~/init_changes_dropdown';
......
import CommitsList from '~/commits'; import CommitsList from '~/commits';
import GpgBadges from '~/gpg_badges'; import GpgBadges from '~/gpg_badges';
import ShortcutsNavigation from '~/shortcuts_navigation'; import ShortcutsNavigation from '~/behaviors/shortcuts/shortcuts_navigation';
document.addEventListener('DOMContentLoaded', () => { document.addEventListener('DOMContentLoaded', () => {
new CommitsList(document.querySelector('.js-project-commits-show').dataset.commitsLimit); // eslint-disable-line no-new new CommitsList(document.querySelector('.js-project-commits-show').dataset.commitsLimit); // eslint-disable-line no-new
......
import $ from 'jquery'; import $ from 'jquery';
import ProjectFindFile from '~/project_find_file'; import ProjectFindFile from '~/project_find_file';
import ShortcutsFindFile from '~/shortcuts_find_file'; import ShortcutsFindFile from '~/behaviors/shortcuts/shortcuts_find_file';
document.addEventListener('DOMContentLoaded', () => { document.addEventListener('DOMContentLoaded', () => {
const findElement = document.querySelector('.js-file-finder'); const findElement = document.querySelector('.js-file-finder');
......
import initDismissableCallout from '~/dismissable_callout'; import initDismissableCallout from '~/dismissable_callout';
import initGkeDropdowns from '~/projects/gke_cluster_dropdowns'; import initGkeDropdowns from '~/projects/gke_cluster_dropdowns';
import Project from './project'; import Project from './project';
import ShortcutsNavigation from '../../shortcuts_navigation'; import ShortcutsNavigation from '../../behaviors/shortcuts/shortcuts_navigation';
document.addEventListener('DOMContentLoaded', () => { document.addEventListener('DOMContentLoaded', () => {
const { page } = document.body.dataset; const { page } = document.body.dataset;
......
import LineHighlighter from '~/line_highlighter'; import LineHighlighter from '~/line_highlighter';
import BlobLinePermalinkUpdater from '~/blob/blob_line_permalink_updater'; import BlobLinePermalinkUpdater from '~/blob/blob_line_permalink_updater';
import ShortcutsNavigation from '~/shortcuts_navigation'; import ShortcutsNavigation from '~/behaviors/shortcuts/shortcuts_navigation';
import ShortcutsBlob from '~/shortcuts_blob'; import ShortcutsBlob from '~/behaviors/shortcuts/shortcuts_blob';
import BlobForkSuggestion from '~/blob/blob_fork_suggestion'; import BlobForkSuggestion from '~/blob/blob_fork_suggestion';
import initBlobBundle from '~/blob_edit/blob_bundle'; import initBlobBundle from '~/blob_edit/blob_bundle';
......
...@@ -5,7 +5,7 @@ import GLForm from '~/gl_form'; ...@@ -5,7 +5,7 @@ import GLForm from '~/gl_form';
import IssuableForm from '~/issuable_form'; import IssuableForm from '~/issuable_form';
import LabelsSelect from '~/labels_select'; import LabelsSelect from '~/labels_select';
import MilestoneSelect from '~/milestone_select'; import MilestoneSelect from '~/milestone_select';
import ShortcutsNavigation from '~/shortcuts_navigation'; import ShortcutsNavigation from '~/behaviors/shortcuts/shortcuts_navigation';
import IssuableTemplateSelectors from '~/templates/issuable_template_selectors'; import IssuableTemplateSelectors from '~/templates/issuable_template_selectors';
import WeightSelect from 'ee/weight_select'; import WeightSelect from 'ee/weight_select';
......
/* eslint-disable no-new */ /* eslint-disable no-new */
import IssuableIndex from '~/issuable_index'; import IssuableIndex from '~/issuable_index';
import ShortcutsNavigation from '~/shortcuts_navigation'; import ShortcutsNavigation from '~/behaviors/shortcuts/shortcuts_navigation';
import UsersSelect from '~/users_select'; import UsersSelect from '~/users_select';
import initFilteredSearch from '~/pages/search/init_filtered_search'; import initFilteredSearch from '~/pages/search/init_filtered_search';
import { FILTERED_SEARCH } from '~/pages/constants'; import { FILTERED_SEARCH } from '~/pages/constants';
......
import initIssuableSidebar from '~/init_issuable_sidebar'; import initIssuableSidebar from '~/init_issuable_sidebar';
import Issue from '~/issue'; import Issue from '~/issue';
import ShortcutsIssuable from '~/shortcuts_issuable'; import ShortcutsIssuable from '~/behaviors/shortcuts/shortcuts_issuable';
import ZenMode from '~/zen_mode'; import ZenMode from '~/zen_mode';
import '~/notes/index'; import '~/notes/index';
import '~/issue_show/index'; import '~/issue_show/index';
......
import IssuableIndex from '~/issuable_index'; import IssuableIndex from '~/issuable_index';
import ShortcutsNavigation from '~/shortcuts_navigation'; import ShortcutsNavigation from '~/behaviors/shortcuts/shortcuts_navigation';
import UsersSelect from '~/users_select'; import UsersSelect from '~/users_select';
import initFilteredSearch from '~/pages/search/init_filtered_search'; import initFilteredSearch from '~/pages/search/init_filtered_search';
import IssuableFilteredSearchTokenKeys from '~/filtered_search/issuable_filtered_search_token_keys'; import IssuableFilteredSearchTokenKeys from '~/filtered_search/issuable_filtered_search_token_keys';
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
import $ from 'jquery'; import $ from 'jquery';
import Diff from '~/diff'; import Diff from '~/diff';
import ShortcutsNavigation from '~/shortcuts_navigation'; import ShortcutsNavigation from '~/behaviors/shortcuts/shortcuts_navigation';
import GLForm from '~/gl_form'; import GLForm from '~/gl_form';
import IssuableForm from '~/issuable_form'; import IssuableForm from '~/issuable_form';
import LabelsSelect from '~/labels_select'; import LabelsSelect from '~/labels_select';
......
import ZenMode from '~/zen_mode'; import ZenMode from '~/zen_mode';
import initIssuableSidebar from '~/init_issuable_sidebar'; import initIssuableSidebar from '~/init_issuable_sidebar';
import ShortcutsIssuable from '~/shortcuts_issuable'; import ShortcutsIssuable from '~/behaviors/shortcuts/shortcuts_issuable';
import { handleLocationHash } from '~/lib/utils/common_utils'; import { handleLocationHash } from '~/lib/utils/common_utils';
import howToMerge from '~/how_to_merge'; import howToMerge from '~/how_to_merge';
import initPipelines from '~/commit/pipelines/pipelines_bundle'; import initPipelines from '~/commit/pipelines/pipelines_bundle';
......
import $ from 'jquery'; import $ from 'jquery';
import ShortcutsNetwork from '../../../../shortcuts_network'; import ShortcutsNetwork from '~/behaviors/shortcuts/shortcuts_network';
import Network from '../network'; import Network from '../network';
document.addEventListener('DOMContentLoaded', () => { document.addEventListener('DOMContentLoaded', () => {
......
import $ from 'jquery'; import $ from 'jquery';
import initBlob from '~/blob_edit/blob_bundle'; import initBlob from '~/blob_edit/blob_bundle';
import ShortcutsNavigation from '~/shortcuts_navigation'; import ShortcutsNavigation from '~/behaviors/shortcuts/shortcuts_navigation';
import NotificationsForm from '~/notifications_form'; import NotificationsForm from '~/notifications_form';
import UserCallout from '~/user_callout'; import UserCallout from '~/user_callout';
import TreeView from '~/tree'; import TreeView from '~/tree';
......
...@@ -4,7 +4,7 @@ import initBlob from '~/blob_edit/blob_bundle'; ...@@ -4,7 +4,7 @@ import initBlob from '~/blob_edit/blob_bundle';
import commitPipelineStatus from '~/projects/tree/components/commit_pipeline_status_component.vue'; import commitPipelineStatus from '~/projects/tree/components/commit_pipeline_status_component.vue';
import GpgBadges from '~/gpg_badges'; import GpgBadges from '~/gpg_badges';
import TreeView from '../../../../tree'; import TreeView from '../../../../tree';
import ShortcutsNavigation from '../../../../shortcuts_navigation'; import ShortcutsNavigation from '../../../../behaviors/shortcuts/shortcuts_navigation';
import BlobViewer from '../../../../blob/viewer'; import BlobViewer from '../../../../blob/viewer';
import NewCommitForm from '../../../../new_commit_form'; import NewCommitForm from '../../../../new_commit_form';
import { ajaxGet } from '../../../../lib/utils/common_utils'; import { ajaxGet } from '../../../../lib/utils/common_utils';
......
...@@ -2,8 +2,8 @@ import $ from 'jquery'; ...@@ -2,8 +2,8 @@ import $ from 'jquery';
import Vue from 'vue'; import Vue from 'vue';
import Translate from '~/vue_shared/translate'; import Translate from '~/vue_shared/translate';
import csrf from '~/lib/utils/csrf'; import csrf from '~/lib/utils/csrf';
import ShortcutsWiki from '~/behaviors/shortcuts/shortcuts_wiki';
import Wikis from './wikis'; import Wikis from './wikis';
import ShortcutsWiki from '../../../shortcuts_wiki';
import ZenMode from '../../../zen_mode'; import ZenMode from '../../../zen_mode';
import GLForm from '../../../gl_form'; import GLForm from '../../../gl_form';
import deleteWikiModal from './components/delete_wiki_modal.vue'; import deleteWikiModal from './components/delete_wiki_modal.vue';
......
...@@ -68,7 +68,7 @@ function setSearchOptions() { ...@@ -68,7 +68,7 @@ function setSearchOptions() {
} }
} }
export default class SearchAutocomplete { export class SearchAutocomplete {
constructor({ wrap, optsEl, autocompletePath, projectId, projectRef } = {}) { constructor({ wrap, optsEl, autocompletePath, projectId, projectRef } = {}) {
setSearchOptions(); setSearchOptions();
this.bindEventContext(); this.bindEventContext();
...@@ -499,3 +499,7 @@ export default class SearchAutocomplete { ...@@ -499,3 +499,7 @@ export default class SearchAutocomplete {
this.dropdownMenu.toggleClass('fade-out', !this.isScrolledUp()); this.dropdownMenu.toggleClass('fade-out', !this.isScrolledUp());
} }
} }
export default function initSearchAutocomplete(opts) {
return new SearchAutocomplete(opts);
}
...@@ -31,7 +31,10 @@ ...@@ -31,7 +31,10 @@
= sort_title_recently_updated = sort_title_recently_updated
= link_to admin_users_path(sort: sort_value_oldest_updated, filter: params[:filter]) do = link_to admin_users_path(sort: sort_value_oldest_updated, filter: params[:filter]) do
= sort_title_oldest_updated = sort_title_oldest_updated
<<<<<<< HEAD
= link_to 'Send email to users', admin_email_path, class: 'btn' = link_to 'Send email to users', admin_email_path, class: 'btn'
=======
>>>>>>> upstream/master
= link_to 'New user', new_admin_user_path, class: 'btn btn-success btn-search' = link_to 'New user', new_admin_user_path, class: 'btn btn-success btn-search'
.top-area.scrolling-tabs-container.inner-page-scroll-tabs .top-area.scrolling-tabs-container.inner-page-scroll-tabs
......
...@@ -31,7 +31,11 @@ ...@@ -31,7 +31,11 @@
= label_tag :only_protected_branches, _('Only mirror protected branches'), class: 'form-check-label' = label_tag :only_protected_branches, _('Only mirror protected branches'), class: 'form-check-label'
= link_to icon('question-circle'), help_page_path('user/project/protected_branches'), target: '_blank' = link_to icon('question-circle'), help_page_path('user/project/protected_branches'), target: '_blank'
<<<<<<< HEAD
.card-footer .card-footer
=======
.panel-footer
>>>>>>> upstream/master
= f.submit _('Mirror repository'), class: 'btn btn-success', name: :update_remote_mirror = f.submit _('Mirror repository'), class: 'btn btn-success', name: :update_remote_mirror
.card .card
......
...@@ -18,5 +18,9 @@ ...@@ -18,5 +18,9 @@
= text_field_tag :expires_at, nil, class: 'form-control js-access-expiration-date', placeholder: 'Expiration date' = text_field_tag :expires_at, nil, class: 'form-control js-access-expiration-date', placeholder: 'Expiration date'
%i.clear-icon.js-clear-input %i.clear-icon.js-clear-input
= f.submit "Add to project", class: "btn btn-success" = f.submit "Add to project", class: "btn btn-success"
<<<<<<< HEAD
- if can?(current_user, :admin_project_member, @project) && !membership_locked? - if can?(current_user, :admin_project_member, @project) && !membership_locked?
= link_to "Import", import_project_project_members_path(@project), class: "btn btn-default", title: "Import members from another project" = link_to "Import", import_project_project_members_path(@project), class: "btn btn-default", title: "Import members from another project"
=======
= link_to "Import", import_project_project_members_path(@project), class: "btn btn-default", title: "Import members from another project"
>>>>>>> upstream/master
---
title: Make AutoDevOps work behind proxy
merge_request: 21775
author: Sergej - @kinolaev
type: other
...@@ -44,9 +44,7 @@ describe 'Merge request > User resolves conflicts', :js do ...@@ -44,9 +44,7 @@ describe 'Merge request > User resolves conflicts', :js do
within find('.diff-file', text: 'files/ruby/regex.rb') do within find('.diff-file', text: 'files/ruby/regex.rb') do
expect(page).to have_selector('.line_content.new', text: "def username_regexp") expect(page).to have_selector('.line_content.new', text: "def username_regexp")
expect(page).not_to have_selector('.line_content.new', text: "def username_regex")
expect(page).to have_selector('.line_content.new', text: "def project_name_regexp") expect(page).to have_selector('.line_content.new', text: "def project_name_regexp")
expect(page).not_to have_selector('.line_content.new', text: "def project_name_regex")
expect(page).to have_selector('.line_content.new', text: "def path_regexp") expect(page).to have_selector('.line_content.new', text: "def path_regexp")
expect(page).to have_selector('.line_content.new', text: "def archive_formats_regexp") expect(page).to have_selector('.line_content.new', text: "def archive_formats_regexp")
expect(page).to have_selector('.line_content.new', text: "def git_reference_regexp") expect(page).to have_selector('.line_content.new', text: "def git_reference_regexp")
...@@ -110,12 +108,8 @@ describe 'Merge request > User resolves conflicts', :js do ...@@ -110,12 +108,8 @@ describe 'Merge request > User resolves conflicts', :js do
click_link('conflicts', href: %r{/conflicts\Z}) click_link('conflicts', href: %r{/conflicts\Z})
end end
# TODO: https://gitlab.com/gitlab-org/gitlab-ce/issues/48034 include_examples "conflicts are resolved in Interactive mode"
# include_examples "conflicts are resolved in Interactive mode" include_examples "conflicts are resolved in Edit inline mode"
# include_examples "conflicts are resolved in Edit inline mode"
it 'prevents RSpec/EmptyExampleGroup' do
end
end end
context 'in Parallel view mode' do context 'in Parallel view mode' do
...@@ -124,12 +118,8 @@ describe 'Merge request > User resolves conflicts', :js do ...@@ -124,12 +118,8 @@ describe 'Merge request > User resolves conflicts', :js do
click_button 'Side-by-side' click_button 'Side-by-side'
end end
# TODO: https://gitlab.com/gitlab-org/gitlab-ce/issues/48034 include_examples "conflicts are resolved in Interactive mode"
# include_examples "conflicts are resolved in Interactive mode" include_examples "conflicts are resolved in Edit inline mode"
# include_examples "conflicts are resolved in Edit inline mode"
it 'prevents RSpec/EmptyExampleGroup' do
end
end end
end end
......
import $ from 'jquery'; import $ from 'jquery';
import initCopyAsGFM from '~/behaviors/markdown/copy_as_gfm'; import initCopyAsGFM from '~/behaviors/markdown/copy_as_gfm';
import ShortcutsIssuable from '~/shortcuts_issuable'; import ShortcutsIssuable from '~/behaviors/shortcuts/shortcuts_issuable';
initCopyAsGFM(); initCopyAsGFM();
......
import findAndFollowLink from '~/shortcuts_dashboard_navigation'; import findAndFollowLink from '~/lib/utils/navigation_utility';
describe('findAndFollowLink', () => { describe('findAndFollowLink', () => {
it('visits a link when the selector exists', () => { it('visits a link when the selector exists', () => {
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
import $ from 'jquery'; import $ from 'jquery';
import '~/gl_dropdown'; import '~/gl_dropdown';
import SearchAutocomplete from '~/search_autocomplete'; import initSearchAutocomplete from '~/search_autocomplete';
import '~/lib/utils/common_utils'; import '~/lib/utils/common_utils';
describe('Search autocomplete dropdown', () => { describe('Search autocomplete dropdown', () => {
...@@ -132,7 +132,7 @@ describe('Search autocomplete dropdown', () => { ...@@ -132,7 +132,7 @@ describe('Search autocomplete dropdown', () => {
window.gon.current_user_id = userId; window.gon.current_user_id = userId;
window.gon.current_username = userName; window.gon.current_username = userName;
return (widget = new SearchAutocomplete()); return (widget = initSearchAutocomplete());
}); });
afterEach(function() { afterEach(function() {
......
import $ from 'jquery'; import $ from 'jquery';
import Shortcuts from '~/shortcuts'; import Shortcuts from '~/behaviors/shortcuts/shortcuts';
describe('Shortcuts', () => { describe('Shortcuts', () => {
const fixtureName = 'snippets/show.html.raw'; const fixtureName = 'snippets/show.html.raw';
......
...@@ -635,8 +635,8 @@ rollout 100%: ...@@ -635,8 +635,8 @@ rollout 100%:
function install_dependencies() { function install_dependencies() {
apk add -U openssl curl tar gzip bash ca-certificates git apk add -U openssl curl tar gzip bash ca-certificates git
wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub curl -L -o /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub
wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.28-r0/glibc-2.28-r0.apk curl -L -O https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.28-r0/glibc-2.28-r0.apk
apk add glibc-2.28-r0.apk apk add glibc-2.28-r0.apk
rm glibc-2.28-r0.apk rm glibc-2.28-r0.apk
......
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