You are here

public function Js::preRenderJsCallback in JS Callback Handler 8.3

Pre-render callback for #js_callback and #js_get properties.

Parameters

array $element: The render array element.

Return value

array The modified render array element.

See also

js_element_info_alter

File

src/Js.php, line 632

Class

Js
JS Callback Handler service.

Namespace

Drupal\js

Code

public function preRenderJsCallback(array $element) {
  if (isset($element['#js_callback']) && $this->callbackManager
    ->hasDefinition($element['#js_callback'])) {
    $element['#attached']['library'][] = 'js/callback';
    $element['#attributes']['data-js-callback'] = $element['#js_callback'];
    if ($token = $this
      ->getToken($element['#js_callback'])) {
      $element['#attributes']['data-js-token'] = $token;
    }
  }
  elseif (isset($element['#js_get'])) {
    $path = $element['#js_get'];
    if ($path === TRUE) {
      $path = isset($element['#url']) ? $element['#url'] : '';
    }
    if ($path) {
      if (is_string($path)) {
        if ($url = \Drupal::pathValidator()
          ->getUrlIfValidWithoutAccessCheck($element['#js_get'])) {
          $path = $url;
        }
      }
      if ($path instanceof Url) {
        $path = $path
          ->toString();
      }
      $element['#attached']['library'][] = 'js/get';
      $element['#attributes']['data-js-get'] = 'js.content';
      $element['#attributes']['data-path'] = $path;
    }
  }
  return $element;
}