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