Нет описания

Assets.php 2.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. <?php
  2. namespace MailPoet\Twig;
  3. if (!defined('ABSPATH')) exit;
  4. use MailPoet\DI\ContainerWrapper;
  5. use MailPoet\Util\CdnAssetUrl;
  6. use MailPoet\WP\Functions as WPFunctions;
  7. use MailPoetVendor\Twig\Extension\AbstractExtension;
  8. use MailPoetVendor\Twig\TwigFunction;
  9. class Assets extends AbstractExtension {
  10. private $globals;
  11. /** @var CdnAssetUrl */
  12. private $cdnAssetsUrl;
  13. public function __construct(array $globals, CdnAssetUrl $cdnAssetsUrl = null) {
  14. $this->globals = $globals;
  15. if ($cdnAssetsUrl === null) {
  16. $cdnAssetsUrl = ContainerWrapper::getInstance()->get(CdnAssetUrl::class);
  17. }
  18. $this->cdnAssetsUrl = $cdnAssetsUrl;
  19. }
  20. public function getFunctions() {
  21. return [
  22. new TwigFunction(
  23. 'stylesheet',
  24. [$this, 'generateStylesheet'],
  25. ['is_safe' => ['all']]
  26. ),
  27. new TwigFunction(
  28. 'javascript',
  29. [$this, 'generateJavascript'],
  30. ['is_safe' => ['all']]
  31. ),
  32. new TwigFunction(
  33. 'getJavascriptScriptUrl',
  34. [$this, 'getJavascriptScriptUrl'],
  35. ['is_safe' => ['all']]
  36. ),
  37. new TwigFunction(
  38. 'image_url',
  39. [$this, 'generateImageUrl'],
  40. ['is_safe' => ['all']]
  41. ),
  42. new TwigFunction(
  43. 'cdn_url',
  44. [$this, 'generateCdnUrl'],
  45. ['is_safe' => ['all']]
  46. ),
  47. ];
  48. }
  49. public function generateStylesheet() {
  50. $stylesheets = func_get_args();
  51. $output = [];
  52. foreach ($stylesheets as $stylesheet) {
  53. $output[] = sprintf(
  54. '<link rel="stylesheet" type="text/css" href="%s/dist/css/%s" />',
  55. $this->globals['assets_url'],
  56. $this->getAssetFilename($this->globals['assets_manifest_css'], $stylesheet)
  57. );
  58. }
  59. return join("\n", $output);
  60. }
  61. public function generateJavascript() {
  62. $scripts = func_get_args();
  63. $output = [];
  64. foreach ($scripts as $script) {
  65. $output[] = sprintf(
  66. '<script type="text/javascript" src="%s"></script>',
  67. $this->getJavascriptScriptUrl($script)
  68. );
  69. }
  70. return join("\n", $output);
  71. }
  72. public function getJavascriptScriptUrl($script) {
  73. return sprintf(
  74. '%s/%s/%s',
  75. $this->globals['assets_url'],
  76. strpos($script, 'lib/') === 0 ? 'js' : 'dist/js',
  77. $this->getAssetFileName($this->globals['assets_manifest_js'], $script)
  78. );
  79. }
  80. public function generateImageUrl($path) {
  81. return $this->appendVersionToUrl(
  82. $this->globals['assets_url'] . '/img/' . $path
  83. );
  84. }
  85. public function appendVersionToUrl($url) {
  86. return WPFunctions::get()->addQueryArg('mailpoet_version', $this->globals['version'], $url);
  87. }
  88. public function getAssetFileName($manifest, $asset) {
  89. return (!empty($manifest[$asset])) ? $manifest[$asset] : $asset;
  90. }
  91. public function generateCdnUrl($path) {
  92. return $this->cdnAssetsUrl->generateCdnUrl($path);
  93. }
  94. }