]> git.ipfire.org Git - thirdparty/foundation/foundation-sites.git/commitdiff
fix: fix and re-enable plugins UMD module bundling
authorNicolas Coden <nicolas@ncoden.fr>
Thu, 1 Feb 2018 19:05:23 +0000 (20:05 +0100)
committerNicolas Coden <nicolas@ncoden.fr>
Sun, 11 Feb 2018 22:48:15 +0000 (23:48 +0100)
Changes:
* re-enable main/plugins entries bundling as UMD modules
* bundle main/plugins entries in their own library for externals
* export the mutated `Foundation` object and the plugin in every plugin entry

Bug introduced in https://github.com/zurb/foundation-sites/pull/10864
Previous PR: https://github.com/zurb/foundation-sites/pull/10903
See https://github.com/zurb/foundation-sites/pull/10903#issuecomment-364776349

34 files changed:
docs/layout/default.html
gulp/config.js
gulp/tasks/javascript.js
js/entries/plugins/foundation.abide.js
js/entries/plugins/foundation.accordion.js
js/entries/plugins/foundation.accordionMenu.js
js/entries/plugins/foundation.core.js
js/entries/plugins/foundation.drilldown.js
js/entries/plugins/foundation.dropdown.js
js/entries/plugins/foundation.dropdownMenu.js
js/entries/plugins/foundation.equalizer.js
js/entries/plugins/foundation.interchange.js
js/entries/plugins/foundation.magellan.js
js/entries/plugins/foundation.offcanvas.js
js/entries/plugins/foundation.orbit.js
js/entries/plugins/foundation.responsiveAccordionTabs.js
js/entries/plugins/foundation.responsiveMenu.js
js/entries/plugins/foundation.responsiveToggle.js
js/entries/plugins/foundation.reveal.js
js/entries/plugins/foundation.slider.js
js/entries/plugins/foundation.smoothScroll.js
js/entries/plugins/foundation.sticky.js
js/entries/plugins/foundation.tabs.js
js/entries/plugins/foundation.toggler.js
js/entries/plugins/foundation.tooltip.js
js/entries/plugins/foundation.util.box.js
js/entries/plugins/foundation.util.imageLoader.js
js/entries/plugins/foundation.util.keyboard.js
js/entries/plugins/foundation.util.mediaQuery.js
js/entries/plugins/foundation.util.motion.js
js/entries/plugins/foundation.util.nest.js
js/entries/plugins/foundation.util.timer.js
js/entries/plugins/foundation.util.touch.js
js/entries/plugins/foundation.util.triggers.js

index 23a612e1363d81b782b3a5b4a57f50ce9cceb9e0..cf1f85a8b0010fd1ee964d74d68f592399bb4b97 100644 (file)
@@ -81,9 +81,8 @@
   </script>
 
   <script src="assets/js/vendor.js"></script>
-  <!--
   <script src="assets/js/foundation.js"></script>
-  -->
+    <!--
   <script src="assets/js/plugins/foundation.core.js"></script>
   <script src="assets/js/plugins/foundation.util.box.js"></script>
   <script src="assets/js/plugins/foundation.util.imageLoader.js"></script>
   <script src="assets/js/plugins/foundation.toggler.js"></script>
   <script src="assets/js/plugins/foundation.tooltip.js"></script>
   <script src="assets/js/plugins/foundation.responsiveAccordionTabs.js"></script>
+  -->
 
   <script src="assets/js/docs.js"></script>
   <script type="text/javascript">
index 1287a528adbec32f01ad4a3a9ce8ffb323553450..f691d648272a7fa077a5a9c2a00612ce4d778c73 100644 (file)
@@ -2,10 +2,10 @@ module.exports = {
 
   // Javascript
   JS_FILES: [
-  'js/foundation.core.js',
-  'js/foundation.util.core.js',
-  'js/foundation.util.*.js',
-  'js/*.js'
+    'js/foundation.core.js',
+    'js/foundation.util.core.js',
+    'js/foundation.util.*.js',
+    'js/*.js'
   ],
 
   JS_DEPS: [
index da41933cef7df0deac08fa02b7a0a411aeca616a..d4f092ac2e95164dafd3e978e22207a387c4b6fc 100644 (file)
@@ -8,40 +8,61 @@ var webpack2 = require('webpack');
 var named = require('vinyl-named');
 
 var CONFIG = require('../config.js');
+var BUNDLE_PREFIX = '__FOUNDATION_EXTERNALS_';
+var BUNDLE_SUFFIX = '__';
 
-// Compiles JavaScript into a single file
-gulp.task('javascript', ['javascript:foundation', 'javascript:deps', 'javascript:docs']);
-
-// NOTE: This sets up all imports from within Foundation as externals, for the purpose
+// ----- WEBPACK CONFIGURATION -----
+//
+// The following sets up all imports from within Foundation as externals, for the purpose
 // of replicating the "drop in dist file" approach of prior versions.
 // THIS IS NOT RECOMMENDED FOR MOST USERS. Chances are you either want everything
 // (just throw in foundation.js or foundation.min.js) or you should be using a build
 // system.
-var pluginsAsExternals = {
-  'jquery': 'jQuery',
-  './foundation.core': '{Foundation: window.Foundation}',
-  './foundation.util.core' : '{rtl: window.Foundation.rtl, GetYoDigits: window.Foundation.GetYoDigits, transitionend: window.Foundation.transitionend, RegExpEscape: window.Foundation.RegExpEscape}',
-  './foundation.util.imageLoader' : '{onImagesLoaded: window.Foundation.onImagesLoaded}',
-  './foundation.util.keyboard' : '{Keyboard: window.Foundation.Keyboard}',
-  './foundation.util.mediaQuery' : '{MediaQuery: window.Foundation.MediaQuery}',
-  './foundation.util.motion' : '{Motion: window.Foundation.Motion, Move: window.Foundation.Move}',
-  './foundation.util.nest' : '{Nest: window.Foundation.Nest}',
-  './foundation.util.timer' : '{Timer: window.Foundation.Timer}',
-  './foundation.util.touch' : '{Touch: window.Foundation.Touch}',
-  './foundation.util.box' : '{Box: window.Foundation.Box}',
-  './foundation.plugin' : '{Plugin: window.Foundation.Plugin}',
-  './foundation.dropdownMenu' : '{DropdownMenu: window.Foundation.DropdownMenu}',
-  './foundation.drilldown' : '{Drilldown: window.Foundation.Drilldown}',
-  './foundation.accordionMenu' : '{AccordionMenu: window.Foundation.AccordionMenu}',
-  './foundation.accordion' : '{Accordion: window.Foundation.Accordion}',
-  './foundation.tabs' : '{Tabs: window.Foundation.Tabs}',
-  './foundation.smoothScroll' : '{SmoothScroll: window.Foundation.SmoothScroll}',
+
+// Convert an external config object for UMD modules
+// See: https://webpack.js.org/configuration/externals/#object
+function umdExternals(externals, options) {
+  options = Object.assign({ prefix: '', suffix: '' }, options);
+
+  return Object.keys(externals).reduce(function(obj, k) {
+    obj[k] = {
+      root: `${options.prefix}${externals[k]}${options.suffix}`,
+      amd: k,
+      commonjs: k,
+      commonjs2: k,
+    };
+    return obj;
+  }, {});
 };
 
+// Generate plugin Externals config for UMD modules
+var pluginsAsExternals = Object.assign(
+  umdExternals({
+    'jquery': 'jQuery',
+  }),
+  umdExternals({
+    './foundation.core': 'foundation.core',
+    './foundation.util.imageLoader': 'foundation.util.imageLoader',
+    './foundation.util.keyboard': 'foundation.util.keyboard',
+    './foundation.util.mediaQuery': 'foundation.util.mediaQuery',
+    './foundation.util.motion': 'foundation.util.motion',
+    './foundation.util.nest': 'foundation.util.nest',
+    './foundation.util.timer': 'foundation.util.timer',
+    './foundation.util.touch': 'foundation.util.touch',
+    './foundation.util.box': 'foundation.util.box',
+    './foundation.dropdownMenu': 'foundation.dropdownMenu',
+    './foundation.drilldown': 'foundation.drilldown',
+    './foundation.accordionMenu': 'foundation.accordionMenu',
+    './foundation.accordion': 'foundation.accordion',
+    './foundation.tabs': 'foundation.tabs',
+    './foundation.smoothScroll': 'foundation.smoothScroll',
+  }, { prefix: BUNDLE_PREFIX, suffix: BUNDLE_SUFFIX })
+);
+
 var webpackConfig = {
-  externals: {
+  externals: umdExternals({
     'jquery': 'jQuery'
-  },
+  }),
   module: {
     rules: [
       {
@@ -55,15 +76,17 @@ var webpackConfig = {
     ]
   },
   output: {
-    // ---
-    // FIXME: to resolve before the next release
-    // Temporary disable UMD bundling, waiting for a way to import plugins are externals
-    // See https://github.com/zurb/foundation-sites/pull/10903
-    // ---
-    // libraryTarget: 'umd',
+    library: `${BUNDLE_PREFIX}[name]${BUNDLE_SUFFIX}`,
+    libraryTarget: 'umd',
   }
 }
 
+// ----- TASKS -----
+//
+
+// Compiles JavaScript into a single file
+gulp.task('javascript', ['javascript:foundation', 'javascript:deps', 'javascript:docs']);
+
 // Core has to be dealt with slightly differently due to bootstrapping externals
 // and the dependency on foundation.util.core
 //
index f8170fddb096b63d9eb6b4d874f79a59bbce9c3d..f5ad0c7142e657dbb680a8be9f8f73e0d96bb313 100644 (file)
@@ -2,3 +2,5 @@ import { Foundation } from './foundation.core';
 
 import { Abide } from '../../foundation.abide';
 Foundation.plugin(Abide, 'Abide');
+
+export { Foundation, Abide };
index da165a7573df849bfe2cf7eb8ee7a27ff72b58ad..e25515cb9682cd3e04b2f14555a8f98c57007f00 100644 (file)
@@ -2,3 +2,5 @@ import { Foundation } from './foundation.core';
 
 import { Accordion } from '../../foundation.accordion';
 Foundation.plugin(Accordion, 'Accordion');
+
+export { Foundation, Accordion };
index f7d2debf6b72dc7a8832a6335c9c99f7a4e9e066..ca3c5cc8d50a8a88ecae738f649e95775c6e9f3d 100644 (file)
@@ -3,3 +3,4 @@ import { Foundation } from './foundation.core';
 import { AccordionMenu } from '../../foundation.accordionMenu';
 Foundation.plugin(AccordionMenu, 'AccordionMenu');
 
+export { Foundation, AccordionMenu };
index cf4afd9cb0774d433ba42041d01edb9ff07b9f35..5ed3d38082146f9047906125a268b90de6b9dcde 100644 (file)
@@ -21,4 +21,4 @@ Foundation.Plugin = Plugin;
 
 window.Foundation = Foundation;
 
-export { Foundation }
+export { Foundation };
index 49db0fc9dc4e88830558d7b66d7f279f87004a69..4ee623f9bbfb9d144b6237d020ff8c1cf787635d 100644 (file)
@@ -2,3 +2,5 @@ import { Foundation } from './foundation.core';
 
 import { Drilldown } from '../../foundation.drilldown';
 Foundation.plugin(Drilldown, 'Drilldown');
+
+export { Foundation, Drilldown };
index 04e259abaa7a51e81557523bc081e9c1785ea17a..add2d97de7143616ba6569fb4184d6b213c777bd 100644 (file)
@@ -3,3 +3,4 @@ import { Foundation } from './foundation.core';
 import { Dropdown } from '../../foundation.dropdown';
 Foundation.plugin(Dropdown, 'Dropdown');
 
+export { Foundation, Dropdown };
index ec0684a035001c33c8ad0d8d19207abaa86e7491..f86c350fdb4cccd4e5c5da70b3e12a375e35e3cc 100644 (file)
@@ -2,3 +2,5 @@ import { Foundation } from './foundation.core';
 
 import { DropdownMenu } from '../../foundation.dropdownMenu';
 Foundation.plugin(DropdownMenu, 'DropdownMenu');
+
+export { Foundation, DropdownMenu};
index 82cc0370bc9cf740c7e026860de2def8bc2371ca..8a1059b2bbb229191d019bce42be06b8567ec4cc 100644 (file)
@@ -2,3 +2,5 @@ import { Foundation } from './foundation.core';
 
 import { Equalizer } from '../../foundation.equalizer';
 Foundation.plugin(Equalizer, 'Equalizer');
+
+export { Foundation, Equalizer };
index e60cc2b4a2273f5b8f3d562e8fbb2cde36414889..9e35be3ce60140c044dc079ed3562925488bafc6 100644 (file)
@@ -2,3 +2,5 @@ import { Foundation } from './foundation.core';
 
 import { Interchange } from '../../foundation.interchange';
 Foundation.plugin(Interchange, 'Interchange');
+
+export { Foundation, Interchange };
index c199a08498e2e0f75303fd833f31ae44dd707c7b..358746a1e047b4f953ca53e889afb1f2d0c6ce8b 100644 (file)
@@ -2,3 +2,5 @@ import { Foundation } from './foundation.core';
 
 import { Magellan } from '../../foundation.magellan';
 Foundation.plugin(Magellan, 'Magellan');
+
+export { Foundation, Magellan };
index adcd8eceb692f0683e90a27286614c455e06bbf4..6e39bbc33f064e0f4b84a594199d182019ad8b86 100644 (file)
@@ -2,3 +2,5 @@ import { Foundation } from './foundation.core';
 
 import { OffCanvas } from '../../foundation.offcanvas';
 Foundation.plugin(OffCanvas, 'OffCanvas');
+
+export { Foundation, OffCanvas };
index 6fb1a2414e14034d17473845eb41dc3a37d91b7c..ae0f624200a834b74fd35ca2f983eb8bd6b469a8 100644 (file)
@@ -3,3 +3,4 @@ import { Foundation } from './foundation.core';
 import { Orbit } from '../../foundation.orbit';
 Foundation.plugin(Orbit, 'Orbit');
 
+export { Foundation, Orbit };
index 85eceebd591cf6f2d9e01ba58f505f96ee29f183..1fbedd0d51c4ddb8fb43988cecab97a9fa843766 100644 (file)
@@ -3,3 +3,4 @@ import { Foundation } from './foundation.core';
 import { ResponsiveAccordionTabs } from '../../foundation.responsiveAccordionTabs';
 Foundation.plugin(ResponsiveAccordionTabs, 'ResponsiveAccordionTabs');
 
+export { Foundation, ResponsiveAccordionTabs };
index 44a815db74329607da2ff108c13ad3baf68a2468..c277df39d600919878e99bfe097d2acb404a52ba 100644 (file)
@@ -3,3 +3,4 @@ import { Foundation } from './foundation.core';
 import { ResponsiveMenu } from '../../foundation.responsiveMenu';
 Foundation.plugin(ResponsiveMenu, 'ResponsiveMenu');
 
+export { Foundation, ResponsiveMenu };
index ee5cdfe33546d71846252399fc8ce06003db3970..c2eeeab3b409ef8c7ef69d5b81d6502d50a3bfd8 100644 (file)
@@ -3,3 +3,4 @@ import { Foundation } from './foundation.core';
 import { ResponsiveToggle } from '../../foundation.responsiveToggle';
 Foundation.plugin(ResponsiveToggle, 'ResponsiveToggle');
 
+export { Foundation, ResponsiveToggle };
index 2f92f2c1ee7587aa4c07b03787a08212d7310548..b679ab2123651ac3eef954d529d804ea6f7fd69c 100644 (file)
@@ -2,3 +2,5 @@ import { Foundation } from './foundation.core';
 
 import { Reveal } from '../../foundation.reveal';
 Foundation.plugin(Reveal, 'Reveal');
+
+export { Foundation, Reveal };
index 5b4ceb216cb77c29a45327fd45134c01ceb4a6ec..3cbac3bb157ca87623de9205d510a90fb8b69ef4 100644 (file)
@@ -3,3 +3,4 @@ import { Foundation } from './foundation.core';
 import { Slider } from '../../foundation.slider';
 Foundation.plugin(Slider, 'Slider');
 
+export { Foundation, Slider };
index 3804abbb28ce7fe4ce6b2cb84071f8d67f87350a..8a638d35672a8cabab3959b4447972705c57cd87 100644 (file)
@@ -3,3 +3,4 @@ import { Foundation } from './foundation.core';
 import { SmoothScroll } from '../../foundation.smoothScroll';
 Foundation.plugin(SmoothScroll, 'SmoothScroll');
 
+export { Foundation, SmoothScroll };
index a112caf0c51cb9253399ead553b028866f30cbb5..cf450cecec199d7eca26c5c88f380fcde1accac1 100644 (file)
@@ -3,3 +3,4 @@ import { Foundation } from './foundation.core';
 import { Sticky } from '../../foundation.sticky';
 Foundation.plugin(Sticky, 'Sticky');
 
+export { Foundation, Sticky };
index 99bf1d38f5d269d016c77abe87e54e8b7ca157c8..fb983e277649b771dc76a8d55c6c11ed0bd0114a 100644 (file)
@@ -3,3 +3,4 @@ import { Foundation } from './foundation.core';
 import { Tabs } from '../../foundation.tabs';
 Foundation.plugin(Tabs, 'Tabs');
 
+export { Foundation, Tabs };
index 3c21bbe8bf0a4b1fe51e2ba6fecd5bf5a85b13a8..b4691a256a1b83f991de9c32c6f18f9af0c92187 100644 (file)
@@ -3,3 +3,4 @@ import { Foundation } from './foundation.core';
 import { Toggler } from '../../foundation.toggler';
 Foundation.plugin(Toggler, 'Toggler');
 
+export { Foundation, Toggler };
index 0963a6348003c7e7dca6bd7449a920a79b1e11e6..c12bc828101b74c220e2972edf6b61090ca6cb36 100644 (file)
@@ -2,3 +2,5 @@ import { Foundation } from './foundation.core';
 
 import { Tooltip } from '../../foundation.tooltip';
 Foundation.plugin(Tooltip, 'Tooltip');
+
+export { Foundation, Tooltip };
index 2c53a5e973065012493123847eb1e0bcdc7cda39..5501914951a972431eee9424b2e8309193032bf0 100644 (file)
@@ -2,3 +2,5 @@ import { Foundation } from './foundation.core';
 import { Box } from '../../foundation.util.box';
 
 Foundation.Box = Box;
+
+export { Foundation, Box };
index 72f8cf35d30e7c41b7dd82c1232ca40b659d2fad..615801edcf9a313b94c5282c6dfbbd77faf0f9e7 100644 (file)
@@ -3,3 +3,5 @@ import { Foundation } from './foundation.core';
 import { onImagesLoaded } from '../../foundation.util.imageLoader';
 
 Foundation.onImagesLoaded = onImagesLoaded;
+
+export { Foundation, onImagesLoaded };
index 812038e87a680bcb6b84be4a5412812b0651f371..4a13e24528863abb65a6f9d44a481433c9798b77 100644 (file)
@@ -2,3 +2,5 @@ import { Foundation } from './foundation.core';
 import { Keyboard } from '../../foundation.util.keyboard';
 
 Foundation.Keyboard = Keyboard;
+
+export { Foundation, Keyboard };
index 8a62b1c09e3b048cb5798065a8a5488e4d7bea9d..aa112dbaeda960d22fa80481150cb3dfe6c454eb 100644 (file)
@@ -3,3 +3,5 @@ import { MediaQuery } from '../../foundation.util.mediaQuery';
 
 Foundation.MediaQuery = MediaQuery;
 Foundation.MediaQuery._init();
+
+export { Foundation, MediaQuery };
index 7e369558f5e554a7f01ea6fec634753a4277b16e..4d5921361a661b6e5f179e3fc173e0a2d2b4d616 100644 (file)
@@ -3,3 +3,5 @@ import { Motion, Move } from '../../foundation.util.motion';
 
 Foundation.Motion = Motion;
 Foundation.Move = Move;
+
+export { Foundation, Motion, Move };
index 313153bf76fb80a7711d597c82f5675957fd0232..b8578cf635e2975f0f074047a0d1bb00aa2114fd 100644 (file)
@@ -3,3 +3,5 @@ import { Foundation } from './foundation.core';
 import { Nest } from '../../foundation.util.nest';
 
 Foundation.Nest = Nest;
+
+export { Foundation, Nest };
index 9fdad32cb1d6990678bae936c6ebdfd8a0c3ab08..3289b14e0d8a19827a02144223903dc06eb362e5 100644 (file)
@@ -3,3 +3,5 @@ import { Foundation } from './foundation.core';
 import { Timer } from '../../foundation.util.timer';
 
 Foundation.Timer = Timer;
+
+export { Foundation, Timer };
index 2872464a56f47229f8d0a200984f164c5f035ac0..0ebf0448832a69df7fff96fe44289a63d7a89b2f 100644 (file)
@@ -5,3 +5,5 @@ import { Touch } from '../../foundation.util.touch';
 Touch.init($);
 
 window.Foundation.Touch = Touch;
+
+export { Foundation, Touch };
index 30689f4b0d5e2cd96cec7effac27acebb52fbad8..54354ed092e30fb3cd3e3b7557f06597fa3e28bf 100644 (file)
@@ -3,3 +3,5 @@ import $ from 'jquery';
 
 import { Triggers } from '../../foundation.util.triggers';
 Triggers.init($, Foundation);
+
+export { Foundation, Triggers };