LegacyAssetsTrait.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. <?php
  2. /**
  3. * @package Grav\Common\Assets\Traits
  4. *
  5. * @copyright Copyright (C) 2015 - 2019 Trilby Media, LLC. All rights reserved.
  6. * @license MIT License; see LICENSE file for details.
  7. */
  8. namespace Grav\Common\Assets\Traits;
  9. use Grav\Common\Assets;
  10. trait LegacyAssetsTrait
  11. {
  12. /**
  13. * @param array $args
  14. * @param string $type
  15. * @return array
  16. */
  17. protected function unifyLegacyArguments($args, $type = Assets::CSS_TYPE)
  18. {
  19. // First argument is always the asset
  20. array_shift($args);
  21. if (\count($args) === 0) {
  22. return [];
  23. }
  24. if (\count($args) === 1 && \is_array($args[0])) {
  25. return $args[0];
  26. }
  27. switch ($type) {
  28. case(Assets::INLINE_CSS_TYPE):
  29. $defaults = ['priority' => null, 'group' => null];
  30. $arguments = $this->createArgumentsFromLegacy($args, $defaults);
  31. break;
  32. case(Assets::JS_TYPE):
  33. $defaults = ['priority' => null, 'pipeline' => true, 'loading' => null, 'group' => null];
  34. $arguments = $this->createArgumentsFromLegacy($args, $defaults);
  35. break;
  36. case(Assets::INLINE_JS_TYPE):
  37. $defaults = ['priority' => null, 'group' => null, 'attributes' => null];
  38. $arguments = $this->createArgumentsFromLegacy($args, $defaults);
  39. // special case to handle old attributes being passed in
  40. if (isset($arguments['attributes'])) {
  41. $old_attributes = $arguments['attributes'];
  42. $arguments = array_merge($arguments, $old_attributes);
  43. }
  44. unset($arguments['attributes']);
  45. break;
  46. default:
  47. case(Assets::CSS_TYPE):
  48. $defaults = ['priority' => null, 'pipeline' => true, 'group' => null, 'loading' => null];
  49. $arguments = $this->createArgumentsFromLegacy($args, $defaults);
  50. }
  51. return $arguments;
  52. }
  53. protected function createArgumentsFromLegacy(array $args, array $defaults)
  54. {
  55. // Remove arguments with old default values.
  56. $arguments = [];
  57. foreach ($args as $arg) {
  58. $default = current($defaults);
  59. if ($arg !== $default) {
  60. $arguments[key($defaults)] = $arg;
  61. }
  62. next($defaults);
  63. }
  64. return $arguments;
  65. }
  66. /**
  67. * Convenience wrapper for async loading of JavaScript
  68. *
  69. * @param string|array $asset
  70. * @param int $priority
  71. * @param bool $pipeline
  72. * @param string $group name of the group
  73. *
  74. * @return \Grav\Common\Assets
  75. * @deprecated Please use dynamic method with ['loading' => 'async'].
  76. */
  77. public function addAsyncJs($asset, $priority = 10, $pipeline = true, $group = 'head')
  78. {
  79. user_error(__CLASS__ . '::' . __FUNCTION__ . '() is deprecated since Grav 1.6, use dynamic method with [\'loading\' => \'async\']', E_USER_DEPRECATED);
  80. return $this->addJs($asset, $priority, $pipeline, 'async', $group);
  81. }
  82. /**
  83. * Convenience wrapper for deferred loading of JavaScript
  84. *
  85. * @param string|array $asset
  86. * @param int $priority
  87. * @param bool $pipeline
  88. * @param string $group name of the group
  89. *
  90. * @return \Grav\Common\Assets
  91. * @deprecated Please use dynamic method with ['loading' => 'defer'].
  92. */
  93. public function addDeferJs($asset, $priority = 10, $pipeline = true, $group = 'head')
  94. {
  95. user_error(__CLASS__ . '::' . __FUNCTION__ . '() is deprecated since Grav 1.6, use dynamic method with [\'loading\' => \'defer\']', E_USER_DEPRECATED);
  96. return $this->addJs($asset, $priority, $pipeline, 'defer', $group);
  97. }
  98. }