express-8.x-1.x-dev/themes/contrib/bootstrap/bootstrap.drush.inc
themes/contrib/bootstrap/bootstrap.drush.inc
<?php /** * @file * Drupal Bootstrap Drush commands. */ use Drupal\bootstrap\Bootstrap; use Drupal\bootstrap\Theme; use Drupal\Component\Serialization\Yaml; /** * Implements hook_drush_command(). */ function bootstrap_drush_command() { $items['bootstrap-generate-docs'] = [ 'description' => dt('Generates markdown documentation for the Drupal based code.'), 'arguments' => [ 'type' => 'The specific type of documentation to generate, defaults to "all". Can be: "all", "settings".', ], 'aliases' => ['bs-docs'], ]; return $items; } /** * Generates markdown documentation. * * @param string $type */ function drush_bootstrap_generate_docs($type = 'all') { $types = $type === 'all' ? ['settings'] : [$type]; foreach ($types as $type) { $function = "_drush_bootstrap_generate_docs_$type"; if (function_exists($function)) { $ret = $function(Bootstrap::getTheme('bootstrap')); if ($ret) { drush_log('Successfully generated documentation for: ' . $type, 'success'); } else { drush_log('Unable to generate documentation for: ' . $type, 'error'); } } else { drush_log('Invalid documentation type: ' . $type, 'error'); } } } /** * Generates settings documentation. * * @param \Drupal\bootstrap\Theme $bootstrap * The theme instance of the Drupal Bootstrap base theme. */ function _drush_bootstrap_generate_docs_settings(Theme $bootstrap) { $output[] = '<!-- @file Overview of theme settings for Drupal Bootstrap based themes. -->'; $output[] = '<!-- @defgroup -->'; $output[] = '<!-- @ingroup -->'; $output[] = '# Theme Settings'; $output[] = ''; $output[] = 'To override a setting, open `./config/install/THEMENAME.settings.yml` and add the following:'; $output[] = ''; $output[] = '```yaml'; $output[] = '# Settings'; $output[] = ''; $output[] = 'settings:'; $output[] = ' SETTING_NAME: SETTING_VALUE'; $output[] = '```'; // Determine the groups. $groups = []; foreach ($bootstrap->getSettingPlugin() as $setting) { // Only get the first two groups (we don't need 3rd, or more, levels). $_groups = array_slice($setting->getGroups(), 0, 2, FALSE); if (!$_groups) { continue; } $groups[implode(' > ', $_groups)][] = $setting->getPluginDefinition(); } // Generate a table of each group's settings. foreach ($groups as $group => $settings) { $output[] = ''; $output[] = '---'; $output[] = ''; $output[] = "### $group"; $output[] = ''; $output[] = '<table class="table table-striped table-responsive">'; $output[] = ' <thead><tr><th class="col-xs-3">Setting name</th><th>Description and default value</th></tr></thead>'; $output[] = ' <tbody>'; foreach ($settings as $definition) { $output[] = ' <tr>'; $output[] = ' <td class="col-xs-3">' . $definition['id'] . '</td>'; $output[] = ' <td>'; $output[] = ' <div class="help-block">' . str_replace('"e;', '"', $definition['description']) . '</div>'; $output[] = ' <pre class=" language-yaml"><code>' . Yaml::encode([$definition['id'] => $definition['defaultValue']]) . '</code></pre>'; $output[] = ' </td>'; $output[] = ' </tr>'; } $output[] = ' </tbody>'; $output[] = '</table>'; } // Ensure we have link references at the bottom. $output[] = ''; $output[] = '[Drupal Bootstrap]: https://www.drupal.org/project/bootstrap'; $output[] = '[Bootstrap Framework]: http://getbootstrap.com'; // Save the generated output to the appropriate file. return file_put_contents(realpath($bootstrap->getPath() . '/docs/Theme-Settings.md'), implode("\n", $output)) !== FALSE; }