Added dispatcher imports for some project routes
This commit is contained in:
parent
f084525fe4
commit
b69d7ac3c9
|
@ -9,11 +9,8 @@ import notificationsDropdown from './notifications_dropdown';
|
|||
import groupAvatar from './group_avatar';
|
||||
import GroupLabelSubscription from './group_label_subscription';
|
||||
import LineHighlighter from './line_highlighter';
|
||||
import Project from './project';
|
||||
import projectAvatar from './project_avatar';
|
||||
import MergeRequest from './merge_request';
|
||||
import Compare from './compare';
|
||||
import ProjectNew from './project_new';
|
||||
import Labels from './labels';
|
||||
import LabelManager from './label_manager';
|
||||
import Sidebar from './right_sidebar';
|
||||
|
@ -24,20 +21,17 @@ import SecretValues from './behaviors/secret_values';
|
|||
import Group from './group';
|
||||
import ProjectsList from './projects_list';
|
||||
import UserCallout from './user_callout';
|
||||
import ShortcutsWiki from './shortcuts_wiki';
|
||||
import BlobViewer from './blob/viewer/index';
|
||||
import AutoWidthDropdownSelect from './issuable/auto_width_dropdown_select';
|
||||
import UsersSelect from './users_select';
|
||||
import GfmAutoComplete from './gfm_auto_complete';
|
||||
import Star from './star';
|
||||
import TreeView from './tree';
|
||||
import Wikis from './wikis';
|
||||
import ZenMode from './zen_mode';
|
||||
import initSettingsPanels from './settings_panels';
|
||||
import PerformanceBar from './performance_bar';
|
||||
import initNotes from './init_notes';
|
||||
import initIssuableSidebar from './init_issuable_sidebar';
|
||||
import initProjectVisibilitySelector from './project_visibility';
|
||||
import NewGroupChild from './groups/new_group_child';
|
||||
import { ajaxGet, convertPermissionToBoolean } from './lib/utils/common_utils';
|
||||
import GlFieldErrors from './gl_field_errors';
|
||||
|
@ -70,7 +64,7 @@ import Activities from './activities';
|
|||
return false;
|
||||
}
|
||||
|
||||
const fail = () => Flash('Error loading dynamic module');
|
||||
const fail = (e) => { throw e; Flash('Error loading dynamic module'); }
|
||||
const callDefault = m => m.default();
|
||||
|
||||
path = page.split(':');
|
||||
|
@ -642,57 +636,39 @@ import Activities from './activities';
|
|||
.catch(fail);
|
||||
break;
|
||||
case 'projects':
|
||||
new Project();
|
||||
projectAvatar();
|
||||
import('./pages/projects')
|
||||
.then(callDefault)
|
||||
.catch(fail);
|
||||
shortcut_handler = true;
|
||||
switch (path[1]) {
|
||||
case 'compare':
|
||||
import('./pages/projects/compare')
|
||||
.then(callDefault)
|
||||
.catch(fail);
|
||||
break;
|
||||
case 'edit':
|
||||
shortcut_handler = new ShortcutsNavigation();
|
||||
new ProjectNew();
|
||||
import(/* webpackChunkName: 'project_permissions' */ './projects/permissions')
|
||||
case 'create':
|
||||
case 'new':
|
||||
import('./pages/projects/new')
|
||||
.then(callDefault)
|
||||
.catch(fail);
|
||||
break;
|
||||
case 'new':
|
||||
new ProjectNew();
|
||||
initProjectVisibilitySelector();
|
||||
break;
|
||||
case 'show':
|
||||
new Star();
|
||||
new ProjectNew();
|
||||
notificationsDropdown();
|
||||
break;
|
||||
case 'wikis':
|
||||
new Wikis();
|
||||
shortcut_handler = new ShortcutsWiki();
|
||||
new ZenMode();
|
||||
new GLForm($('.wiki-form'), true);
|
||||
import('./pages/projects/wikis')
|
||||
.then(callDefault)
|
||||
.catch(fail);
|
||||
shortcut_handler = true;
|
||||
break;
|
||||
case 'snippets':
|
||||
shortcut_handler = new ShortcutsNavigation();
|
||||
if (path[2] === 'show') {
|
||||
new ZenMode();
|
||||
new LineHighlighter();
|
||||
new BlobViewer();
|
||||
}
|
||||
break;
|
||||
case 'labels':
|
||||
case 'graphs':
|
||||
case 'compare':
|
||||
case 'pipelines':
|
||||
case 'forks':
|
||||
case 'milestones':
|
||||
case 'project_members':
|
||||
case 'deploy_keys':
|
||||
case 'builds':
|
||||
case 'hooks':
|
||||
case 'services':
|
||||
case 'protected_branches':
|
||||
shortcut_handler = new ShortcutsNavigation();
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -1,8 +1,14 @@
|
|||
import initSettingsPanels from '~/settings_panels';
|
||||
import setupProjectEdit from '~/project_edit';
|
||||
import ProjectNew from '../shared/project_new';
|
||||
import projectAvatar from '../shared/project_avatar';
|
||||
import initProjectPermissionsSettings from '../shared/permissions';
|
||||
|
||||
export default () => {
|
||||
new ProjectNew(); // eslint-disable-line no-new
|
||||
setupProjectEdit();
|
||||
// Initialize expandable settings panels
|
||||
initSettingsPanels();
|
||||
projectAvatar();
|
||||
initProjectPermissionsSettings();
|
||||
};
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
import Project from './project';
|
||||
import ShortcutsNavigation from '../../shortcuts_navigation';
|
||||
|
||||
export default () => {
|
||||
new Project(); // eslint-disable-line no-new
|
||||
new ShortcutsNavigation(); // eslint-disable-line no-new
|
||||
};
|
|
@ -0,0 +1,7 @@
|
|||
import ProjectNew from '../shared/project_new';
|
||||
import initProjectVisibilitySelector from '../../../project_visibility';
|
||||
|
||||
export default () => {
|
||||
new ProjectNew(); // eslint-disable-line no-new
|
||||
initProjectVisibilitySelector();
|
||||
};
|
|
@ -1,8 +1,8 @@
|
|||
/* eslint-disable func-names, space-before-function-paren, no-var, consistent-return, no-new, prefer-arrow-callback, no-return-assign, one-var, one-var-declaration-per-line, object-shorthand, no-else-return, newline-per-chained-call, no-shadow, vars-on-top, prefer-template, max-len */
|
||||
|
||||
import Cookies from 'js-cookie';
|
||||
import { visitUrl } from './lib/utils/url_utility';
|
||||
import projectSelect from './project_select';
|
||||
import { visitUrl } from '../../lib/utils/url_utility';
|
||||
import projectSelect from '../../project_select';
|
||||
|
||||
export default class Project {
|
||||
constructor() {
|
|
@ -1,5 +1,5 @@
|
|||
<script>
|
||||
import projectFeatureToggle from '../../../vue_shared/components/toggle_button.vue';
|
||||
import projectFeatureToggle from '../../../../../vue_shared/components/toggle_button.vue';
|
||||
|
||||
export default {
|
||||
components: {
|
|
@ -1,6 +1,6 @@
|
|||
<script>
|
||||
import projectFeatureSetting from './project_feature_setting.vue';
|
||||
import projectFeatureToggle from '../../../vue_shared/components/toggle_button.vue';
|
||||
import projectFeatureToggle from '../../../../../vue_shared/components/toggle_button.vue';
|
||||
import projectSettingRow from './project_setting_row.vue';
|
||||
import { visibilityOptions, visibilityLevelDescriptions } from '../constants';
|
||||
import { toggleHiddenClassBySelector } from '../external';
|
|
@ -1,6 +1,6 @@
|
|||
/* eslint-disable func-names, no-var, no-underscore-dangle, prefer-template, prefer-arrow-callback*/
|
||||
|
||||
import VisibilitySelect from './visibility_select';
|
||||
import VisibilitySelect from '../../../visibility_select';
|
||||
|
||||
function highlightChanges($elm) {
|
||||
$elm.addClass('highlight-changes');
|
|
@ -0,0 +1,11 @@
|
|||
import Wikis from './wikis';
|
||||
import ShortcutsWiki from '../../../shortcuts_wiki';
|
||||
import ZenMode from '../../../zen_mode';
|
||||
import GLForm from '../../../gl_form';
|
||||
|
||||
export default () => {
|
||||
new Wikis(); // eslint-disable-line no-new
|
||||
new ShortcutsWiki(); // eslint-disable-line no-new
|
||||
new ZenMode(); // eslint-disable-line no-new
|
||||
new GLForm($('.wiki-form'), true); // eslint-disable-line no-new
|
||||
};
|
|
@ -1,5 +1,5 @@
|
|||
import bp from './breakpoints';
|
||||
import { slugify } from './lib/utils/text_utility';
|
||||
import bp from '../../../breakpoints';
|
||||
import { slugify } from '../../../lib/utils/text_utility';
|
||||
|
||||
export default class Wikis {
|
||||
constructor() {
|
|
@ -1,108 +0,0 @@
|
|||
let hasUserDefinedProjectPath = false;
|
||||
|
||||
const deriveProjectPathFromUrl = ($projectImportUrl) => {
|
||||
const $currentProjectPath = $projectImportUrl.parents('.toggle-import-form').find('#project_path');
|
||||
if (hasUserDefinedProjectPath) {
|
||||
return;
|
||||
}
|
||||
|
||||
let importUrl = $projectImportUrl.val().trim();
|
||||
if (importUrl.length === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
\/?: remove trailing slash
|
||||
(\.git\/?)?: remove trailing .git (with optional trailing slash)
|
||||
(\?.*)?: remove query string
|
||||
(#.*)?: remove fragment identifier
|
||||
*/
|
||||
importUrl = importUrl.replace(/\/?(\.git\/?)?(\?.*)?(#.*)?$/, '');
|
||||
|
||||
// extract everything after the last slash
|
||||
const pathMatch = /\/([^/]+)$/.exec(importUrl);
|
||||
if (pathMatch) {
|
||||
$currentProjectPath.val(pathMatch[1]);
|
||||
}
|
||||
};
|
||||
|
||||
const bindEvents = () => {
|
||||
const $newProjectForm = $('#new_project');
|
||||
const $projectImportUrl = $('#project_import_url');
|
||||
const $projectPath = $('#project_path');
|
||||
const $useTemplateBtn = $('.template-button > input');
|
||||
const $projectFieldsForm = $('.project-fields-form');
|
||||
const $selectedTemplateText = $('.selected-template');
|
||||
const $changeTemplateBtn = $('.change-template');
|
||||
const $selectedIcon = $('.selected-icon svg');
|
||||
const $templateProjectNameInput = $('#template-project-name #project_path');
|
||||
|
||||
if ($newProjectForm.length !== 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
$('.how_to_import_link').on('click', (e) => {
|
||||
e.preventDefault();
|
||||
$(e.currentTarget).next('.modal').show();
|
||||
});
|
||||
|
||||
$('.modal-header .close').on('click', () => {
|
||||
$('.modal').hide();
|
||||
});
|
||||
|
||||
$('.btn_import_gitlab_project').on('click', () => {
|
||||
const importHref = $('a.btn_import_gitlab_project').attr('href');
|
||||
$('.btn_import_gitlab_project').attr('href', `${importHref}?namespace_id=${$('#project_namespace_id').val()}&path=${$projectPath.val()}`);
|
||||
});
|
||||
|
||||
function chooseTemplate() {
|
||||
$('.template-option').hide();
|
||||
$projectFieldsForm.addClass('selected');
|
||||
$selectedIcon.removeClass('active');
|
||||
const value = $(this).val();
|
||||
const templates = {
|
||||
rails: {
|
||||
text: 'Ruby on Rails',
|
||||
icon: '.selected-icon .icon-rails',
|
||||
},
|
||||
express: {
|
||||
text: 'NodeJS Express',
|
||||
icon: '.selected-icon .icon-node-express',
|
||||
},
|
||||
spring: {
|
||||
text: 'Spring',
|
||||
icon: '.selected-icon .icon-java-spring',
|
||||
},
|
||||
};
|
||||
|
||||
const selectedTemplate = templates[value];
|
||||
$selectedTemplateText.text(selectedTemplate.text);
|
||||
$(selectedTemplate.icon).addClass('active');
|
||||
$templateProjectNameInput.focus();
|
||||
}
|
||||
|
||||
$useTemplateBtn.on('change', chooseTemplate);
|
||||
|
||||
$changeTemplateBtn.on('click', () => {
|
||||
$('.template-option').show();
|
||||
$projectFieldsForm.removeClass('selected');
|
||||
$useTemplateBtn.prop('checked', false);
|
||||
});
|
||||
|
||||
$newProjectForm.on('submit', () => {
|
||||
$projectPath.val($projectPath.val().trim());
|
||||
});
|
||||
|
||||
$projectPath.on('keyup', () => {
|
||||
hasUserDefinedProjectPath = $projectPath.val().trim().length > 0;
|
||||
});
|
||||
|
||||
$projectImportUrl.keyup(() => deriveProjectPathFromUrl($projectImportUrl));
|
||||
};
|
||||
|
||||
document.addEventListener('DOMContentLoaded', bindEvents);
|
||||
|
||||
export default {
|
||||
bindEvents,
|
||||
deriveProjectPathFromUrl,
|
||||
};
|
|
@ -1,4 +1,4 @@
|
|||
import Project from '~/project';
|
||||
import Project from '~/pages/projects/project';
|
||||
import SmartInterval from '~/smart_interval';
|
||||
import Flash from '../flash';
|
||||
import {
|
||||
|
|
|
@ -4,8 +4,6 @@
|
|||
- page_title 'New Project'
|
||||
- header_title "Projects", dashboard_projects_path
|
||||
- visibility_level = params.dig(:project, :visibility_level) || default_project_visibility
|
||||
- content_for :page_specific_javascripts do
|
||||
= webpack_bundle_tag 'project_new'
|
||||
|
||||
.project-edit-container
|
||||
.project-edit-errors
|
||||
|
|
|
@ -66,7 +66,6 @@ var config = {
|
|||
pipelines_times: './pipelines/pipelines_times.js',
|
||||
profile: './profile/profile_bundle.js',
|
||||
project_import_gl: './projects/project_import_gitlab_project.js',
|
||||
project_new: './projects/project_new.js',
|
||||
prometheus_metrics: './prometheus_metrics',
|
||||
protected_branches: './protected_branches',
|
||||
protected_tags: './protected_tags',
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import projectNew from '~/projects/project_new';
|
||||
import projectNew from '~/pages/projects/shared/project_new';
|
||||
|
||||
describe('New Project', () => {
|
||||
let $projectImportUrl;
|
||||
|
|
Loading…
Reference in New Issue