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 '';
}
