dispatcher.js 26.6 KB
Newer Older
1
/* eslint-disable func-names, space-before-function-paren, no-var, prefer-arrow-callback, wrap-iife, no-shadow, consistent-return, one-var, one-var-declaration-per-line, camelcase, default-case, no-new, quotes, no-duplicate-case, no-case-declarations, no-fallthrough, max-len */
J
Jacob Schatz 已提交
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
import { s__ } from "./locale";
import projectSelect from "./project_select";
import IssuableIndex from "./issuable_index";
import Milestone from "./milestone";
import IssuableForm from "./issuable_form";
import LabelsSelect from "./labels_select";
import MilestoneSelect from "./milestone_select";
import NewBranchForm from "./new_branch_form";
import NotificationsForm from "./notifications_form";
import notificationsDropdown from "./notifications_dropdown";
import groupAvatar from "./group_avatar";
import GroupLabelSubscription from "./group_label_subscription";
import LineHighlighter from "./line_highlighter";
import BuildArtifacts from "./build_artifacts";
import CILintEditor from "./ci_lint_editor";
import groupsSelect from "./groups_select";
import Search from "./search";
import initAdmin from "./admin";
import NamespaceSelect from "./namespace_select";
import NewCommitForm from "./new_commit_form";
import Project from "./project";
import projectAvatar from "./project_avatar";
import MergeRequest from "./merge_request";
import Compare from "./compare";
import initCompareAutocomplete from "./compare_autocomplete";
import ProjectFindFile from "./project_find_file";
import ProjectNew from "./project_new";
import projectImport from "./project_import";
import Labels from "./labels";
import LabelManager from "./label_manager";
import Sidebar from "./right_sidebar";
import IssuableTemplateSelectors from "./templates/issuable_template_selectors";
import Flash from "./flash";
import CommitsList from "./commits";
import Issue from "./issue";
import BindInOut from "./behaviors/bind_in_out";
import SecretValues from "./behaviors/secret_values";
import DeleteModal from "./branches/branches_delete_modal";
import Group from "./group";
import ProjectsList from "./projects_list";
import setupProjectEdit from "./project_edit";
import MiniPipelineGraph from "./mini_pipeline_graph_dropdown";
import BlobLinePermalinkUpdater from "./blob/blob_line_permalink_updater";
import BlobForkSuggestion from "./blob/blob_fork_suggestion";
import UserCallout from "./user_callout";
import ShortcutsWiki from "./shortcuts_wiki";
import Pipelines from "./pipelines";
import BlobViewer from "./blob/viewer/index";
import AutoWidthDropdownSelect from "./issuable/auto_width_dropdown_select";
import UsersSelect from "./users_select";
import RefSelectDropdown from "./ref_select_dropdown";
import GfmAutoComplete from "./gfm_auto_complete";
import ShortcutsBlob from "./shortcuts_blob";
import SigninTabsMemoizer from "./signin_tabs_memoizer";
import Star from "./star";
import Todos from "./todos";
import TreeView from "./tree";
import UsagePing from "./usage_ping";
import UsernameValidator from "./username_validator";
import VersionCheckImage from "./version_check_image";
import Wikis from "./wikis";
import ZenMode from "./zen_mode";
import initSettingsPanels from "./settings_panels";
import initExperimentalFlags from "./experimental_flags";
import OAuthRememberMe from "./oauth_remember_me";
import PerformanceBar from "./performance_bar";
import initBroadcastMessagesForm from "./broadcast_message";
import initNotes from "./init_notes";
import initLegacyFilters from "./init_legacy_filters";
import initIssuableSidebar from "./init_issuable_sidebar";
import initProjectVisibilitySelector from "./project_visibility";
import GpgBadges from "./gpg_badges";
import initChangesDropdown from "./init_changes_dropdown";
import NewGroupChild from "./groups/new_group_child";
import AbuseReports from "./abuse_reports";
import { ajaxGet, convertPermissionToBoolean } from "./lib/utils/common_utils";
import AjaxLoadingSpinner from "./ajax_loading_spinner";
import GlFieldErrors from "./gl_field_errors";
import GLForm from "./gl_form";
import Shortcuts from "./shortcuts";
import ShortcutsNavigation from "./shortcuts_navigation";
import ShortcutsFindFile from "./shortcuts_find_file";
import ShortcutsIssuable from "./shortcuts_issuable";
import U2FAuthenticate from "./u2f/authenticate";
import Members from "./members";
import memberExpirationDate from "./member_expiration_date";
import DueDateSelectors from "./due_date_select";
import Diff from "./diff";
import ProjectLabelSubscription from "./project_label_subscription";
import SearchAutocomplete from "./search_autocomplete";
import Activities from "./activities";
93

F
Fatih Acet 已提交
94 95 96 97 98 99
(function() {
  var Dispatcher;

  Dispatcher = (function() {
    function Dispatcher() {
      this.initSearch();
100
      this.initFieldErrors();
F
Fatih Acet 已提交
101 102 103 104
      this.initPageScripts();
    }

    Dispatcher.prototype.initPageScripts = function() {
J
Jacob Schatz 已提交
105 106 107 108 109
      var path,
        shortcut_handler,
        fileBlobPermalinkUrlElement,
        fileBlobPermalinkUrl;
      const page = $("body").attr("data-page");
F
Fatih Acet 已提交
110 111 112
      if (!page) {
        return false;
      }
113

J
Jacob Schatz 已提交
114
      const fail = () => Flash("Error loading dynamic module");
115

J
Jacob Schatz 已提交
116
      path = page.split(":");
F
Fatih Acet 已提交
117
      shortcut_handler = null;
118

J
Jacob Schatz 已提交
119 120 121 122 123 124 125
      $(".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
        );
126 127 128 129 130 131
        gfm.setup($(el), {
          emojis: true,
          members: enableGFM,
          issues: enableGFM,
          milestones: enableGFM,
          mergeRequests: enableGFM,
J
Jacob Schatz 已提交
132
          labels: enableGFM
133 134
        });
      });
135

136 137 138 139
      function initBlob() {
        new LineHighlighter();

        new BlobLinePermalinkUpdater(
J
Jacob Schatz 已提交
140 141 142 143 144
          document.querySelector("#blob-content-holder"),
          ".diff-line-num[data-line-number]",
          document.querySelectorAll(
            ".js-data-file-blob-permalink-url, .js-blob-blame-link"
          )
145 146 147
        );

        shortcut_handler = new ShortcutsNavigation();
J
Jacob Schatz 已提交
148 149 150 151 152 153
        fileBlobPermalinkUrlElement = document.querySelector(
          ".js-data-file-blob-permalink-url"
        );
        fileBlobPermalinkUrl =
          fileBlobPermalinkUrlElement &&
          fileBlobPermalinkUrlElement.getAttribute("href");
154 155
        new ShortcutsBlob({
          skipResetBindings: true,
J
Jacob Schatz 已提交
156
          fileBlobPermalinkUrl
157
        });
E
Eric Eastwood 已提交
158

159
        new BlobForkSuggestion({
J
Jacob Schatz 已提交
160 161 162 163 164 165 166 167 168 169 170 171 172 173
          openButtons: document.querySelectorAll(
            ".js-edit-blob-link-fork-toggler"
          ),
          forkButtons: document.querySelectorAll(".js-fork-suggestion-button"),
          cancelButtons: document.querySelectorAll(
            ".js-cancel-fork-suggestion-button"
          ),
          suggestionSections: document.querySelectorAll(
            ".js-file-fork-suggestion-section"
          ),
          actionTextPieces: document.querySelectorAll(
            ".js-file-fork-suggestion-section-action"
          )
        }).init();
174 175
      }

J
Jacob Schatz 已提交
176 177
      const filteredSearchEnabled =
        gl.FilteredSearchManager && document.querySelector(".filtered-search");
178

F
Fatih Acet 已提交
179
      switch (page) {
J
Jacob Schatz 已提交
180
        case "profiles:preferences:show":
181 182
          initExperimentalFlags();
          break;
J
Jacob Schatz 已提交
183
        case "sessions:new":
184
          new UsernameValidator();
185
          new SigninTabsMemoizer();
J
Jacob Schatz 已提交
186 187 188
          new OAuthRememberMe({
            container: $(".omniauth-container")
          }).bindEvents();
189
          break;
J
Jacob Schatz 已提交
190 191
        case "projects:boards:show":
        case "projects:boards:index":
192
          shortcut_handler = new ShortcutsNavigation();
193
          new UsersSelect();
194
          break;
J
Jacob Schatz 已提交
195 196
        case "projects:merge_requests:index":
        case "projects:issues:index":
197
          if (filteredSearchEnabled) {
J
Jacob Schatz 已提交
198 199 200
            const filteredSearchManager = new gl.FilteredSearchManager(
              page === "projects:issues:index" ? "issues" : "merge_requests"
            );
201
            filteredSearchManager.setup();
C
Clement Ho 已提交
202
          }
J
Jacob Schatz 已提交
203 204 205 206
          const pagePrefix =
            page === "projects:merge_requests:index"
              ? "merge_request_"
              : "issue_";
F
Filipa Lacerda 已提交
207
          new IssuableIndex(pagePrefix);
208

F
Fatih Acet 已提交
209
          shortcut_handler = new ShortcutsNavigation();
210
          new UsersSelect();
F
Fatih Acet 已提交
211
          break;
J
Jacob Schatz 已提交
212
        case "projects:issues:show":
F
Fatih Acet 已提交
213 214 215
          new Issue();
          shortcut_handler = new ShortcutsIssuable();
          new ZenMode();
216
          initIssuableSidebar();
F
Fatih Acet 已提交
217
          break;
J
Jacob Schatz 已提交
218
        case "dashboard:milestones:index":
219
          projectSelect();
P
Phil Hughes 已提交
220
          break;
J
Jacob Schatz 已提交
221 222 223
        case "projects:milestones:show":
        case "groups:milestones:show":
        case "dashboard:milestones:show":
F
Fatih Acet 已提交
224
          new Milestone();
225
          new Sidebar();
F
Fatih Acet 已提交
226
          break;
J
Jacob Schatz 已提交
227 228
        case "dashboard:issues":
        case "dashboard:merge_requests":
229
          projectSelect();
230
          initLegacyFilters();
231
          break;
J
Jacob Schatz 已提交
232 233
        case "groups:issues":
        case "groups:merge_requests":
234
          if (filteredSearchEnabled) {
J
Jacob Schatz 已提交
235 236 237
            const filteredSearchManager = new gl.FilteredSearchManager(
              page === "groups:issues" ? "issues" : "merge_requests"
            );
238 239
            filteredSearchManager.setup();
          }
240
          projectSelect();
241
          break;
J
Jacob Schatz 已提交
242
        case "dashboard:todos:index":
243
          new Todos();
F
Fatih Acet 已提交
244
          break;
J
Jacob Schatz 已提交
245 246 247 248 249 250 251 252 253 254
        case "explore:projects:index":
        case "explore:projects:trending":
        case "explore:projects:starred":
          import("./pages/explore/projects")
            .then(module => module.default())
            .catch(fail);
          break;
        case "dashboard:projects:index":
        case "dashboard:projects:starred":
        case "admin:projects:index":
255 256
          new ProjectsList();
          break;
J
Jacob Schatz 已提交
257 258 259 260
        case "explore:groups:index":
          import("./pages/explore/groups")
            .then(module => module.default())
            .catch(fail);
F
Filipa Lacerda 已提交
261
          break;
J
Jacob Schatz 已提交
262 263 264
        case "projects:milestones:new":
        case "projects:milestones:edit":
        case "projects:milestones:update":
265 266
          new ZenMode();
          new DueDateSelectors();
J
Jacob Schatz 已提交
267
          new GLForm($(".milestone-form"), true);
268
          break;
J
Jacob Schatz 已提交
269 270 271
        case "groups:milestones:new":
        case "groups:milestones:edit":
        case "groups:milestones:update":
F
Fatih Acet 已提交
272
          new ZenMode();
F
Filipa Lacerda 已提交
273
          new DueDateSelectors();
J
Jacob Schatz 已提交
274
          new GLForm($(".milestone-form"), false);
F
Fatih Acet 已提交
275
          break;
J
Jacob Schatz 已提交
276
        case "projects:compare:show":
277
          new Diff();
278
          const paddingTop = 16;
J
Jacob Schatz 已提交
279 280 281
          initChangesDropdown(
            document.querySelector(".navbar-gitlab").offsetHeight - paddingTop
          );
F
Fatih Acet 已提交
282
          break;
J
Jacob Schatz 已提交
283 284 285 286 287 288
        case "projects:branches:new":
        case "projects:branches:create":
          new NewBranchForm(
            $(".js-create-branch-form"),
            JSON.parse(document.getElementById("availableRefs").innerHTML)
          );
289
          break;
J
Jacob Schatz 已提交
290
        case "projects:branches:index":
291
          AjaxLoadingSpinner.init();
292
          new DeleteModal();
293
          break;
J
Jacob Schatz 已提交
294 295
        case "projects:issues:new":
        case "projects:issues:edit":
F
Fatih Acet 已提交
296
          shortcut_handler = new ShortcutsNavigation();
J
Jacob Schatz 已提交
297 298
          new GLForm($(".issue-form"), true);
          new IssuableForm($(".issue-form"));
299 300
          new LabelsSelect();
          new MilestoneSelect();
301
          new IssuableTemplateSelectors();
F
Fatih Acet 已提交
302
          break;
J
Jacob Schatz 已提交
303 304 305 306
        case "projects:merge_requests:creations:new":
          const mrNewCompareNode = document.querySelector(
            ".js-merge-request-new-compare"
          );
307 308 309 310
          if (mrNewCompareNode) {
            new Compare({
              targetProjectUrl: mrNewCompareNode.dataset.targetProjectUrl,
              sourceBranchUrl: mrNewCompareNode.dataset.sourceBranchUrl,
J
Jacob Schatz 已提交
311
              targetBranchUrl: mrNewCompareNode.dataset.targetBranchUrl
312 313
            });
          } else {
J
Jacob Schatz 已提交
314 315 316
            const mrNewSubmitNode = document.querySelector(
              ".js-merge-request-new-submit"
            );
317
            new MergeRequest({
J
Jacob Schatz 已提交
318
              action: mrNewSubmitNode.dataset.mrSubmitAction
319 320
            });
          }
J
Jacob Schatz 已提交
321 322
        case "projects:merge_requests:creations:diffs":
        case "projects:merge_requests:edit":
323
          new Diff();
F
Fatih Acet 已提交
324
          shortcut_handler = new ShortcutsNavigation();
J
Jacob Schatz 已提交
325 326
          new GLForm($(".merge-request-form"), true);
          new IssuableForm($(".merge-request-form"));
327 328
          new LabelsSelect();
          new MilestoneSelect();
329
          new IssuableTemplateSelectors();
J
Jacob Schatz 已提交
330
          new AutoWidthDropdownSelect($(".js-target-branch-select")).init();
F
Fatih Acet 已提交
331
          break;
J
Jacob Schatz 已提交
332
        case "projects:tags:new":
F
Fatih Acet 已提交
333
          new ZenMode();
J
Jacob Schatz 已提交
334 335
          new GLForm($(".tag-form"), true);
          new RefSelectDropdown($(".js-branch-select"));
F
Fatih Acet 已提交
336
          break;
J
Jacob Schatz 已提交
337
        case "projects:snippets:show":
338
          initNotes();
F
Filipa Lacerda 已提交
339
          new ZenMode();
340
          break;
J
Jacob Schatz 已提交
341 342 343 344 345
        case "projects:snippets:new":
        case "projects:snippets:edit":
        case "projects:snippets:create":
        case "projects:snippets:update":
          new GLForm($(".snippet-form"), true);
F
Filipa Lacerda 已提交
346
          new ZenMode();
347
          break;
J
Jacob Schatz 已提交
348 349 350 351 352
        case "snippets:new":
        case "snippets:edit":
        case "snippets:create":
        case "snippets:update":
          new GLForm($(".snippet-form"), false);
F
Filipa Lacerda 已提交
353
          new ZenMode();
354
          break;
J
Jacob Schatz 已提交
355
        case "projects:releases:edit":
F
Fatih Acet 已提交
356
          new ZenMode();
J
Jacob Schatz 已提交
357
          new GLForm($(".release-form"), true);
F
Fatih Acet 已提交
358
          break;
J
Jacob Schatz 已提交
359
        case "projects:merge_requests:show":
360
          new Diff();
F
Fatih Acet 已提交
361
          new ZenMode();
362

363 364
          initIssuableSidebar();
          initNotes();
365

J
Jacob Schatz 已提交
366
          const mrShowNode = document.querySelector(".merge-request");
367
          window.mergeRequest = new MergeRequest({
J
Jacob Schatz 已提交
368
            action: mrShowNode.dataset.mrAction
369
          });
370 371

          shortcut_handler = new ShortcutsIssuable(true);
F
Fatih Acet 已提交
372
          break;
J
Jacob Schatz 已提交
373
        case "dashboard:activity":
374
          new Activities();
F
Fatih Acet 已提交
375
          break;
J
Jacob Schatz 已提交
376
        case "projects:commit:show":
377
          new Diff();
F
Fatih Acet 已提交
378 379
          new ZenMode();
          shortcut_handler = new ShortcutsNavigation();
380
          new MiniPipelineGraph({
J
Jacob Schatz 已提交
381
            container: ".js-commit-pipeline-graph"
382
          }).bindEvents();
383
          initNotes();
P
Phil Hughes 已提交
384
          const stickyBarPaddingTop = 16;
J
Jacob Schatz 已提交
385 386 387 388 389 390 391
          initChangesDropdown(
            document.querySelector(".navbar-gitlab").offsetHeight -
              stickyBarPaddingTop
          );
          $(".commit-info.branches").load(
            document.querySelector(".js-commit-box").dataset.commitPath
          );
F
Fatih Acet 已提交
392
          break;
J
Jacob Schatz 已提交
393
        case "projects:commit:pipelines":
394
          new MiniPipelineGraph({
J
Jacob Schatz 已提交
395
            container: ".js-commit-pipeline-graph"
396
          }).bindEvents();
J
Jacob Schatz 已提交
397 398 399
          $(".commit-info.branches").load(
            document.querySelector(".js-commit-box").dataset.commitPath
          );
400
          break;
J
Jacob Schatz 已提交
401
        case "projects:activity":
402
          new Activities();
403 404
          shortcut_handler = new ShortcutsNavigation();
          break;
J
Jacob Schatz 已提交
405 406 407 408 409
        case "projects:commits:show":
          CommitsList.init(
            document.querySelector(".js-project-commits-show").dataset
              .commitsLimit
          );
F
Fatih Acet 已提交
410
          shortcut_handler = new ShortcutsNavigation();
411
          GpgBadges.fetch();
F
Fatih Acet 已提交
412
          break;
J
Jacob Schatz 已提交
413
        case "projects:show":
F
Fatih Acet 已提交
414 415
          shortcut_handler = new ShortcutsNavigation();
          new NotificationsForm();
F
Filipa Lacerda 已提交
416 417
          new UserCallout({
            setCalloutPerProject: true,
J
Jacob Schatz 已提交
418
            className: "js-autodevops-banner"
F
Filipa Lacerda 已提交
419
          });
420

J
Jacob Schatz 已提交
421 422 423 424 425 426 427
          if ($("#tree-slider").length) new TreeView();
          if ($(".blob-viewer").length) new BlobViewer();
          if ($(".project-show-activity").length) new Activities();
          $("#tree-slider").waitForImages(function() {
            ajaxGet(
              document.querySelector(".js-tree-content").dataset.logsPath
            );
428
          });
F
Fatih Acet 已提交
429
          break;
J
Jacob Schatz 已提交
430
        case "projects:edit":
431
          setupProjectEdit();
432 433
          // Initialize expandable settings panels
          initSettingsPanels();
434
          break;
J
Jacob Schatz 已提交
435
        case "projects:imports:show":
436
          projectImport();
437
          break;
J
Jacob Schatz 已提交
438 439 440 441 442 443 444 445 446 447 448 449 450
        case "projects:pipelines:new":
        case "projects:pipelines:create":
          new NewBranchForm($(".js-new-pipeline-form"));
          break;
        case "projects:pipelines:builds":
        case "projects:pipelines:failures":
        case "projects:pipelines:show":
          const { controllerAction } = document.querySelector(
            ".js-pipeline-container"
          ).dataset;
          const pipelineStatusUrl = `${document
            .querySelector(".js-pipeline-tab-link a")
            .getAttribute("href")}/status.json`;
F
Filipa Lacerda 已提交
451

452
          new Pipelines({
F
Filipa Lacerda 已提交
453
            initTabs: true,
454
            pipelineStatusUrl,
F
Filipa Lacerda 已提交
455 456
            tabsOptions: {
              action: controllerAction,
J
Jacob Schatz 已提交
457 458 459
              defaultAction: "pipelines",
              parentEl: ".pipelines-tabs"
            }
F
Filipa Lacerda 已提交
460
          });
L
Luke Bennett 已提交
461
          break;
J
Jacob Schatz 已提交
462
        case "groups:activity":
463
          new Activities();
F
Fatih Acet 已提交
464
          break;
J
Jacob Schatz 已提交
465 466 467 468
        case "groups:show":
          const newGroupChildWrapper = document.querySelector(
            ".js-new-project-subgroup"
          );
F
Fatih Acet 已提交
469 470
          shortcut_handler = new ShortcutsNavigation();
          new NotificationsForm();
P
Phil Hughes 已提交
471
          notificationsDropdown();
472
          new ProjectsList();
473 474 475 476

          if (newGroupChildWrapper) {
            new NewGroupChild(newGroupChildWrapper);
          }
F
Fatih Acet 已提交
477
          break;
J
Jacob Schatz 已提交
478
        case "groups:group_members:index":
479 480
          memberExpirationDate();
          new Members();
F
Fatih Acet 已提交
481 482
          new UsersSelect();
          break;
J
Jacob Schatz 已提交
483 484
        case "projects:project_members:index":
          memberExpirationDate(".js-access-expiration-date-groups");
485
          groupsSelect();
486 487
          memberExpirationDate();
          new Members();
F
Fatih Acet 已提交
488 489
          new UsersSelect();
          break;
J
Jacob Schatz 已提交
490 491 492 493
        case "groups:new":
        case "admin:groups:new":
        case "groups:create":
        case "admin:groups:create":
Z
Z.J. van de Weg 已提交
494
          BindInOut.initAll();
495
          new Group();
496
          groupAvatar();
497
          break;
J
Jacob Schatz 已提交
498 499
        case "groups:edit":
        case "admin:groups:edit":
500
          groupAvatar();
F
Fatih Acet 已提交
501
          break;
J
Jacob Schatz 已提交
502
        case "projects:tree:show":
503 504 505
          shortcut_handler = new ShortcutsNavigation();
          new TreeView();
          new BlobViewer();
J
Jacob Schatz 已提交
506 507 508 509 510
          new NewCommitForm($(".js-create-dir-form"));
          $("#tree-slider").waitForImages(function() {
            ajaxGet(
              document.querySelector(".js-tree-content").dataset.logsPath
            );
T
Tim Zallmann 已提交
511
          });
512
          break;
J
Jacob Schatz 已提交
513 514 515 516 517 518 519 520 521 522
        case "projects:find_file:show":
          const findElement = document.querySelector(".js-file-finder");
          const projectFindFile = new ProjectFindFile(
            $(".file-finder-holder"),
            {
              url: findElement.dataset.fileFindUrl,
              treeUrl: findElement.dataset.findTreeUrl,
              blobUrlTemplate: findElement.dataset.blobUrlTemplate
            }
          );
523
          new ShortcutsFindFile(projectFindFile);
F
Fatih Acet 已提交
524 525
          shortcut_handler = true;
          break;
J
Jacob Schatz 已提交
526
        case "projects:blob:show":
527 528 529
          new BlobViewer();
          initBlob();
          break;
J
Jacob Schatz 已提交
530
        case "projects:blame:show":
531
          initBlob();
F
Fatih Acet 已提交
532
          break;
J
Jacob Schatz 已提交
533 534 535 536
        case "groups:labels:new":
        case "groups:labels:edit":
        case "projects:labels:new":
        case "projects:labels:edit":
F
Fatih Acet 已提交
537 538
          new Labels();
          break;
J
Jacob Schatz 已提交
539 540 541
        case "groups:labels:index":
        case "projects:labels:index":
          if ($(".prioritized-labels").length) {
542
            new LabelManager();
F
Fatih Acet 已提交
543
          }
J
Jacob Schatz 已提交
544
          $(".label-subscription").each((i, el) => {
545 546
            const $el = $(el);

J
Jacob Schatz 已提交
547
            if ($el.find(".dropdown-group-label").length) {
548
              new GroupLabelSubscription($el);
549
            } else {
550
              new ProjectLabelSubscription($el);
551 552
            }
          });
F
Fatih Acet 已提交
553
          break;
J
Jacob Schatz 已提交
554
        case "projects:network:show":
555 556
          // Ensure we don't create a particular shortcut handler here. This is
          // already created, where the network graph is created.
F
Fatih Acet 已提交
557 558
          shortcut_handler = true;
          break;
J
Jacob Schatz 已提交
559 560
        case "projects:forks:new":
          import(/* webpackChunkName: 'project_fork' */ "./project_fork")
561 562
            .then(fork => fork.default())
            .catch(() => {});
F
Fatih Acet 已提交
563
          break;
J
Jacob Schatz 已提交
564
        case "projects:artifacts:browse":
565
          new ShortcutsNavigation();
F
Fatih Acet 已提交
566 567
          new BuildArtifacts();
          break;
J
Jacob Schatz 已提交
568
        case "projects:artifacts:file":
569
          new ShortcutsNavigation();
570 571
          new BlobViewer();
          break;
J
Jacob Schatz 已提交
572 573
        case "help:index":
          VersionCheckImage.bindErrorEvent($("img.js-version-status-badge"));
574
          break;
J
Jacob Schatz 已提交
575
        case "search:show":
F
Fatih Acet 已提交
576
          new Search();
577
          break;
J
Jacob Schatz 已提交
578
        case "projects:settings:repository:show":
579 580
          // Initialize expandable settings panels
          initSettingsPanels();
581
          break;
J
Jacob Schatz 已提交
582
        case "projects:settings:ci_cd:show":
583 584
          // Initialize expandable settings panels
          initSettingsPanels();
585

J
Jacob Schatz 已提交
586
          const runnerToken = document.querySelector(".js-secret-runner-token");
587 588 589 590
          if (runnerToken) {
            const runnerTokenSecretValue = new SecretValues(runnerToken);
            runnerTokenSecretValue.init();
          }
J
Jacob Schatz 已提交
591 592 593 594
        case "groups:settings:ci_cd:show":
          const secretVariableTable = document.querySelector(
            ".js-secret-variable-table"
          );
595
          if (secretVariableTable) {
J
Jacob Schatz 已提交
596 597 598
            const secretVariableTableValues = new SecretValues(
              secretVariableTable
            );
599 600
            secretVariableTableValues.init();
          }
S
Stan Hu 已提交
601
          break;
J
Jacob Schatz 已提交
602 603
        case "ci:lints:create":
        case "ci:lints:show":
604
          new CILintEditor();
605
          break;
J
Jacob Schatz 已提交
606 607 608 609
        case "users:show":
          import("./pages/users/show")
            .then(m => m.default())
            .catch(fail);
610
          break;
J
Jacob Schatz 已提交
611
        case "admin:conversational_development_index:show":
612 613
          new UserCallout();
          break;
J
Jacob Schatz 已提交
614
        case "snippets:show":
D
Douwe Maan 已提交
615 616
          new LineHighlighter();
          new BlobViewer();
617
          initNotes();
F
Filipa Lacerda 已提交
618
          new ZenMode();
D
Douwe Maan 已提交
619
          break;
J
Jacob Schatz 已提交
620
        case "import:fogbugz:new_user_map":
621 622
          new UsersSelect();
          break;
J
Jacob Schatz 已提交
623 624
        case "profiles:personal_access_tokens:index":
        case "admin:impersonation_tokens:index":
F
Filipa Lacerda 已提交
625
          new DueDateSelectors();
626
          break;
J
Jacob Schatz 已提交
627 628
        case "projects:clusters:show":
          import(/* webpackChunkName: "clusters" */ "./clusters/clusters_bundle")
F
Filipa Lacerda 已提交
629
            .then(cluster => new cluster.default()) // eslint-disable-line new-cap
J
Jacob Schatz 已提交
630 631
            .catch(err => {
              Flash(s__("ClusterIntegration|Problem setting up the cluster"));
632 633 634
              throw err;
            });
          break;
J
Jacob Schatz 已提交
635 636
        case "projects:clusters:index":
          import(/* webpackChunkName: "clusters_index" */ "./clusters/clusters_index")
637
            .then(clusterIndex => clusterIndex.default())
J
Jacob Schatz 已提交
638 639 640 641
            .catch(err => {
              Flash(
                s__("ClusterIntegration|Problem setting up the clusters list")
              );
642 643
              throw err;
            });
F
Filipa Lacerda 已提交
644
          break;
F
Fatih Acet 已提交
645
      }
646
      switch (path[0]) {
J
Jacob Schatz 已提交
647 648
        case "sessions":
        case "omniauth_callbacks":
649
          if (!gon.u2f) break;
F
Filipa Lacerda 已提交
650
          const u2fAuthenticate = new U2FAuthenticate(
J
Jacob Schatz 已提交
651 652
            $("#js-authenticate-u2f"),
            "#js-login-u2f-form",
653
            gon.u2f,
J
Jacob Schatz 已提交
654 655
            document.querySelector("#js-login-2fa-device"),
            document.querySelector(".js-2fa-form")
656
          );
F
Filipa Lacerda 已提交
657 658 659
          u2fAuthenticate.start();
          // needed in rspec
          gl.u2fAuthenticate = u2fAuthenticate;
J
Jacob Schatz 已提交
660
        case "admin":
661
          initAdmin();
F
Fatih Acet 已提交
662
          switch (path[1]) {
J
Jacob Schatz 已提交
663
            case "broadcast_messages":
M
Mike Greiling 已提交
664 665
              initBroadcastMessagesForm();
              break;
J
Jacob Schatz 已提交
666
            case "cohorts":
667
              new UsagePing();
668
              break;
J
Jacob Schatz 已提交
669
            case "groups":
F
Fatih Acet 已提交
670 671
              new UsersSelect();
              break;
J
Jacob Schatz 已提交
672 673 674
            case "projects":
              document
                .querySelectorAll(".js-namespace-select")
W
Winnie Hellmann 已提交
675
                .forEach(dropdown => new NamespaceSelect({ dropdown }));
676
              break;
J
Jacob Schatz 已提交
677
            case "labels":
678
              switch (path[2]) {
J
Jacob Schatz 已提交
679 680
                case "new":
                case "edit":
681 682
                  new Labels();
              }
J
Jacob Schatz 已提交
683
            case "abuse_reports":
684
              new AbuseReports();
685
              break;
F
Fatih Acet 已提交
686 687
          }
          break;
J
Jacob Schatz 已提交
688 689
        case "dashboard":
        case "root":
690
          new UserCallout();
F
Fatih Acet 已提交
691
          break;
J
Jacob Schatz 已提交
692
        case "profiles":
F
Fatih Acet 已提交
693
          new NotificationsForm();
P
Phil Hughes 已提交
694
          notificationsDropdown();
F
Fatih Acet 已提交
695
          break;
J
Jacob Schatz 已提交
696
        case "projects":
F
Fatih Acet 已提交
697
          new Project();
698
          projectAvatar();
F
Fatih Acet 已提交
699
          switch (path[1]) {
J
Jacob Schatz 已提交
700
            case "compare":
701
              initCompareAutocomplete();
F
Fatih Acet 已提交
702
              break;
J
Jacob Schatz 已提交
703
            case "edit":
F
Fatih Acet 已提交
704 705
              shortcut_handler = new ShortcutsNavigation();
              new ProjectNew();
J
Jacob Schatz 已提交
706
              import(/* webpackChunkName: 'project_permissions' */ "./projects/permissions")
707 708
                .then(permissions => permissions.default())
                .catch(() => {});
F
Fatih Acet 已提交
709
              break;
J
Jacob Schatz 已提交
710
            case "new":
F
Fatih Acet 已提交
711
              new ProjectNew();
712
              initProjectVisibilitySelector();
F
Fatih Acet 已提交
713
              break;
J
Jacob Schatz 已提交
714
            case "show":
715
              new Star();
F
Fatih Acet 已提交
716
              new ProjectNew();
P
Phil Hughes 已提交
717
              notificationsDropdown();
F
Fatih Acet 已提交
718
              break;
J
Jacob Schatz 已提交
719
            case "wikis":
720
              new Wikis();
721
              shortcut_handler = new ShortcutsWiki();
F
Fatih Acet 已提交
722
              new ZenMode();
J
Jacob Schatz 已提交
723
              new GLForm($(".wiki-form"), true);
F
Fatih Acet 已提交
724
              break;
J
Jacob Schatz 已提交
725
            case "snippets":
F
Fatih Acet 已提交
726
              shortcut_handler = new ShortcutsNavigation();
J
Jacob Schatz 已提交
727
              if (path[2] === "show") {
F
Fatih Acet 已提交
728
                new ZenMode();
D
Douwe Maan 已提交
729 730
                new LineHighlighter();
                new BlobViewer();
F
Fatih Acet 已提交
731 732
              }
              break;
J
Jacob Schatz 已提交
733 734 735 736 737 738 739 740 741 742 743 744
            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":
F
Fatih Acet 已提交
745 746
              shortcut_handler = new ShortcutsNavigation();
          }
747
          break;
F
Fatih Acet 已提交
748
      }
749
      // If we haven't installed a custom shortcut handler, install the default one
F
Fatih Acet 已提交
750
      if (!shortcut_handler) {
751
        new Shortcuts();
F
Fatih Acet 已提交
752
      }
753

J
Jacob Schatz 已提交
754 755
      if (document.querySelector("#peek")) {
        new PerformanceBar({ container: "#peek" });
756
      }
F
Fatih Acet 已提交
757 758 759
    };

    Dispatcher.prototype.initSearch = function() {
760
      // Only when search form is present
J
Jacob Schatz 已提交
761
      if ($(".search").length) {
F
Filipa Lacerda 已提交
762
        return new SearchAutocomplete();
F
Fatih Acet 已提交
763 764 765
      }
    };

766
    Dispatcher.prototype.initFieldErrors = function() {
J
Jacob Schatz 已提交
767
      $(".gl-show-field-errors").each((i, form) => {
768
        new GlFieldErrors(form);
769
      });
770 771
    };

F
Fatih Acet 已提交
772 773
    return Dispatcher;
  })();
774

J
Jacob Schatz 已提交
775
  $(window).on("load", function() {
776 777
    new Dispatcher();
  });
J
Jacob Schatz 已提交
778
}.call(window));