From 90e4a72470ba8294dea32a2cc4f0a7cd37beeca1 Mon Sep 17 00:00:00 2001 From: Jonathan Mak Date: Tue, 8 May 2018 16:26:18 -0700 Subject: [PATCH] LPS-80621 - Create Liferay.provide API for AMD loaded modules --- .../apps/frontend-js/frontend-js-web/bnd.bnd | 1 + .../META-INF/resources/liferay/lazy_load.js | 49 +++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 modules/apps/frontend-js/frontend-js-web/src/main/resources/META-INF/resources/liferay/lazy_load.js diff --git a/modules/apps/frontend-js/frontend-js-web/bnd.bnd b/modules/apps/frontend-js/frontend-js-web/bnd.bnd index 06bb49c457d40b..64abd124bf1e68 100644 --- a/modules/apps/frontend-js/frontend-js-web/bnd.bnd +++ b/modules/apps/frontend-js/frontend-js-web/bnd.bnd @@ -142,6 +142,7 @@ Liferay-Top-Head-JS-Resources:\ /liferay/dom_task_runner.js,\ /liferay/events.js,\ /liferay/language.js,\ + /liferay/lazy_load.js,\ /liferay/liferay.js,\ /liferay/util.js,\ \ diff --git a/modules/apps/frontend-js/frontend-js-web/src/main/resources/META-INF/resources/liferay/lazy_load.js b/modules/apps/frontend-js/frontend-js-web/src/main/resources/META-INF/resources/liferay/lazy_load.js new file mode 100644 index 00000000000000..6de6626a750e92 --- /dev/null +++ b/modules/apps/frontend-js/frontend-js-web/src/main/resources/META-INF/resources/liferay/lazy_load.js @@ -0,0 +1,49 @@ +(function(_, Liferay) { + Liferay.lazyLoad = function() { + var failureCallback; + var modules; + var successCallback; + + if (_.isArray(arguments[0])) { + modules = arguments[0]; + + successCallback = _.isFunction(arguments[1]) ? arguments[1] : null; + failureCallback = _.isFunction(arguments[2]) ? arguments[2] : null; + } + else { + modules = []; + + for (var i = 0; i < arguments.length; ++i) { + if (_.isString(arguments[i])) { + modules[i] = arguments[i]; + } + else if (_.isFunction(arguments[i])) { + successCallback = arguments[i]; + failureCallback = _.isFunction(arguments[++i]) ? arguments[i] : null; + + break; + } + } + } + + return function() { + var args = []; + + for (var i = 0; i < arguments.length; ++i) { + args.push(arguments[i]); + } + + Liferay.Loader.require( + modules, + function() { + for (var i = 0; i < arguments.length; ++i) { + args.splice(i, 0, arguments[i]); + } + + successCallback.apply(successCallback, args); + }, + failureCallback + ); + }; + } +})(AUI._, Liferay); \ No newline at end of file