diff --git a/Plugin/Deploy/Package/Bundle/RequireJsPlugin.php b/Plugin/Deploy/Package/Bundle/RequireJsPlugin.php
new file mode 100644
index 0000000..c5946c3
--- /dev/null
+++ b/Plugin/Deploy/Package/Bundle/RequireJsPlugin.php
@@ -0,0 +1,49 @@
+scopeConfig = $scopeConfig;
+ }
+
+ public function aroundAddFile(RequireJs $subject, callable $proceed, $filePath, $sourcePath, $contentType) {
+
+ $jsOptimization = $this->scopeConfig->getValue('mfrocketjavascript/general/enable_javaScript_bundling_optimization', \Magento\Store\Model\ScopeInterface::SCOPE_STORE);
+ if ($jsOptimization) {
+ $includeInBundling = $this->scopeConfig->getValue('mfrocketjavascript/general/included_in_bundling', \Magento\Store\Model\ScopeInterface::SCOPE_STORE);
+ $allowedFiles = str_replace("\r","\n", $includeInBundling);
+ $allowedFiles = explode("\n", $allowedFiles);
+
+ foreach ($allowedFiles as $key => $allowedFile) {
+ $allowedFiles[$key] = trim($allowedFile);
+ if (empty($allowedFiles[$key])) {
+ unset($allowedFiles[$key]);
+ }
+ }
+
+ foreach ($allowedFiles as $allowed) {
+ $allowedFiles[] = str_replace('.min.js', '.js', $allowed);
+ }
+
+ $include = false;
+ foreach ($allowedFiles as $allowedFile) {
+ if (strpos($sourcePath, $allowedFile) !== false) {
+ $include = true;
+ break;
+ }
+ }
+
+ if (!$include) {
+ return true;
+ }
+
+ }
+ return $proceed($filePath, $sourcePath, $contentType);
+ }
+}
\ No newline at end of file
diff --git a/etc/adminhtml/system.xml b/etc/adminhtml/system.xml
index facb615..04814d0 100644
--- a/etc/adminhtml/system.xml
+++ b/etc/adminhtml/system.xml
@@ -23,10 +23,20 @@
Magefan\RocketJavaScript\Block\Adminhtml\System\Config\Form\Info
-
+
If enabled all JavaScript on storefront will be moved to the end of the page.
Magento\Config\Model\Config\Source\Yesno
+
+
+ Magento\Config\Model\Config\Source\Yesno
+
+
+
+
+ 1
+
+
diff --git a/etc/config.xml b/etc/config.xml
new file mode 100644
index 0000000..181675f
--- /dev/null
+++ b/etc/config.xml
@@ -0,0 +1,201 @@
+
+
+
+
+
+
+ jquery/jquery.mobile.custom.min.js
+mage/dataPost.min.js
+mage/bootstrap.min.js
+mage/translate-inline.min.js
+mage/utils/arrays.min.js
+mage/utils/arrays.js
+FormData.min.js
+MutationObserver.min.js
+jquery/jquery.metadata.min.js
+mage/loader.min.js
+Magento_Wishlist/js/add-to-wishlist.min.js
+Magento_PageCache/js/page-cache.min.js
+Magento_Cookie/js/require-cookie.min.js
+Magento_Ui/js/core/app.min.js
+mage/dropdown.min.js
+Magento_Search/form-mini.min.js
+magnifier/magnify.min.js
+Magento_ProductVideo/js/fotorama-add-video-events.min.js
+Magento_Review/js/error-placement.min.js
+Magento_Review/js/validate-review.min.js
+Magento_Catalog/js/upsell-products.min.js
+mage/cookies.min.js
+MagePal_GoogleTagManager/js/datalayer.min.js
+Magento_Ui/js/block-loader.min.js
+Magento_Review/js/process-reviews.min.js
+Magento_Customer/js/section-config.min.js
+Magento_Customer/js/customer-data.min.js
+Magento_Customer/js/invalidation-processor.min.js
+Magento_Catalog/js/product/view/provider.min.js
+magnifier/magnifier.min.js
+Magento_Catalog/js/gallery.min.js
+Magento_Ui/js/core/renderer/types.min.js
+Magento_Ui/js/core/renderer/layout.min.js
+Plumrocket_SocialLoginFree/js/sharepopup.min.js
+Magento_Catalog/js/view/compare-products.min.js
+Magento_Checkout/js/view/minicart.min.js
+Magento_Ui/js/lib/core/collection.min.js
+Magento_Tax/js/view/checkout/minicart/subtotal/totals.min.js
+Magento_Msrp/js/view/checkout/minicart/subtotal/totals.min.js
+Magento_Catalog/js/view/image.min.js
+Magento_Review/js/view/review.min.js
+Plumrocket_SocialLoginFree/js/view/customer/authentication-popup.min.js
+Magento_Captcha/js/view/checkout/loginCaptcha.min.js
+Mirasvit_SearchAutocomplete/js/injection.min.js
+Mirasvit_SearchAutocomplete/js/autocomplete.min.js
+Mirasvit_SearchAutocomplete/js/provider.min.js
+Mirasvit_SearchAutocomplete/js/popular.min.js
+Magento_Customer/js/view/customer.min.js
+Magento_Theme/js/view/messages.min.js
+Magento_Catalog/js/storage-manager.min.js
+Magento_Ui/js/view/messages.min.js
+MSP_ReCaptcha/js/ui-messages-mixin.min.js
+Magento_Ui/js/lib/core/element/element.min.js
+mage/decorate.min.js
+mage/storage.min.js
+Magento_Catalog/js/product/storage/storage-service.min.js
+Magento_Checkout/js/sidebar.min.js
+mage/gallery/gallery.min.js //!!!!!
+Mirasvit_SearchAutocomplete/js/lib/jquery.highlight.min.js
+Magento_Ui/js/form/form.min.js
+Magento_Customer/js/action/login.min.js
+Magento_Customer/js/model/authentication-popup.min.js
+mage/url.min.js
+Magento_Ui/js/modal/alert.min.js
+Magento_Ui/js/model/messageList.min.js
+MSP_ReCaptcha/js/registry.min.js
+Magento_Ui/js/lib/core/element/links.min.js
+Magento_Captcha/js/view/checkout/defaultCaptcha.min.js
+Magento_Captcha/js/model/captchaList.min.js
+Magento_Catalog/js/product/storage/data-storage.min.js
+Magento_Catalog/js/product/storage/ids-storage-compare.min.js
+fotorama/fotorama.min.js
+Magento_Ui/js/lib/spinner.min.js
+mage/requirejs/resolver.min.js
+Magento_Ui/js/form/adapter.min.js
+Magento_Ui/js/model/messages.min.js
+Magento_Captcha/js/model/captcha.min.js
+Magento_Captcha/js/action/refresh.min.js
+Magento_Customer/js/invalidation-rules/website-rule.min.js
+Magento_Catalog/js/product/query-builder.min.js
+Magento_Theme/js/responsive.min.js
+Magento_Theme/js/theme.min.js
+jquery/jquery.validate.min.js
+js/responsive.min.js
+js/theme.min.js
+mage/translate.min.js
+Magefan_LazyLoad/js/jquery.unveil.min.js
+requirejs/domReady.min.js
+jquery/jquery.cookie.min.js
+Plumrocket_SocialLoginFree/js/pslogin.min.js
+Smartwave_Megamenu/js/sw_megamenu.min.js
+mage/tooltip.min.js
+Magento_Catalog/product/view/validation.min.js
+Amasty_Cart/js/amcart.min.js
+mage/mage.min.js
+Magento_Catalog/js/catalog-add-to-cart.min.js
+Magento_Catalog/js/price-box.min.js
+owl.carousel/owl.carousel.min.js
+mage/template.min.js
+Magento_Ui/js/modal/confirm.min.js
+mage/common.min.js
+jquery/jquery-migrate.min.js
+jquery/jquery.storageapi.min.js
+jquery/jquery-ui.min.js
+Magento_Catalog/js/price-utils.min.js
+underscore.min.js
+mage/apply/main.min.js
+Magento_Ui/js/lib/knockout/bootstrap.min.js
+mage/tabs.min.js
+matchMedia.min.js
+mage/smart-keyboard-handler.min.js
+mage/ie-class-fixer.min.js
+js/jquery.stellar.min.js
+knockoutjs/knockout.min.js
+knockoutjs/knockout-es5.min.js
+mage/collapsible.min.js
+mage/apply/scripts.min.js
+Magento_Ui/js/lib/knockout/template/engine.min.js
+Magento_Ui/js/lib/knockout/bindings/bootstrap.min.js
+Magento_Ui/js/lib/knockout/extender/observable_array.min.js
+Magento_Ui/js/lib/knockout/extender/bound-nodes.min.js
+knockoutjs/knockout-repeat.min.js
+knockoutjs/knockout-fast-foreach.min.js
+mage/utils/wrapper.min.js
+Magento_Ui/js/lib/core/events.min.js
+es6-collections.min.js
+Magento_Ui/js/lib/knockout/template/renderer.min.js
+Magento_Ui/js/lib/knockout/bindings/resizable.min.js
+Magento_Ui/js/lib/knockout/bindings/i18n.min.js
+Magento_Ui/js/lib/knockout/bindings/scope.min.js
+Magento_Ui/js/lib/knockout/bindings/range.min.js
+Magento_Ui/js/lib/knockout/bindings/mage-init.min.js
+Magento_Ui/js/lib/knockout/bindings/keyboard.min.js
+Magento_Ui/js/lib/knockout/bindings/optgroup.min.js
+Magento_Ui/js/lib/knockout/bindings/after-render.min.js
+Magento_Ui/js/lib/knockout/bindings/autoselect.min.js
+Magento_Ui/js/lib/knockout/bindings/datepicker.min.js
+Magento_Ui/js/lib/knockout/bindings/outer_click.min.js
+Magento_Ui/js/lib/knockout/bindings/fadeVisible.min.js
+Magento_Ui/js/lib/knockout/bindings/collapsible.min.js
+Magento_Ui/js/lib/knockout/bindings/staticChecked.min.js
+Magento_Ui/js/lib/knockout/bindings/simple-checked.min.js
+Magento_Ui/js/lib/knockout/bindings/bind-html.min.js
+Magento_Ui/js/lib/knockout/bindings/tooltip.min.js
+Magento_Ui/js/lib/knockout/template/observable_source.min.js
+Magento_Ui/js/lib/logger/console-logger.min.js
+Magento_Ui/js/lib/view/utils/async.min.js
+Magento_Ui/js/lib/registry/registry.min.js
+mage/utils/main.min.js
+Magento_Ui/js/lib/knockout/template/loader.min.js
+mage/calendar.min.js
+moment.min.js
+mage/validation/validation.min.js
+Magento_Ui/js/lib/core/storage/local.min.js
+Magento_Ui/js/lib/logger/logger.min.js
+Magento_Ui/js/lib/logger/entry-factory.min.js
+Magento_Ui/js/lib/logger/console-output-handler.min.js
+Magento_Ui/js/lib/logger/formatter.min.js
+Magento_Ui/js/lib/logger/message-pool.min.js
+Magento_Ui/js/lib/logger/levels-pool.min.js
+Magento_Ui/js/lib/logger/logger-utils.min.js
+Magento_Ui/js/lib/view/utils/dom-observer.min.js
+Magento_Ui/js/lib/view/utils/bindings.min.js
+jquery/jquery-ui-timepicker-addon.min.js
+mage/validation.min.js
+Magento_Ui/js/lib/logger/entry.min.js
+Magento_Ui/js/modal/modal.min.js
+mage/requirejs/text.min.js
+Magento_Ui/js/lib/core/class.min.js
+mage/utils/template.min.js
+mage/utils/compare.min.js
+mage/utils/misc.min.js
+mage/utils/objects.min.js
+mage/utils/strings.min.js
+Magento_Ui/js/lib/key-codes.min.js
+jquery.min.js
+mage/requirejs/static.min.js
+mage/requirejs/mixins.min.js
+requirejs-config.min.js
+fancybox/js/jquery.fancybox.min.js
+Magento_Catalog/js/jquery.zoom.min.js
+Magento_ProductVideo/js/load-player.min.js
+Magento_Catalog/js/product/storage/ids-storage.min.js
+Mirasvit_SearchAutocomplete/js/navigation.min.js
+
+
+
+
diff --git a/etc/di.xml b/etc/di.xml
new file mode 100644
index 0000000..7e9fdda
--- /dev/null
+++ b/etc/di.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
\ No newline at end of file