Config.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\RequireJs\Block\Html\Head;
  7. use Magento\Framework\RequireJs\Config as RequireJsConfig;
  8. use Magento\Framework\View\Asset\Minification;
  9. /**
  10. * Block responsible for including RequireJs config on the page
  11. *
  12. * @api
  13. * @since 100.0.2
  14. */
  15. class Config extends \Magento\Framework\View\Element\AbstractBlock
  16. {
  17. /**
  18. * @var RequireJsConfig
  19. */
  20. private $config;
  21. /**
  22. * @var \Magento\RequireJs\Model\FileManager
  23. */
  24. private $fileManager;
  25. /**
  26. * @var \Magento\Framework\View\Page\Config
  27. */
  28. protected $pageConfig;
  29. /**
  30. * @var Minification
  31. */
  32. protected $minification;
  33. /**
  34. * @var \Magento\Framework\View\Asset\ConfigInterface
  35. */
  36. private $bundleConfig;
  37. /**
  38. * @param \Magento\Framework\View\Element\Context $context
  39. * @param RequireJsConfig $config
  40. * @param \Magento\RequireJs\Model\FileManager $fileManager
  41. * @param \Magento\Framework\View\Page\Config $pageConfig
  42. * @param \Magento\Framework\View\Asset\ConfigInterface $bundleConfig
  43. * @param Minification $minification
  44. * @param array $data
  45. */
  46. public function __construct(
  47. \Magento\Framework\View\Element\Context $context,
  48. RequireJsConfig $config,
  49. \Magento\RequireJs\Model\FileManager $fileManager,
  50. \Magento\Framework\View\Page\Config $pageConfig,
  51. \Magento\Framework\View\Asset\ConfigInterface $bundleConfig,
  52. Minification $minification,
  53. array $data = []
  54. ) {
  55. parent::__construct($context, $data);
  56. $this->config = $config;
  57. $this->fileManager = $fileManager;
  58. $this->pageConfig = $pageConfig;
  59. $this->bundleConfig = $bundleConfig;
  60. $this->minification = $minification;
  61. }
  62. /**
  63. * Include RequireJs configuration as an asset on the page
  64. *
  65. * @return $this
  66. */
  67. protected function _prepareLayout()
  68. {
  69. $after = RequireJsConfig::REQUIRE_JS_FILE_NAME;
  70. $assetCollection = $this->pageConfig->getAssetCollection();
  71. if ($this->minification->isEnabled('js')) {
  72. $minResolver = $this->fileManager->createMinResolverAsset();
  73. $assetCollection->insert(
  74. $minResolver->getFilePath(),
  75. $minResolver,
  76. $after
  77. );
  78. $after = $minResolver->getFilePath();
  79. }
  80. $requireJsMapConfig = $this->fileManager->createRequireJsMapConfigAsset();
  81. if ($requireJsMapConfig) {
  82. $urlResolverAsset = $this->fileManager->createUrlResolverAsset();
  83. $assetCollection->insert(
  84. $urlResolverAsset->getFilePath(),
  85. $urlResolverAsset,
  86. $after
  87. );
  88. $after = $urlResolverAsset->getFilePath();
  89. $assetCollection->insert(
  90. $requireJsMapConfig->getFilePath(),
  91. $requireJsMapConfig,
  92. $after
  93. );
  94. $after = $requireJsMapConfig->getFilePath();
  95. }
  96. if ($this->bundleConfig->isBundlingJsFiles()) {
  97. $bundleAssets = $this->fileManager->createBundleJsPool();
  98. $staticAsset = $this->fileManager->createStaticJsAsset();
  99. /** @var \Magento\Framework\View\Asset\File $bundleAsset */
  100. if (!empty($bundleAssets) && $staticAsset !== false) {
  101. $bundleAssets = array_reverse($bundleAssets);
  102. foreach ($bundleAssets as $bundleAsset) {
  103. $assetCollection->insert(
  104. $bundleAsset->getFilePath(),
  105. $bundleAsset,
  106. $after
  107. );
  108. }
  109. $assetCollection->insert(
  110. $staticAsset->getFilePath(),
  111. $staticAsset,
  112. reset($bundleAssets)->getFilePath()
  113. );
  114. $after = $staticAsset->getFilePath();
  115. }
  116. }
  117. $requireJsConfig = $this->fileManager->createRequireJsConfigAsset();
  118. $assetCollection->insert(
  119. $requireJsConfig->getFilePath(),
  120. $requireJsConfig,
  121. $after
  122. );
  123. $requireJsMixinsConfig = $this->fileManager->createRequireJsMixinsAsset();
  124. $assetCollection->insert(
  125. $requireJsMixinsConfig->getFilePath(),
  126. $requireJsMixinsConfig,
  127. $after
  128. );
  129. return parent::_prepareLayout();
  130. }
  131. }