LegacyAssetsTrait.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  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. // New options array format
  25. if (count($args) === 1 && is_array($args[0])) {
  26. return $args[0];
  27. }
  28. // Handle obscure case where options array is mixed with a priority
  29. if (count($args) === 2 && is_array($args[0]) && is_int($args[1])) {
  30. $arguments = $args[0];
  31. $arguments['priority'] = $args[1];
  32. return $arguments;
  33. }
  34. switch ($type) {
  35. case(Assets::JS_TYPE):
  36. $defaults = ['priority' => null, 'pipeline' => true, 'loading' => null, 'group' => null];
  37. $arguments = $this->createArgumentsFromLegacy($args, $defaults);
  38. break;
  39. case(Assets::INLINE_JS_TYPE):
  40. $defaults = ['priority' => null, 'group' => null, 'attributes' => null];
  41. $arguments = $this->createArgumentsFromLegacy($args, $defaults);
  42. // special case to handle old attributes being passed in
  43. if (isset($arguments['attributes'])) {
  44. $old_attributes = $arguments['attributes'];
  45. if (is_array($old_attributes)) {
  46. $arguments = array_merge($arguments, $old_attributes);
  47. } else {
  48. $arguments['type'] = $old_attributes;
  49. }
  50. }
  51. unset($arguments['attributes']);
  52. break;
  53. case(Assets::INLINE_CSS_TYPE):
  54. $defaults = ['priority' => null, 'group' => null];
  55. $arguments = $this->createArgumentsFromLegacy($args, $defaults);
  56. break;
  57. default:
  58. case(Assets::CSS_TYPE):
  59. $defaults = ['priority' => null, 'pipeline' => true, 'group' => null, 'loading' => null];
  60. $arguments = $this->createArgumentsFromLegacy($args, $defaults);
  61. }
  62. return $arguments;
  63. }
  64. protected function createArgumentsFromLegacy(array $args, array $defaults)
  65. {
  66. // Remove arguments with old default values.
  67. $arguments = [];
  68. foreach ($args as $arg) {
  69. $default = current($defaults);
  70. if ($arg !== $default) {
  71. $arguments[key($defaults)] = $arg;
  72. }
  73. next($defaults);
  74. }
  75. return $arguments;
  76. }
  77. /**
  78. * Convenience wrapper for async loading of JavaScript
  79. *
  80. * @param string|array $asset
  81. * @param int $priority
  82. * @param bool $pipeline
  83. * @param string $group name of the group
  84. *
  85. * @return \Grav\Common\Assets
  86. * @deprecated Please use dynamic method with ['loading' => 'async'].
  87. */
  88. public function addAsyncJs($asset, $priority = 10, $pipeline = true, $group = 'head')
  89. {
  90. user_error(__CLASS__ . '::' . __FUNCTION__ . '() is deprecated since Grav 1.6, use dynamic method with [\'loading\' => \'async\']', E_USER_DEPRECATED);
  91. return $this->addJs($asset, $priority, $pipeline, 'async', $group);
  92. }
  93. /**
  94. * Convenience wrapper for deferred loading of JavaScript
  95. *
  96. * @param string|array $asset
  97. * @param int $priority
  98. * @param bool $pipeline
  99. * @param string $group name of the group
  100. *
  101. * @return \Grav\Common\Assets
  102. * @deprecated Please use dynamic method with ['loading' => 'defer'].
  103. */
  104. public function addDeferJs($asset, $priority = 10, $pipeline = true, $group = 'head')
  105. {
  106. user_error(__CLASS__ . '::' . __FUNCTION__ . '() is deprecated since Grav 1.6, use dynamic method with [\'loading\' => \'defer\']', E_USER_DEPRECATED);
  107. return $this->addJs($asset, $priority, $pipeline, 'defer', $group);
  108. }
  109. }