linkicon-8.x-1.x-dev/linkicon.module
linkicon.module
<?php
/**
* @file
* A link field formatter to create icon classes based on predefined titles.
*/
use Drupal\Core\Form\FormStateInterface;
use Drupal\linkicon\LinkIconManagerInterface;
/**
* Provides a convenient shortcut for procedural hooks.
*
* @return \Drupal\linkicon\LinkIconManager
* The Linkicon manager class instance.
*/
// @codingStandardsIgnoreStart
function linkicon() {
static $manager;
if (!isset($manager)) {
$manager = \Drupal::service('linkicon.manager');
}
return $manager;
}
// @codingStandardsIgnoreEnd
/**
* Implements hook_theme().
*/
function linkicon_theme() {
return [
'linkicon' => [
'render element' => 'element',
'file' => 'linkicon.theme.inc',
],
'linkicon_item' => [
'render element' => 'element',
'file' => 'linkicon.theme.inc',
],
];
}
/**
* Implements hook_library_info_build().
*/
function linkicon_library_info_build() {
return linkicon()->libraryInfoBuild();
}
/**
* Implements hook_field_info_alter().
*/
function linkicon_field_info_alter(&$info) {
if (isset($info['link'])) {
$info['link']['class'] = '\Drupal\linkicon\LinkIconItem';
}
}
/**
* Implements hook_preprocess_field().
*/
function linkicon_preprocess_field(array &$variables) {
$element = $variables['element'];
if (!$variables['label_hidden'] && isset($variables['title_attributes'])) {
$config = isset($element[0], $element[0]['#config']) ? $element[0]['#config'] : [];
if (!empty($config['label_class'])) {
$variables['title_attributes']['class'][] = trim($config['label_class']);
}
}
}
/**
* Implements hook_field_widget_single_element_WIDGET_TYPE_form_alter().
*/
function linkicon_field_widget_single_element_link_default_form_alter(&$element, FormStateInterface $form_state, $context) {
if (isset($element['uri']) && isset($element['title'])) {
$items = $context['items'];
// @todo drop 'predefined' for the new integer: LINKICON_PREDEFINED.
$predefined = $items->getSetting('title') === LinkIconManagerInterface::LINKICON_PREDEFINED || $items->getSetting('title') === 'predefined';
if ($predefined && ($title_predefined = $items->getSetting('title_predefined')) !== NULL) {
$options = linkicon()->extractAllowedValues($title_predefined);
$element['title']['#type'] = 'select';
$element['title']['#options'] = $options;
$element['title']['#empty_option'] = t('- Select -');
$element['title']['#access'] = TRUE;
$element['#element_validate'] = ['\Drupal\linkicon\LinkIconItem::elementValidateLinkIcon'];
}
}
}
/**
* Implements hook_help().
*/
function linkicon_help($route_name) {
if ($route_name == 'help.page.linkicon') {
$output = file_get_contents(dirname(__FILE__) . '/README.md');
if (function_exists('blazy')) {
$blazy = blazy();
if (method_exists($blazy, 'markdown')) {
return $blazy->markdown($output);
}
}
return '<pre>' . $output . '</pre>';
}
return '';
}
