You are here

uikit_views.module in UIkit Components 8

UIkit Views.

Companion module to the UIkit base theme to provide Views plugins.

File

uikit_views/uikit_views.module
View source
<?php

use Drupal\Core\Url;
use Drupal\uikit_views\UIkitViews;
use Drupal\views\ViewExecutable;

/**
 * @file
 * UIkit Views.
 *
 * Companion module to the UIkit base theme to provide Views plugins.
 */

/**
 * Implements hook_help().
 */
function uikit_views_help($route_name, \Drupal\Core\Routing\RouteMatchInterface $route_match) {
  $output = '';

  // Setup translatable string arguments.
  $t_args = [
    ':uikit_drupal' => Url::fromUri('https://www.drupal.org/project/uikit'),
    ':grid' => Url::fromUri('https://getuikit.com/v2/docs/grid.html'),
    ':list' => Url::fromUri('https://getuikit.com/v2/docs/list.html'),
    ':table' => Url::fromUri('https://getuikit.com/v2/docs/table.html'),
    // @todo Future plugin style components.
    ':accordion' => Url::fromUri('https://getuikit.com/v2/docs/accordion.html'),
    ':block' => Url::fromUri('https://getuikit.com/v2/docs/block.html'),
    ':cover' => Url::fromUri('https://getuikit.com/v2/docs/cover.html'),
    ':nav' => Url::fromUri('https://getuikit.com/v2/docs/nav.html'),
    ':panel' => Url::fromUri('https://getuikit.com/v2/docs/panel.html'),
    ':slideshow' => Url::fromUri('https://getuikit.com/v2/docs/slideshow.html'),
    ':subnav' => Url::fromUri('https://getuikit.com/v2/docs/subnav.html'),
  ];
  switch ($route_name) {
    case 'help.page.uikit_views':
      $output = '<p>' . t('The UIkit Views module provides Views plugins for the <a href=":uikit_drupal" target="_blank">UIkit theme</a>.', $t_args) . '</p>';
      $output .= '<h3>' . t('Views plugins') . '</h3>';
      $output .= '<p>' . t('UIkit Views style plugins control how a view is displayed. For the most part they are object wrappers around theme templates. Styles UIkit Views provides:') . '</p>';
      $output .= '<ul>';
      $output .= '<li>' . t('<a href=":grid" target="_blank">Grid</a>', $t_args) . '</li>';
      $output .= '<li>' . t('<a href=":list" target="_blank">List</a>', $t_args) . '</li>';
      $output .= '<li>' . t('<a href=":table" target="_blank">Table</a>', $t_args) . '</li>';
      $output .= '</ul>';
      $output .= '<p>' . t('<strong>Note</strong>: The 8.x-2.x branch of the UIkit theme is the only supported branch at this time. Once YOOtheme releases a fully-stable version for UIkit 3 we will provide views styles for the UIkit 8.x-3.x branch.') . '</p>';
      break;
  }
  return $output;
}

/**
 * Implements hook_theme().
 */
function uikit_views_theme($existing, $type, $theme, $path) {
  return UIkitViews::getThemeHooks();
}

/**
 * Implements hook_theme_registry_alter().
 */
function uikit_views_theme_registry_alter(&$theme_registry) {
  $module_path = drupal_get_path('module', 'uikit_views');

  // Alter the path so we can put templates into separate directories.
  $theme_registry['uikit_view_grid']['path'] = $module_path . '/templates/views';
  $theme_registry['uikit_view_list']['path'] = $module_path . '/templates/views';
  $theme_registry['uikit_view_slideshow']['path'] = $module_path . '/templates/views';
  $theme_registry['uikit_view_table']['path'] = $module_path . '/templates/views';
}

/**
 * Implements hook_views_preview_info_alter().
 */
function uikit_views_views_preview_info_alter(array &$rows, ViewExecutable $view) {
  $style = $view
    ->getStyle();
  $plugin_id = $style
    ->getPluginId();

  // UIkit Components views plugin styles.
  $uikit_plugins = [
    'uikit_view_grid',
    'uikit_view_list',
    'uikit_view_table',
  ];
  if (in_array($plugin_id, $uikit_plugins)) {

    // Attach the UIkit library so views previews are styled correctly.
    $view->element['#attached']['library'][] = "uikit_views/uikit";
  }
}