revealjs-8.x-1.0-alpha2/revealjs.module

revealjs.module
<?php

/**
 * @file
 * Revealjs integration for Views.
 */

use Drupal\Core\Routing\RouteMatchInterface;

/**
 * Implements hook_help().
 *
 * {@inheritDoc}
 */
function revealjs_help($route_name, RouteMatchInterface $route_match){
  switch ($route_name){
    //Help for the module
    case 'help.page.revealjs':
      $output = '';
      $output .= '<h3>' . t('About') . '</h3>';
      $output .= '<p>' . t('Revealjs integration for Drupal View.') . '</p>';
      return $output;

    default:
  }
}

/**
 * Implements hook_theme_registry_alter().
 *
 * {@inheritDoc}
 */
function revealjs_theme_registry_alter(&$theme_registry) {
  $path = drupal_get_path('module', 'revealjs');
  // Duplicate the registry entry for the views_view template.
  $theme_registry['revealjs'] = $theme_registry['views_view'];
  // Update the entry to indicate that the template is in the module directory, not the theme directory.
  $theme_registry['revealjs']['template'] = 'views-view-revealjs';
  $theme_registry['revealjs']['path'] = $path . '/templates';
}

/**
 * Implements hook_preprocess_HOOK().
 *
 * {@inheritDoc}
 */
function template_preprocess_views_view_revealjs(&$variables) {
  $config = Drupal::config('revealjs.settings');

  if ($config->get('html5shiv') === TRUE) {
    $variables['attachment_before']['#attached']['library'][] = 'revealjs/html5shiv';
  }

  // Attach CSS/JS of Reveal.js library.
  $variables['attachment_before']['#attached']['library'][] = 'revealjs/revealjs';
  $options = $variables['view']->style_plugin->options;

  // Attach CSS theme selected by user.
  if (!empty($options['theme_slide'])) {
    $variables['attachment_before']['#attached']['library'][] = 'revealjs/' . $options['theme_slide'];
  }

  // Convert string into numbers.
  $options['defaultTiming'] = (int) $options['defaultTiming'];
  $options['autoSlide'] = (int) $options['autoSlide'];
  $options['viewDistance'] = (int) $options['viewDistance'];
  $options['margin'] = (float) $options['margin'];

  foreach (['height', 'width'] as $option_name) {
    if (!array_key_exists($option_name, $options)) {
      continue;
    }

    // Consider 0 as a non-valid value, so ignore if 0 or empty.
    if (empty($options[$option_name])) {
      unset($options[$option_name]);
    }
    elseif (FALSE === strpos($options[$option_name],'%')) {
      $options[$option_name] = (int) $options[$option_name];
    }
  }

  foreach (['minScale', 'maxScale'] as $option_name) {
    if (!array_key_exists($option_name, $options)) {
      continue;
    }

    // Consider 0 as a non-valid value, so ignore if 0 or empty.
    if (empty($options[$option_name])) {
      unset($options[$option_name]);
    }
    else {
      $options[$option_name] = (float) $options[$option_name];
    }
  }

  unset($options['theme_slide']);

  $variables['attachment_before']['#attached']['drupalSettings']['revealConfig'] = revealjs_build_configuration($options);
}

/**
 * Build the configuration to be passed to the Revealjs script.
 *
 * @param array $options
 *
 * @return array
 *   A configuration array containing options and dependencies.
 */
function revealjs_build_configuration(array $options = array()) {
  $settings = Drupal::config('revealjs.settings')->get();
  $options += $settings ?? [];

  $library_path = 'libraries/reveal.js';
  $dependencies = [
    'highlight' => ['/plugin/highlight/highlight.js'],
    'markdown' => ['/plugin/markdown/markdown.js'],
    'math' => ['/plugin/math/math.js'],
    'notes' => ['/plugin/notes/notes.js'],
    'search' => ['/plugin/search/search.js'],
    'zoom' => ['/plugin/zoom-js/zoom.js'],
  ];

  $configuration['dependencies'] = [];

  foreach ($dependencies as $option_name => $required_files) {
    if (!empty($options[$option_name])) {
      unset($options[$option_name]);
      $sources = [];

      foreach ($required_files as $relative_path) {
        if (file_exists(DRUPAL_ROOT . '/' . $library_path . $relative_path)) {
          $sources[] = base_path() . $library_path . $relative_path;
        }
        else {
          continue 2;
        }
      }

      $options['dependencies'][$option_name] = $sources;
    }
  }

  $configuration['options'] = $options;
  return $configuration;
}

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

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