From c45de5c32b02976a2dd264dbd9e586bb715aa986 Mon Sep 17 00:00:00 2001
From: Calen Pennington <calen.pennington@gmail.com>
Date: Wed, 28 Feb 2018 11:06:39 -0500
Subject: [PATCH] =?UTF-8?q?Revert=20"Revert=20"Revert=20"Merge=20pull=20re?=
 =?UTF-8?q?quest=20#17325=20from=20cpennington/switch-ass=E2=80=A6"?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 cms/static/cms/js/build.js                    |   1 +
 cms/static/js/factories/base.js               |   6 +-
 cms/static/js/pages/asset_index.js            |   7 --
 cms/static/js/pages/course.js                 |  11 --
 cms/static/js/pages/login.js                  |   2 +-
 cms/static/js/sock.js                         |   7 +-
 cms/templates/asset_index.html                |  18 +--
 cms/templates/base.html                       |  56 ++++-----
 .../templates/static_content.html             |  24 ++--
 common/djangoapps/terrain/ui_helpers.py       |   6 +
 webpack-config/file-lists.js                  | 108 ------------------
 webpack.common.config.js                      |  91 ++++-----------
 12 files changed, 75 insertions(+), 262 deletions(-)
 delete mode 100644 cms/static/js/pages/asset_index.js
 delete mode 100644 cms/static/js/pages/course.js
 delete mode 100644 webpack-config/file-lists.js

diff --git a/cms/static/cms/js/build.js b/cms/static/cms/js/build.js
index a92365aaece..3f86a8c891e 100644
--- a/cms/static/cms/js/build.js
+++ b/cms/static/cms/js/build.js
@@ -17,6 +17,7 @@
          * done.
          */
         modules: getModulesList([
+            'js/factories/asset_index',
             'js/factories/base',
             'js/factories/container',
             'js/factories/course_create_rerun',
diff --git a/cms/static/js/factories/base.js b/cms/static/js/factories/base.js
index 7f61b473c9e..abaeb89d17a 100644
--- a/cms/static/js/factories/base.js
+++ b/cms/static/js/factories/base.js
@@ -1,6 +1,2 @@
 define(['js/base', 'cms/js/main', 'js/src/logger', 'datepair', 'accessibility',
-    'ieshim', 'tooltip_manager', 'lang_edx', 'js/models/course'],
-    function() {
-        'use strict';
-    }
-);
+    'ieshim', 'tooltip_manager', 'lang_edx', 'js/models/course']);
diff --git a/cms/static/js/pages/asset_index.js b/cms/static/js/pages/asset_index.js
deleted file mode 100644
index 4644fac60e9..00000000000
--- a/cms/static/js/pages/asset_index.js
+++ /dev/null
@@ -1,7 +0,0 @@
-define(
-    ['js/factories/asset_index', 'common/js/utils/page_factory', 'js/factories/base'],
-    function(AssetIndexFactory, invokePageFactory) {
-        'use strict';
-        invokePageFactory('AssetIndexFactory', AssetIndexFactory);
-    }
-);
diff --git a/cms/static/js/pages/course.js b/cms/static/js/pages/course.js
deleted file mode 100644
index 892f6c6acb7..00000000000
--- a/cms/static/js/pages/course.js
+++ /dev/null
@@ -1,11 +0,0 @@
-(function(define) {
-    'use strict';
-
-    define(
-        ['js/models/course'],
-        function(ContextCourse) {
-            window.course = new ContextCourse(window.pageFactoryArguments.ContextCourse[0]);
-        }
-    );
-}).call(this, define || RequireJS.define);
-
diff --git a/cms/static/js/pages/login.js b/cms/static/js/pages/login.js
index 449a1190f64..8caff6a8338 100644
--- a/cms/static/js/pages/login.js
+++ b/cms/static/js/pages/login.js
@@ -1,5 +1,5 @@
 define(
-    ['js/factories/login', 'common/js/utils/page_factory', 'js/factories/base'],
+    ['js/factories/login', 'common/js/utils/page_factory'],
     function(LoginFactory, invokePageFactory) {
         'use strict';
         invokePageFactory('LoginFactory', LoginFactory);
diff --git a/cms/static/js/sock.js b/cms/static/js/sock.js
index 44653981ff6..9a536a3c78d 100644
--- a/cms/static/js/sock.js
+++ b/cms/static/js/sock.js
@@ -1,7 +1,5 @@
-define(['domReady', 'jquery', 'jquery.smoothScroll'],
+require(['domReady', 'jquery', 'jquery.smoothScroll'],
     function(domReady, $) {
-        'use strict';
-
         var toggleSock = function(e) {
             e.preventDefault();
 
@@ -35,5 +33,4 @@ define(['domReady', 'jquery', 'jquery.smoothScroll'],
             // toggling footer additional support
             $('.cta-show-sock').bind('click', toggleSock);
         });
-    }
-);
+    });
diff --git a/cms/templates/asset_index.html b/cms/templates/asset_index.html
index 2b1c0a943e2..8d323b7a4ab 100644
--- a/cms/templates/asset_index.html
+++ b/cms/templates/asset_index.html
@@ -28,16 +28,16 @@
     % endif
 </%block>
 
-<%block name="page_bundle">
+<%block name="requirejs">
     % if not waffle_flag_enabled:
-        <%static:invoke_page_bundle page_name="js/pages/asset_index" class_name="AssetIndexFactory">
-            {
-                assetCallbackUrl: "${asset_callback_url|n, js_escaped_string}",
-                uploadChunkSizeInMBs: ${ chunk_size_in_mbs| n, dump_js_escaped_json },
-                maxFileSizeInMBs: ${ max_file_size_in_mbs| n, dump_js_escaped_json },
-                maxFileSizeRedirectUrl: "${max_file_size_redirect_url|n, js_escaped_string}"
-            }
-        </%static:invoke_page_bundle>
+            require(["js/factories/asset_index"], function (AssetIndexFactory) {
+                AssetIndexFactory({
+                  assetCallbackUrl: "${asset_callback_url|n, js_escaped_string}",
+                  uploadChunkSizeInMBs: ${chunk_size_in_mbs|n, dump_js_escaped_json},
+                  maxFileSizeInMBs: ${max_file_size_in_mbs|n, dump_js_escaped_json},
+                  maxFileSizeRedirectUrl: "${max_file_size_redirect_url|n, js_escaped_string}"
+                });
+            });
     % endif
 </%block>
 
diff --git a/cms/templates/base.html b/cms/templates/base.html
index f4e7907954f..631db5a72aa 100644
--- a/cms/templates/base.html
+++ b/cms/templates/base.html
@@ -121,39 +121,29 @@ from openedx.core.djangolib.markup import HTML
     <%block name="modal_placeholder"></%block>
 
     <%block name="jsextra"></%block>
-
-    % if context_course:
-      <script type="text/javascript">
-        if (typeof window.pageFactoryArguments == "undefined") {
-            window.pageFactoryArguments = {};
-        }
-
-        window.pageFactoryArguments['ContextCourse'] = {
-          id: "${context_course.id | n, js_escaped_string}",
-          name: "${context_course.display_name_with_default | n, js_escaped_string}",
-          url_name: "${context_course.location.block_id | n, js_escaped_string}",
-          org: "${context_course.location.org | n, js_escaped_string}",
-          num: "${context_course.location.course | n, js_escaped_string}",
-          display_course_number: "${context_course.display_coursenumber | n, js_escaped_string}",
-          revision: "${context_course.location.branch | n, js_escaped_string}",
-          self_paced: ${ context_course.self_paced | n, dump_js_escaped_json }
-        }
-      </script>
-    % endif
-    % if user.is_authenticated():
-      <%static:invoke_page_bundle page_name='js/sock'/>
-    % endif
-    <%block name='page_bundle'>
-      <script type="text/javascript">
-      require(['js/factories/base'], function () {
-          require(['js/models/course'], function(Course) {
-              % if context_course:
-                  window.course = new Course(window.pageFactoryArguments['ContextCourse']);
-              % endif
-              <%block name='requirejs'></%block>
-          });
-      });
-      </script>
+    <%block name="page_bundle">
+        <script type="text/javascript">
+        require(['js/factories/base'], function () {
+            require(['js/models/course'], function(Course) {
+                % if context_course:
+                    window.course = new Course({
+                        id: "${context_course.id | n, js_escaped_string}",
+                        name: "${context_course.display_name_with_default | n, js_escaped_string}",
+                        url_name: "${context_course.location.block_id | n, js_escaped_string}",
+                        org: "${context_course.location.org | n, js_escaped_string}",
+                        num: "${context_course.location.course | n, js_escaped_string}",
+                        display_course_number: "${context_course.display_coursenumber | n, js_escaped_string}",
+                        revision: "${context_course.location.branch | n, js_escaped_string}",
+                        self_paced: ${context_course.self_paced | n, dump_js_escaped_json}
+                    });
+                % endif
+                % if user.is_authenticated():
+                    require(['js/sock']);
+                % endif
+                <%block name='requirejs'></%block>
+            });
+        });
+    </script>
     </%block>
     <%include file="widgets/segment-io-footer.html" />
     <div class="modal-cover"></div>
diff --git a/common/djangoapps/pipeline_mako/templates/static_content.html b/common/djangoapps/pipeline_mako/templates/static_content.html
index 6f7db5be07c..068bf4d7547 100644
--- a/common/djangoapps/pipeline_mako/templates/static_content.html
+++ b/common/djangoapps/pipeline_mako/templates/static_content.html
@@ -164,7 +164,7 @@ source, template_path = Loader(engine).load_template_source(path)
     </script>
 </%def>
 
-<%def name="invoke_page_bundle(page_name, class_name=None)">
+<%def name="invoke_page_bundle(page_name, class_name)">
     <%doc>
       Loads Javascript onto your page synchronously.
       Uses RequireJS in development and a plain script tag in production.
@@ -174,18 +174,16 @@ source, template_path = Loader(engine).load_template_source(path)
     <%
         body = capture(caller.body)
     %>
-    % if class_name:
-        <script type="text/javascript">
-            if (typeof pageFactoryArguments == "undefined") {
-                var pageFactoryArguments = {};
-            }
-            % if body:
-                pageFactoryArguments['${class_name | n, js_escaped_string}'] = [${ body | n, decode.utf8 }];
-            % else:
-                pageFactoryArguments['${class_name | n, js_escaped_string}'] = [];
-            % endif
-        </script>
-    % endif
+    <script type="text/javascript">
+        if (typeof pageFactoryArguments == "undefined") {
+            var pageFactoryArguments = {};
+        }
+        % if body:
+        pageFactoryArguments['${class_name | n, js_escaped_string}'] = [${ body | n, decode.utf8 }];
+        % else:
+        pageFactoryArguments['${class_name | n, js_escaped_string}'] = [];
+        % endif
+    </script>
     <%self:webpack entry="${page_name}"/>
 </%def>
 
diff --git a/common/djangoapps/terrain/ui_helpers.py b/common/djangoapps/terrain/ui_helpers.py
index a5ed62268f4..86aa39ca4b6 100644
--- a/common/djangoapps/terrain/ui_helpers.py
+++ b/common/djangoapps/terrain/ui_helpers.py
@@ -51,6 +51,12 @@ REQUIREJS_WAIT = {
         "js/sock", "gettext", "js/base",
         "jquery.ui", "cms/js/main", "underscore"],
 
+    # Upload
+    re.compile(r'^\s*Files & Uploads'): [
+        'js/base', 'jquery.ui', 'cms/js/main', 'underscore',
+        'js/views/assets', 'js/views/asset'
+    ],
+
     # Pages
     re.compile(r'^Pages \|'): [
         'js/models/explicit_url', 'js/views/tabs',
diff --git a/webpack-config/file-lists.js b/webpack-config/file-lists.js
deleted file mode 100644
index fde698a0ab6..00000000000
--- a/webpack-config/file-lists.js
+++ /dev/null
@@ -1,108 +0,0 @@
-var path = require('path');
-
-module.exports = {
-    namespacedRequire: [
-        path.resolve(__dirname, '../common/static/common/js/components/views/feedback_notification.js'),
-        path.resolve(__dirname, '../common/static/common/js/components/views/feedback_prompt.js'),
-        path.resolve(__dirname, '../common/static/common/js/components/views/feedback.js'),
-        path.resolve(__dirname, '../common/static/common/js/components/views/paging_footer.js'),
-        path.resolve(__dirname, '../cms/static/js/views/paging.js'),
-        path.resolve(__dirname, '../common/static/common/js/components/utils/view_utils.js')
-    ],
-
-    // These files are used by RequireJS as well, so we can't remove
-    // the instances of "text!some/file.underscore" (which webpack currently
-    // processes twice). So instead we have webpack dynamically remove the `text!` prefix
-    // until we can remove RequireJS from the system.
-    textBangUnderscore: [
-        path.resolve(__dirname, '../cms/static/js/certificates/views/certificate_details.js'),
-        path.resolve(__dirname, '../cms/static/js/certificates/views/certificate_editor.js'),
-        path.resolve(__dirname, '../cms/static/js/certificates/views/certificate_preview.js'),
-        path.resolve(__dirname, '../cms/static/js/certificates/views/signatory_details.js'),
-        path.resolve(__dirname, '../cms/static/js/certificates/views/signatory_editor.js'),
-        path.resolve(__dirname, '../cms/static/js/views/active_video_upload_list.js'),
-        path.resolve(__dirname, '../cms/static/js/views/assets.js'),
-        path.resolve(__dirname, '../cms/static/js/views/course_video_settings.js'),
-        path.resolve(__dirname, '../cms/static/js/views/edit_chapter.js'),
-        path.resolve(__dirname, '../cms/static/js/views/experiment_group_edit.js'),
-        path.resolve(__dirname, '../cms/static/js/views/license.js'),
-        path.resolve(__dirname, '../cms/static/js/views/modals/move_xblock_modal.js'),
-        path.resolve(__dirname, '../cms/static/js/views/move_xblock_breadcrumb.js'),
-        path.resolve(__dirname, '../cms/static/js/views/move_xblock_list.js'),
-        path.resolve(__dirname, '../cms/static/js/views/paging_header.js'),
-        path.resolve(__dirname, '../cms/static/js/views/previous_video_upload_list.js'),
-        path.resolve(__dirname, '../cms/static/js/views/previous_video_upload.js'),
-        path.resolve(__dirname, '../cms/static/js/views/video_thumbnail.js'),
-        path.resolve(__dirname, '../cms/static/js/views/video_transcripts.js'),
-        path.resolve(__dirname, '../common/static/common/js/components/views/feedback.js'),
-        path.resolve(__dirname, '../common/static/common/js/components/views/paginated_view.js'),
-        path.resolve(__dirname, '../common/static/common/js/components/views/paging_footer.js'),
-        path.resolve(__dirname, '../common/static/common/js/components/views/paging_header.js'),
-        path.resolve(__dirname, '../common/static/common/js/components/views/progress_circle_view.js'),
-        path.resolve(__dirname, '../common/static/common/js/components/views/search_field.js'),
-        path.resolve(__dirname, '../common/static/common/js/components/views/tabbed_view.js'),
-        path.resolve(__dirname, '../lms/djangoapps/discussion/static/discussion/js/views/discussion_board_view.js'),
-        path.resolve(__dirname, '../lms/djangoapps/discussion/static/discussion/js/views/discussion_fake_breadcrumbs.js'),
-        path.resolve(__dirname, '../lms/djangoapps/discussion/static/discussion/js/views/discussion_search_view.js'),
-        path.resolve(__dirname, '../lms/djangoapps/discussion/static/discussion/js/views/discussion_user_profile_view.js'),
-        path.resolve(__dirname, '../lms/djangoapps/support/static/support/js/views/certificates.js'),
-        path.resolve(__dirname, '../lms/djangoapps/support/static/support/js/views/enrollment_modal.js'),
-        path.resolve(__dirname, '../lms/djangoapps/support/static/support/js/views/enrollment.js'),
-        path.resolve(__dirname, '../lms/djangoapps/support/static/support/js/views/manage_user.js'),
-        path.resolve(__dirname, '../lms/djangoapps/teams/static/teams/js/views/edit_team_members.js'),
-        path.resolve(__dirname, '../lms/djangoapps/teams/static/teams/js/views/edit_team.js'),
-        path.resolve(__dirname, '../lms/djangoapps/teams/static/teams/js/views/instructor_tools.js'),
-        path.resolve(__dirname, '../lms/djangoapps/teams/static/teams/js/views/team_card.js'),
-        path.resolve(__dirname, '../lms/djangoapps/teams/static/teams/js/views/team_profile_header_actions.js'),
-        path.resolve(__dirname, '../lms/djangoapps/teams/static/teams/js/views/team_profile.js'),
-        path.resolve(__dirname, '../lms/djangoapps/teams/static/teams/js/views/teams_tab.js'),
-        path.resolve(__dirname, '../lms/djangoapps/teams/static/teams/js/views/topic_teams.js'),
-        path.resolve(__dirname, '../lms/static/js/api_admin/views/catalog_preview.js'),
-        path.resolve(__dirname, '../lms/static/js/components/card/views/card.js'),
-        path.resolve(__dirname, '../lms/static/js/components/header/views/header.js'),
-        path.resolve(__dirname, '../lms/static/js/financial-assistance/views/financial_assistance_form_view.js'),
-        path.resolve(__dirname, '../lms/static/js/learner_dashboard/views/certificate_list_view.js'),
-        path.resolve(__dirname, '../lms/static/js/learner_dashboard/views/certificate_status_view.js'),
-        path.resolve(__dirname, '../lms/static/js/learner_dashboard/views/collection_list_view.js'),
-        path.resolve(__dirname, '../lms/static/js/learner_dashboard/views/course_card_view.js'),
-        path.resolve(__dirname, '../lms/static/js/learner_dashboard/views/course_enroll_view.js'),
-        path.resolve(__dirname, '../lms/static/js/learner_dashboard/views/course_entitlement_view.js'),
-        path.resolve(__dirname, '../lms/static/js/learner_dashboard/views/expired_notification_view.js'),
-        path.resolve(__dirname, '../lms/static/js/learner_dashboard/views/explore_new_programs_view.js'),
-        path.resolve(__dirname, '../lms/static/js/learner_dashboard/views/program_card_view.js'),
-        path.resolve(__dirname, '../lms/static/js/learner_dashboard/views/program_details_sidebar_view.js'),
-        path.resolve(__dirname, '../lms/static/js/learner_dashboard/views/program_details_view.js'),
-        path.resolve(__dirname, '../lms/static/js/learner_dashboard/views/program_header_view.js'),
-        path.resolve(__dirname, '../lms/static/js/learner_dashboard/views/sidebar_view.js'),
-        path.resolve(__dirname, '../lms/static/js/learner_dashboard/views/upgrade_message_view.js'),
-        path.resolve(__dirname, '../lms/static/js/student_account/views/account_section_view.js'),
-        path.resolve(__dirname, '../lms/static/js/student_account/views/account_settings_fields.js'),
-        path.resolve(__dirname, '../lms/static/js/student_account/views/account_settings_view.js'),
-        path.resolve(__dirname, '../lms/static/js/student_account/views/FormView.js'),
-        path.resolve(__dirname, '../lms/static/js/student_account/views/LoginView.js'),
-        path.resolve(__dirname, '../lms/static/js/student_account/views/RegisterView.js'),
-        path.resolve(__dirname, '../lms/static/js/views/fields.js'),
-        path.resolve(__dirname, '../lms/static/js/views/image_field.js'),
-        path.resolve(__dirname, '../lms/static/js/views/message_banner.js'),
-        path.resolve(__dirname, '../openedx/features/course_bookmarks/static/course_bookmarks/js/views/bookmarks_list.js'),
-        path.resolve(__dirname, '../openedx/features/course_search/static/course_search/js/spec/course_search_spec.js'),
-        path.resolve(
-            __dirname,
-            'openedx/features/course_search/static/course_search/js/views/course_search_results_view.js'
-        ),
-        path.resolve(
-            __dirname,
-            'openedx/features/course_search/static/course_search/js/views/dashboard_search_results_view.js'
-        ),
-        path.resolve(__dirname, '../openedx/features/course_search/static/course_search/js/views/search_results_view.js'),
-        path.resolve(__dirname, '../openedx/features/learner_profile/static/learner_profile/js/views/badge_list_container.js'),
-        path.resolve(__dirname, '../openedx/features/learner_profile/static/learner_profile/js/views/badge_list_view.js'),
-        path.resolve(__dirname, '../openedx/features/learner_profile/static/learner_profile/js/views/badge_view.js'),
-        path.resolve(
-            __dirname,
-            'openedx/features/learner_profile/static/learner_profile/js/views/learner_profile_fields.js'
-        ),
-        path.resolve(__dirname, '../openedx/features/learner_profile/static/learner_profile/js/views/section_two_tab.js'),
-        path.resolve(__dirname, '../openedx/features/learner_profile/static/learner_profile/js/views/share_modal_view.js')
-    ]
-}
diff --git a/webpack.common.config.js b/webpack.common.config.js
index 728169d47fe..bc5693410b8 100644
--- a/webpack.common.config.js
+++ b/webpack.common.config.js
@@ -7,7 +7,12 @@ var webpack = require('webpack');
 var BundleTracker = require('webpack-bundle-tracker');
 var StringReplace = require('string-replace-webpack-plugin');
 
-var files = require('./webpack-config/file-lists.js');
+var namespacedRequireFiles = [
+    path.resolve(__dirname, 'common/static/common/js/components/views/feedback_notification.js'),
+    path.resolve(__dirname, 'common/static/common/js/components/views/feedback_prompt.js'),
+    path.resolve(__dirname, 'common/static/common/js/components/views/feedback.js'),
+    path.resolve(__dirname, 'common/static/common/js/components/utils/view_utils.js')
+];
 
 var defineHeader = /\(function ?\(define(, require)?\) ?\{/;
 var defineFooter = /\}\)\.call\(this, define \|\| RequireJS\.define(, require \|\| RequireJS\.require)?\);/;
@@ -20,8 +25,6 @@ module.exports = {
         Import: './cms/static/js/features/import/factories/import.js',
         CourseOrLibraryListing: './cms/static/js/features_jsx/studio/CourseOrLibraryListing.jsx',
         'js/pages/login': './cms/static/js/pages/login.js',
-        'js/pages/asset_index': './cms/static/js/pages/asset_index.js',
-        'js/sock': './cms/static/js/sock.js',
 
         // LMS
         SingleSupportForm: './lms/static/support/jsx/single_support_form.jsx',
@@ -94,7 +97,7 @@ module.exports = {
         ],
         rules: [
             {
-                test: files.namespacedRequire,
+                test: namespacedRequireFiles,
                 loader: StringReplace.replace(
                     ['babel-loader'],
                     {
@@ -111,26 +114,11 @@ module.exports = {
                     }
                 )
             },
-            {
-                test: files.textBangUnderscore,
-                loader: StringReplace.replace(
-                    ['babel-loader'],
-                    {
-                        replacements: [
-                            {
-                                pattern: /text!(.*\.underscore)/,
-                                replacement: function(match, p1) { return p1; }
-                            }
-                        ]
-                    }
-                )
-            },
             {
                 test: /\.(js|jsx)$/,
                 exclude: [
                     /node_modules/,
-                    files.namespacedRequire,
-                    files.textBangUnderscore
+                    namespacedRequireFiles
                 ],
                 use: 'babel-loader'
             },
@@ -142,16 +130,9 @@ module.exports = {
                 use: 'babel-loader'
             },
             {
-                test: path.resolve(__dirname, 'common/static/coffee/src/ajax_prefix.js'),
-                use: [
-                    'babel-loader',
-                    {
-                        loader: 'exports-loader',
-                        options: {
-                            'this.AjaxPrefix': true
-                        }
-                    }
-                ]
+                test: /\.coffee$/,
+                exclude: /node_modules/,
+                use: 'coffee-loader'
             },
             {
                 test: /\.underscore$/,
@@ -161,34 +142,13 @@ module.exports = {
                 // This file is used by both RequireJS and Webpack and depends on window globals
                 // This is a dirty hack and shouldn't be replicated for other files.
                 test: path.resolve(__dirname, 'cms/static/cms/js/main.js'),
-                loader: StringReplace.replace(
-                    ['babel-loader'],
-                    {
-                        replacements: [
-                            {
-                                pattern: /\(function\(AjaxPrefix\) {/,
-                                replacement: function() { return ''; }
-                            },
-                            {
-                                pattern: /], function\(domReady, \$, str, Backbone, gettext, NotificationView\) {/,
-                                replacement: function() {
-                                    // eslint-disable-next-line
-                                    return '], function(domReady, $, str, Backbone, gettext, NotificationView, AjaxPrefix) {';
-                                }
-                            },
-                            {
-                                pattern: /'..\/..\/common\/js\/components\/views\/feedback_notification',/,
-                                replacement: function() {
-                                    return "'../../common/js/components/views/feedback_notification', 'AjaxPrefix',";
-                                }
-                            },
-                            {
-                                pattern: /}\).call\(this, AjaxPrefix\);/,
-                                replacement: function() { return ''; }
-                            }
-                        ]
+                use: {
+                    loader: 'imports-loader',
+                    options: {
+                        AjaxPrefix:
+                            'exports-loader?this.AjaxPrefix!../../../../common/static/coffee/src/ajax_prefix.coffee'
                     }
-                )
+                }
             },
             {
                 test: /\.(woff2?|ttf|svg|eot)(\?v=\d+\.\d+\.\d+)?$/,
@@ -198,9 +158,8 @@ module.exports = {
     },
 
     resolve: {
-        extensions: ['.js', '.jsx', '.json'],
+        extensions: ['.js', '.jsx', '.json', '.coffee'],
         alias: {
-            AjaxPrefix: 'ajax_prefix',
             'edx-ui-toolkit': 'edx-ui-toolkit/src/',  // @TODO: some paths in toolkit are not valid relative paths
             'jquery.ui': 'jQuery-File-Upload/js/vendor/jquery.ui.widget.js',
             jquery: 'jquery/src/jquery',  // Use the non-dist form of jQuery for better debugging + optimization
@@ -209,21 +168,13 @@ module.exports = {
             // https://github.com/webpack/webpack/issues/304#issuecomment-272150177
             // (I've tried every other suggestion solution on that page, this
             // was the only one that worked.)
-            sinon: __dirname + '/node_modules/sinon/pkg/sinon.js',
-            'jquery.smoothScroll': 'jquery.smooth-scroll.min',
-            'jquery.timepicker': 'timepicker/jquery.timepicker',
-            datepair: 'timepicker/datepair',
-            accessibility: 'accessibility_tools',
-            ieshim: 'ie_shim'
+            sinon: __dirname + '/node_modules/sinon/pkg/sinon.js'
         },
         modules: [
             'node_modules',
-            'cms/static',
-            'common/static',
-            'common/static/js/src',
             'common/static/js/vendor/',
-            'common/static/js/vendor/jQuery-File-Upload/js/',
-            'common/static/coffee/src'
+            'cms/static',
+            'common/static/js/src'
         ]
     },
 
-- 
GitLab