You are here

GridStackSkinManager.php in GridStack 8.2

Namespace

Drupal\gridstack

File

src/GridStackSkinManager.php
View source
<?php

namespace Drupal\gridstack;


/**
 * Implements GridStackSkinManagerInterface.
 */
class GridStackSkinManager extends GridStackPluginManagerBase implements GridStackSkinManagerInterface {

  /**
   * Static cache for the skin definition.
   *
   * @var array
   */
  protected $skinDefinition;

  /**
   * Static cache for the skin options.
   *
   * @var array
   */
  protected $skinOptions;

  /**
   * The library info definition.
   *
   * @var array
   */
  protected $libraryInfoBuild;

  /**
   * Returns gridstack skins registered via GridStackSkin plugin or defaults.
   */
  public function getSkins() {
    if (!isset($this->skinDefinition)) {
      $this->skinDefinition = $this
        ->getData([
        'skins',
      ], TRUE);
    }
    return $this->skinDefinition;
  }

  /**
   * Returns available skins for select options.
   */
  public function getSkinOptions() {
    if (!isset($this->skinOptions)) {
      $this->skinOptions = $this
        ->getDataOptions($this
        ->getSkins());
    }
    return $this->skinOptions;
  }

  /**
   * Provides gridstack skins and libraries.
   */
  public function attach(array &$load, array $attach = []) {

    // Skins may be available for JS, or CSS layouts, or even ungridstack.
    if (isset($attach['skin']) && ($skin = $attach['skin'])) {
      $skins = $this
        ->getSkins();
      $provider = isset($skins[$skin]['provider']) ? $skins[$skin]['provider'] : 'gridstack';
      $load['library'][] = 'gridstack/' . $provider . '.' . $skin;
    }
  }

  /**
   * Implements hook_library_info_build().
   */
  public function libraryInfoBuild() {
    if (!isset($this->libraryInfoBuild)) {
      $libraries = [];
      foreach ($this
        ->getSkins() as $key => $skin) {
        $provider = isset($skin['provider']) ? $skin['provider'] : 'gridstack';
        $id = $provider . '.' . $key;
        foreach ([
          'css',
          'js',
          'dependencies',
        ] as $property) {
          if (isset($skin[$property]) && is_array($skin[$property])) {
            $libraries[$id][$property] = $skin[$property];
          }
        }
        $libraries[$id]['dependencies'][] = 'gridstack/skin';
      }
      foreach (range(1, 12) as $key) {
        $libraries['gridstack.' . $key] = [
          'css' => [
            'layout' => [
              'css/layout/grid-stack-' . $key . '.css' => [],
            ],
          ],
          'dependencies' => [
            'gridstack/library',
          ],
        ];
      }
      $this->libraryInfoBuild = $libraries;
    }
    return $this->libraryInfoBuild;
  }

}

Classes

Namesort descending Description
GridStackSkinManager Implements GridStackSkinManagerInterface.