LegacyAssetsTrait.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  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. $arguments = array_merge($arguments, $old_attributes);
  46. }
  47. unset($arguments['attributes']);
  48. break;
  49. case(Assets::INLINE_CSS_TYPE):
  50. $defaults = ['priority' => null, 'group' => null];
  51. $arguments = $this->createArgumentsFromLegacy($args, $defaults);
  52. break;
  53. default:
  54. case(Assets::CSS_TYPE):
  55. $defaults = ['priority' => null, 'pipeline' => true, 'group' => null, 'loading' => null];
  56. $arguments = $this->createArgumentsFromLegacy($args, $defaults);
  57. }
  58. return $arguments;
  59. }
  60. protected function createArgumentsFromLegacy(array $args, array $defaults)
  61. {
  62. // Remove arguments with old default values.
  63. $arguments = [];
  64. foreach ($args as $arg) {
  65. $default = current($defaults);
  66. if ($arg !== $default) {
  67. $arguments[key($defaults)] = $arg;
  68. }
  69. next($defaults);
  70. }
  71. return $arguments;
  72. }
  73. /**
  74. * Convenience wrapper for async loading of JavaScript
  75. *
  76. * @param string|array $asset
  77. * @param int $priority
  78. * @param bool $pipeline
  79. * @param string $group name of the group
  80. *
  81. * @return \Grav\Common\Assets
  82. * @deprecated Please use dynamic method with ['loading' => 'async'].
  83. */
  84. public function addAsyncJs($asset, $priority = 10, $pipeline = true, $group = 'head')
  85. {
  86. user_error(__CLASS__ . '::' . __FUNCTION__ . '() is deprecated since Grav 1.6, use dynamic method with [\'loading\' => \'async\']', E_USER_DEPRECATED);
  87. return $this->addJs($asset, $priority, $pipeline, 'async', $group);
  88. }
  89. /**
  90. * Convenience wrapper for deferred loading of JavaScript
  91. *
  92. * @param string|array $asset
  93. * @param int $priority
  94. * @param bool $pipeline
  95. * @param string $group name of the group
  96. *
  97. * @return \Grav\Common\Assets
  98. * @deprecated Please use dynamic method with ['loading' => 'defer'].
  99. */
  100. public function addDeferJs($asset, $priority = 10, $pipeline = true, $group = 'head')
  101. {
  102. user_error(__CLASS__ . '::' . __FUNCTION__ . '() is deprecated since Grav 1.6, use dynamic method with [\'loading\' => \'defer\']', E_USER_DEPRECATED);
  103. return $this->addJs($asset, $priority, $pipeline, 'defer', $group);
  104. }
  105. }