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