splide-1.0.x-dev/splide.post_update.php

splide.post_update.php
<?php

/**
 * @file
 * Post update hooks for Splide.
 */

use Drupal\splide\SplideDefault;

/**
 * Upgrade to Splide v4 with some added options, revert few into source, etc.
 */
function splide_post_update_v4_upgrades() {
  $config_factory = \Drupal::configFactory();

  // Changes: keyboard waitForTransition slideFocus arrows pagination, etc.
  // Revert old default optionsets to source.
  SplideDefault::import('splide', 'default');

  // Revert old sample optionsets, only pick the most obvious and left the rest
  // to config_update module for manual updates/ reverts in case overriden.
  $samples = [
    // 'x_fullscreen',
    // 'x_grid',
    // 'x_splide_for',
    'x_splide_nav',
    // 'x_vtabs',
    // 'x_carousel',
    // 'x_overlay',
    // 'x_split',
  ];

  if (splide()->moduleExists('splide_x')) {
    foreach ($samples as $key) {
      SplideDefault::import('splide_x', $key);
    }
  }

  // Updates the rest of user optionsets.
  $prefix = 'splide.optionset.';
  foreach ($config_factory->listAll($prefix) as $name) {
    $storage = $config_factory->getEditable($name);
    $settings = $storage->get('options.settings');

    // With optimized, might be just empty.
    // Skip factory optionsets, already updated above, unless overriden.
    if (empty($settings) || $name == 'default' || in_array($name, $samples)) {
      continue;
    }

    // If isNavigation enabled, update the new default slideFocus false to true.
    $is_navigation = $settings['isNavigation'] ?? FALSE;
    if ($is_navigation) {
      $storage->set('options.settings.slideFocus', TRUE);
    }

    foreach (['lazyLoad', 'preloadPages'] as $key) {
      $storage->clear('options.settings.' . $key);
    }

    // Update deprecated settings.
    $dep_settings = [
      'arrows',
      'pagination',
    ];

    foreach ($dep_settings as $key) {
      if ($value = $settings[$key] ?? NULL) {

        // The 'slider' value is no longer available, changed to default true.
        if ($value == 'slider') {
          // No need to set since default is TRUE:
          $storage->clear('options.settings.' . $key);
        }
      }
    }

    // The perPage > 1 requires explicit clones.
    if ($value = $settings['perPage'] ?? NULL) {
      $value = (int) $value;
      $clones = $settings['clones'] ?? NULL;

      // Without clones set, slides will have empty space on LHS.
      if ($value > 1 && (!$clones || is_float($clones))) {
        // 7 visible slides requires half of it: 3.
        $clone = (int) round($value / 2, 0);
        $storage->set('options.settings.clones', $clone);
      }
    }

    // Finally save it.
    $storage->save(TRUE);
  }
}

/**
 * Added few Splide v4 missing options, revert default into source, etc.
 */
function splide_post_update_v4_upgrade_misses() {
  // Changes: keyboard, wheel, cloneStatus, etc.
  // Revert old default optionsets to source.
  SplideDefault::import('splide', 'default');
}

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

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