slick_browser-8.x-2.1/slick_browser.module

slick_browser.module
<?php

/**
 * @file
 * Provides a Slick Entity Browser integration.
 */

use Drupal\Core\Field\FieldDefinitionInterface;
use Drupal\Core\Field\WidgetInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\slick_browser\SlickBrowserDefault;

/**
 * Provides a convenient shortcut for procedural hooks.
 *
 * @param string $key
 *   Identifier of the service.
 *
 * @return \Drupal\slick_browser\SlickBrowser
 *   |\Drupal\slick_browser\SlickBrowserWidget
 *   The required Slick Browser class instance.
 */
// @codingStandardsIgnoreStart 
function slick_browser($key = 'manager') {
  static $manager;
  static $widget;

  if (!isset($manager)) {
    $manager = \Drupal::service('slick_browser');
    $widget = \Drupal::service('slick_browser.widget');
  }

  switch ($key) {
    case 'widget':
      return $widget;

    default:
      return $manager;
  }
}
// @codingStandardsIgnoreEnd

/**
 * Implements hook_theme().
 */
function slick_browser_theme() {
  $base = [
    'render element' => 'element',
    'file' => 'templates/slick_browser.theme.inc',
  ];

  $themes['slick_browser'] = $base;

  // Provides own markups, avoids conflict of interests against front-end slick.
  foreach (['slick', 'vanilla'] as $item) {
    $key = $item == 'slick' ? $item : 'slick_' . $item;
    $themes[$key . '__browser'] = $base + ['base hook' => $key];
  }

  return $themes;
}

/**
 * Overrides hook_preprocess_views_view().
 */
function slick_browser_preprocess_views_view(&$variables) {
  slick_browser()->preprocessViewsView($variables);
}

/**
 * Checks if Slick Browser is applicable.
 */
function _slick_browser_applicable(array &$settings) {
  slick_browser()->manager()->verifySafely($settings);

  $is_widget = ($settings['_context'] ?? NULL) == 'widget';
  $blazies = $settings['blazies'];
  $id = $blazies->get('view.plugin_id');
  $is_browser = $id == 'slick_browser';

  if ($is_widget || $is_browser) {
    $settings['_sb_widget'] = $is_widget;
    $settings['_sb_views'] = $is_browser;
    return TRUE;
  }
  return FALSE;
}

/**
 * Overrides hook_preprocess_blazy().
 */
function slick_browser_preprocess_blazy(&$variables) {
  $settings = &$variables['settings'];
  if (_slick_browser_applicable($settings)) {
    slick_browser()->preprocessBlazy($variables);
  }
}

/**
 * Implements hook_blazy_alter().
 */
function slick_browser_blazy_alter(array &$build, array $settings) {
  if (_slick_browser_applicable($settings)) {
    $build['#build']['#settings']['noscript'] = FALSE;
    $build['#build']['#settings']['fx'] = '';
  }
}

/**
 * Implements hook_slick_grid_item_alter().
 */
function slick_browser_slick_grid_item_alter(array &$build, array $settings) {
  if (_slick_browser_applicable($settings)) {
    $attrs = &$build['slide']['#attributes'];
    // $attrs['class'][] = 'grid--sb';
    $attrs['class'][] = 'sb__grid';

    $style = $settings['style'] ?? '';
    if ($style != 'slick' && !empty($settings['_sb_widget'])) {
      $attrs['class'][] = 'sb__sortable';
    }
  }
}

/**
 * Implements hook_blazy_settings_grid_alter().
 */
function slick_browser_blazy_settings_grid_alter(array &$settings) {
  if (_slick_browser_applicable($settings)) {
    $blazies = $settings['blazies'];

    if ($blazies->is('grid')) {
      $item_attrs['class'][] = 'grid--sb';

      $blazies->set('grid.item_attributes', $item_attrs);
    }
  }
}

/**
 * Implements hook_form_alter().
 */
function slick_browser_form_alter(&$form, FormStateInterface &$form_state, $form_id) {
  if (isset($form['#browser_parts'])
    && strpos($form_id, 'slick_browser') !== FALSE) {
    /* @phpstan-ignore-next-line */
    slick_browser('widget')->formAlter($form, $form_state, $form_id);
  }
}

/**
 * Implements hook_form_BASE_FORM_ID_alter().
 */
function slick_browser_form_views_ui_add_handler_form_alter(&$form, FormStateInterface &$form_state, $form_id) {
  /* @phpstan-ignore-next-line */
  slick_browser('widget')->formViewsUiAddHandlerFormAlter($form, $form_state, $form_id);
}

/**
 * Implements hook_field_widget_WIDGET_TYPE_form_alter().
 */
function slick_browser_field_widget_complete_form_alter(&$form, FormStateInterface $form_state, $context) {
  $element = &$form['widget'];
  /* @phpstan-ignore-next-line */
  slick_browser('widget')->fieldWidgetFormAlter($element, $form_state, $context);
}

/**
 * Implements hook_field_widget_third_party_settings_form().
 */
function slick_browser_field_widget_third_party_settings_form(WidgetInterface $plugin, FieldDefinitionInterface $field_definition, $form_mode, $form, FormStateInterface $form_state) {
  if (in_array($plugin->getPluginId(), SlickBrowserDefault::thirdPartyWidgets())) {
    /* @phpstan-ignore-next-line */
    return slick_browser('widget')->widgetThirdPartySettingsForm($plugin, $field_definition, $form_mode, $form, $form_state);
  }
  return [];
}

/**
 * Implements hook_theme_suggestions_alter().
 */
function slick_browser_theme_suggestions_alter(array &$suggestions, array $variables, $hook) {
  $settings = $variables['element']['#settings'] ?? [];
  if (!empty($settings['_browser'])) {
    /* @phpstan-ignore-next-line */
    slick_browser('widget')->themeSuggestionsAlter($suggestions, $variables, $hook);
  }
}

/**
 * Implements hook_form_views_exposed_form_alter().
 */
function slick_browser_form_views_exposed_form_alter(&$form, FormStateInterface $form_state) {
  /* @phpstan-ignore-next-line */
  slick_browser('widget')->formViewsExposedFormAlter($form, $form_state);
}

/**
 * Implements hook_config_schema_info_alter().
 */
function slick_browser_config_schema_info_alter(array &$definitions) {
  blazy()->configSchemaInfoAlter($definitions, 'slick_browser', SlickBrowserDefault::extendedSettings());
}

/**
 * Implements hook_help().
 */
function slick_browser_help($route_name) {
  if ($route_name == 'help.page.slick_browser') {
    $output = file_get_contents(dirname(__FILE__) . '/README.md');
    return blazy()->markdown($output);
  }
  return '';
}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc