Skip to content
Snippets Groups Projects
Commit b5f6016e authored by Nicholas Mangold's avatar Nicholas Mangold
Browse files

#3382253: Create module settings form, and load the CSS library dynamically.

parent 5b4f2355
No related branches found
No related tags found
1 merge request!2#3382253: Create module settings form, and load the CSS library dynamically.
......@@ -40,9 +40,13 @@ information, see
1. Enable the module at Administration > Extend.
1. Configure one or more text formats at Administration > Configuration >
Text formats and editors.
Content Authoring > Text formats and editors.
1. Enable the "Highlight code using highlight.js" input filter.
1. Save the configuration.
1. Choose a highlight.js theme at Administration > Configuration >
Content Authoring > HighlightJs Input Filter settings.
1. Save the configuration.
## Maintainers
......
theme: atom-one-dark
<?php
/**
* @file
* Update functions for the HighlightJS Input Filter module.
*/
use Symfony\Component\Yaml\Yaml;
/**
* Creates the new default configuration.
*/
function highlightjs_input_filter_update_10001() {
$message = NULL;
// Only create if the redirect view doesn't exist and views is enabled.
if (\Drupal::moduleHandler()->moduleExists('highlightjs_input_filter') && !Drupal::config('highlightjs_input_filter')->get('theme')) {
$config_path = \Drupal::service('extension.list.module')->getPath('highlightjs_input_filter') . '/config/install/highlightjs_input_filter.settings.yml';
$data = Yaml::parseFile($config_path);
\Drupal::configFactory()->getEditable('highlightjs_input_filter.settings')->setData($data)->save(TRUE);
$message = 'The new configuration has been created.';
}
else {
$message = 'Not creating a configuration since it already exists.';
}
return $message;
}
......@@ -2,6 +2,3 @@ highlightjs:
version: VERSION
js:
js/highlightjs_input_filter.js: { attributes: { type: module }, minified: false }
css:
theme:
//cdnjs.cloudflare.com/ajax/libs/highlight.js/11.7.0/styles/xcode.min.css: { type: external }
highlightjs_input_filter.settings.form:
title: 'HighlightJs Input Filter settings'
description: 'Settings for the HighlightJs Input Filter module.'
parent: system.admin_config_content
route_name: highlightjs_input_filter.settings.form
<?php
/**
* @file
* HighlightJS Input Filter module functions.
*/
/**
* Implements hook_library_info_build().
*
* Used to dynamically import the CSS file based on this module's configuration.
*/
function highlightjs_input_filter_library_info_build() {
$libraries = [];
$theme = \Drupal::config('highlightjs_input_filter.settings')->get('theme');
$libraries['highlightjs_input_filter.styles'] = [
'css' => [
'theme' => [
'https://unpkg.com/@highlightjs/cdn-assets@/styles/' . $theme . '.min.css' => [
'type' => 'external',
'minified' => TRUE,
],
],
],
];
return $libraries;
}
highlightjs_input_filter.settings.form:
path: 'admin/config/content/highlightjs_input_filter'
defaults:
_title: 'HighlightJs Input Filter Settings'
_form: '\Drupal\highlightjs_input_filter\Form\HighlightJsInputFilterSettingsForm'
requirements:
_permission: 'administer highlightjs_input_filter settings'
<?php
namespace Drupal\highlightjs_input_filter\Form;
use Drupal\Core\Form\ConfigFormBase;
use Drupal\Core\Form\FormStateInterface;
/**
* Creates a settings form for the HighlightJS Input Filter module.
*
* @package Drupal\highlightjs_input_filter\Form
*/
class HighlightJsInputFilterSettingsForm extends ConfigFormBase {
/**
* {@inheritdoc}
*/
public function getFormId() {
return 'highlightjs_settings_form';
}
/**
* {@inheritdoc}
*/
protected function getEditableConfigNames() {
return [
'highlightjs_input_filter.settings',
];
}
/**
* {@inheritdoc}
*/
public function buildForm(array $form, FormStateInterface $form_state) {
$config = $this->config('highlightjs_input_filter.settings');
$form['theme'] = [
'#type' => 'select',
'#title' => $this->t('Theme'),
'#default_value' => $config->get('theme'),
'#options' => $this->getThemeOptions(),
];
return parent::buildForm($form, $form_state);
}
/**
* {@inheritdoc}
*/
public function submitForm(array &$form, FormStateInterface $form_state) {
$config = $this->config('highlightjs_input_filter.settings');
$config->set('theme', $form_state->getValue('theme'));
$config->save();
parent::submitForm($form, $form_state);
}
/**
* Build an array for the theme field options.
*
* @return string[]
* The theme options.
*/
public function getThemeOptions() {
$options = [
'a11y-dark',
'a11y-light',
'agate',
'an-old-hope',
'androidstudio',
'arduino-light',
'arta',
'ascetic',
'atom-one-dark-reasonable',
'atom-one-dark',
'atom-one-light',
'base16-3024',
'base16-apathy',
'base16-apprentice',
'base16-ashes',
'base16-atelier-cave-light',
'base16-atelier-cave',
'base16-atelier-dune-light',
'base16-atelier-dune',
'base16-atelier-estuary-light',
'base16-atelier-estuary',
'base16-atelier-forest-light',
'base16-atelier-forest',
'base16-atelier-heath-light',
'base16-atelier-heath',
'base16-atelier-lakeside-light',
'base16-atelier-lakeside',
'base16-atelier-plateau-light',
'base16-atelier-plateau',
'base16-atelier-savanna-light',
'base16-atelier-savanna',
'base16-atelier-seaside-light',
'base16-atelier-seaside',
'base16-atelier-sulphurpool-light',
'base16-atelier-sulphurpool',
'base16-atlas',
'base16-bespin',
'base16-black-metal-bathory',
'base16-black-metal-burzum',
'base16-black-metal-dark-funeral',
'base16-black-metal-gorgoroth',
'base16-black-metal-immortal',
'base16-black-metal-khold',
'base16-black-metal-marduk',
'base16-black-metal-mayhem',
'base16-black-metal-nile',
'base16-black-metal-venom',
'base16-black-metal',
'base16-brewer',
'base16-bright',
'base16-brogrammer',
'base16-brush-trees-dark',
'base16-brush-trees',
'base16-chalk',
'base16-circus',
'base16-classic-dark',
'base16-classic-light',
'base16-codeschool',
'base16-colors',
'base16-cupcake',
'base16-cupertino',
'base16-danqing',
'base16-darcula',
'base16-dark-violet',
'base16-darkmoss',
'base16-darktooth',
'base16-decaf',
'base16-default-dark',
'base16-default-light',
'base16-dirtysea',
'base16-dracula',
'base16-edge-dark',
'base16-edge-light',
'base16-eighties',
'base16-embers',
'base16-equilibrium-dark',
'base16-equilibrium-gray-dark',
'base16-equilibrium-gray-light',
'base16-equilibrium-light',
'base16-espresso',
'base16-eva-dim',
'base16-eva',
'base16-flat',
'base16-framer',
'base16-fruit-soda',
'base16-gigavolt',
'base16-github',
'base16-google-dark',
'base16-google-light',
'base16-grayscale-dark',
'base16-grayscale-light',
'base16-green-screen',
'base16-gruvbox-dark-hard',
'base16-gruvbox-dark-medium',
'base16-gruvbox-dark-pale',
'base16-gruvbox-dark-soft',
'base16-gruvbox-light-hard',
'base16-gruvbox-light-medium',
'base16-gruvbox-light-soft',
'base16-hardcore',
'base16-harmonic16-dark',
'base16-harmonic16-light',
'base16-heetch-dark',
'base16-heetch-light',
'base16-helios',
'base16-hopscotch',
'base16-horizon-dark',
'base16-horizon-light',
'base16-humanoid-dark',
'base16-humanoid-light',
'base16-ia-dark',
'base16-ia-light',
'base16-icy-dark',
'base16-ir-black',
'base16-isotope',
'base16-kimber',
'base16-london-tube',
'base16-macintosh',
'base16-marrakesh',
'base16-materia',
'base16-material-darker',
'base16-material-lighter',
'base16-material-palenight',
'base16-material-vivid',
'base16-material',
'base16-mellow-purple',
'base16-mexico-light',
'base16-mocha',
'base16-monokai',
'base16-nebula',
'base16-nord',
'base16-nova',
'base16-ocean',
'base16-oceanicnext',
'base16-one-light',
'base16-onedark',
'base16-outrun-dark',
'base16-papercolor-dark',
'base16-papercolor-light',
'base16-paraiso',
'base16-pasque',
'base16-phd',
'base16-pico',
'base16-pop',
'base16-porple',
'base16-qualia',
'base16-railscasts',
'base16-rebecca',
'base16-ros-pine-dawn',
'base16-ros-pine-moon',
'base16-ros-pine',
'base16-sagelight',
'base16-sandcastle',
'base16-seti-ui',
'base16-shapeshifter',
'base16-silk-dark',
'base16-silk-light',
'base16-snazzy',
'base16-solar-flare-light',
'base16-solar-flare',
'base16-solarized-dark',
'base16-solarized-light',
'base16-spacemacs',
'base16-summercamp',
'base16-summerfruit-dark',
'base16-summerfruit-light',
'base16-synth-midnight-terminal-dark',
'base16-synth-midnight-terminal-light',
'base16-tango',
'base16-tender',
'base16-tomorrow-night',
'base16-tomorrow',
'base16-twilight',
'base16-unikitty-dark',
'base16-unikitty-light',
'base16-vulcan',
'base16-windows-10-light',
'base16-windows-10',
'base16-windows-95-light',
'base16-windows-95',
'base16-windows-high-contrast-light',
'base16-windows-high-contrast',
'base16-windows-nt-light',
'base16-windows-nt',
'base16-woodland',
'base16-xcode-dusk',
'base16-zenburn',
'brown-paper',
'codepen-embed',
'color-brewer',
'dark',
'default',
'devibeans',
'docco',
'far',
'felipec',
'foundation',
'github-dark-dimmed',
'github-dark',
'github',
'gml',
'googlecode',
'gradient-dark',
'gradient-light',
'grayscale',
'hybrid',
'idea',
'intellij-light',
'ir-black',
'isbl-editor-dark',
'isbl-editor-light',
'kimbie-dark',
'kimbie-light',
'lightfair',
'lioshi',
'magula',
'mono-blue',
'monokai-sublime',
'monokai',
'night-owl',
'nnfx-dark',
'nnfx-light',
'nord',
'obsidian',
'panda-syntax-dark',
'panda-syntax-light',
'paraiso-dark',
'paraiso-light',
'pojoaque',
'purebasic',
'qtcreator-dark',
'qtcreator-light',
'rainbow',
'routeros',
'school-book',
'shades-of-purple',
'srcery',
'stackoverflow-dark',
'stackoverflow-light',
'sunburst',
'tokyo-night-dark',
'tokyo-night-light',
'tomorrow-night-blue',
'tomorrow-night-bright',
'vs',
'vs2015',
'xcode',
'xt256',
];
return array_combine($options, $options);
}
}
......@@ -42,6 +42,7 @@ class HighlightJs extends FilterBase {
],
'drupalSettings' => [
'highlightJsLanguages' => array_unique($languages),
'highlightjs_input_filter/highlightjs_input_filter.styles',
],
]);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment