From f2c0ab398eb71ba9549ebd6d70b7fa7c8707b380 Mon Sep 17 00:00:00 2001
From: Mike Greiling <mike@pixelcog.com>
Date: Tue, 18 Jul 2017 17:27:01 -0500
Subject: [PATCH] refactor users bundle, remove inline javascript, and
 transform into an async chunk

---
 app/assets/javascripts/dispatcher.js  |  7 ++++++
 app/assets/javascripts/users/index.js | 22 +++++++++++++----
 app/assets/javascripts/users/user.js  | 34 ---------------------------
 app/views/users/show.html.haml        | 10 --------
 config/webpack.config.js              |  2 --
 5 files changed, 25 insertions(+), 50 deletions(-)
 delete mode 100644 app/assets/javascripts/users/user.js

diff --git a/app/assets/javascripts/dispatcher.js b/app/assets/javascripts/dispatcher.js
index ae19592ecbe..f114dec4e60 100644
--- a/app/assets/javascripts/dispatcher.js
+++ b/app/assets/javascripts/dispatcher.js
@@ -516,6 +516,13 @@ import PerformanceBar from './performance_bar';
             case 'protected_branches':
               shortcut_handler = new ShortcutsNavigation();
           }
+          break;
+        case 'users':
+          const action = path[1];
+          import(/* webpackChunkName: 'user_profile' */ './users')
+            .then(user => user.default(action))
+            .catch(() => {});
+          break;
       }
       // If we haven't installed a custom shortcut handler, install the default one
       if (!shortcut_handler) {
diff --git a/app/assets/javascripts/users/index.js b/app/assets/javascripts/users/index.js
index c9d5da5c5f9..33a83f8dae5 100644
--- a/app/assets/javascripts/users/index.js
+++ b/app/assets/javascripts/users/index.js
@@ -1,5 +1,19 @@
-import User from './user';
+import Cookies from 'js-cookie';
+import UserTabs from './user_tabs';
 
-// use legacy exports until embedded javascript is refactored
-window.gl = window.gl || {};
-window.gl.User = User;
+export default function initUserProfile(action) {
+  // place profile avatars to top
+  $('.profile-groups-avatars').tooltip({
+    placement: 'top',
+  });
+
+  // eslint-disable-next-line no-new
+  new UserTabs({ parentEl: '.user-profile', action });
+
+  // hide project limit message
+  $('.hide-project-limit-message').on('click', (e) => {
+    e.preventDefault();
+    Cookies.set('hide_project_limit_message', 'false');
+    $(this).parents('.project-limit-message').remove();
+  });
+}
diff --git a/app/assets/javascripts/users/user.js b/app/assets/javascripts/users/user.js
deleted file mode 100644
index 0b0a3e1afb4..00000000000
--- a/app/assets/javascripts/users/user.js
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint-disable class-methods-use-this */
-
-import Cookies from 'js-cookie';
-import UserTabs from './user_tabs';
-
-export default class User {
-  constructor({ action }) {
-    this.action = action;
-    this.placeProfileAvatarsToTop();
-    this.initTabs();
-    this.hideProjectLimitMessage();
-  }
-
-  placeProfileAvatarsToTop() {
-    $('.profile-groups-avatars').tooltip({
-      placement: 'top',
-    });
-  }
-
-  initTabs() {
-    return new UserTabs({
-      parentEl: '.user-profile',
-      action: this.action,
-    });
-  }
-
-  hideProjectLimitMessage() {
-    $('.hide-project-limit-message').on('click', (e) => {
-      e.preventDefault();
-      Cookies.set('hide_project_limit_message', 'false');
-      $(this).parents('.project-limit-message').remove();
-    });
-  }
-}
diff --git a/app/views/users/show.html.haml b/app/views/users/show.html.haml
index 863fec842f5..7107c1b2d81 100644
--- a/app/views/users/show.html.haml
+++ b/app/views/users/show.html.haml
@@ -1,8 +1,5 @@
 - page_title       @user.name
 - page_description @user.bio
-- content_for :page_specific_javascripts do
-  = page_specific_javascript_bundle_tag('common_d3')
-  = page_specific_javascript_bundle_tag('users')
 - header_title     @user.name, user_path(@user)
 - @no_container = true
 
@@ -129,10 +126,3 @@
 
     .loading-status
       = spinner
-
-:javascript
-  var userProfile;
-
-  userProfile = new gl.User({
-    action: "#{controller.action_name}"
-  });
diff --git a/config/webpack.config.js b/config/webpack.config.js
index 1113241e402..98626d9fe73 100644
--- a/config/webpack.config.js
+++ b/config/webpack.config.js
@@ -66,7 +66,6 @@ var config = {
     stl_viewer:           './blob/stl_viewer.js',
     terminal:             './terminal/terminal_bundle.js',
     u2f:                  ['vendor/u2f'],
-    users:                './users/index.js',
     raven:                './raven/index.js',
     vue_merge_request_widget: './vue_merge_request_widget/index.js',
     test:                 './test.js',
@@ -184,7 +183,6 @@ var config = {
       name: 'common_d3',
       chunks: [
         'graphs',
-        'users',
         'monitoring',
       ],
     }),
-- 
GitLab