diff --git a/core/lib/Drupal/Core/Command/GenerateTheme.php b/core/lib/Drupal/Core/Command/GenerateTheme.php new file mode 100644 index 0000000000000000000000000000000000000000..fbfebbf2d17eabf9caf121c40e3ba1119d3d36c3 --- /dev/null +++ b/core/lib/Drupal/Core/Command/GenerateTheme.php @@ -0,0 +1,286 @@ +<?php + +namespace Drupal\Core\Command; + +use Drupal\Component\Serialization\Yaml; +use Drupal\Core\Extension\Extension; +use Drupal\Core\Extension\ExtensionDiscovery; +use Drupal\Core\File\FileSystem; +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; +use Symfony\Component\Console\Style\SymfonyStyle; +use Twig\Util\TemplateDirIterator; + +/** + * Generates a new theme based on latest default markup. + */ +class GenerateTheme extends Command { + + /** + * The path for the Drupal root. + * + * @var string + */ + private $root; + + /** + * {@inheritdoc} + */ + public function __construct(string $name = NULL) { + parent::__construct($name); + + $this->root = dirname(__DIR__, 5); + } + + /** + * {@inheritdoc} + */ + protected function configure() { + $this->setName('generate-theme') + ->setDescription('Generates a new theme based on latest default markup.') + ->addArgument('machine-name', InputArgument::REQUIRED, 'The machine name of the generated theme') + ->addOption('name', NULL, InputOption::VALUE_OPTIONAL, 'A name for the theme.') + ->addOption('description', NULL, InputOption::VALUE_OPTIONAL, 'A description of your theme.') + ->addOption('path', NULL, InputOption::VALUE_OPTIONAL, 'The path where your theme will be created. Defaults to: themes') + ->addUsage('custom_theme --name "Custom Theme" --description "Custom theme generated from a starterkit theme" --path themes'); + } + + /** + * {@inheritdoc} + */ + protected function execute(InputInterface $input, OutputInterface $output) { + $io = new SymfonyStyle($input, $output); + + // Change the directory to the Drupal root. + chdir($this->root); + + // Path where the generated theme should be placed. + $destination_theme = $input->getArgument('machine-name'); + $default_destination = 'themes'; + $destination = trim($input->getOption('path') ?: $default_destination, '/') . '/' . $destination_theme; + + if (is_dir($destination)) { + $io->getErrorStyle()->error("Theme could not be generated because the destination directory $destination exists already."); + return 1; + } + + // Source directory for the theme. + $source_theme_name = 'starterkit_theme'; + if (!$source_theme = $this->getThemeInfo($source_theme_name)) { + $io->getErrorStyle()->error("Theme source theme $source_theme_name cannot be found ."); + return 1; + } + $source = $source_theme->getPath(); + + if (!is_dir($source)) { + $io->getErrorStyle()->error("Theme could not be generated because the source directory $source does not exist."); + return 1; + } + + $tmp_dir = $this->getUniqueTmpDirPath(); + $this->copyRecursive($source, $tmp_dir); + + // Rename files based on the theme machine name. + $file_pattern = "/$source_theme_name\.(theme|[^.]+\.yml)/"; + if ($files = @scandir($tmp_dir)) { + foreach ($files as $file) { + $location = $tmp_dir . '/' . $file; + if (is_dir($location)) { + continue; + } + + if (preg_match($file_pattern, $file, $matches)) { + if (!rename($location, $tmp_dir . '/' . $destination_theme . '.' . $matches[1])) { + $io->getErrorStyle()->error("The file $location could not be moved."); + return 1; + } + } + } + } + else { + $io->getErrorStyle()->error("Temporary directory $tmp_dir cannot be opened."); + return 1; + } + + // Info file. + $info_file = "$tmp_dir/$destination_theme.info.yml"; + if (!file_exists($info_file)) { + $io->getErrorStyle()->error("The theme info file $info_file could not be read."); + return 1; + } + + $info = Yaml::decode(file_get_contents($info_file)); + $info['name'] = $input->getOption('name') ?: $destination_theme; + + // Unhide hidden themes. + unset($info['hidden']); + + $info['core_version_requirement'] = '^' . $this->getVersion(); + + if ($description = $input->getOption('description')) { + $info['description'] = $description; + } + else { + unset($info['description']); + } + + // Replace references to libraries. + if (isset($info['libraries'])) { + $info['libraries'] = preg_replace("/$source_theme_name(\/.*)/", "$destination_theme$1", $info['libraries']); + } + if (isset($info['libraries-extend'])) { + foreach ($info['libraries-extend'] as $key => $value) { + $info['libraries-extend'][$key] = preg_replace("/$source_theme_name(\/.*)/", "$destination_theme$1", $info['libraries-extend'][$key]); + } + } + if (isset($info['libraries-override'])) { + foreach ($info['libraries-override'] as $key => $value) { + if (isset($info['libraries-override'][$key]['dependencies'])) { + $info['libraries-override'][$key]['dependencies'] = preg_replace("/$source_theme_name(\/.*)/", "$destination_theme$1", $info['libraries-override'][$key]['dependencies']); + } + } + } + + if (!file_put_contents($info_file, Yaml::encode($info))) { + $io->getErrorStyle()->error("The theme info file $info_file could not be written."); + return 1; + } + + // Replace references to libraries in libraries.yml file. + $libraries_file = "$tmp_dir/$destination_theme.libraries.yml"; + if (file_exists($libraries_file)) { + $libraries = Yaml::decode(file_get_contents($libraries_file)); + foreach ($libraries as $key => $value) { + if (isset($libraries[$key]['dependencies'])) { + $libraries[$key]['dependencies'] = preg_replace("/$source_theme_name(\/.*)/", "$destination_theme$1", $libraries[$key]['dependencies']); + } + } + + if (!file_put_contents($libraries_file, Yaml::encode($libraries))) { + $io->getErrorStyle()->error("The libraries file $libraries_file could not be written."); + return 1; + } + } + + // Rename hooks. + $theme_file = "$tmp_dir/$destination_theme.theme"; + if (file_exists($theme_file)) { + if (!file_put_contents($theme_file, preg_replace("/(function )($source_theme_name)(_.*)/", "$1$destination_theme$3", file_get_contents($theme_file)))) { + $io->getErrorStyle()->error("The theme file $theme_file could not be written."); + return 1; + } + } + + // Rename references to libraries in templates. + $iterator = new TemplateDirIterator(new \RegexIterator( + new \RecursiveIteratorIterator( + new \RecursiveDirectoryIterator($tmp_dir), \RecursiveIteratorIterator::LEAVES_ONLY + ), '/' . preg_quote('.html.twig') . '$/' + )); + + foreach ($iterator as $template_file => $contents) { + $new_template_content = preg_replace("/(attach_library\(['\")])$source_theme_name(\/.*['\"]\))/", "$1$destination_theme$2", $contents); + if (!file_put_contents($template_file, $new_template_content)) { + $io->getErrorStyle()->error("The template file $template_file could not be written."); + return 1; + } + } + + if (!rename($tmp_dir, $destination)) { + $io->getErrorStyle()->error("The theme could not be moved to the destination: $destination."); + return 1; + } + + $output->writeln(sprintf('Theme generated successfully to %s', $destination)); + + return 0; + } + + /** + * Copies files recursively. + * + * @param string $src + * A file or directory to be copied. + * @param string $dest + * Destination directory where the directory or file should be copied. + * + * @throws \RuntimeException + * Exception thrown if copying failed. + */ + private function copyRecursive($src, $dest): void { + // Copy all subdirectories and files. + if (is_dir($src)) { + if (!mkdir($dest, FileSystem::CHMOD_DIRECTORY, FALSE)) { + throw new \RuntimeException("Directory $dest could not be created"); + } + $handle = opendir($src); + while ($file = readdir($handle)) { + if ($file != "." && $file != "..") { + $this->copyRecursive("$src/$file", "$dest/$file"); + } + } + closedir($handle); + } + elseif (is_link($src)) { + symlink(readlink($src), $dest); + } + elseif (!copy($src, $dest)) { + throw new \RuntimeException("File $src could not be copied to $dest"); + } + + // Set permissions for the directory or file. + if (!is_link($dest)) { + if (is_dir($dest)) { + $mode = FileSystem::CHMOD_DIRECTORY; + } + else { + $mode = FileSystem::CHMOD_FILE; + } + + if (!chmod($dest, $mode)) { + throw new \RuntimeException("The file permissions could not be set on $src"); + } + } + } + + /** + * Generates a path to a temporary location. + * + * @return string + */ + private function getUniqueTmpDirPath(): string { + return sys_get_temp_dir() . '/drupal-starterkit-theme-' . uniqid(md5(microtime()), TRUE); + } + + /** + * Gets theme info using the theme name. + * + * @param string $theme + * The machine name of the theme. + * + * @return \Drupal\Core\Extension\Extension|null + */ + private function getThemeInfo(string $theme): ? Extension { + $extension_discovery = new ExtensionDiscovery($this->root, FALSE, []); + $themes = $extension_discovery->scan('theme'); + + if (!isset($themes[$theme])) { + return NULL; + } + + return $themes[$theme]; + } + + /** + * Gets the current Drupal major version. + * + * @return string + */ + private function getVersion(): string { + return explode('.', \Drupal::VERSION)[0]; + } + +} diff --git a/core/misc/cspell/dictionary.txt b/core/misc/cspell/dictionary.txt index a922e5b6e8edba7b8ed506035b01d895aa620ff2..ff46ad2b2cce085d21c5d8ed7a43dcb4feedf53b 100644 --- a/core/misc/cspell/dictionary.txt +++ b/core/misc/cspell/dictionary.txt @@ -1482,6 +1482,7 @@ ssess ssid stardivision starrrrr +starterkit startpunt starzzzz statuscode diff --git a/core/scripts/drupal b/core/scripts/drupal index 7f71228b03bdab2f1d48e623bdc8a42bb590cf44..891d5b8117800cfbe424864f7488f9c829b174ce 100644 --- a/core/scripts/drupal +++ b/core/scripts/drupal @@ -6,6 +6,7 @@ * Provides CLI commands for Drupal. */ +use Drupal\Core\Command\GenerateTheme; use Drupal\Core\Command\QuickStartCommand; use Drupal\Core\Command\InstallCommand; use Drupal\Core\Command\ServerCommand; @@ -22,5 +23,6 @@ $application = new Application('drupal', \Drupal::VERSION); $application->add(new QuickStartCommand()); $application->add(new InstallCommand($classloader)); $application->add(new ServerCommand($classloader)); +$application->add(new GenerateTheme()); $application->run(); diff --git a/core/tests/Drupal/Tests/Core/Command/GenerateThemeTest.php b/core/tests/Drupal/Tests/Core/Command/GenerateThemeTest.php new file mode 100644 index 0000000000000000000000000000000000000000..cf2194566667066f49c4632e564d9d9eec91bafa --- /dev/null +++ b/core/tests/Drupal/Tests/Core/Command/GenerateThemeTest.php @@ -0,0 +1,84 @@ +<?php + +namespace Drupal\Tests\Core\Command; + +use Drupal\BuildTests\QuickStart\QuickStartTestBase; +use Drupal\Core\Database\Driver\sqlite\Install\Tasks; +use Symfony\Component\Process\PhpExecutableFinder; +use Symfony\Component\Process\Process; + +/** + * Tests the generate-theme commands. + * + * @requires extension pdo_sqlite + * + * @group Command + */ +class GenerateThemeTest extends QuickStartTestBase { + + /** + * The PHP executable path. + * + * @var string + */ + protected $php; + + /** + * {@inheritdoc} + */ + public function setUp(): void { + parent::setUp(); + $php_executable_finder = new PhpExecutableFinder(); + $this->php = $php_executable_finder->find(); + $this->copyCodebase(); + $this->executeCommand('COMPOSER_DISCARD_CHANGES=true composer install --no-dev --no-interaction'); + chdir($this->getWorkingPath()); + } + + /** + * Tests the generate-theme command. + */ + public function test() { + if (version_compare(\SQLite3::version()['versionString'], Tasks::SQLITE_MINIMUM_VERSION) < 0) { + $this->markTestSkipped(); + } + + $install_command = [ + $this->php, + 'core/scripts/drupal', + 'generate-theme', + 'test_custom_theme', + '--name="Test custom starterkit theme"', + '--description="Custom theme generated from a starterkit theme"', + ]; + $process = new Process($install_command, NULL); + $process->setTimeout(60); + $result = $process->run(); + $this->assertEquals('Theme generated successfully to themes/test_custom_theme', trim($process->getOutput())); + $this->assertSame(0, $result); + + $theme_path_relative = 'themes/test_custom_theme'; + $theme_path_absolute = $this->getWorkspaceDirectory() . "/$theme_path_relative"; + $this->assertFileExists($theme_path_absolute . '/test_custom_theme.info.yml'); + + // Ensure that the generated theme can be installed. + $this->installQuickStart('minimal'); + $this->formLogin($this->adminUsername, $this->adminPassword); + $this->visit('/admin/appearance'); + $this->getMink()->assertSession()->pageTextContains('Test custom starterkit'); + $this->getMink()->assertSession()->pageTextContains('Custom theme generated from a starterkit theme'); + $this->getMink()->getSession()->getPage()->clickLink('Install "Test custom starterkit theme" theme'); + $this->getMink()->assertSession()->pageTextContains('The "Test custom starterkit theme" theme has been installed.'); + + $this->assertFileExists($theme_path_absolute . '/test_custom_theme.theme'); + unlink($theme_path_absolute . '/test_custom_theme.theme'); + $process = new Process($install_command, NULL); + $process->setTimeout(60); + $result = $process->run(); + $this->assertStringContainsString('Theme could not be generated because the destination directory', $process->getErrorOutput()); + $this->assertStringContainsString($theme_path_relative, $process->getErrorOutput()); + $this->assertSame(1, $result); + $this->assertFileNotExists($theme_path_absolute . '/test_custom_theme.theme'); + } + +} diff --git a/core/themes/starterkit_theme/css/components/action-links.css b/core/themes/starterkit_theme/css/components/action-links.css new file mode 100644 index 0000000000000000000000000000000000000000..274d798e18e7ea39766ef871dd511b22c3a3803c --- /dev/null +++ b/core/themes/starterkit_theme/css/components/action-links.css @@ -0,0 +1,43 @@ +/** + * @file + * Styles for link buttons and action links. + */ + +.action-links { + margin: 1em 0; + padding: 0; + list-style: none; +} +[dir="rtl"] .action-links { + /* This is required to win over specificity of [dir="rtl"] ul */ + margin-right: 0; +} +.action-links li { + display: inline-block; + margin: 0 0.3em; +} +.action-links li:first-child { + margin-left: 0; /* LTR */ +} +[dir="rtl"] .action-links li:first-child { + margin-right: 0; + margin-left: 0.3em; +} +.button-action { + display: inline-block; + padding: 0.2em 0.5em 0.3em; + text-decoration: none; + line-height: 160%; +} +.button-action:before { + margin-left: -0.1em; /* LTR */ + padding-right: 0.2em; /* LTR */ + content: "+"; + font-weight: 900; +} +[dir="rtl"] .button-action:before { + margin-right: -0.1em; + margin-left: 0; + padding-right: 0; + padding-left: 0.2em; +} diff --git a/core/themes/starterkit_theme/css/components/book-navigation.css b/core/themes/starterkit_theme/css/components/book-navigation.css new file mode 100644 index 0000000000000000000000000000000000000000..08728e27b531cf85c374cc542b2aad34643b967f --- /dev/null +++ b/core/themes/starterkit_theme/css/components/book-navigation.css @@ -0,0 +1,40 @@ +/** + * @file + * Styling for the Book module. + */ + +.book-navigation .menu { + padding-top: 1em; + padding-bottom: 0; +} +.book-navigation .book-pager { + overflow: auto; + margin: 0; + padding: 0.5em 0; +} +.book-pager__item { + display: inline-block; + list-style-type: none; + vertical-align: top; +} +.book-pager__item--previous { + width: 45%; + text-align: left; /* LTR */ +} +[dir="rtl"] .book-pager__item--previous { + float: right; + text-align: right; +} +.book-pager__item--center { + width: 8%; + text-align: center; +} +.book-pager__item--next { + float: right; /* LTR */ + width: 45%; + text-align: right; /* LTR */ +} +[dir="rtl"] .book-pager__item--next { + float: left; + text-align: left; +} diff --git a/core/themes/starterkit_theme/css/components/breadcrumb.css b/core/themes/starterkit_theme/css/components/breadcrumb.css new file mode 100644 index 0000000000000000000000000000000000000000..1e6a7fac71a177eefc9da2312f8739e84ef16b89 --- /dev/null +++ b/core/themes/starterkit_theme/css/components/breadcrumb.css @@ -0,0 +1,29 @@ +/** + * @file + * Styles for breadcrumbs. + */ + +.breadcrumb { + padding-bottom: 0.5em; +} +.breadcrumb ol { + margin: 0; + padding: 0; +} +[dir="rtl"] .breadcrumb ol { + /* This is required to win over specificity of [dir="rtl"] ol */ + margin-right: 0; +} +.breadcrumb li { + display: inline; + margin: 0; + padding: 0; + list-style-type: none; +} +/* IE8 does not support :not() and :last-child. */ +.breadcrumb li:before { + content: " \BB "; +} +.breadcrumb li:first-child:before { + content: none; +} diff --git a/core/themes/starterkit_theme/css/components/button.css b/core/themes/starterkit_theme/css/components/button.css new file mode 100644 index 0000000000000000000000000000000000000000..5eb4f1ac13ca0b853aca842ff796b636f7edfdc6 --- /dev/null +++ b/core/themes/starterkit_theme/css/components/button.css @@ -0,0 +1,15 @@ +/** + * @file + * Visual styles for buttons. + */ + +.button, +.image-button { + margin-right: 1em; + margin-left: 1em; +} +.button:first-child, +.image-button:first-child { + margin-right: 0; + margin-left: 0; +} diff --git a/core/themes/starterkit_theme/css/components/collapse-processed.css b/core/themes/starterkit_theme/css/components/collapse-processed.css new file mode 100644 index 0000000000000000000000000000000000000000..12737ef3ca75be57a206782e5465d98a6e63fa9d --- /dev/null +++ b/core/themes/starterkit_theme/css/components/collapse-processed.css @@ -0,0 +1,32 @@ +/** + * @file + * Visual styles for collapsible fieldsets. + */ + +.collapse-processed > summary { + padding-right: 0.5em; + padding-left: 0.5em; +} +.collapse-processed > summary:before { + float: left; /* LTR */ + width: 1em; + height: 1em; + content: ""; + background: url(../../images/icons/menu-expanded.png) 0 100% no-repeat; /* LTR */ +} +[dir="rtl"] .collapse-processed > summary:before { + float: right; + background-position: 100% 100%; +} +.collapse-processed:not([open]) > summary:before { + -ms-transform: rotate(-90deg); + -webkit-transform: rotate(-90deg); + transform: rotate(-90deg); + background-position: 25% 35%; /* LTR */ +} +[dir="rtl"] .collapse-processed:not([open]) > summary:before { + -ms-transform: rotate(90deg); + -webkit-transform: rotate(90deg); + transform: rotate(90deg); + background-position: 75% 35%; +} diff --git a/core/themes/starterkit_theme/css/components/container-inline.css b/core/themes/starterkit_theme/css/components/container-inline.css new file mode 100644 index 0000000000000000000000000000000000000000..64b78f683bf159533eb9d5661a209767782e7cc3 --- /dev/null +++ b/core/themes/starterkit_theme/css/components/container-inline.css @@ -0,0 +1,22 @@ +/** + * @file + * Inline items. + */ + +.container-inline label:after, +.container-inline .label:after { + content: ":"; +} +.form-type-radios .container-inline label:after, +.form-type-checkboxes .container-inline label:after { + content: ""; +} +.form-type-radios .container-inline .form-type-radio, +.form-type-checkboxes .container-inline .form-type-checkbox { + margin: 0 1em; +} +.container-inline .form-actions, +.container-inline.form-actions { + margin-top: 0; + margin-bottom: 0; +} diff --git a/core/themes/starterkit_theme/css/components/details.css b/core/themes/starterkit_theme/css/components/details.css new file mode 100644 index 0000000000000000000000000000000000000000..a546363a295cb566d0e02bea0d446f1bb2b5d576 --- /dev/null +++ b/core/themes/starterkit_theme/css/components/details.css @@ -0,0 +1,23 @@ +/** + * @file + * Collapsible details. + * + * @see collapse.js + * @see http://nicolasgallagher.com/css-background-image-hacks/ + */ + +details { + margin-top: 1em; + margin-bottom: 1em; + border: 1px solid #ccc; +} +details > .details-wrapper { + padding: 0.5em 1.5em; +} +/* @todo Regression: The summary of uncollapsible details are no longer + vertically aligned with the .details-wrapper in browsers without native + details support. */ +summary { + padding: 0.2em 0.5em; + cursor: pointer; +} diff --git a/core/themes/starterkit_theme/css/components/dialog.css b/core/themes/starterkit_theme/css/components/dialog.css new file mode 100644 index 0000000000000000000000000000000000000000..16e17706030d92a4384127b75aa31ff27b205b67 --- /dev/null +++ b/core/themes/starterkit_theme/css/components/dialog.css @@ -0,0 +1,72 @@ +/** + * @file + * Presentational styles for Drupal dialogs. + */ + +.ui-dialog { + position: absolute; + z-index: 1260; + overflow: visible; + padding: 0; + color: #000; + border: solid 1px #ccc; + background: #fff; +} + +@media all and (max-width: 48em) { /* 768px */ + .ui-dialog { + width: 92% !important; + } +} +.ui-dialog .ui-dialog-titlebar { + border-width: 0 0 1px 0; + border-style: solid; + border-color: #ccc; + border-radius: 0; + background: #f3f4ee; + font-weight: bold; +} +.ui-dialog .ui-dialog-titlebar-close { + border: 0; + background: none; +} +.ui-dialog .ui-dialog-buttonpane { + margin-top: 0; + padding: 0.3em 1em; + border-width: 1px 0 0 0; + border-color: #ccc; + background: #f3f4ee; +} +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { + margin: 0; + padding: 0; +} +.ui-dialog .ui-dialog-buttonpane .ui-button-text-only .ui-button-text { + padding: 0; +} + +/* Form action buttons are moved in dialogs. Remove empty space. */ +.ui-dialog .ui-dialog-content .form-actions { + margin: 0; + padding: 0; +} +.ui-dialog .ajax-progress-throbber { + position: fixed; + z-index: 1000; + top: 48.5%; + /* Can't do center:50% middle: 50%, so approximate it for a typical window size. */ + left: 49%; + width: 24px; + height: 24px; + padding: 4px; + opacity: 0.9; + border-radius: 7px; + background-color: #232323; + background-image: url(../../images/icons/loading-small.gif); + background-repeat: no-repeat; + background-position: center center; +} +.ui-dialog .ajax-progress-throbber .throbber, +.ui-dialog .ajax-progress-throbber .message { + display: none; +} diff --git a/core/themes/starterkit_theme/css/components/dropbutton.css b/core/themes/starterkit_theme/css/components/dropbutton.css new file mode 100644 index 0000000000000000000000000000000000000000..5e971ba622dc2e4734d2a6c4beeef7029e9d790f --- /dev/null +++ b/core/themes/starterkit_theme/css/components/dropbutton.css @@ -0,0 +1,33 @@ +/** + * @file + * General styles for dropbuttons. + */ + +.js .dropbutton-widget { + border: 1px solid #ccc; + background-color: white; +} +.js .dropbutton-widget:hover { + border-color: #b8b8b8; +} +.dropbutton .dropbutton-action > * { + padding: 0.1em 0.5em; + white-space: nowrap; +} +.dropbutton .secondary-action { + border-top: 1px solid #e8e8e8; +} +.dropbutton-multiple .dropbutton { + border-right: 1px solid #e8e8e8; /* LTR */ +} +[dir="rtl"] .dropbutton-multiple .dropbutton { + border-right: 0 none; + border-left: 1px solid #e8e8e8; +} +.dropbutton-multiple .dropbutton .dropbutton-action > * { + margin-right: 0.25em; /* LTR */ +} +[dir="rtl"] .dropbutton-multiple .dropbutton .dropbutton-action > * { + margin-right: 0; + margin-left: 0.25em; +} diff --git a/core/themes/starterkit_theme/css/components/exposed-filters.css b/core/themes/starterkit_theme/css/components/exposed-filters.css new file mode 100644 index 0000000000000000000000000000000000000000..b686902ef111f07def492f6e39636f4449fdf130 --- /dev/null +++ b/core/themes/starterkit_theme/css/components/exposed-filters.css @@ -0,0 +1,46 @@ +/** + * @file + * Visual styles for exposed filters. + */ + +.exposed-filters .filters { + float: left; /* LTR */ + margin-right: 1em; /* LTR */ +} +[dir="rtl"] .exposed-filters .filters { + float: right; + margin-right: 0; + margin-left: 1em; +} +.exposed-filters .form-item { + margin: 0 0 0.1em 0; + padding: 0; +} +.exposed-filters .form-item label { + float: left; /* LTR */ + width: 10em; + font-weight: normal; +} +[dir="rtl"] .exposed-filters .form-item label { + float: right; +} +.exposed-filters .form-select { + width: 14em; +} +/* Current filters */ +.exposed-filters .current-filters { + margin-bottom: 1em; +} +.exposed-filters .current-filters .placeholder { + font-weight: bold; + font-style: normal; +} +.exposed-filters .additional-filters { + float: left; /* LTR */ + margin-right: 1em; /* LTR */ +} +[dir="rtl"] .exposed-filters .additional-filters { + float: right; + margin-right: 0; + margin-left: 1em; +} diff --git a/core/themes/starterkit_theme/css/components/field.css b/core/themes/starterkit_theme/css/components/field.css new file mode 100644 index 0000000000000000000000000000000000000000..ff7e9ab1fc765b99f3ca09d6e8b9a6db7867229c --- /dev/null +++ b/core/themes/starterkit_theme/css/components/field.css @@ -0,0 +1,25 @@ +/** + * @file + * Visual styles for fields. + */ + +.field__label { + font-weight: bold; +} +.field--label-inline .field__label, +.field--label-inline .field__items { + float: left; /* LTR */ +} +.field--label-inline .field__label, +.field--label-inline > .field__item, +.field--label-inline .field__items { + padding-right: 0.5em; +} +[dir="rtl"] .field--label-inline .field__label, +[dir="rtl"] .field--label-inline .field__items { + padding-right: 0; + padding-left: 0.5em; +} +.field--label-inline .field__label::after { + content: ":"; +} diff --git a/core/themes/starterkit_theme/css/components/file.css b/core/themes/starterkit_theme/css/components/file.css new file mode 100644 index 0000000000000000000000000000000000000000..9aa90ebebd12edc16ef212e0852cbe032b63dec9 --- /dev/null +++ b/core/themes/starterkit_theme/css/components/file.css @@ -0,0 +1,62 @@ +/** + * @file + * Default style for file module. + */ + +/* File icons. */ + +.file { + display: inline-block; + min-height: 16px; + padding-left: 20px; /* LTR */ + background-repeat: no-repeat; + background-position: left center; /* LTR */ +} +[dir="rtl"] .file { + padding-right: 20px; + padding-left: inherit; + background-position: right center; +} +.file--general, +.file--application-octet-stream { + background-image: url(../../images/icons/application-octet-stream.png); +} +.file--package-x-generic { + background-image: url(../../images/icons/package-x-generic.png); +} +.file--x-office-spreadsheet { + background-image: url(../../images/icons/x-office-spreadsheet.png); +} +.file--x-office-document { + background-image: url(../../images/icons/x-office-document.png); +} +.file--x-office-presentation { + background-image: url(../../images/icons/x-office-presentation.png); +} +.file--text-x-script { + background-image: url(../../images/icons/text-x-script.png); +} +.file--text-html { + background-image: url(../../images/icons/text-html.png); +} +.file--text-plain { + background-image: url(../../images/icons/text-plain.png); +} +.file--application-pdf { + background-image: url(../../images/icons/application-pdf.png); +} +.file--application-x-executable { + background-image: url(../../images/icons/application-x-executable.png); +} +.file--audio { + background-image: url(../../images/icons/audio-x-generic.png); +} +.file--video { + background-image: url(../../images/icons/video-x-generic.png); +} +.file--text { + background-image: url(../../images/icons/text-x-generic.png); +} +.file--image { + background-image: url(../../images/icons/image-x-generic.png); +} diff --git a/core/themes/starterkit_theme/css/components/form.css b/core/themes/starterkit_theme/css/components/form.css new file mode 100644 index 0000000000000000000000000000000000000000..b840022397d39fcf17b7c3ed92da2ddad75a37e9 --- /dev/null +++ b/core/themes/starterkit_theme/css/components/form.css @@ -0,0 +1,104 @@ +/** + * @file + * Visual styles for form components. + */ + +form .field-multiple-table { + margin: 0; +} +form .field-multiple-table .field-multiple-drag { + width: 30px; + padding-right: 0; /* LTR */ +} +[dir="rtl"] form .field-multiple-table .field-multiple-drag { + padding-left: 0; +} +form .field-multiple-table .field-multiple-drag .tabledrag-handle { + padding-right: 0.5em; /* LTR */ +} +[dir="rtl"] form .field-multiple-table .field-multiple-drag .tabledrag-handle { + padding-right: 0; + padding-left: 0.5em; +} +form .field-add-more-submit { + margin: 0.5em 0 0; +} + +/** + * Markup generated by Form API. + */ +.form-item, +.form-actions { + margin-top: 1em; + margin-bottom: 1em; +} +tr.odd .form-item, +tr.even .form-item { + margin-top: 0; + margin-bottom: 0; +} +.form-composite > .fieldset-wrapper > .description, +.form-item .description { + font-size: 0.85em; +} +label.option { + display: inline; + font-weight: normal; +} +.form-composite > legend, +.label { + display: inline; + margin: 0; + padding: 0; + font-size: inherit; + font-weight: bold; +} +.form-checkboxes .form-item, +.form-radios .form-item { + margin-top: 0.4em; + margin-bottom: 0.4em; +} +.form-type-radio .description, +.form-type-checkbox .description { + margin-left: 2.4em; /* LTR */ +} +[dir="rtl"] .form-type-radio .description, +[dir="rtl"] .form-type-checkbox .description { + margin-right: 2.4em; + margin-left: 0; +} +.marker { + color: #e00; +} +.form-required:after { + display: inline-block; + width: 6px; + height: 6px; + margin: 0 0.3em; + content: ""; + vertical-align: super; + /* Use a background image to prevent screen readers from announcing the text. */ + background-image: url(../../images/icons/required.svg); + background-repeat: no-repeat; + background-size: 6px 6px; +} +abbr.tabledrag-changed, +abbr.ajax-changed { + border-bottom: none; +} +.form-item input.error, +.form-item textarea.error, +.form-item select.error { + border: 2px solid red; +} + +/* Inline error messages. */ +.form-item--error-message:before { + display: inline-block; + width: 14px; + height: 14px; + content: ""; + vertical-align: sub; + background: url(../../images/icons/error.svg) no-repeat; + background-size: contain; +} diff --git a/core/themes/starterkit_theme/css/components/forum.css b/core/themes/starterkit_theme/css/components/forum.css new file mode 100644 index 0000000000000000000000000000000000000000..8e8596e21f73c214fba4249ecb99f957032af33f --- /dev/null +++ b/core/themes/starterkit_theme/css/components/forum.css @@ -0,0 +1,46 @@ +/** + * @file + * Styling for the Forum module. + */ + +.forum__description { + margin: 0.5em; + font-size: 0.9em; +} +.forum__icon { + float: left; /* LTR */ + width: 24px; + height: 24px; + margin: 0 9px 0 0; /* LTR */ + background-image: url(../../images/icons/forum-icons.png); + background-repeat: no-repeat; +} +[dir="rtl"] .forum__icon { + float: right; + margin: 0 0 0 9px; +} +.forum__title { + overflow: hidden; +} +.forum .indented { + margin-left: 20px; /* LTR */ +} +[dir="rtl"] .forum .indented { + margin-right: 20px; + margin-left: 0; +} +.forum__topic-status--new { + background-position: -24px 0; +} +.forum__topic-status--hot { + background-position: -48px 0; +} +.forum__topic-status--hot-new { + background-position: -72px 0; +} +.forum__topic-status--sticky { + background-position: -96px 0; +} +.forum__topic-status--closed { + background-position: -120px 0; +} diff --git a/core/themes/starterkit_theme/css/components/icons.css b/core/themes/starterkit_theme/css/components/icons.css new file mode 100644 index 0000000000000000000000000000000000000000..27337581c18367032730f09b11bc6a064ad89710 --- /dev/null +++ b/core/themes/starterkit_theme/css/components/icons.css @@ -0,0 +1,21 @@ +/** + * @file + * Visual styles for icons. + */ + +.icon-help { + padding: 1px 0 1px 20px; /* LTR */ + background: url(../../images/icons/help.png) 0 50% no-repeat; /* LTR */ +} +[dir="rtl"] .icon-help { + padding: 1px 20px 1px 0; + background-position: 100% 50%; +} +.feed-icon { + display: block; + overflow: hidden; + width: 16px; + height: 16px; + text-indent: -9999px; + background: url(../../images/icons/feed.svg) no-repeat; +} diff --git a/core/themes/starterkit_theme/css/components/image-widget.css b/core/themes/starterkit_theme/css/components/image-widget.css new file mode 100644 index 0000000000000000000000000000000000000000..56777c41ea43d0fdd279c1ce5f1f024b949a3e58 --- /dev/null +++ b/core/themes/starterkit_theme/css/components/image-widget.css @@ -0,0 +1,33 @@ +/** + * @file + * Image upload widget. + * + * This CSS file is not used in this theme (Classy). It was intended to be used, + * but due to a bug, Drupal 8 shipped with it not being used. To not break + * backwards compatibility, we continue to not load it in Classy. Every + * subtheme of Classy is encouraged to use it, by attaching the + * classy/image-widget asset library in their image-widget.html.twig file. + * + * @see core/themes/seven/templates/content-edit/image-widget.html.twig. + * + * @todo In Drupal 9, let core/themes/classy/templates/content-edit/image-widget.html.twig + * attach the classy/image-widget asset library. + */ + +.image-preview { + float: left; /* LTR */ + padding: 0 10px 10px 0; /* LTR */ +} +[dir="rtl"] .image-preview { + float: right; + padding: 0 0 10px 10px; +} +.image-widget-data { + float: left; /* LTR */ +} +[dir="rtl"] .image-widget-data { + float: right; +} +.image-widget-data .text-field { + width: auto; +} diff --git a/core/themes/starterkit_theme/css/components/indented.css b/core/themes/starterkit_theme/css/components/indented.css new file mode 100644 index 0000000000000000000000000000000000000000..6925a06363656bf1711354630f3d60ecec90ffe6 --- /dev/null +++ b/core/themes/starterkit_theme/css/components/indented.css @@ -0,0 +1,16 @@ + +/** + * @file + * Basic styling for comment module. + */ + +/** + * Indent threaded comments. + */ +.indented { + margin-left: 25px; /* LTR */ +} +[dir="rtl"] .indented { + margin-right: 25px; + margin-left: 0; +} diff --git a/core/themes/starterkit_theme/css/components/inline-form.css b/core/themes/starterkit_theme/css/components/inline-form.css new file mode 100644 index 0000000000000000000000000000000000000000..b5201a78c9db0c2a8f09c700f3374badbca79d31 --- /dev/null +++ b/core/themes/starterkit_theme/css/components/inline-form.css @@ -0,0 +1,33 @@ +/** + * @file + * Visual styles for inline forms. + */ + +.form--inline .form-item { + float: left; /* LTR */ + margin-right: 0.5em; /* LTR */ +} +[dir="rtl"] .form--inline .form-item { + float: right; + margin-right: 0; + margin-left: 0.5em; +} +/* This is required to win over specificity of [dir="rtl"] .form--inline .form-item */ +[dir="rtl"] .views-filterable-options-controls .form-item { + margin-right: 2%; +} +.form--inline .form-item-separator { + margin-top: 2.3em; + margin-right: 1em; /* LTR */ + margin-left: 0.5em; /* LTR */ +} +[dir="rtl"] .form--inline .form-item-separator { + margin-right: 0.5em; + margin-left: 1em; +} +.form--inline .form-actions { + clear: left; /* LTR */ +} +[dir="rtl"] .form--inline .form-actions { + clear: right; +} diff --git a/core/themes/starterkit_theme/css/components/item-list.css b/core/themes/starterkit_theme/css/components/item-list.css new file mode 100644 index 0000000000000000000000000000000000000000..a8ce5d28a53ddd7de538b7f83983dcbaa359b817 --- /dev/null +++ b/core/themes/starterkit_theme/css/components/item-list.css @@ -0,0 +1,32 @@ +/** + * @file + * Visual styles for item list. + */ + +.item-list .title { + font-weight: bold; +} +.item-list ul { + margin: 0 0 0.75em 0; + padding: 0; +} +.item-list li { + margin: 0 0 0.25em 1.5em; /* LTR */ + padding: 0; +} +[dir="rtl"] .item-list li { + margin: 0 1.5em 0.25em 0; +} + +/** + * Comma separated lists. + */ +.item-list--comma-list { + display: inline; +} +.item-list--comma-list .item-list__comma-list, +.item-list__comma-list li, +[dir="rtl"] .item-list--comma-list .item-list__comma-list, +[dir="rtl"] .item-list__comma-list li { + margin: 0; +} diff --git a/core/themes/starterkit_theme/css/components/link.css b/core/themes/starterkit_theme/css/components/link.css new file mode 100644 index 0000000000000000000000000000000000000000..fa83f2bb2c371b95ff87270ef93e4c72b86815ac --- /dev/null +++ b/core/themes/starterkit_theme/css/components/link.css @@ -0,0 +1,16 @@ +/** + * @file + * Style another element as a link. + */ + +button.link { + margin: 0; + padding: 0; + cursor: pointer; + border: 0; + background: transparent; + font-size: 1em; +} +label button.link { + font-weight: bold; +} diff --git a/core/themes/starterkit_theme/css/components/links.css b/core/themes/starterkit_theme/css/components/links.css new file mode 100644 index 0000000000000000000000000000000000000000..e4832539337a9b555f293e47ca2f0d8dc1358d5d --- /dev/null +++ b/core/themes/starterkit_theme/css/components/links.css @@ -0,0 +1,23 @@ +/** + * @file + * Visual styles for links. + */ + +ul.inline, +ul.links.inline { + display: inline; + padding-left: 0; /* LTR */ +} +[dir="rtl"] ul.inline, +[dir="rtl"] ul.links.inline { + padding-right: 0; + padding-left: 15px; +} +ul.inline li { + display: inline; + padding: 0 0.5em; + list-style-type: none; +} +ul.links a.is-active { + color: #000; +} diff --git a/core/themes/starterkit_theme/css/components/media-embed-error.css b/core/themes/starterkit_theme/css/components/media-embed-error.css new file mode 100644 index 0000000000000000000000000000000000000000..259e5cb5f75eeea41a26f394e90e7b238e6959cd --- /dev/null +++ b/core/themes/starterkit_theme/css/components/media-embed-error.css @@ -0,0 +1,20 @@ +/** + * @file + * Media Embed filter: default styling for media embed errors. + */ + +/** + * The caption filter's styling overrides ours, so add a more specific selector + * to account for that. + */ +.media-embed-error, +.caption > .media-embed-error { + max-width: 200px; + padding: 100px 20px 20px; + text-align: center; + background-color: #ebebeb; + background-image: url(../../images/icons/no-thumbnail.png); + background-repeat: no-repeat; + background-position: center top; + background-size: 100px 100px; +} diff --git a/core/themes/starterkit_theme/css/components/menu.css b/core/themes/starterkit_theme/css/components/menu.css new file mode 100644 index 0000000000000000000000000000000000000000..df733240d5ae1f99746a106e67e8830ce0298f7f --- /dev/null +++ b/core/themes/starterkit_theme/css/components/menu.css @@ -0,0 +1,34 @@ +/** + * @file + * Visual styles for menu. + */ + +ul.menu { + margin-left: 1em; /* LTR */ + padding: 0; + list-style: none outside; + text-align: left; /* LTR */ +} +[dir="rtl"] ul.menu { + margin-right: 1em; + margin-left: 0; + text-align: right; +} +.menu-item--expanded { + list-style-type: circle; + list-style-image: url(../../images/icons/menu-expanded.png); +} +.menu-item--collapsed { + list-style-type: disc; + list-style-image: url(../../images/icons/menu-collapsed.png); /* LTR */ +} +[dir="rtl"] .menu-item--collapsed { + list-style-image: url(../../images/icons/menu-collapsed-rtl.png); +} +.menu-item { + margin: 0; + padding-top: 0.2em; +} +ul.menu a.is-active { + color: #000; +} diff --git a/core/themes/starterkit_theme/css/components/messages.css b/core/themes/starterkit_theme/css/components/messages.css new file mode 100644 index 0000000000000000000000000000000000000000..53a8958a32b8eb5a2ffe56d80b7185ed5682f5ae --- /dev/null +++ b/core/themes/starterkit_theme/css/components/messages.css @@ -0,0 +1,72 @@ +/** + * @file + * Styles for system messages. + */ + +.messages { + padding: 15px 20px 15px 35px; /* LTR */ + word-wrap: break-word; + border: 1px solid; + border-width: 1px 1px 1px 0; /* LTR */ + border-radius: 2px; + background: no-repeat 10px 17px; /* LTR */ + overflow-wrap: break-word; +} +[dir="rtl"] .messages { + padding-right: 35px; + padding-left: 20px; + text-align: right; + border-width: 1px 0 1px 1px; + background-position: right 10px top 17px; +} +.messages + .messages { + margin-top: 1.538em; +} +.messages__list { + margin: 0; + padding: 0; + list-style: none; +} +.messages__item + .messages__item { + margin-top: 0.769em; +} +/* See .color-success in Seven's colors.css */ +.messages--status { + color: #325e1c; + border-color: #c9e1bd #c9e1bd #c9e1bd transparent; /* LTR */ + background-color: #f3faef; + background-image: url(../../images/icons/check.svg); + box-shadow: -8px 0 0 #77b259; /* LTR */ +} +[dir="rtl"] .messages--status { + margin-left: 0; + border-color: #c9e1bd transparent #c9e1bd #c9e1bd; + box-shadow: 8px 0 0 #77b259; +} +/* See .color-warning in Seven's colors.css */ +.messages--warning { + color: #734c00; + border-color: #f4daa6 #f4daa6 #f4daa6 transparent; /* LTR */ + background-color: #fdf8ed; + background-image: url(../../images/icons/warning.svg); + box-shadow: -8px 0 0 #e09600; /* LTR */ +} +[dir="rtl"] .messages--warning { + border-color: #f4daa6 transparent #f4daa6 #f4daa6; + box-shadow: 8px 0 0 #e09600; +} +/* See .color-error in Seven's colors.css */ +.messages--error { + color: #a51b00; + border-color: #f9c9bf #f9c9bf #f9c9bf transparent; /* LTR */ + background-color: #fcf4f2; + background-image: url(../../images/icons/error.svg); + box-shadow: -8px 0 0 #e62600; /* LTR */ +} +[dir="rtl"] .messages--error { + border-color: #f9c9bf transparent #f9c9bf #f9c9bf; + box-shadow: 8px 0 0 #e62600; +} +.messages--error p.error { + color: #a51b00; +} diff --git a/core/themes/starterkit_theme/css/components/more-link.css b/core/themes/starterkit_theme/css/components/more-link.css new file mode 100644 index 0000000000000000000000000000000000000000..c604061317d013d634660816cca3fd606091ed40 --- /dev/null +++ b/core/themes/starterkit_theme/css/components/more-link.css @@ -0,0 +1,12 @@ +/** + * @file + * Markup generated by #type 'more_link'. + */ + +.more-link { + display: block; + text-align: right; /* LTR */ +} +[dir="rtl"] .more-link { + text-align: left; +} diff --git a/core/themes/starterkit_theme/css/components/node.css b/core/themes/starterkit_theme/css/components/node.css new file mode 100644 index 0000000000000000000000000000000000000000..6b7cd5257d6d167426d11e2b6adb5eda3fecbfdf --- /dev/null +++ b/core/themes/starterkit_theme/css/components/node.css @@ -0,0 +1,8 @@ +/** + * @file + * Visual styles for nodes. + */ + +.node--unpublished { + background-color: #fff4f4; +} diff --git a/core/themes/starterkit_theme/css/components/pager.css b/core/themes/starterkit_theme/css/components/pager.css new file mode 100644 index 0000000000000000000000000000000000000000..a9471fc037cab28544a3c89cf7040f26434cf1a5 --- /dev/null +++ b/core/themes/starterkit_theme/css/components/pager.css @@ -0,0 +1,16 @@ +/** + * @file + * Visual styles for pager. + */ + +.pager__items { + clear: both; + text-align: center; +} +.pager__item { + display: inline; + padding: 0.5em; +} +.pager__item.is-active { + font-weight: bold; +} diff --git a/core/themes/starterkit_theme/css/components/progress.css b/core/themes/starterkit_theme/css/components/progress.css new file mode 100644 index 0000000000000000000000000000000000000000..47da889350040c07f3137184192d19a66d0c6334 --- /dev/null +++ b/core/themes/starterkit_theme/css/components/progress.css @@ -0,0 +1,69 @@ +/** + * @file + * Visual styles for progress bar. + * + * @see progress.js + */ + +.progress__track { + border-color: #b3b3b3; + border-radius: 10em; + background-color: #f2f1eb; + background-image: -webkit-linear-gradient(#e7e7df, #f0f0f0); + background-image: linear-gradient(#e7e7df, #f0f0f0); + box-shadow: inset 0 1px 3px hsla(0, 0%, 0%, 0.16); +} +.progress__bar { + height: 16px; + margin-top: -1px; + margin-left: -1px; /* LTR */ + padding: 0 1px; + -webkit-transition: width 0.5s ease-out; + transition: width 0.5s ease-out; + -webkit-animation: animate-stripes 3s linear infinite; + -moz-animation: animate-stripes 3s linear infinite; + border: 1px #07629a solid; + border-radius: 10em; + background: #057ec9; + background-image: + -webkit-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.15)), + -webkit-linear-gradient(left top, #0094f0 0%, #0094f0 25%, #007ecc 25%, #007ecc 50%, #0094f0 50%, #0094f0 75%, #0094f0 100%); + background-image: + linear-gradient(to bottom, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.15)), + linear-gradient(to right bottom, #0094f0 0%, #0094f0 25%, #007ecc 25%, #007ecc 50%, #0094f0 50%, #0094f0 75%, #0094f0 100%); + background-size: 40px 40px; +} +[dir="rtl"] .progress__bar { + margin-right: -1px; + margin-left: 0; + -webkit-animation-direction: reverse; + -moz-animation-direction: reverse; + animation-direction: reverse; +} + +@media screen and (prefers-reduced-motion: reduce) { + .progress__bar { + -webkit-transition: none; + transition: none; + -webkit-animation: none; + -moz-animation: none; + } +} + +/** + * Progress bar animations. + */ +@-webkit-keyframes animate-stripes { + 0% { background-position: 0 0, 0 0; } + 100% { background-position: 0 0, -80px 0; } +} + +@-ms-keyframes animate-stripes { + 0% { background-position: 0 0, 0 0; } + 100% { background-position: 0 0, -80px 0; } +} + +@keyframes animate-stripes { + 0% { background-position: 0 0, 0 0; } + 100% { background-position: 0 0, -80px 0; } +} diff --git a/core/themes/starterkit_theme/css/components/search-results.css b/core/themes/starterkit_theme/css/components/search-results.css new file mode 100644 index 0000000000000000000000000000000000000000..343ea8b5fb1b22d6e3684832eeded759ab058ca1 --- /dev/null +++ b/core/themes/starterkit_theme/css/components/search-results.css @@ -0,0 +1,8 @@ +/** + * @file + * Stylesheet for results generated by the Search module. + */ + +.search-results { + list-style: none; +} diff --git a/core/themes/starterkit_theme/css/components/tabledrag.css b/core/themes/starterkit_theme/css/components/tabledrag.css new file mode 100644 index 0000000000000000000000000000000000000000..a197b24979cff8f741691b1d25e2d2ca6063174a --- /dev/null +++ b/core/themes/starterkit_theme/css/components/tabledrag.css @@ -0,0 +1,14 @@ +/** + * @file + * Visual styles for table drag. + */ + +tr.drag { + background-color: #fffff0; +} +tr.drag-previous { + background-color: #ffd; +} +body div.tabledrag-changed-warning { + margin-bottom: 0.5em; +} diff --git a/core/themes/starterkit_theme/css/components/tableselect.css b/core/themes/starterkit_theme/css/components/tableselect.css new file mode 100644 index 0000000000000000000000000000000000000000..fcfb2a5aa4aec34886cfe3c193e1cbcb20cb08fb --- /dev/null +++ b/core/themes/starterkit_theme/css/components/tableselect.css @@ -0,0 +1,19 @@ +/** + * @file + * Table select behavior. + * + * @see tableselect.js + */ + +tr.selected td { + background: #ffc; +} +td.checkbox, +th.checkbox { + text-align: center; +} +[dir="rtl"] td.checkbox, +[dir="rtl"] th.checkbox { + /* This is required to win over specificity of [dir="rtl"] td */ + text-align: center; +} diff --git a/core/themes/starterkit_theme/css/components/tablesort.css b/core/themes/starterkit_theme/css/components/tablesort.css new file mode 100644 index 0000000000000000000000000000000000000000..44e5349404d0356ab1b601951ff0d141b85ac4a4 --- /dev/null +++ b/core/themes/starterkit_theme/css/components/tablesort.css @@ -0,0 +1,11 @@ +/** + * @file + * Table sort indicator. + */ + +th.is-active img { + display: inline; +} +td.is-active { + background-color: #ddd; +} diff --git a/core/themes/starterkit_theme/css/components/tabs.css b/core/themes/starterkit_theme/css/components/tabs.css new file mode 100644 index 0000000000000000000000000000000000000000..16fb1223f08abe7f7366148eb089531b917b1996 --- /dev/null +++ b/core/themes/starterkit_theme/css/components/tabs.css @@ -0,0 +1,33 @@ +/** + * @file + * Visual styles for tabs. + */ + +div.tabs { + margin: 1em 0; +} +ul.tabs { + margin: 0 0 0.5em; + padding: 0; + list-style: none; +} +.tabs > li { + display: inline-block; + margin-right: 0.3em; /* LTR */ +} +[dir="rtl"] .tabs > li { + margin-right: 0; + margin-left: 0.3em; +} +.tabs a { + display: block; + padding: 0.2em 1em; + text-decoration: none; +} +.tabs a.is-active { + background-color: #eee; +} +.tabs a:focus, +.tabs a:hover { + background-color: #f5f5f5; +} diff --git a/core/themes/starterkit_theme/css/components/textarea.css b/core/themes/starterkit_theme/css/components/textarea.css new file mode 100644 index 0000000000000000000000000000000000000000..2661bae9c4a3f2f9ea0aff1df132962ae656241b --- /dev/null +++ b/core/themes/starterkit_theme/css/components/textarea.css @@ -0,0 +1,11 @@ +/** + * @file + * Visual styles for a resizable textarea. + */ + +.form-textarea-wrapper textarea { + display: block; + box-sizing: border-box; + width: 100%; + margin: 0; +} diff --git a/core/themes/starterkit_theme/css/components/ui-dialog.css b/core/themes/starterkit_theme/css/components/ui-dialog.css new file mode 100644 index 0000000000000000000000000000000000000000..164ca86b8f41e239823e6505496a4f3d065281f4 --- /dev/null +++ b/core/themes/starterkit_theme/css/components/ui-dialog.css @@ -0,0 +1,15 @@ +/** + * @file + * Styles for modal windows. + */ + +.ui-dialog--narrow { + max-width: 500px; +} + +@media screen and (max-width: 600px) { + .ui-dialog--narrow { + min-width: 95%; + max-width: 95%; + } +} diff --git a/core/themes/starterkit_theme/css/components/user.css b/core/themes/starterkit_theme/css/components/user.css new file mode 100644 index 0000000000000000000000000000000000000000..7892fd6b2746c1dfcb1ca94a0ceba36a29708c36 --- /dev/null +++ b/core/themes/starterkit_theme/css/components/user.css @@ -0,0 +1,67 @@ +/** + * @file + * Theme styling for user module. + */ + +/* Visual styling for the Password strength indicator */ +.password-strength__meter { + margin-top: 0.5em; + background-color: #ebeae4; +} +.password-strength__indicator { + -webkit-transition: width 0.5s ease-out; + transition: width 0.5s ease-out; + background-color: #77b259; +} +.password-strength__indicator.is-weak { + background-color: #e62600; +} +.password-strength__indicator.is-fair { + background-color: #e09600; +} +.password-strength__indicator.is-good { + background-color: #0074bd; +} +.password-strength__indicator.is-strong { + background-color: #77b259; +} + +.password-confirm, +.password-field, +.password-strength, +.password-confirm-match, +.password-confirm-message { + width: 55%; +} + +.password-suggestions { + max-width: 34.7em; + margin: 0.7em 0; + padding: 0.2em 0.5em; + border: 1px solid #b4b4b4; +} +.password-suggestions ul { + margin-bottom: 0; +} + +.confirm-parent, +.password-parent { + clear: left; /* LTR */ + overflow: hidden; + max-width: 33em; + margin: 0; +} +[dir="rtl"] .confirm-parent, +[dir="rtl"] .password-parent { + clear: right; +} + +/* Styling for the status indicator of the passwords match test. */ +.password-confirm .ok { + color: #325e1c; + font-weight: bold; +} +.password-confirm .error { + color: #a51b00; + font-weight: bold; +} diff --git a/core/themes/starterkit_theme/css/layout/media-library.css b/core/themes/starterkit_theme/css/layout/media-library.css new file mode 100644 index 0000000000000000000000000000000000000000..84dee10daa5407063fa77cae7cdbae9ca37ea2e5 --- /dev/null +++ b/core/themes/starterkit_theme/css/layout/media-library.css @@ -0,0 +1,28 @@ +/** + * @file + * Contains minimal layout styling for the media library. + */ + +.media-library-wrapper { + display: flex; +} + +.media-library-menu { + flex-basis: 20%; + flex-shrink: 0; +} + +.media-library-content { + flex-grow: 1; +} + +.media-library-views-form { + display: flex; + flex-wrap: wrap; +} + +.media-library-views-form .media-library-item { + justify-content: space-between; + max-width: 23%; + margin: 1%; +} diff --git a/core/themes/starterkit_theme/images/icons/application-octet-stream.png b/core/themes/starterkit_theme/images/icons/application-octet-stream.png new file mode 100644 index 0000000000000000000000000000000000000000..d5453217dc5cc30e805d3d0da8fa91e5a0684b86 --- /dev/null +++ b/core/themes/starterkit_theme/images/icons/application-octet-stream.png @@ -0,0 +1,3 @@ +�PNG + +��� IHDR�����������7����tEXtSoftware�Adobe ImageReadyq�e<���_IDAT(S�ͱ �@Dѩ�,�`�42���@����Z���#���d2!�4J�>dt��`� ,=ޛ���{g8���C �PG(�<�h\���w�)E�o}�^�����IEND�B`� \ No newline at end of file diff --git a/core/themes/starterkit_theme/images/icons/application-pdf.png b/core/themes/starterkit_theme/images/icons/application-pdf.png new file mode 100644 index 0000000000000000000000000000000000000000..36107d6e804015e13d122c53cb035d33632678d2 --- /dev/null +++ b/core/themes/starterkit_theme/images/icons/application-pdf.png @@ -0,0 +1,5 @@ +�PNG + +��� IHDR�����������a��!IDATxڍӱ��0��{Aqs�]��M9p�I��#��� nN. +..š�"����ic~�渢�\��/%�|�)����,���{�sO�c��RI�<"_Z ۶K���=�O-�8�k����z�h���Ff3����q\*:�@ ���7���#��A�M���p2y8�N��z=p���[� Av8 A����Ѩ�%�Z A��h<F��(���Ձl�W������n��v�r�����'@��2�W�_�F�:��_. +�[-U����gB��ܣ*���()5h�����IEND�B`� \ No newline at end of file diff --git a/core/themes/starterkit_theme/images/icons/application-x-executable.png b/core/themes/starterkit_theme/images/icons/application-x-executable.png new file mode 100644 index 0000000000000000000000000000000000000000..d5453217dc5cc30e805d3d0da8fa91e5a0684b86 --- /dev/null +++ b/core/themes/starterkit_theme/images/icons/application-x-executable.png @@ -0,0 +1,3 @@ +�PNG + +��� IHDR�����������7����tEXtSoftware�Adobe ImageReadyq�e<���_IDAT(S�ͱ �@Dѩ�,�`�42���@����Z���#���d2!�4J�>dt��`� ,=ޛ���{g8���C �PG(�<�h\���w�)E�o}�^�����IEND�B`� \ No newline at end of file diff --git a/core/themes/starterkit_theme/images/icons/audio-x-generic.png b/core/themes/starterkit_theme/images/icons/audio-x-generic.png new file mode 100644 index 0000000000000000000000000000000000000000..28d7f50862b5dbb153c0809e9119fd879d499788 --- /dev/null +++ b/core/themes/starterkit_theme/images/icons/audio-x-generic.png @@ -0,0 +1,3 @@ +�PNG + +��� IHDR�����������a��IDAT8Oc���?����'W1H-L�?�����w���dC�q��n��� ����8 �<��0��w��~���Z��{���=�������ל��?y_�������W6��ׯ`>_��,6L��P��0Hq�����N7�?ps����og��?���F#h��c��a���^$I������V�#���v8���sy�g�����)�������������o�(3���/��i�)�����ۉ����IEND�B`� \ No newline at end of file diff --git a/core/themes/starterkit_theme/images/icons/check.svg b/core/themes/starterkit_theme/images/icons/check.svg new file mode 100644 index 0000000000000000000000000000000000000000..566cbc4c8e861890f47ea648f843511c68e38305 --- /dev/null +++ b/core/themes/starterkit_theme/images/icons/check.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="#73b355"><path d="M6.464 13.676c-.194.194-.513.194-.707 0l-4.96-4.955c-.194-.193-.194-.513 0-.707l1.405-1.407c.194-.195.512-.195.707 0l2.849 2.848c.194.193.513.193.707 0l6.629-6.626c.195-.194.514-.194.707 0l1.404 1.404c.193.194.193.513 0 .707l-8.741 8.736z"/></svg> \ No newline at end of file diff --git a/core/themes/starterkit_theme/images/icons/error.svg b/core/themes/starterkit_theme/images/icons/error.svg new file mode 100644 index 0000000000000000000000000000000000000000..151a1e67c929d1d8b01950224811c0a658e1aea9 --- /dev/null +++ b/core/themes/starterkit_theme/images/icons/error.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="#e32700"><path d="M8.002 1c-3.868 0-7.002 3.134-7.002 7s3.134 7 7.002 7c3.865 0 7-3.134 7-7s-3.135-7-7-7zm4.025 9.284c.062.063.1.149.1.239 0 .091-.037.177-.1.24l-1.262 1.262c-.064.062-.15.1-.24.1s-.176-.036-.24-.1l-2.283-2.283-2.286 2.283c-.064.062-.15.1-.24.1s-.176-.036-.24-.1l-1.261-1.262c-.063-.062-.1-.148-.1-.24 0-.088.036-.176.1-.238l2.283-2.285-2.283-2.284c-.063-.064-.1-.15-.1-.24s.036-.176.1-.24l1.262-1.262c.063-.063.149-.1.24-.1.089 0 .176.036.24.1l2.285 2.284 2.283-2.284c.064-.063.15-.1.24-.1s.176.036.24.1l1.262 1.262c.062.063.1.149.1.24 0 .089-.037.176-.1.24l-2.283 2.284 2.283 2.284z"/></svg> diff --git a/core/themes/starterkit_theme/images/icons/feed.svg b/core/themes/starterkit_theme/images/icons/feed.svg new file mode 100644 index 0000000000000000000000000000000000000000..595a9d9ab0d19202db8788f4de2e5858ed2b2404 --- /dev/null +++ b/core/themes/starterkit_theme/images/icons/feed.svg @@ -0,0 +1,8 @@ +<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"> + <rect fill="#ff9900" width="16" height="16" x="0" y="0" rx="3" ry="3"/> + <g fill="#ffffff"> + <circle cx="4.25" cy="11.812" r="1.5"/> + <path d="M10,13.312H7.875c0-2.83-2.295-5.125-5.125-5.125l0,0V6.062C6.754,6.062,10,9.308,10,13.312z"/> + <path d="M11.5,13.312c0-4.833-3.917-8.75-8.75-8.75V2.375c6.041,0,10.937,4.896,10.937,10.937H11.5z"/> + </g> +</svg> diff --git a/core/themes/starterkit_theme/images/icons/forum-icons.png b/core/themes/starterkit_theme/images/icons/forum-icons.png new file mode 100644 index 0000000000000000000000000000000000000000..e291de672522d40458ed4b6fc15f58372c778afa --- /dev/null +++ b/core/themes/starterkit_theme/images/icons/forum-icons.png @@ -0,0 +1,10 @@ +�PNG + +��� IHDR����������"{�?��PLTE������������www�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������߯����������������������������������������������������������������������������������ۯ�������������������������������������������ד��������������������������������������tP[�����tRNS� + + %***+,..001479=HKMX\ddhiimsvxxxxxxyy{}������������������������������������������������������������������������甐��IDATx^����E�JiS +-�����/R܊hq�W�P|d�]b������&�����圼���o��* �mۨt���w?8����e��O�ձ����]���e���y���E�Y�?�s��8~@������t�8�A~������?s�$�$����s�c�=z�9s�v+O��mKP�l&��w{���O�<�3I�}tj���̠"�p훼��gM>��0��y�F�?����{�;~��mnxcKۏ +��f9�w�=�uy�y&(�aa ��g�e��f3���)`0h^v���Z��䙠�r�5H�$?.`�q�c�W^(g�!�>3��D�4�����;x��bIv��� ���<�x��Tܻ�Ш=K��M�k�,�q��F������!�#��90&�V��$��ӀP�=�y$hO��>|~Q�qDn�Qd&��cV�W��-�����¥�z�U�q��-�E!�(�Vl�|0b�v�=�8��x0�}�@�x$>�G/L���"��W�Ϋ~�aE���(���4�E|s��<~rC�&�=7ݧl�s@!)<ɿ-�ԓ|=�Ŋ�8��sn���a�u�r��Ql� Ls��� A�$��ʅ��7�h���t{4�0O���]��j\��E9���մ���0�;� ��߭9y����a0OH���x��Y������4����қ�g��g�懕g��x�#(�9yƣH�sA���9��Ȍ�q +�Þ�B��ѫ�/��U����k�������p(�)C��H.} +�P-XUO[��O�,f���@x5�LU�H@)��{�nz��/TU��"��Kf��'��Bc�< +�q������~Z��˟ߠɷ9遟u]�<��%�>m�En�i�/�{TI?�<'*��K�ޣ�Y�{��ԏT�\�D�:�ˮ��-�U� �}"�u��߄�{��ӿb�4(Hd2�f���I�Kua�*�[�Aɫu����\�k���}�d��/ݲį��� W����=8�V��w�R����q� >��{���I�F�E�2gz��L����IEND�B`� \ No newline at end of file diff --git a/core/themes/starterkit_theme/images/icons/help.png b/core/themes/starterkit_theme/images/icons/help.png new file mode 100644 index 0000000000000000000000000000000000000000..dcc5cac7956f6e1d0733695af8db4cffcef90d84 --- /dev/null +++ b/core/themes/starterkit_theme/images/icons/help.png @@ -0,0 +1,5 @@ +�PNG + +��� IHDR�����������a����IDATxڥ�= +�@�s��#HN�#��"mnb�2G����-��,�B���^�B2���}��ܝ������VY�iP4��+(�k���b*��1;�d�&�Z�E��RY��-�aԸ=�� +���- ��-5�}/���-���a!�q� �b������c��m5�3:9�NP�q@����:@b�d{���A�����D�3�Ag$�u;ٜ�Q�y#m��rl�t쫛O��B䃪 t�����IEND�B`� \ No newline at end of file diff --git a/core/themes/starterkit_theme/images/icons/image-x-generic.png b/core/themes/starterkit_theme/images/icons/image-x-generic.png new file mode 100644 index 0000000000000000000000000000000000000000..c1b814f7cb6f4a21e165e88db557ffe4692babad --- /dev/null +++ b/core/themes/starterkit_theme/images/icons/image-x-generic.png @@ -0,0 +1,6 @@ +�PNG + +��� IHDR�����������a��HIDATxڕ�=K�P���'�.��Z*����q�N��!�JDGE�YA��IT��`S�4I�QLnm�{��Z�聇��&��K"� $I����D��1۶�p�^2*�S>�o���HϹ���|�/�e:����!�W��b� +�� +�`�ȏ�א$\P#A���c��j֚ЄQR0�i�܌����ܒx�-p�I���F��r!#Юk)��-��T�W��iT�i0cvq��:��x�~�+7�we��r1��I/��W���$����(�u���e� '��v#���mW��fnV�����\fۢ�0��;G@� +�A �| �@F����IEND�B`� \ No newline at end of file diff --git a/core/themes/starterkit_theme/images/icons/loading-small.gif b/core/themes/starterkit_theme/images/icons/loading-small.gif new file mode 100644 index 0000000000000000000000000000000000000000..5cbf6e7b75523144e46e36aba2d58263b767b93b --- /dev/null +++ b/core/themes/starterkit_theme/images/icons/loading-small.gif @@ -0,0 +1,25 @@ +GIF89a����������������������������Ž�����������������������{{{ssskkkcccZZZRRRJJJBBB:::111)))!!!������!�NETSCAPE2.0���!� +��,���������&��6Me��K,k��G8@q�h/MG�H:��%#��Gc�4�D2a�8��@@�p2�Hfz�H,%���x" +WrIix%pqX1*�=##���+�����������=���"���I�#3g�~��" �"�>�w� �� kX (_�S(�As}RTx �(�oBB4��x�Z %�q���!� +��,��������'��GQe���04k<��\�nU����6�d� 'U!�`D �%�Xe�U(2�H� `�%)2(* ��P���Eš b%K`1K:$2$��P�{�(�������������{"��#�)1��%�%�% +#��k +�{���"� �?&�*E ���vl�� ��[8�w+��!��!� +��,�������Ԡ'��WUe���a<k,VDQ��JG�7�G�`P6���YQ4 �Z�Cb4���A����Q���a^iU��M!��Q�C�X�#V + +n2��Q� +91�����+������1��q~�=��wx:{e+�" ��% ��"]�)�<�H�*9�H~�1x��%��"�t���!� +��,��������'��gYe���@k���ah<Z%V����D�e�HDf��!j�d)�X,�"�ϓ1 +�Fj�`:f�QE��dI�:{*+:k$ u�"��91>� �����>��� ��"��:�)E*�� )�%���#���� +�"�cI ���(�E�+{�����`��.�"��W��!� +��,�������۠'��w]e��ҲH뺉��*��S%Z���"�<b c"z$G��`8�6F����*>Q�0DG���ѨU,5q@0�E��sJ:}aL�G�9}����+��������#��}�%��W1*:"R)�L")�D��n�˺�9��R�;��ȶ#���Ϊ!��!� +��,������ߠ'�$�8����6p����Q�x��%N�� +y<R���l" ��BQHddz��b��`�*�!MLj�����옵�F=�{2~5^|t ��"������9���5��"��"�*�~��$ �* 2���5 d# +���"d���� �� + +�oI �5����Uc��pK ��!� +��,��������'���ae��Uk,bP �ަ��u�G큫L.��D"��&��D4a0ȒE2�.ȍ��h0&b҅+��v9ȕQI�,JfEsHR2$bv�#>#��{� + +���2 +�������H������#���"�#��$�"0* *�+%{\" �%����*��NUȷ�����LQ����!� +��,��������'���ee���4Yk��b&��ܴ8� ��x,�lh&8��DRQ���Q4g��5�A)q_�&��d�TBP�@UF2A1�*;$F$ s� m1�"������J������$��,+:+��% y% * + + m��#� +�%� "�� ��" U����^�å�A!��; \ No newline at end of file diff --git a/core/themes/starterkit_theme/images/icons/menu-collapsed-rtl.png b/core/themes/starterkit_theme/images/icons/menu-collapsed-rtl.png new file mode 100644 index 0000000000000000000000000000000000000000..dc8d0b8823a90704b3743f980108b8a7d914193c --- /dev/null +++ b/core/themes/starterkit_theme/images/icons/menu-collapsed-rtl.png @@ -0,0 +1,3 @@ +�PNG + +��� IHDR�����������Ő���PLTE������U��~���tRNS�@��f���IDATc�``R`r`��� B|�O�����IEND�B`� \ No newline at end of file diff --git a/core/themes/starterkit_theme/images/icons/menu-collapsed.png b/core/themes/starterkit_theme/images/icons/menu-collapsed.png new file mode 100644 index 0000000000000000000000000000000000000000..91f3fd40ede024798b6de5ea2675bb692a3cfa95 --- /dev/null +++ b/core/themes/starterkit_theme/images/icons/menu-collapsed.png @@ -0,0 +1,3 @@ +�PNG + +��� IHDR�����������Ő���PLTE������U��~���tRNS�@��f���IDATcV`�@)ff�|�̷������IEND�B`� \ No newline at end of file diff --git a/core/themes/starterkit_theme/images/icons/menu-expanded.png b/core/themes/starterkit_theme/images/icons/menu-expanded.png new file mode 100644 index 0000000000000000000000000000000000000000..46f39ecb351cff65243fa9a614a69d039e1302a5 --- /dev/null +++ b/core/themes/starterkit_theme/images/icons/menu-expanded.png @@ -0,0 +1,3 @@ +�PNG + +��� IHDR�����������Ő���PLTE������U��~���tRNS�@��f���IDATx�c��P�`� �������������IEND�B`� \ No newline at end of file diff --git a/core/themes/starterkit_theme/images/icons/no-thumbnail.png b/core/themes/starterkit_theme/images/icons/no-thumbnail.png new file mode 100644 index 0000000000000000000000000000000000000000..926c5314eccfeb16e76a3594b927cb5e6af3be4f --- /dev/null +++ b/core/themes/starterkit_theme/images/icons/no-thumbnail.png @@ -0,0 +1,26 @@ +�PNG + +��� IHDR����������J�6����sRGB������PIDATx��Eu��&�����G�� �q8TBB` �ZEz|�R[Km߈�(J������5$�65��=�P�lР��ӐI?��Ο���og�7���?�{Ξ��s��;߹3;;3;;l�{��r3cƌQ���;�|Ç_s�=��8O��[ +?��w�#z��/� Mܽ����(Kl�E�O��(Z%B�f;�Vdd��)\0(lF�9s��0֚��/��,���8Mx��K��!x���\�`��:�o�K��$����)\*�h�>�&�e��&���e"��p�Jx�8c����V���2i��(MA�rU/��-��#/��Agqc\(9�la��===��J�E ��B�N�"�¢e˖m�'��,~M��T�S�0���J B���n�����.&���YPذ��kA��� B��[[�] F衤*T�{o�нۂ�|�W<�y�}�R:�#��$LGr�)(��C�(��a����Q_d1�c��F��ZajY�����}��jr2ŦiXP�F"P���XM�x1�i6���:�Hm�k�C,9r�ܾ���Bx�<�����Ι��Wf���B�=��e��L����d^���Ӄ��O?��L\���F� +c�Q��0���$n&��%.Tn���`����!���q��j��fZ�V8((�Z��*��$4crvGc�y'O�|��ݻ�`譌5<��P�7 ��2�,��[�����2�v|�{`@�Id�! t�-�a1gB>�]� +m��&�e�@M����K��];���\O�صkW��ƼKD-�1|;��6G,���"#6}���P��q���Ph ��5.`DDkV6�0W�u�q����AW�"�(��"�(�@J����(zz빸^�.�w��Iq�m4o/����Pc�� ��P~_e��L�2�"{��%�K�}[�U27�~���M��d+�jx���7�XŤ߆�s۱�%�AC�{������ă��<��[��F���l��\p�*짌-2�j±�m�5X�[�v����!�e�Xƶ ͬa4����F[Bα�AA_���x��S�� �sJ�� s���̳O���q���� ��OX�� ���1��"��^����x�}���ba��%Th���2�R��d�E_`���(��RrӦM;�����J�5i]�Z�}�������F����m��uQHc�w��6X��P�7���2��1fQBK�}[��а�ea2�[�#�F�'�����k�c��.!#��d4��;���(�5ؤ�+.�ƾo2:���9 ��b���\<i����F#tp��H� +nj�|��N/�(||.z�o.�4(��%�G� �ǻJח>�h�S<KE��$��6��[U2�exf�e!�=�\e`E��w�u�l�h�}���a���-�-�� ��O��ͽ�ڮ�>�JWE@PE@PE@PE@P�^�����"kp��M��2��Mɒw��Ur��O�ei:4^++�@�0P�|��,L'�� W��?�9�1��ǢU�z�dD;4@<�s�5jy�_�31�,LF��tjF�v��laU��,묦�lip���S^i�~���Y%2��/K��k� �L@ﱈ�h�M�:���;w>`t�\��'�L~�~� ;^r.�Ń;�4S.�y ~V��)��6KX���yz����������ݫh& +���ip=;d�L�z���H��=���W\7��<E�s�<v���p�h�m��K�������Av�������%'����5�ڋ��L�9hIH��qyaT�������{�u����'�� H[ʒ̣���z3g������&L�t��m6-&\g�ytL��� +�\H��/��� ��ׁY��'��!���%5h���oqA2iҤQ.؍��4Z#��{5�.;����L܄'7 ˖���G_��D��E�Q��V@�'���t��|\�{�����-2��:D�<��j����g���x�l� ��.�6��^i� +�&�L)�ve����.������H�Wu~�N!��B�w#��+�:�RS�,v�l:p����F�����Eax� g6�����Ƀ#[��mT{<[2�?'����}M�I�l����u� h1�C��d��W��wڙNn0�j�ުh�ϻ��~��9����4<h�_����v^:�Q��i-��K1��������Q����vhc1@x��O]W +rMԢ����vh��jd�����`�MO���f���'��IR��th_hf.&�C�G�xr� ��:����z�(��"�(��"�(��"�(��"�(��"�(��"�(��"�(��"�(��"��D��k�Xw�B'^���7�f���k�M�I���}ꩧ�f&�����菌5꜕+W��]Y��w�l��Trȹ� +L�4�V���:�n\e��~I�����c�:� +�x����Nf4ӵ �>�z�~9[���N;�m۶�/����g��3�ҝ��T�x���^"{����]�bņ�T<�h������K�9{ �~�]w���y��O�u�֟�p��������o��I��i*>����]��d���Y�|s|��(6�'��LQ��q^��^�b��E�y���+3�,R=�Z=�:�r�7���I�d����Wȿ��e&���N[j�h���-@�^� h! ��)�J���6�1X��u7rP���8�Fm����������by{�k���Z��YN?�m���B�r���}9 ?M!?��������GJ�?�A�y�Ì�|������M������R��wif�+y[��@/Z��!�Edn?=% �O��E����}B�ض�g�����HBR�3o���@�}O���^���䟺��e|�d>�cWo^��{����\�'��<`rO�����:���+�/��fƵ=�OL)=�G��:%�����R�S��m{��߭@;\���Ѯ��<�aϗ3�Yت�no��I ��{��^ �jêg1��抄d �78l(Dr$ '��= ˞uA g� +vz�n\�3��=*'{�����Ӗ�ㅧ���=�,�ﱳ�;Ml8%��um��)�e���1�A��x�1-u�i�L4��[h������$�����U�VU��`�'_��h����ou��&�.�p ����9_V\�Z�^O�I�II�F�K�xj�������a�.��b�ȧ�ʳ�=��e�� ��0����$@�^͋\h�{\�H��^W�"�>Þh��`иq�6V�ȑ��bdߨ�G�h��^W��g ��M[Vx�ݱcG���3�8� 2�ؓ�c�fg�����]����P�ht<�׃��iU�lٲɕ�����_���<��UE��I���8��Q&��.�]�`��or!�|�ו�`�6c*���B%�+��˗g���o�,4?T�?���xV��ػ���B�$@ӆ�6U}UA[ �� 럻��ƽ�EO@sٛ���h<�>GF+B�"d]��7l�ܹ#]�D����s"���$@�ˏ|q.:��Bj��]qЎ`���f{���c���'WJ�s��(��=���� ��Sk�ĵM��Y�O;���+�_;y���$1)��3bذ����rO�hr�NO~�������r��^\�%�O[��B��{���;t�/ OtГ��=���DoRl�y� +����Lؙ�p�Ȼ�Y�p��ʇms�pR��̙���=^� a��b�L�လ�6��]�|�d�ҒVQ�����+a��WE�^L��)x&,_��1;}aWS���ё��%���ι625������t�L���!���A��o�T ':��~�a���qF���yp.��%#gv�q�\]}��M�1���˅K�k�G�����'��Ǯ/"����M�xF�kZ�ĵ{�E�.�-�Ls�O�d~ߥ��[9%��v�V�x��t�(���y�v�y�d�S�mWG��Qc���6nܸv�ĉO��s]���G}�0�߂?*�5 9�Y��<WB&�EA���V�G#��W��ͽ��K��~�m��e �#-���k��&���J#9'�L��9Lj���D�V���">Q��_b�^��� �]�}����h`� 0Ð���N\E���.�����.�Bc`��=��/�]:�ϛh~�+���]�d@��1Ht�J��m^�A�T�"�(��"�(��"�(��"�(��"�(��"�(��"�(��"�(��"�(��"�(��"�(��"�(��"�(��"�(��"�(��"�(��"�(��"�(�h̦`�2�I93g�<����ݗ��N�=����a����� +m����ߜ]����S~X�F�<��;����Qu��ɿ��,Y2��/� ς���uE=D%��m�5k֬eum�_��!.λx����Wpvt��*�����n����Q'�}֡Ł��ٛ��j��g!���X~-���i_v�}ʡg̘�g����R�o���6����!���BOO��˖-{� +��c�wh6C�����1��YG~ϣ�tS^��c} ��r�?z�����?�ö�Sy1��O�/���?�^&�?���/��Z���M�S�W��W�v M���NaW�2����8ɷ���M��-��������p� ���F���˟�ׯ_6/�o�땜R!�=���\ȟ|~خ�������0�'��+�B�#���la���r�U�T���o.��&<� ;vS9/��ߓڰ3:i�B��Ts�Eŕ�l�q?<~����s�(���x'�y���q�����̧+rUŴ�K6�:����@66/�q����/�+���E�^�S�O�c7X�,�QU@S��:AS���.��G^���������yYFlRO����\�bņT;-gH:4���"��qҤIo��]�]�����őo��8,�'�\��,�!���8��M��G���<��W� �LE~��Ñ��?|�p:i������%nO�c�ړl�8��)S&3n� +�&D(�u��d��˳��3/�r��#��hi?c����}b��S����12�~�#�m�� +&-һ��!)���〷��ಢ2���|�o�&ڌy~��P���R������n5jԱ�V��M��M��|�2T�^*G~��ɩw�}����L�:u�Ν; ��2�,���+��]ck�CS���e�پ҃�|�V�$_�T*�A���đ/�4)��Ʊ���Ct�仐'߷Cx���X�������!���}��N �m2�B*�7#m\� +�y�����8v��#O��V�\)-{#�F:�,������>n�3��S7f�:��q��ɫt/�H��1�))ƌ�;���O,�Ώ̙3��� +T������vTI�3˄AH�q�رcO��,���ŭ���83��7П=8�3K�~�#�-e�%�"�S��Ƶ��cC �y��~��4�)Cpb���n!��U�yR�K�Zh�T��y;�ָ�º&0��Egf<�H��1� 0�¶q̘1�Z��.g%�2DXzD�S����j�y��%�5t�A�|�@)cCd}�u�d����d��kq��D�i��V�xZ��C�0��è�|�И�Q-4��d�o�A!�x(93-��]�3ҙ��#}D'�Y�\��B�!��Bd���JP"9�B�����6���_�1+7d���e�������Q �/ +�q���B���C�<ݷ��/��A�M�Ϻ��"���*�2�X*;��J%dh�C���B��C����3�Ǹ����#�Kt-���N�|�ʫN[�Շ�`'� tݳ��k�c�=Bcb��?�q�h�_�$g����Z^"�SG�Zha�#㥵�,q�G;R+=�w�~�=�؝�>���#��|��ȯ��r�`�^_8+/_tW�rh'-uh�x��u��E�jӦM�Ɣ�����4���qh�ή�A��F94�� ��休�{����<�S���_����:.B�,虆3�1"MWX3|KuKy�2u��QM�e8�2�R��b��e"��M��?+��#OJ��&�^��n��n���X_�"_ʫQG�^ +�yQ:�}��h���A�5۷o�=������#c��3��on��"+O�Z6�� n�ӳ �k��/;N�����!��2-L��=i����S7go�Z)Q���Xm��+��N�4 +y+�p/�0�r����K]j�$Ǹ!D.��-ӧO� ��R}"[$����0-��CՙG�3')�&.���0`�Eĥ����oq�u�֟��K:gގ�+Z��# +;�ai�8 +�{D��Op���Q))��f/�#ԑ�N~S�?�<��ylD^��3p��"�4��w���%C�Y�W��gi�����b�b~L�&��W�](���}9p����9x,��튃:��K�.��(���}9��'�.�[I���T8�张9wb���-łц<���4d�jC�����"_ac�����6���e���(�)ȷ�e��oU9Z�kb]�KZ��kJ�H�0���(�߄#�ǟ1�:� �9���hJ��ڑ}�x�!Cw���-V� U�����#���H�ބf���#����K�-��$9x�2FpݼC�ˑ������K)Hq�!}dO2Y8tFdFt�H����/��G��\�r�O����ꛢ3"$��8X��Z�� X��tC��`��C��͗��+�H��VJ���i��H��)lR��R���w�M&N����1{b��in������Z�6�MX����YG~���f��e���.>Ň��3���J}�*����R�k�м�����k� g̘tZCꗶ�Fe�jo�iR(d��C۠Ȧ�/~�WA��hx=v_�n�75u3�N��:t���_CW� +�S��M��۲��ٳgg_v�|��C����ɗ,Y2�V�B��,��4Yb� >���ɒ�o͚5k�:ok8ա[��2�>��g}4w��߱�?�<L��C{�p?�~�W��)kS�@[C�������mz(��"�(��"�(��"�(��"�(��"�(��"�(��"�(��"�(��"�(��"�(��"�(��"�(�0����>K�9����IEND�B`� \ No newline at end of file diff --git a/core/themes/starterkit_theme/images/icons/package-x-generic.png b/core/themes/starterkit_theme/images/icons/package-x-generic.png new file mode 100644 index 0000000000000000000000000000000000000000..21fc382cba23efb9d7cfaefb6a98b86324d531e3 --- /dev/null +++ b/core/themes/starterkit_theme/images/icons/package-x-generic.png @@ -0,0 +1,4 @@ +�PNG + +��� IHDR�����������7����tEXtSoftware�Adobe ImageReadyq�e<����IDAT(S��1�0�|�P�P�D�4��T�H�qPȲ>��c��h��<Y��( +6**qO�0�'�_���u&� Q�g�CW�p&[\���3�B{�;-N�BK*6T6���Ł�B��K�Q#Q�ј ����_s=oH�>-�".�;�C����0`"�a2�\�N�{ӆ�i��������IEND�B`� \ No newline at end of file diff --git a/core/themes/starterkit_theme/images/icons/required.svg b/core/themes/starterkit_theme/images/icons/required.svg new file mode 100644 index 0000000000000000000000000000000000000000..f7882d6df9b941fe722f3e6921f122e39b11f20d --- /dev/null +++ b/core/themes/starterkit_theme/images/icons/required.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#EE0000" d="M0,7.562l1.114-3.438c2.565,0.906,4.43,1.688,5.59,2.35C6.398,3.553,6.237,1.544,6.22,0.447h3.511 c-0.05,1.597-0.234,3.6-0.558,6.003c1.664-0.838,3.566-1.613,5.714-2.325L16,7.562c-2.05,0.678-4.06,1.131-6.028,1.356 c0.984,0.856,2.372,2.381,4.166,4.575l-2.906,2.059c-0.935-1.274-2.041-3.009-3.316-5.206c-1.194,2.275-2.244,4.013-3.147,5.206 l-2.856-2.059c1.872-2.307,3.211-3.832,4.017-4.575C3.849,8.516,1.872,8.062,0,7.562"/></svg> diff --git a/core/themes/starterkit_theme/images/icons/text-html.png b/core/themes/starterkit_theme/images/icons/text-html.png new file mode 100644 index 0000000000000000000000000000000000000000..9c7c7932c25ad93adc9c9e6962d984d1703cd17f --- /dev/null +++ b/core/themes/starterkit_theme/images/icons/text-html.png @@ -0,0 +1,7 @@ +�PNG + +��� IHDR�����������a����IDATxڍ�� +�@�}�ަS��=@��7:G��� �� �w�۲ +��o@��vǁ�f��)�1q���s?����Z;��*W�� +PY�I0F�??3� �sIt�^AQD��+(�2�.0�0���_���ۄ��9�/O�3��dwD�Ϧi�;^�7/�W��~�t�"�\ÙW xB]�BP��@)]���m����� +�c�0��������IEND�B`� \ No newline at end of file diff --git a/core/themes/starterkit_theme/images/icons/text-plain.png b/core/themes/starterkit_theme/images/icons/text-plain.png new file mode 100644 index 0000000000000000000000000000000000000000..06804849b8331ed8be3d1ae089311ae58ea79c83 --- /dev/null +++ b/core/themes/starterkit_theme/images/icons/text-plain.png @@ -0,0 +1,4 @@ +�PNG + +��� IHDR�����������7����tEXtSoftware�Adobe ImageReadyq�e<���~IDAT(S��� �0E3�8��l���ɋ +���km���<hh��)�@E���f�#�^)h����"jq�I�Q�u���&0���A�� ��d�J�6t%�����1r*A�?��?�T��f;�����������IEND�B`� \ No newline at end of file diff --git a/core/themes/starterkit_theme/images/icons/text-x-generic.png b/core/themes/starterkit_theme/images/icons/text-x-generic.png new file mode 100644 index 0000000000000000000000000000000000000000..06804849b8331ed8be3d1ae089311ae58ea79c83 --- /dev/null +++ b/core/themes/starterkit_theme/images/icons/text-x-generic.png @@ -0,0 +1,4 @@ +�PNG + +��� IHDR�����������7����tEXtSoftware�Adobe ImageReadyq�e<���~IDAT(S��� �0E3�8��l���ɋ +���km���<hh��)�@E���f�#�^)h����"jq�I�Q�u���&0���A�� ��d�J�6t%�����1r*A�?��?�T��f;�����������IEND�B`� \ No newline at end of file diff --git a/core/themes/starterkit_theme/images/icons/text-x-script.png b/core/themes/starterkit_theme/images/icons/text-x-script.png new file mode 100644 index 0000000000000000000000000000000000000000..f9ecca813882ad9d8f3509464e2d8ac017910b81 --- /dev/null +++ b/core/themes/starterkit_theme/images/icons/text-x-script.png @@ -0,0 +1,5 @@ +�PNG + +��� IHDR�����������a����IDATxڝ�� +�@E����U��}@?���E!D �� YRM�̗w��� �zpxsa�a��q��E�p�MP�5�e9��*S2� +0Q �E�ώ�U�$I.��V�R�B?қ1�eV���d<��ʣ<��Ȃ�(h�����&��_��d`#>˂�i���fƖ<륫K*{ �|���p "�_�F���ڶ��Eaw�_���>2���Z����IEND�B`� \ No newline at end of file diff --git a/core/themes/starterkit_theme/images/icons/video-x-generic.png b/core/themes/starterkit_theme/images/icons/video-x-generic.png new file mode 100644 index 0000000000000000000000000000000000000000..a2b71f95d9e1a5bf86d90a1272bf4f9ae44fcb71 --- /dev/null +++ b/core/themes/starterkit_theme/images/icons/video-x-generic.png @@ -0,0 +1,5 @@ +�PNG + +��� IHDR�����������7����tEXtSoftware�Adobe ImageReadyq�e<���xIDAT(ϕ�11�V>�(v�IEO�� +`��Av�2]4�� �F��BA10[���c� �K��pK�<�}c�=7S�b��Q0����,<�B=S�����\� +�� �y�g7aA�πǴ"�j����IEND�B`� \ No newline at end of file diff --git a/core/themes/starterkit_theme/images/icons/warning.svg b/core/themes/starterkit_theme/images/icons/warning.svg new file mode 100644 index 0000000000000000000000000000000000000000..1498a41f4d7ec3466a0409f225eb5e9097ef9fd8 --- /dev/null +++ b/core/themes/starterkit_theme/images/icons/warning.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="#e29700"><path d="M14.66 12.316l-5.316-10.633c-.738-1.476-1.946-1.476-2.685 0l-5.317 10.633c-.738 1.477.008 2.684 1.658 2.684h10.002c1.65 0 2.396-1.207 1.658-2.684zm-7.66-8.316h2.002v5h-2.002v-5zm2.252 8.615c0 .344-.281.625-.625.625h-1.25c-.345 0-.626-.281-.626-.625v-1.239c0-.344.281-.625.626-.625h1.25c.344 0 .625.281.625.625v1.239z"/></svg> \ No newline at end of file diff --git a/core/themes/starterkit_theme/images/icons/x-office-document.png b/core/themes/starterkit_theme/images/icons/x-office-document.png new file mode 100644 index 0000000000000000000000000000000000000000..40db538fcb71e1f46147a717cdf7134c4e74a239 --- /dev/null +++ b/core/themes/starterkit_theme/images/icons/x-office-document.png @@ -0,0 +1,5 @@ +�PNG + +��� IHDR�����������a����IDATx�ՓA +!E=k/��,��:��܉��TR�c3���l���� ⎵��ա�q�#�9cJI��\� +(f{z��;k�qF�IS��^�2dS�snB��� b�����5(�T�Z���:�����3�֎���@�|���~-�����IEND�B`� \ No newline at end of file diff --git a/core/themes/starterkit_theme/images/icons/x-office-presentation.png b/core/themes/starterkit_theme/images/icons/x-office-presentation.png new file mode 100644 index 0000000000000000000000000000000000000000..fb119e5ba91dd5141e07aad5229754cd06401c99 --- /dev/null +++ b/core/themes/starterkit_theme/images/icons/x-office-presentation.png @@ -0,0 +1,5 @@ +�PNG + +��� IHDR�����������a���|IDATx��� +� �}�^�st��o1=�r�`1������� "����� �=�V�E)EJVS@9���F^���F S�RRȰ���&����+�F~ �~�z��}�GB�3��F�[�E +. 4��;�����IEND�B`� \ No newline at end of file diff --git a/core/themes/starterkit_theme/images/icons/x-office-spreadsheet.png b/core/themes/starterkit_theme/images/icons/x-office-spreadsheet.png new file mode 100644 index 0000000000000000000000000000000000000000..9af7b61ea11fb8bd71c0b5c6506a2101d5c1f714 --- /dev/null +++ b/core/themes/starterkit_theme/images/icons/x-office-spreadsheet.png @@ -0,0 +1,4 @@ +�PNG + +��� IHDR�����������a���~IDATx��� � E=u��:@��eȳ�`M�B E"�C{臇��_4�pa��6��w�!�ؐR��UP�}j��"��<H�*��7ȰL8�z� B4�]�/5(�|������j�=�.E +N� �8������IEND�B`� \ No newline at end of file diff --git a/core/themes/starterkit_theme/js/media_embed_ckeditor.theme.es6.js b/core/themes/starterkit_theme/js/media_embed_ckeditor.theme.es6.js new file mode 100644 index 0000000000000000000000000000000000000000..f66b96c810b0a860727887e132173e8c6352a2c0 --- /dev/null +++ b/core/themes/starterkit_theme/js/media_embed_ckeditor.theme.es6.js @@ -0,0 +1,22 @@ +/** + * @file + * Theme overrides for the Media Embed CKEditor plugin. + */ + +((Drupal) => { + /** + * Themes the error displayed when the media embed preview fails. + * + * @param {string} error + * The error message to display + * + * @return {string} + * A string representing a DOM fragment. + * + * @see media-embed-error.html.twig + */ + Drupal.theme.mediaEmbedPreviewError = () => + `<div class="media-embed-error media-embed-error--preview-error">${Drupal.t( + 'An error occurred while trying to preview the media. Please save your work and reload this page.', + )}</div>`; +})(Drupal); diff --git a/core/themes/starterkit_theme/js/media_embed_ckeditor.theme.js b/core/themes/starterkit_theme/js/media_embed_ckeditor.theme.js new file mode 100644 index 0000000000000000000000000000000000000000..0b9d95999e8e2bd85013524aa5443c9832cf7c4c --- /dev/null +++ b/core/themes/starterkit_theme/js/media_embed_ckeditor.theme.js @@ -0,0 +1,12 @@ +/** +* DO NOT EDIT THIS FILE. +* See the following change record for more information, +* https://www.drupal.org/node/2815083 +* @preserve +**/ + +(function (Drupal) { + Drupal.theme.mediaEmbedPreviewError = function () { + return "<div class=\"media-embed-error media-embed-error--preview-error\">".concat(Drupal.t('An error occurred while trying to preview the media. Please save your work and reload this page.'), "</div>"); + }; +})(Drupal); \ No newline at end of file diff --git a/core/themes/starterkit_theme/logo.svg b/core/themes/starterkit_theme/logo.svg new file mode 100644 index 0000000000000000000000000000000000000000..7d7cf7c6b1f1653979084fbcb2c57f4d71fa4596 --- /dev/null +++ b/core/themes/starterkit_theme/logo.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="57" height="66" viewBox="471.5 467 57 66" enable-background="new 471.5 467 57 66"><path opacity=".2" fill="#303030" d="M528.5 504.965c0 16.634-13.123 27.615-28.24 27.615-10.29 0-19.894-5.523-24.978-14.167l.605-.027c1.313 1.192 3.39 2.58 7.404 2.515 4.77-.064 5.645-.875 9.855-2.756 22.716-10.17 26.925-19.457 27.736-21.59s2.013-5.587.756-9.415c-.242-.737-.42-1.333-.54-1.808-3.018-3.372-6.017-5.225-6.92-5.784-.14-.093-.29-.177-.43-.26l.44.26c2.01 1.247 14.314 8.782 14.314 25.417z"/><path fill="#fff" d="M509.09 518.507c1.006 0 2.077.065 2.83.568.756.503 1.193 1.63 1.445 2.263.25.634 0 1.006-.503 1.258-.438.25-.503.12-.94-.69-.44-.81-.82-1.63-3.01-1.63s-2.887.755-3.948 1.63c-1.062.876-1.443 1.193-1.825.69s-.253-1.006.437-1.63 1.825-1.63 2.888-2.077c1.06-.45 1.62-.383 2.625-.383zm-10.413 7.152c1.257 1.005 3.14 1.825 7.153 1.825 4.015 0 6.836-1.137 8.094-2.077.568-.438.82-.065.875.187.056.25.186.624-.252 1.07-.316.317-3.194 2.33-6.594 2.636-3.4.31-7.964.504-10.73-2.01-.438-.44-.316-1.07 0-1.323.317-.25.568-.438.94-.438.374.008.317.008.513.13z"/><path opacity=".2" fill="#aaa" d="M520.89 496.545c-.81 2.133-5.02 11.42-27.735 21.59-4.21 1.88-5.085 2.69-9.854 2.756-4.013.066-6.09-1.32-7.403-2.514l-.605.028h-.01c-2.393-4.042-3.78-8.783-3.78-13.952 0-7.852 2.97-13.654 6.287-17.687.11-.13.213-.26.325-.382 2.683-3.148 5.55-5.17 7.218-6.203.038-.028.075-.047.112-.065.42-.25.754-.447.987-.568 2.757-1.51 4.77-2.263 7.963-4.77.12-.092.242-.186.354-.288l.008-.01c.875-.754 1.64-1.76 2.18-3.4v-.008c.325-.97.567-2.16.716-3.65l.02.018c2.253 2.69 4.954 5.886 6.89 7.144.69.447 1.38.848 2.068 1.202l.3.15c2.243 1.126 4.507 1.945 6.807 3.333l.428.26c.903.56 3.902 2.412 6.92 5.784.12.475.298 1.07.54 1.807 1.274 3.837.073 7.292-.737 9.425z"/><path opacity=".5" fill="#333" d="M514.176 479.538c-3.26-2.077-6.464-2.887-9.603-4.955-1.938-1.267-4.64-4.47-6.893-7.162-.438 4.332-1.686 6.148-3.26 7.35-3.195 2.515-5.207 3.26-7.963 4.77-2.338 1.256-14.958 8.726-14.958 24.913 0 5.17 1.387 9.91 3.77 13.96 5.077 8.635 14.68 14.158 24.97 14.158 15.126 0 28.24-10.98 28.24-27.614 0-9.127-3.707-15.526-7.386-19.633-3.016-3.382-6.015-5.217-6.918-5.785zm7.627 7.34c4.117 5.15 6.213 11.23 6.213 18.077 0 3.968-.755 7.712-2.245 11.148-1.414 3.25-3.444 6.13-6.053 8.56-5.15 4.806-12.062 7.45-19.475 7.45-3.67 0-7.265-.698-10.692-2.086-3.372-1.36-6.398-3.297-9.016-5.774-5.532-5.225-8.57-12.257-8.57-19.8 0-6.716 2.18-12.695 6.483-17.753 3.288-3.865 6.836-6.007 8.196-6.743.67-.363 1.285-.69 1.89-.997 1.892-.97 3.68-1.89 6.14-3.818 1.312-.997 2.71-2.58 3.305-6.585 2.077 2.468 4.48 5.234 6.314 6.426 1.63 1.08 3.307 1.835 4.918 2.562 1.527.69 3.11 1.406 4.676 2.403l.056.037c4.62 2.84 7.06 5.896 7.86 6.892z"/><path opacity=".5" fill="#fff" d="M497.98 468.678c.874 2.58.753 3.893.753 4.452 0 .56-.307 2.077-1.313 2.832-.438.317-.568.568-.568.624 0 .25.568.438.568 1.006 0 .69-.317 2.077-3.642 5.393-3.325 3.316-8.103 6.278-11.8 8.103-3.698 1.826-5.468 1.686-5.97.81s.185-2.83 2.514-5.392l9.667-6.278 9.164-6.398.503-2.44"/><path fill="#fff" d="M497.98 468.613c-.57 4.145-1.826 5.393-3.512 6.715-2.83 2.133-5.588 3.446-6.212 3.763-1.63.82-7.535 4.08-10.608 8.784-.94 1.444 0 2.012.186 2.133.187.12 2.33.372 6.9-2.385 4.574-2.757 6.595-4.387 9.175-7.078 1.377-1.444 1.573-2.263 1.573-2.636 0-.438-.316-.624-.82-.754-.25-.065-.316-.187 0-.373.317-.186 1.622-.82 1.938-1.07.318-.25 1.827-1.257 1.882-2.887.065-1.63-.056-2.766-.503-4.21zm-14.112 45.628c.065-4.898 4.648-9.472 10.422-9.536 7.348-.065 12.424 7.283 16.13 7.208 3.14-.064 9.166-6.212 12.118-6.212 3.14 0 4.014 3.26 4.014 5.206 0 1.938-.623 5.458-2.133 7.656-1.51 2.198-2.44 3.008-4.2 2.888-2.264-.187-6.78-7.21-9.67-7.35-3.64-.12-11.547 7.6-17.75 7.6-3.763 0-4.9-.567-6.147-1.378-1.92-1.312-2.85-3.315-2.785-6.08z"/></svg> diff --git a/core/themes/starterkit_theme/screenshot.png b/core/themes/starterkit_theme/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..4d8e3956f94422f938f035186192273883fc3b0a --- /dev/null +++ b/core/themes/starterkit_theme/screenshot.png @@ -0,0 +1,159 @@ +�PNG + +��� IHDR��L�������[)���PLTE���jmc���������������>>>WWW;;;QQQBBB�����������®��������TTT������~~~������yyy888����DDD*)*���333lll&&&���^^^���������������HHH000���LLLFFFNNNccc---pqp���"!"���������������YYY�����JJJ�����ʌ��vvu{|{[[\������eef��ߚ�����������������555���ssthgh���nnn```������������������iij������u�����-*#9C<T60FwvxOKY/%I���keY���VRa>8HB<3 !���rrre_T3,$��<6.1,>�&EHB9"/���HDS$*������SMC<J�;������NH=dao���nkv#:81).'qm_���IB]5*T2{w�^[g=0bNFfZSm���FR�'5�<4R���( Zf�!���bZL4?�Ƚ����}w������ԝ����{hbyE6mvvi���T_𠍚[VM������"������ȧ��pi�M[𮟟ó���� +�qkv�cn���}p�uk�^Vz���XH������������TIr���j\�-W���J9{�zs���������gZ��}�uq�^N�ZSHǽ������㘉���ק���������������v~������zkfomG��ϯ�Ņz���ꗋ�yyUrd��nstcmr]`ľ۔�zcP���;A���tRNS������� IDATx���1��0��0�Uj/`p7Yܥ�aH�K� la7a���'�m�!9�������06Ҏ~r_{x��& ��ޱ{��8Qw%�?�Ɋ�][�/c���d���*��`��cM�L'x?����^�U +״��ފI�� ���3�b�[!��1��sk�NC9�֘�ѣ��r<���Ƒf�����[�&�S�$c +��?I�p��TKJQT����� ?&Ӊ)�����@nLuGQxR~A��;@fL]-��/��� ��45I�W�!�ؚ 3����Jl����b�j^�뾩�*Ȋ�^#R��+qXrc*x�?��iBi`cL�fz�Ch%6pȋ���Sb�g7�B�/���te"�-1���f&�cV�O!�֧C��d�̘/t�'c��<�뱟hfq�2cj�.�C��P��[^�OȊ����ݳ:�a���c::�E-�[��B�(��-]J����(-�C�v~�Ap�1��a��)��a�J�e�`l��Yǹ*�?�'-�Ƙ\ϏQna� +oY����������Z� +�k�m�IDi�l�K��6ƿkR���6DŽ\K��Kq��(H�/���1�>^�Q N2\S]Ϩ�B��H��IL�#&��N�GO��gc�ku����:�]1��EED9gʓ'���Iщ/`;c���h�g���&��<���1A�}\s�@:a��m��� �wm���t �����.&�隲l�Ǯm�]L�ۘV�=;6��8��5R��!K���j��\��c���CX��['$8�W����}|�o�?��C/�SL"�I^�b��i0���y2�F��3=D��ie�����v�t�G���4B�lLtoyi\�<��{��숑+D��t#�%>V�hF.�^+��w��9��;�r��L�.{�����&L[= r:��:敝ų��m4#+,���W�\�j���E�y�70B�|Ln��ι`�KG�K����s����/��e7�(��p�t��\�ށ�֖K�@�j�BE�h�M�؍�;�r���ĕ/��g�1|$�ht�Q�t1_�a&39g�o&���ۘ����l�������q�7��:�}��݇�h4��v�'4��)� 9�w,A� y�X��V����?�ۻ*s67?`.ޜ������LZ|g��7%�R��^>CsE�1��`I�/m7 7��a��ȩ�����5���6��ⷜ����&��������Q@��3 +3�82���@��w;��1�i������ '`g���&�K�K�j�T�G�|���}��C�7?������j�'��5���4�J��o3<|xΦ���ͽ�^�\���c����z�j~�ci�&g���t��Pt!�=@g�h����J��n�E�D�a��p-��$�k�[�[��O����c�a$�r64WcS��XE�1�N�+�� ��y�9�;tP-o=aŁq��<���i]�Z�c�A�2�> +س�G˥r4����>��^>'EVl�;G�۽�h���m�+��"�Q����g��la�N_a�`�*-���ɩ������!ND���'�N+k����0`2�Ec�VG3w���F�;g�{⤼�*��H�:��Su�h�����c +v�����2p�U6Wn�-Cn�"�!�f��o��a:��Z�q�a``AXΖđ=��G�؏@']aWn�J��A8l�yh��>?��۴���Ľma�=�k~]��:Cy[^� ?s:G�\�0��g] &x/"m�>�$��nI, V��u N ���$��9�q�)G�;l��AG��ʼn�J�cJޔC�T����yn��^������i�/iDMOϵ�w��dq�o�MB0�[{x-m��>�֧�ǁ����=R���f�����1�w�7Ŧ�S�v�)^��sn�˃�~|�\�j�ቸs�|Pl@=�Z�gCX�"M��<�)��٧س�B6�)8�J�J*��I��M�A͕�ǔ�@W$�H&/6�����#2r�K�.��T��q�7a���#G1.-�X����@�ekWOQ�s�{���H�L4M+,�O/�"���ۙ �0 �8������.S�� \b�9z"�m�x����G��@ux<ǽ��aI�=�k +�������ot�xpC��h�k��B�K7�+0�)� DV �����{jH[��_YF�Gkxz���>Q���_�\����1��'l� ���T�PF�?fٳaH�WǑ�H��� e��� +���ӂ1]܌�.\����E������t!F��%�@i〾�S �R��l����<�9�\<P�sX0�����T�?�i-�tRS7{�? y�h���b��XJ��#g��@z�ӡ��I�:�I���U������i~�h+9�RA�P�s �ARa�J���X(_h9-�w�o>�B����}@���YG����1#�� +�7PU�E�O{�@�w��4ח�F�Is�h1i��4�F�Is�h1i��4�F�Is�h1i��4���1m>���n�ih���|a�^R��8��b_�Q�Z#������-�R;Ђd������#��F��v,�+܂���[�7�p���U��9�ΐB�[Z�,�1픁f��}(��#���<z�4�����+�[Y#������"��tS�=���ز(lꮪ�����S-���(���d�I�c�ލ�3�fG-����f��\(&1��V�ap��lw3�IR{��2�\cj.Ǚ4����O݅?r����n��QLv��4}��o��_�I�$�<^?(�o�>�u>E�ٻC�a ����>j`l �%PX۔����r�.�u�:UgNdՊ���_͈��{`��d�P��]@���r�4��4���v8 +J}S�~�m�-W��p�R�Z�GJ�qk?J ��:�l5�����J �t:s.r��)�n��{�35SMї��l�"����#{_V��i�)%YV#ƈ]#�1�L&�� ���Ƥ��Ƥ4&�}��d-�8������_��5r��0�b�27�� +TZ��JBKàƝ]z:_g3����;Yp���? �Y +�)%�k���.� +tzv�ϙ�М�e��ŭl-�~rё�7A��Ew� +O�5z���������4� +%2���ɂh_L�-� +��[E�6��f� ���&k'i��^g�Y��2gӁh��kJ �8%���9!���^�p�c��bLĘ�|��)F�]yx�m�:6�F���%�S�x�n,�T�������^�UH���U3�����ϡ�k�z�ѡ���P�ȍ�3�ޘ��k�i�+���NG`x�)s���1�4&`�Z!�"1���F}0_���p�E)��3�����~}� �B�Ƙ����j ^��˽���������~�˒Ǵ�����r� +�í�x6��rus��SF�Z�|k��v@*���|Լ���t��$+�t��D/펩Id�,���x<�w +펩�d_`��� ����u�e��S���R)�襽1 �_�k����s +}�1�y1&bLt>���c"�D�Ø�1��0&�Ƙ�`�� }CL��7�����@�7&c$���#�dŜVkỏ����V{�:цv�z��K�y��I�j�c�z?�ѯ�J��4�����Ɍ��֡�ϘJ����{wȂ0`���&��?a�mA����k��p`�nCDV�c�6���<PX�d����X�;�ClL� ������!M)}���+?g��{{�m]v��M�M��v�� s�1��\a��1�p�tĭ�'"���GR�v +~CLЋ�@LЇ�@LЇ�@LЇ�@LЇ�@LЇ�@LЇ�@LЇ�@LЇ�@LЇ�0eL�< ���o��e2J6�^$�o2�7�v��T�q|���o�$O ���ښ��(bn%��f������ov�w���|��^�fv�نij�~�(g��(~9� +�ŗ������Z��� y~ �F���wjwaO7�%V�e�@d -Wb���=e����fK���tI߸�Ox��.E)��O��+#�63�wX�F`L���������|��ڬn�"�w�4h����6s2m�5Υ;�%Ϗ���TO:>I�Ӂ@mK=�ğ�COZ�j'���P�h^�B�J�qOڍ?z5�~L�t�l�[ZZN�_=��g�9�S*~Oj�=��6���p/�09��dȽ��f,}��q�'%�D��/CA��{���¦���~�;����Ll*��˶�_m�'�H+=�,� b�� i#�°�Pݐf^`[Y��f��9�Lh��-؏���'�i��� ��*ï��gUlՆ�8Ƙn�� T��c����%���(����;�����<�%���4�8�T���꾑g`1�aK#@m?'&��+p_Z��YƥI ^��l�Z�����,MV�H21�AZs88�BT�<dϺ�.'��*0�`*3����1`G�d�Q����ωi8�W����fV�R�����,,.���K5�Rڇ�I�LTX��XL5��1�J�0o�IiXQ�d�XTw��BC�5&��H*��;1=���BDj��N�h@M����=��L�)�)5&6uKV���NL�F�$<����#�؛|�Suc�M����T�ιt%SF:�%y�$}�UϾ=X������r;�\�g����`�/9�X���4m���[1% �}�O�1x��>ASy*��^8�l��@%06����N�D��.�Ɗ-®,��-x�0|�4ySN���>��(��i��,�i��XL�p^v��:iV��+&�K�Ï0��f�e���k܊�\�v�+� }S�SRO��3��ju���t[�%5��);&ŲG�`��}G�hrQ�&�C{�k��m�m��� e��I,�3���s�/��z�c�%�\3�#����e&��|��c��^^N>O}��KL����k���K���K}��<k��i]R�f��1���ԆWNL#�^$���{miʼn������Yj�1E ��8�)���T�bPLm��!�U(�7Ҫ��d�&�K��/ޕ�Ĵ�r��1���|���e����!W��_�$%E�F� %��H�d�.�`J��P*i��v���W1���ULiw�c({1��)����Ϥa�������1���g�V*X����]��'�$,Zj^Q�SSE8��e��Ҏv�r��c���w��V������N��@5]>���"U�ʺ����)a/^�pS��di���� ˋi�1M��T�йJ!�P����9������R�ɐ"�\~3p IE���L�1�� +J%�~�d�+ +�������x P������x ��$�B]�cw#ڀq��.��+K���!p�6�>�:��<���7z;ㇲ�K�� IA�d�")u�J=&���r������NJ�Iؔ�:��'��t�ʙ�5�ML���.$}��wO��O�>�!��^Iy(��P��!.�s b�'ӂ44l�1�T�K-'��5@)-��d�^� "�ϖ1$��]�'g�S��Y�߲ިg�~`ɰ�[o��[g�Z[���/�-˼JK���y�(��7ά���S�e�F{�I��fY6��|�؎z�-k[�fdSjY�K�U�����vdT���,k�,}w�'c�j��Yw|h4Qo�̎f����_�ʇ�b4�����1�x*�/�獩�L�_��������b��|��<^L����Nj�������yQ"�8^���-M���|I_��-u�խU��-ws�u]�5((��Ct +"�EЭCP�BD�!:�v�{t�NA�A��CoT��|pfxn_�y��1Q4&��Cc�hLԿ��Dј�����1y=���ӄ�*-�G��g��Xi+��#�(�N�o(��m��M�� ;�v9���4<�b��Ч$-�Hi��e@%h�`���:|�4X�@7�.βH��xA-!��~��Տ������D-v3��O��m`�=/� +��WOo��Iwr����Zى/3k"b/��N1�"�-����Z�BA��/���i��%I���-j|��8�A C�X����"�8/�P���u��1���յ�K�th�%�rX]q�&�-��YT���.��.�sFo����WG�烮����cr��&_�&��:סK���熤[�F]z���I6n\����\� @�g% +�b`#�i�+�� ����O��tV����f�v�CB�Z BLSl�Z@��q�r֦��H>@�+�1i��Ĭk*�9�i�i�ډ�Y���v��P�]i#+FHsxv�S̪���Y�&"` ,!����(EW�ꁖq�K��2t12@�^mF��r@ӂz[�BS.*d�Q@5C�7!�~%�oo����շܱ~G�~`��w��6�Z � ����:#���끱��ƀf*�|&��ld%�1��jdx��p�؊Ge�ӷ9&��Bɍk +H��Y�P��sL ���R ��N?m|��j��3@h��Io��f�w}�v/�%�lfhI��r��<�RO����\��i! 1�"��j9ߐo�.�f*c���l������4�X��v[gq��&ȥ3C��+� �(�\%�9g���b�!z1�Z����� +]������v��i�bZ��n�4,�i�l�9!&��I�*f�R��2�pζ��" (�7��@�������y��I)H�ʈkɤ�/� ���G�����s�����t�� ̐!Ƥ�m�b�B�am��Վ�Y�7 �R4$��"6;� �6Ɠ���-���-l��F-�g�x�ۖ��Fd[4}R���x�`]��*İ�P�Ğ"c�b+18YPF��U��SH��}��PX-+���]&��oGJ��D��X;���H��@�nl���h +�<K�P-�z2���R`�F��j��T��m6l@i5V��*���X����xT^��j=�Ҥ�*�F�����"e(�8|�&� +�:���r������ԟX�'�nj���eѢf���b��� �I&EG�<��bIF�3J��۷C�;t��6HG���z�7|��5�#l�C�p�ba��o�-kϝ<7�ڹ��-&�M �,�-����E�d�k������l�oj�����s'OW���{���]����آE�#�26�ɮU.S.��'�_?~��B���ý bJ����KA��-Ko�#��T�\����Np��=X�����{_��D��hL�/�L�C��1ƴ�\^��sn�����{/o�\����Gg�Bc�~!�#�.>�0�n�Lv��Ϸvk�]�<}6�ݔ2�]9�����hL�Oc:q�؞���u�i�����O�'�?~}m^�yxy�����w&>��L4&�1]�z�����.�� +��l��˷�Ϟ=��^ߺ�o��煚�w7N4&��1�c�n^����#|C|C"�'��ă�� ��L<x��$�����J�����&9��:\�"j�A��!��ˬL]�á�t�;�ԗ���?�|�K�~ϯO��ݙ\��ݡkC/�;�}�˯���\֛/w�;}���7����#���L�b,7�t��}}�}�,�@h����$O?{V��v��rٙH���%=�����˭:s�:M[��(Z�Xw_=dz<�k��Z�u�� 8�����1 �����UUZ�5FQJj)-E0<��V*��2#d2��3�΅��BWίY�U4B*UL!F��2jz��W�J�v H0���3ݿz~h����{�<�PQ�f1�Di���e[G�-cL�es�\�sw�{N��ҽ�Uͪ��⠴��T���T�� +�Mޘ&��v�pb��������}Y6:8��%�H�kC���J�\��^�\vL��M�9z�|�r���7z�(�P�^��r'c�?�M�4&Ҭ�=���PP��Y +P�TPQ�˂(8vY�G��l�U��+)d2��aZ�lY������ưl0JcS�)IM.8�A���M�xs���oj8�ooZ��P�x HАDQC�T����t��%�e����m�5C&���%�xEӂ�Ƥ�8���(� �@v,���JMƣ�U�,��\7L�n�Q�?�H �$A�iH ��Y*i�*9 xi� 9�k�5�c�� �q*��j +�x��)�X�B:5���eE�T�������0<�f��d"uô��/S��KkvĠ�@�P�(ࠥ(��0&�G�g��W� &RL���$������:k�`Yx}B"�t��}פ�����,����4�S�؍��6�SP; H�����2O���q�M��&�����L�Y���q ��o�G�,C�P�����QYD���P1�_���1y5�U���"7�Y�֯g���x��\��Z���R�wBSd���h0�z�����J�q��F�<N!��t����/]|s��ڳ���P(|�D��!�$Q�mdҟ��}�0YTϭ� %@�9��nݼ�y^�R"<5�&45��d�1`�� z432�G� +�Oϟ�=oM-Ô~=�%�H?1]�r����"<%�����C�i5���M?3�O�MO>.<�f��q��~X"�H�0QT$1��"� kAlO����e��ׇ���?:��ݴ߮�*LW�NTKɒ��n�i��wLq�����xZL�~U��1�}��ƞ����<�d؟ + ͼ &><�f' +����F�Y�'�H�a⸎$�ԯ��"�\����/��� +���=jr�ѝ�h�01Q-�^Ө�+d'}c��ڨ���s� E���&nl�;�^ty�T�Ee"3�^ze��9���i�MH�G�C"-x]�T =rG��8tjK-[k�� +cL]�[u�?|?פ�>y�O���<�?�x3}30@߀��k������W���>���Xx})��K�P2���E��u�\���� ��B� �d*~���OL�v�Y�Z⭻v���(����"!%z*XO&bQ���s�'�.\���#�ss��i1��IO[�z}�[�G7U<���vvb�/�,-��p��!E����8M����3B� ��N�-�e��L��:D�e��MM5�9��k��&�I)r&�t-���S¡DB9��3}go���n��^ ���zt��t��N[�J����Y�#���TJ-r��q9�M��W�Ah�����L���|&i�|zuf=�PSoܟӺ�l�p�qtڙN(݁���A��e�;� +��qP +����|��ȔSx��i�֣fڅ�� ��S;PV�}����i�3���b�ص�z�7�ʔ���{�L�[2i��ȅ"��@x�M���AF�Ʊ�S�v/�)�E�r*L�rJN,&����ؔ{~~e�Ѝ�%� r�m���A��&���Z1`2N3����_��,G"�|rLQB�x�{-�:�~g�������0g���dX��8`*�z���� �e<�������''���5�2��������;�I;����(�V�%ʐ"I1(a��ݭ�$�X��&Ӝ�yr(z��L%�\�/�E�Nl�p��c'>s:��|�e�ܼNaY�H�Gq����$�2��=�4Nnj����T��Wc�Y�9�\��><|�%���K�~_��Sad�d/zY�fY5�i� +��ϑ�4�H₇��@Ҵ��&�d`֛� J���_r�ƍ%%��:2v����Ȅ�@%�6�t�`U����YT�kr,M�h8�Մ*�^�����ȹ���p +P&ȭ�8>�gCrA�(�����"��n��l,��J2���N5W��>ظ��c1.�U����G&:�xE6�ܫ�AL�Ό8&-;��-]�4���B��3��Rɪ��ڡ�ei���o� 8�L8��4ϡ.�^Og�f0�s��9f&-d^LQ�X4�N�J(�LxeU����U����Cad��;�ɺ��(i�ՃG��ӁO�Łwa%j��!%�� �R҉ �Z�%?�)���w��2A���u�xa%��J:C��`.90�8p +#8Rl�*���fC�tZQ��S5p?�)����($+ϐIR'�2��aiE,f>a�a���i,���5�+AoP���} +8�v���"� rS&oA�ceX�ڬ&�nB��U�Y���,���T4"%�`0^J%eY��������<����y�e8�aRl)�yDS���D��0�Qi'j�/��N%�cK�2�U��O��%�c��,� �=��A$�g �T|�]���U+��s��)�/U6�.�R�>��z�SJ:R}�_U��~aߗ�<�e�d�0ay��P�ŹmGks���( +�X�>���@0}�9��%i1J�����;WW�'�L��Lz�Gx�8���Yc� +��1��i{�m Z�� _�Q0�*>PhR� _t�|c�2A���5cv��Ƿl+�y���H���$�8Z�ZW�����4�����@r�_U���泧S�_�P&H62�b�heh�x�ɖ�z+�2�h� +$��h�qm���N�ܵ@�2�T��$�RB-�_��C� ً^(�㴋%1�C�&�VE&� �}���ҭ;��T�i5����N���dL~�`�oqt��>}��y7��(�"B#f��b�F$E� ����Lű���{s{]UgN�����嵵Sg��_JȻ��1E��x��!KS���13(E1w?M�GT�:Aձ�������i�k/}l�;�gά��-�wG%gf�.W����� r���B\.�v��EQ��q�����������=�m u��}��X��ևFv��.��ԭ��ᰜH�Jb�⅓P&� �h��;�Oa8�R,�أ6��TW֝~���r{ݞ�j�:[�9�I$�v�/��GB)��zS���իP&H62ш�b0��|��X��gZ**NkN7���Ҭ�.7g{}���w��=v�ld�?��`*H�__�e�d��f38�p����E��XY��kڶ��hm^UeU^gme�p���#�'k"��s���O��lH zÁ�����!��gJM4Ͽ��m�{�`���Um.�\ب-���h*��TU ��o���U#}r��!�lHQ�!e���q($+0I@Xj˖���G6�Ӵ�� �����Ƃ�����̭yxyy��W�d(����~�>~������]<B�� l֞nl˯�/���lz��Fli�7Wu6T>�w��y�o�y�0�4��%�������_�0>�L�l� e�Ay�B�oٴ)�djh�<ݢ���7555WU�UT6�������O�32�[��$�F�i���"��C��N$IpCp{���6 (J�P����������vzOy�F�i��ߚ�ط@��݇7l�'������ti�:A�+u��'�}�� J� +���V���O��(V������AS��N15�5��S7�YT��G�.����^�M�>������-F +),�3� +&�#L�6��\kʫ��h�F�`��Y[>��=�6�y�=�u����� �͙X�Eg�(�!D�@u�Gp�"��8��+��4;��&�UMƭ��g�\r����tj����+� ���?�cF�b8�e1��a�8�:Y����k~���w��C;Nl��Ky�.�\q@� �:�bei�AQ3�2�pG-CDS[[�(�b���;]R���_���]_��L�ld�p���f�S(�����̺s�(7:��Ή�H�YM�,����R��E�ޟ_@�L��L{q�G�]�7z����1�f���c��G��)��Y +�����3�Y_$"Eu�>t����֙x���6�Ff̆#������Ng%��.�$lC�ϻ���8����I��W&>�2A��+��nvt�:|�*����>�Ĵ�6�X�&a�����"mCا�μnZ�E��Ȭg����6� ��L,E�,�a�N��q�#Nt� :��8@���Mf�������>����ܦw�"����9�0�����L<��,Ǡϣ;�3�&'u����n��o�7�@Z@>�744j��>��D�=%>��'�G=�+�9���E�. +���8�e6���X�e'D��w��$����yL7D}>�j�� �Kj���ɞ�� �9r�mׅ�Q�b'�Rf�-���q6�nC��9��0��c��OLL�t=���;J^����m�Y�XXuA��f��c��8��l�P������)���?�_�w�`�Q�N��)y0�Ѽ�;�� �ù�+(4؈�Xq�A5�����E�ֺf��z>����?��������=��y?����:0-a�噹�gN�>�ʹs�̝�����ݣ�d�2>�8���z��Kn=��I��t�H}� ��/?c�Gn�%���+K�^?=�z��K��ri�̙�3`P~��_�����M��|t=nh�����_~�ӏ?��{�I��+tϽp��L/�������sϝ��]�t)��[ +d��.�s&����Bѩ�]���������F��\�WU~kz걺���[~�����j�>�t=T��9�Z�x<�V|b|�/�?^t���4�������PHKLݽ�\$~����ᒩ@Ω:�}�����P�m'��t�.a�0��@�[��t��N��'�����777��m�䉆&oH$='�|�uw�����6�{�?�u��j�e��L&�#�D�����g$Lׁ�J�������=�|'�o�������d������2������F�O�|�}Ó�0O��ǓA6�y�1��tqy~yx�;L6�=b6�N����L�_8��Q�gk���{�#:1��b���?�I�g`�6�SSӎ������ŝ~�]��僯_ �ō�-&��a��������f@&bmA9?��m9���{��%� +�F����m���"���&��T���'���w�p�~r"����l.^|-��!�Y,.��d��#v�� 5�0\,y}z��C����J�0LU(XW��sU�L +��~�k��<Y��3��ꉻ�3x~w��ˏ]U/K&��5B49"+++�Bh"a"�0�ĴS?>=ZwcO����jÔ4MPI�S��n�j�7��x�������w�y�A�̖�Z{��sWťL���$!��&����A4����°Vt����7��:jyJ�V����|>����ww%�x.�j*S����u�ί��S6��%v���=��&oUK�E����QT���09�ƕ�v�f��'�0��y�d]�M���g Q-��V��*U��h�>My"�G��^S?1��Ϩ���M�7��IĒ��������E��B�!�\V��@E�� a"�0�㝏����1SH� +��4-�P�X4*�A��e��G�d ���{��ћ�>K���X��ٵ�LD!�Nm,[]�H��j�o�M���S$L���[z�C<��C� +�ڴ"MO��4�@ާ�R�j��Z$ 7���ӝ}5�Qߛ����'��;I�P}_D0��ZZF9΅Xچ�d���������°�x��T*9<�V�h�a���*��Š�EjQw�p���,�<*�K_�"'{�أ?8\~WA�]8�J&+���&Hq6�0���/�0Z��n*�p�Qi�"dh��H{5T6[<@�*X\ +��A]�<,���M�O�Q���gA�L��{;5VUu��F���YZ +���-�i�drٿ��0ZVR4�c��wH��!w���kx�#�� +6����髟R���}�K5�����mWWw,��?���,Ah�\�d7�ñ)�9�c�d ��a�E���`���LCS"n��J{Ft� +C�NJ���� "�zx/�8�p��O�؏ �S��"�T�K'.^��uS,��EP��>��f5E��A�Dda�`�J �R"�JU�����1peP��ш��`M�=���pk=����Ͻv9��M�~80]��Q�K��Lv��qF������m��d����)� +�B�u��cPU(�R6W���*��'V���V�ˆ���MN�c��<ɗ?^�����D�U0-/�d�Y��F�^��a�b�;�r��ˏ�"�0��C*�I�T��%F�L݄�������)TMusC�p�3Ozf<��t���[x0u9�� B`�3NM����bB0��_��쑈ͱb��_%�}GHV�Ӻ���d3%����������FJ�FX��C����g��������D"�/xK��.,C�C0!o�ٕ� �Hw+f�َ���&` +�F��w�S(\��#v�_��RzJ;YC�h����yX���onͽ��Z~w'��#���jB�Th�Y 4YQ�3��\�x�hGFA��#�+T3���t�ڸm�:���Q}o[�-=��4VC��U_�.;�ifu (q�ҫ�dru���������ci��i���1,����D`aXG�MG;TJ���Ka�]r������zX]}���i�i����,F6�x)���f��n:�L�,#�M��s9�&�Jļi�h�����,SkIgg-��jō'�p�4v�(�!��Nono�*k�W���X6p�����| +��i9���4N�u�pV�vPZ0C�l��GHV�a�n�\J���`�KU:����1�m�_BS��E�մ�Q_u.X|��n>��.n�ּ��x"4zQ��M����Lf��l#�"�x�gO�*z��5�Jr��{���ҊށF�R��.�L^��K�������-��Pd*�1Amdr-��02�M�HҜq!d�^0��eGHVЛ�<�z�#w�v����>V[���M���3��TM�����jY0�^ +��;��vUTm�h,٬�e���� +*����+W`�J�DdA;�hi�ћnn��)�i�@��?[���/QU�)���r{�T���\�_Z +�������.� ��<���Z�C�b��d4�C��}�B�S�,�[�C�R�L T�A���'���W�z��ج�Y�K+��N�]�������Z0�lXL(�Y�A.0�8��0�<�b_Y� �D�TN��PA�{����/���r�itz�~���l0��f2<n�����Tq��yJ��auR�W��Ҝ���aܮ"a"���, +���af���!d��ڎh:���ʬ~�=��`ѽ����@����d�7� +��5��2�(>��oڅ���xe�l���q���C?e5��ۄ|��O�P����J��]������ż�M� ��v�W��ڡ ��n*ߎ�L�шNs�� �0�ց$-W; �j��r��-T��j���\�u�����������s�;'��0�ۗ�ZB�v�o��W��)P@lL� +.���0�"I� �l�@�HW�5�wֿ��n�Z2������=��B�$�a��@�D�j"a"��&�qᯣ��X"�Ӹ�4]��S�L�gv������X6��f����N(��ϣkM ��B!�!g�b?T�D�Dha��)j`���tX��s�4C(��wz�����,��K(���Z��\a.����dD?����*&bNs�P�ybe��+0D�k���pX���qZwz���L �M��-K���� +���`B,!��M���V��E<N�J<��pJ�2�B��:�6D�,I�BF��ٽ�7�����l�;�+��f�X�[�A$L�4z����*��ɔ6�h�t*���a�a=�����RR�Gc�ԋ)T{�)�� MMh7���dF/�k}a�7�.h�� J&3Z���|�F( �|:��+�� �Dj/Q4 �7�qK� ��@�7:���|��iIxa�ɢ�A�D�P{���ɧk) +��Jg�����:��@�?���Խ��6�o�iZ0߆�J.H%�0�h����Z�L��I������u��S���l� ���5����-��"����' +������C,iJGBs5�m�@V^]��J��f�hZ�,������� �q�&`)���s�Q��Zv[����˺�K��2�V��;�¦'~�N �u!�V��WׇZ�8�^������4Zw��]T� �Z +8�{���\��0;(b,��{�I��I(�|��K��u��D����P��p"���֦aî��t�ʻ��ۛ���jjj�kb#7�����9B���0�)R$L��_"a���;�m���^|�Ùᾓ��;)�;ŝIQ"�}����@!r�!�9�jA��c�#ߚcr˿ӡ,�qwo�� ��o�{���1M�O>���>���ɧ0}���S�>��O��| +�'�����Oa��S�>���&!>�w���0���@�-ǝ�@��:v�6��/U|ԕ���{;��������`���W�I��G�#����NX&����n���i�7���h���1�&��lH� .�c9��dꀖ�-{br�<�/�V;rO�Gq��}��m�5��� +:��*�C}�%��O�ka�P\�\��S@_)�J���;E��� ��)�ct4��V�.��/����x�7[�bm���B�"��n: o�b�Q��%�[-O�7�pK������X$@1o ߽X���7|��������<�co�v�U��_�q衰�`̷���v���W:���r���ş��C�S���a��S��ɩ�����/}n�+��E���ڀ����-�=es����O����� [K �~}lp�C�]�}�����0)� "b���C,���M+B ,�3�r)�$�P0�K��0An���6�<q7H2�:�Fd�E�5ƽ����� �=G���t�إ�&��7G���5c]9M�C��73>l'��dv7������~����̈́yhrdcj���uR ��#�����a�M!,��9l01B�K�:�Fk�B��}A�p|>�<4��m �$="c ���fl>��W�� �jt� �5���Yb�$�Q�l6�zd�94NƦ�uF�ᾧ��}7kۄ��z�\bCZ��X��7Kt +YL:l���ڢ��B ���^6Z5�1��gch���^�A{�ˈ�݁�s>�6�&���F�@�F��K'��h��-�%�8Tsı��Ԉ��qvD�u�-O��z#�4WG!Hǽ�1)\�i��6�`MR VIYc�l�) C�HAC���z��T�!a;��w����k�<�Gi��\� �����÷��v��ͷ�$)G�9u>���Fo��]��x��� ���$�Q�H(`���$��tJ^�C*��@9��J�@_�3�����̩�y�'���(]Í������옦ZY�!�&�o��J>&~;i�"Wd�$�RFb `��(w +��� �����>� ��{zɹ��2m�$LN�s�K +�fˠ&�\�!2���] ��/�����t&��mL����D��|WFCyj9��f"� X���~"�l�]�� %�%��Ɠ�!�d8&e(w�O��,>�7���d�Ȃ��?ְz.o\x'e�a���]8tB���³!c���7ҷ���>`-��2��fGL,E�#r��0m=�מgrůH�D�O�v�Q�� =)֘8��8A�##��%2g��Z�Ig(O��0D]D�55 +�,��[�H���eZ�2���`b�'�� 7�SeqP��߉A�t�Rn �N��}i9h%̃�!��L� +y��n��ju< +B��6`��������^��F��,@H +(�Vn����p��+��jp�l(�c�J""g���v{@tǴ���=~.�6��:������pc���p1��QR�@�PL +nq�/Sk��l�ж�#�휧�\�ҩ��W'�I@����Q�$cw���ΎUZ�56sm��w[Tch�@��U�Ll�J���cX�1����yX�&-u-`A#��|���-Z��@ޮU]���`�a���a>�ܾ���Dڞ�a2���$�V�VZ�I�@�#���<D�-'�A"C�� @`�̠X�����E܄i7es�*=;�Ҵ���OȢ�0�7�@��X�w��L�o�W���?�j7�X{Hc-�-5��\q>Iu�:����c*)��Qi�ƙ�(Uܩ��8q�O�G��̓��#�@�B�e!9�2��x/,�l�����6LR&���m� GL*p�ϱFM���$�39�@��H 3jT�K��R6<�a�^l��<z���n-6:K�a����y����Rk����u���9���ۮčIZC� U3`=9Jm�:Yf@���Adə*�KE���}��:Lt�y.��K�0�F��7��Ik��ٱE�fb��v�N]- �y��f?�9�{���+i�uq#�mÈx�(��Z�CU�� Hɶ��NB�r�VCQ�������'�,`huF�]�:06D��B���-v��#�Fw�d���8�.��D��wZ�)(m�D�#J���NAD>Ҝ��Dw~~G1�[k���W������t���>B:���C��M��LO�1Z���sY̼���ё����Mr�ML�ż>FL@�l�}�r5Ӹv���\�R�J�,&�)`�س�qA� +;w�|iB"T$b*���'V_n5� +m(����.�4Q�L�!�/�>ކ8~Wfl"։�"~@"��ΉE���$U��2�6��hV���}I��sGg�Sф��v�i��]qb�n$L�'������ڞ�86R���w�Q�+t?+�+�Ĕq�8��p�Q':���>��H��K+��/����9`�2"Ŏ�8��fU2a��ҵo]'�]"@�DS���90�����s�E����֡�a+�p�^��9��'9��^[�+�t���=u�`�� �23��%��@��*;��˥S��b���>!r�f�nq�ޅ���� yʈ��=u�٢����V�g��*�0@�څЩ��(D�.�r�҇*�*y�Z�o���Q��@�C��qJ�S�d��lG"VoOT�aS5�� -���u���ҙ-X��h�ʅb�rf�Y�!�:�Ҍ`�U�"J�Ȗ�Pn�M��}�шаl�1����c[8vb�6�����LҙՇ�4�i�3�V)���"�+Xk��% `<Z�Ia/��ȓ���ع���F2�^)��`xy��!P��>� +�w%��[�\X6�7����4��d���x/��W,�Jl@X ��z��9���@�qL'�P> �V�9��[�'�SP�G�*�b +x{��� +{���$����OIX���z>�չJ��3 %�~,Y gw)���又�B���ę� +x��fEC��Y8���"������;I +���Q�C�;�����5!��R��(/��(��} +�'��0Y�{��_6 C]���h��d��2����SGR�e�=��&R�J>»O�/+~d7��ҕ����9V���")=���?Պb���o��Q_�����#>{��˯���縻�k?}8�����? S��� �����Ż���E���b�ޓ�#p����g��xxt�:.�Jf���pw����A��݈��]�u�a�t�Fc�+����˵���ՕRw�:c��ӑ:����%JB�r�B���?��;ܽ_�+�w�5x'{7�=ϟ��l���G�B�J�|P�w@�7�����(�r���N�������m�]���6��w���1n|��ݍW�7�?�f�7�>{��k~��a:�F�}��2Z8��'G��� �6 +��^��a�%�V��T|���Aڍ�9�ܖط���͜��%��(�X?r���qb�1G�[���-D��>���-y��k'��0.�kc$���lB����9k'���7Уi)����DH�mքS����<I���cN������cfR�!��4�ݳ}ǝ�Fuņ��3�Uw�t��Jek�j��0�=K�ĕ��1$��f��YT��@U�V<�0��͍����U� :�(@�8S@bVx����m +z����,@�+�D9�p� ���2咙� V����^�@d6�c��_�~֕�'~�R����]t��.��M�x[XQ�������g/��W��������Wo_��_>{���W/~z��nx_�|���o��/~���/ֱ�Z����7o^��;�y����?���7߿|�-��|��]��,�d�D4Z� a�L�z�5L��M!�'����ݑ�IN���S���qS�}+M'���{Ubߎ.���2���P8�tv��KÝ8��S�N��WS�*D��tW��kJ����C ����2E�{���i�oq�v�di)@w㞤��<����|��2��}��>��i���$��_F��!��H�5��h 9�,����Hr������ �Ր*}�q�G�y��d�'�D)�s�z��N�_B�ih6:y��pE���G�{ݙ�C�ѽ}w4K��$� ã��?�4\-���~J���Q?�݁�dB4�c)Qd9$:����n�r7)`CSKz\���R�~c�����S`��ۃ8sx�DO*���M���'bW�,�i��?�����������/��� �Ͼ|����������/>�������m���x��Տx�탧����/����/^�����_|��7Ͼx�͏�?x�����?}���6L���0��x 2��8� �� �!�\��" l�a��k��jdu�#����=��#I��:�� ?�7P�U6� �����L�R#���}�j�nvB�D$a���#R`wQq�u�a�����8�)�c1Nw���l�X�zt-�x�7��XU�(��J����@y��e����2�)� �P���Y��Y�Զ$'�ke �ͤ��Z�1L̛�%`v�^���2�r���.�#��g6�#�J,�@2�P�[�Y/�i��&9����1��e]0�8��E�X $����í���*{�hM���P͉qѫ���]�u��!7?y��)qdg��t�����J�J��g�w�_~��~�ݻ��?x�Ëo���=���w?|���N���O�^<�o�}����/�C��3�O�7���a����|ܾz ������/p&vfj�� �:�AƲ���ƾ �m��\v)#/=5Զ������[�]���$��G[�"���H'ӕP��,�S��s���ػ0%���A�ue�{]�R��ɤ��c5��E;�階�l���k���R3 +-U�d*T��}���d�F��]9�4e��YS�� +���2V��.R�W��(����A}��[�����ݑ�;λ0q���"DN|)�}�=�� ���N�?Hҿ{�f� h���AIB���0 m>ze5˵�F�)��d�����"iGm�B��ic�� �AHʁ;9:V:X�&f6�9�I�GG���&scۀ�Gn�� $���E"�B0GM��1'mk�Ŏ����x��ك_}��˷?߆�%���=����>����7o��}��w���_>}��_���]���3�%�釷/����_������_|���on�d3n�.�v�j"u�t{��7�v`a�@%�w�Ԑ]=��.J ��6�u-�.%�P�HL��Z��V�4��\�\>c�UH�C��Í���c����ڊ +D�0�q���)�H�7����+> W4��&BQbA&{y��")-H�b�+��X�c��ش�k6�[D��pM�I�&ԹKL�Β�t�DxΫp���L���o�\G�pb��ްM�M�i&�N5ri���E{.`���D����� +���� ��:-V�+ם����. ���ab1LCx���i���Sh���1 �N&���!�5Q���P����Kx���F�6�������>A�j��<�XK�ҍO{2i�2�T�Ž��%L�l ��7����Zv�F��uG|��wx����/^>x���������wo>��{�?{^<{��~����?��O +��g���|�����ӧ�~|�ӫ������g���������W�?�b�o�����/�z�淅�0�D"��0�"�ۂl�Tr7d{��ص��I�����6��Hl�Q�P������i�� p�7��*�x�x2��T���b�d$T��Z��@`%cJ���!{�� +Dn��?�`r �b��s�z��E%�^��G!�@"CG�3�h�0���[�d+[�r�Q�a�Q_?���L`Ξ=�l���� �v�����b��=�vl�(�ĂYERP��A�e�� ���s�����ه=����j�[*[(D"U�#����K��a� +x������)J]��8V��aa<�K�'_�����U�.�na;����2b((LH��nى��*W�@V-�8���Lp��.����o>��w~���z��ś7o�����w?�}���/>{��_?~���gϞ��R����|��W_����w?�[������~^��w|�7�ㇽy����?�������|�+���gL��5R��$��f�5�>�p��;}�����<~ο<������Ϟ?x������������x�_�����|��u���?��L�����v��������]�RE!���r�3Τ�5�b�Zx�������Մ^� ��ǚ?������O���0�7&c�5s��Nz�����7~�U���۟�=]@7�H��d��>:�o�WƇ +��f*�����[N��L��}�>����()�?@�Rպ�Kt�j�m���)@��&���b��(�C��O;��������� p�&�4�UJH���{�A�M��ꇃq��'mǝ���\�@��~�n^F��R�4�+��dz����w����1߳�W/��������߉�">��� ����W}�[SI�����G��7�[��:�i�m�W��8�ϐbl%�<�� +D\0����kB��3W��pmJ9ѶI�)���(�G(�C�EW�8s��7�)[��C��̀f�vޜ�S{�9�4�J�p�(jކ��[�*�(��xu�uX��W��"~�@4�`��.�l�ŵt�r�G� �"��L����VҖ���(��h&yr9E�F����+ +k�]�m�,���L!>3�� �����ib���¹��ku�����mB%=0���2-�I���&�kOE�b��? ,���棉�kk��,\����6� �-R�B8.�ѧ�4�SC̘u�,_� �5�Gٹ�9��Dc��/v�Q���ķ� +F�} S�ڛL�j}��Y�'0�#Ft4���l���@93V�,��{��qd����UiSw"��J�R�d�U������4{��� +H�K���u���\#�T�J����:�-�{N�9��(��b)���6�Ow��YĴ�W%�m�Ӊ��ѦˡG� ��}���(#��� +L,������]�����w&���*�[�@A +:�1wh����C[�E@TC�DzJ�RvM +�5�&V�r8m�O����]�*ܓF�=���7(.�,o�m�l��5 9����O6��H��ln4����_�Ri�����.����o�tK�v�T'۩���*8'����e@OƛD�27N���� ʰ�_ U��O!8X��K��z�Bx��1�{��Ɉf�SN��S����Tp�'a]B@o;�YNv�}�7IFrz,�|b����s �ۈ�!$ۧ��ˢ�\v�������[�Q\�A��VNw������C�K���xnCj��1��F��T���j"�E��>��7�E�>L-���� +CL +�>l���� +�%@d��@6�K�;Vy���"���L@e���G�ٓG�m�����Z�@��V�]�] 6U8���Dr5�p�uC�p��@��z8����v��q"B�@��!�D2�c��������^�ۧp��B�j&Q�nHĩP�&�5�[�s�VZoC�>�7�C��Z�XFn����2�ߪ��4��7$4::�NN�DdPN8���t���z>6x�bEnVN�[$�4,p��Ai���C�}�#d����G� ���,ۜtf80�"zn;@ ��ެ�_�"�J�\�U7?t�p�in?=��P� ��DR0��v�:�S�AR���`�8�C �����}}�n% �5�kt(����� b8O���eb���bfx-����B� +աsm��?���@hwR�ނ��B2ਯEDn�3�Ωr�M_<�0w��1n��'|I��،@bx��2����-�Q3�R��9H�Fp�l-L=�u�D��/�<���h���N����֊]����TJ�.L�44�;U�+��J�n�h߅)�j1�x!8 ��W�%t�k]?����Q<ڄDf��}H#�p�/)��Ñx(��v��& ����y8��'�:��PS��``1t�[*lC�$�9���" 44�"�hϢ��S��i8�B>��4��m�u�tm���3����$�R��� ڨ�$�A ���4���m��NZv�,��u�sH���M��%,�����AH1�#Y +@I�� T⊥�(~8}s�J?U��ۯ�c��փ���U���9:�J�E!gDf�V2L�\~�%'h�`g�&ώQ,"�CR��A��{C��E>�Lk�`���Έ��+ ��q��Ҁ�k]>�VF����8 -)QI�Y�\b����}/�?L��3�z��z�mnDuF�R� w���`����x�3 �$i��H ᮓ�ڌn�Jo������Nf9[:ޱ� ������e=�qP;9*�X���+@7��eI�����>�C���Y��,����o��ϋ%���i�w���;���xo��v�|*��^]A���p~ގ���(�;G�T��E���:�ӊ�Dm�h\v|� +p� 9E1�'��r|'@q l���i et�m����oJ(�T>�b`�ގ�����f��|��k��{x?_6Dg�j�̏ o��y]"5m� 2"2������[Zd�{�trB�U(��4!�� +�E��9q�b���|W�0��H��� ��Jq~@��|��V��Di���Wm���8`qu�V0&�"�\�H0Hi�������"��ٳy�$�"4��*�=,j �^��ss"7M��ap���f���RC�����65X#>��U +���g�T�,���l��w +�rj +�$A���I�j���c�I�:"�]V<9FJ�5= ����ѴB��+�%!]?�8ȉ��hM��(��@� J�-�ZN]�qg�(���="�V�������\��(�B�/����C%�59���싑 �Ŕ4�A<`UЎ����2y��*�|dE��L<قGѭw�jB\Ӫ+T|�X��:�㮝A1$��d���ډ�Ȥ�&��R�Jف�?S��\mSt4ȉ1�,tr���*�s����� y-z�����-������<��QdW}��+(!���E�i|�R�?�lw +��r.��*�?&���'���_���/ SW�M�3��_|� +�k�g�>E#���O�S>�ׇɳUN��k5��E�R�+)Δw|�6�����=��5[�:�|�l�_�,R�]ܐk��^��{���z�>tzo��� z����O�+�ʺ�n�(��%��pR�>�m�ʿ��T +w*�AAؿ��{p��/n�]}�^��w4D�3�������nƈ;�S|�m��,���"�_���- �b�p����Ȫ� <[7Jt@��$y�����̯�~�{�B��Z0�4��s"ܸ���ߵj�����qj��ষ(�a�2)5UD�S�P��{!%��n w����ȇI,�i�Yn�j2j��fn�����IB���M۵�6��V�8�!�4�4��1v���Pgfz4�\����M��f�+ rq,h:q�8��)�P�����������M�R�"��L5�6�.�=نbfV�3��Ǣ�C�* N9[،}�'[H�N�}.(��@�= +6�i{fN +@��2�mk�5ꐜEh+�d��CF�,W48T�B��fn��"f�~ +�"���/9��f �A����e��Z��ܸ��fJ��]\����u�h¦1yh� �r&�'Q�>�hƇ��dQcM�?�2Tj��8�2"!4w��%�E%v���#{,��ݬZ?���Y�qc�l���1u�D�'tcM�N�Sd���S����Hѳ���ȿ�*������f�a��Ϊ��攬FO�;d�mL/�����QQ5�����Fёe��醙�m��ぴX����;�Ґ������*�KH`� 5��y/��.��H���6.\i=�N��t8_ѓ*`�@�i���Đ4������*��Tgj�U��%��X���/5�y�p:��n�s���ga[�D�,�.���-�r�$=<Պ-0M�����Z��6�a�E1�۩���juΑ����j��oJ D��d#��Wד��To1H&}��(�䘞#�Z�T�c%C����@|쬚��'ˮe�1�! @�r�;�2A���>�$D�$9�۴s�M�Fi���g�� Q�:�V���\,?�]���T�f�*�w��S�t����;�l�ӣ̈́�� +�j�\r0�QD��f���G�`-yOù��b9 r��x�]z�y�>�����H�DoI�\�A�e� ��}���qb��iڱjN����=P��=��,R�1�٨66�W���ò��J�����M� MP`�I�J�8���E�mJ�2e�f �N����M�;k��)k"��@�eӿ��uo!g܇]�ݦ�2=@ȝ$�n�e��2Z)�Y����VO�����ڀY����";�Ƅ�4��$�ä �� 6��+���L��,���N�-Q�VS?� ��lUDa�n��aJ�$�o�-*Iv}_�3�)ވ�k�b��=��ƀ�����=�а<bMC�$�Bc�a���Cmi����٘0<�L �I��Y ��Q��9�Q҄݁4 g�f�d��ӫJ�'�x(�q�v�J���M5�j��U�Ʀ�� A+4q��p��*TbP��vo���Pki%���ŕ-~�(YއIv��$��܄buv^iZv +��&���k{w�zp=�ք_���5�L(�Q�a7h�æ�A@oZY�wV#�<l��"q�m�J�^�%�%���S_���*�l�O��8���R�;�p��X����ܩx�!�Μ����ۚ�6Ȏ���殦��o;�P9o���C�4�� �?�#8G��.Lr���6�+p�fi/ ��c��)�:�i����J�n02�CT��ؚ/���'*'�=�Tl�ٔM�/~eb��� �fd=u� �{/�p5�ۇ�Ц9 +��:WL4U��ㄈ��aH-��:�X[Ām�Xe ����і�.�I˃�[��e���Z���%eu��Y�R���(�-��O@+�=���*�th�7ar��Kk�"�T-P-�sQp�K]�~����0g� $�[���,�b� +<�v���W��� ��_E�brG�th\���rg��Ú��.��c�o>��a�ôI�y�A���C�b�͊D�jW��P�6��u �8V�M-�sk%�u��������27�N� +��AB���l��w���+Y@wi�u/�����*E������l�e�3���G ���E�����E��a�_D� �8ߔ<=p��K[�D]%b�Kѥ����y����J(�¥)�P�gR���6�h���h��s�( �3r���r�>N��Z�d�$�+K�T%D1����X# M�.�\�f>�K|@cJ�\>?ոV�)���i��Ӑ?v�r�����I�/Vܿg�q�{E���t� ^�&�tà$�}7x����b�N�0>Db���z���aZT��gf'�H�-�9�ԮG$#"� +�;'�q^�!{�������b��b�����ǖ-��.8�4S$����O��S'���}y�sv슋���}L�,�9�d7�W��sh6:c���Y ���7��z����ä� Q��D� +<lm�����p�P�B����gˀ:Z��=;�;�L�:���hО�Qs�=(���a2�;�e�`+�b�~��e��ˏJtҚH[���!goz�z��p���� ��F���!U���P��sh6��DY;`�3T� +�(��]�+E����>\7P/�j+��hRLePh�R�t�9B����jsr��V��)1:I��Qf�M_`�oC��hN����6��a]�JQ6�jI��ڋ��A7M`�ɣ4�Cۊ��u�]�E� % U�Ш�WvE���*|t{3eڡ��9����C��I-��"u�*����N��`ۉ�x]J�������dmW�O�@�D=�ckE7x�XP�(�h�|j�flp��#��6����Yw`�F吨0�^;��՜���|㞨�.5�ِ��}��i\����։�$8N�c�{� �NB +!�R��A�o���������߫��e�%�:[�d���nZ���]�� Vgm5��f��:��"�&�?�_ �/���/}�;�����?!���?��/b<>S/�%�a~�%��O}�az���0Q�Pe�����%Y~����o�{�~�z�3�1,��j�OU +�/�Ƿ��-� +6���K<�� +��Č_Ԩ�O�� E���S�� �h���4�x�i^��5��V��ψC|N�jn9T�&�o��x��"����{�%~`�v�$���/�4{���K|�Ed�[������_�vf��_m�����J��7�"~�-���!�����k��)��;� +�~�����c?g��a:qŧ5���,k�=Gk��^� +3�����sͨ��;<�����b�YsT�p1|��D����M�G��� LtĂ�L��\�T +c]��ơ��Na$|��I1�W8�=\�\j w!�cB��~�m+�0q�GF8,h0���:-��Q�c�0�)�ߠ��6�Mf�W�+qqF���E�h��O��'�P/m�5��2�3�>�%1;�N +�>�>W�S���iR�S�M�yJ$V���Gd�1,}�d�l���9>��Z2�O}hW�"���4� �@�!+L6�$�� �\����CMz��0�k3(�Hr5�>ÕP�'�d��a{��+��4�N_:DhS�E���غuZC� ���1ms`W����c��Ů��j笩�]約6'!��| ��8����f��5�u���-����tR�a��������>LeRl�c���,�ԛX]鬳�����?#Rh��<���Aw�$a�kAgj$ϒ<��k�kٍN����DL���R�]z��V������i�o�1�i�&^y�Ĉ7nvtC���p������� Ӻvb�~�&u�f�@��C������,�]��dwy��\x+ĈȺ[5"�$�!�G�� n����U�'d�P 2!���n &���h/ĚL�ɛy����a_kL��U�ن�'� +s�'��ޮ�[ ^]E7bA?����M +�y��� +�O�AM�r,-(�V���?*#��; �'��x�D뛮�G&A�D?��b�<"]�k����4��y]/��r�,��$�}���Q��xe��D0o;�334��v�D��?,���B��O�&��}�x̓*�[S����F�#2�τB���A sy�Z�7��D,�M;�q[b�$->x/��ԚB�ߐd<{���8b4@{nv�2 ��rp6���7,�)>Eq#�8���J4JQ�ёe�`4�3n>=�M��?[8N[͉U��[��u���ν,b~�k�S�qG�6-�s��(J7��ѽܥ�FC�h��k� +�����)�VKs�(%a�+@[o�"�ժ���>����%a��&:L~���2H-��h�������/�.`ZM�p���Q��t�0���8-hAV�!�J� XY�U�����e|r^T����?�Ou������zv&y� �V��.�s�8�+��=��p�v��GF��@�d�n��@u�W��H�\x���o.�=�������Yl�PnB��+5b�ν]S�(`_˦'(WM(0k�Oy���{!$��Qv_@1a��w-S�?�]�8k���H��8��Ոƾ��� ْ�я�l���v �<j�EF�1��!�~����g�)x���ndON6g�C4[�ӢP=�6��P�.��� �Ń���d�링�7�^+^\�1,�x��FU{�����5�Y����4���G`�k�WF��*��3(��ۢ`��՚) ��?�/S[����m�F��� t'��Ư;��h�p��>�Z� ]�ǀ����`z��&��C)��X��=�qY�F�Uj +,��\R4vܧU@s"�ӄ��e� ����l�i +S{�ZS�T�k���4� ��N{��9�{跺n����=���9?yy�P&�]�R�]���N��V��w��A0pe֤_IN �`��vl�`��6�e5 +\Ζ�B/��1�m����V��D,�cA+�5P�N�����,�����@T�]���W��A�!�i�h�gߑΎ'م$���W[�D��lIf�X#M��Q�ģs;1 Kf�e�Qʹ�� +�f�8�D:�1#�;���0��T'����"_wX�2$�h�"q�+�9$ҡ͟ +�Tġx�����{�!���HmF�)����Hb�}�;��]�Q�.�{�Lڽ��� +g��5�h@۠dRӫ(����oZFN0ma��\8�j�x;)B�K<X��%���qk������;\�T�x����@M�yҷ'�X�=8 +���ޠ�˲��wX�$���!>@���'Wm�P��"�I���s���ċ��Ƙ�O��F���1�q_����������^�k����l|��]���2����F�~م�EzNP@e�)k��6����X��"%���9�a4T��-dz�;�r�m��@�C����$B �1��O��K=������� �����_��SC� � �)���yU6��dh{x���-����d���aBc��<��a�A$|t�`�8F+�=TtUۼn�hW��<����t���&���&�G�X��D�悃>��2D.�C:\j|�E�����yL⼇�Rr�Ў<��Ӊ;���۸>�Ed*q�Jr]��%-zE<i�n�,5?�Ϯ�ס�ۀE�a� F!jq�8)>)I%q6���=�2p�:�΅ᥩ��d|�>�RR6�`��'=��I���&Ba-���G���ǐ����R�C@E���KZ��c`���t�\F�ґ'��i�������q"j��y@k�;��!F�Ӑ0��Y��#�P���K"C�)7������qx�LK�"6B�您��%���E��/l̄O��U2��!��F�l��p����Ւ? ��w����7[3��b��0�hx3��?~�OS�O�櫜�P�x�)㋰�#����`8�߭�t�9��=�����Y�/4���4c���xc�B�g��S��3aR��R@���+��;*a�L��â~-;���!���Q�Z,~��B����)�|�W���=ɀw�O;;�T$y���D��@2��גD�q"9rQ(q6+>*�.9�r��]A�%x�����q���Y?�4cߵ��xbl���:JN'֏�ù���@Q����\�M&��R�1`_4��ж�M:����6�ݗng�g���aE7N��M�x����N�T*�)h���^N7q���\��rr�i�QX�5�h8 S�f���ټ8x��I�D�L����� �������d��~b�>��¢%�v#'E�y�����b`-��dx�����*�j�����|��A�������4�D���Q5Nm��^�����@� +�;wUʠh��h~:s���p�%�� D���c��|(�C�#�=���A�\81����%M��ؼ�ְ��U(xz�y�� �����%�ux����Y:��>���|ij�x3==�v?��f����P+E��h�_��#VG��4p_U����F�ay{>ą�J�C��`�����1`��&��1芙�$�en�L�SМCc�wo�m,$�����/��N��p���B� ����.���)����`���H���(ѧ���*7��]�4��&��=7������݈�A ��m�]���r)q/�ޝdD���-�ܧ{w�[��A�������jlg��k�f�0���x�vsB��"�}�vvb\|��y*��W~.��G�0>E*�6ch[�]�ژX.�c�PZ!(��f�h���\ �͟`�Ŋ���?��� +���B��a��L�X���h�!�t# a���j6q#��jH���M�p,#ж���lE x�E{ߴ|��w_������p�P������IEND�B`� \ No newline at end of file diff --git a/core/themes/starterkit_theme/starterkit_theme.info.yml b/core/themes/starterkit_theme/starterkit_theme.info.yml new file mode 100644 index 0000000000000000000000000000000000000000..844e1b7ac45eeb7da3020ce1ec87c163f27895bc --- /dev/null +++ b/core/themes/starterkit_theme/starterkit_theme.info.yml @@ -0,0 +1,27 @@ +name: starterkit_theme +type: theme +'base theme': stable9 +hidden: true +libraries: + - starterkit_theme/base + - starterkit_theme/messages + - core/normalize +libraries-extend: + user/drupal.user: + - starterkit_theme/user + core/drupal.dropbutton: + - starterkit_theme/dropbutton + core/drupal.dialog: + - starterkit_theme/dialog + file/drupal.file: + - starterkit_theme/file + core/drupal.progress: + - starterkit_theme/progress + media/media_embed_ckeditor_theme: + - starterkit_theme/media_embed_ckeditor_theme + media_library/view: + - starterkit_theme/media_library + media_library/widget: + - starterkit_theme/media_library +ckeditor_stylesheets: + - css/components/media-embed-error.css diff --git a/core/themes/starterkit_theme/starterkit_theme.libraries.yml b/core/themes/starterkit_theme/starterkit_theme.libraries.yml new file mode 100644 index 0000000000000000000000000000000000000000..e8655f29959d067da878c1937e7306d0e33b9f79 --- /dev/null +++ b/core/themes/starterkit_theme/starterkit_theme.libraries.yml @@ -0,0 +1,132 @@ +base: + version: VERSION + css: + component: + css/components/action-links.css: + weight: -10 + css/components/breadcrumb.css: + weight: -10 + css/components/button.css: + weight: -10 + css/components/collapse-processed.css: + weight: -10 + css/components/container-inline.css: + weight: -10 + css/components/details.css: + weight: -10 + css/components/exposed-filters.css: + weight: -10 + css/components/field.css: + weight: -10 + css/components/form.css: + weight: -10 + css/components/icons.css: + weight: -10 + css/components/inline-form.css: + weight: -10 + css/components/item-list.css: + weight: -10 + css/components/link.css: + weight: -10 + css/components/links.css: + weight: -10 + css/components/menu.css: + weight: -10 + css/components/more-link.css: + weight: -10 + css/components/pager.css: + weight: -10 + css/components/tabledrag.css: + weight: -10 + css/components/tableselect.css: + weight: -10 + css/components/tablesort.css: + weight: -10 + css/components/tabs.css: + weight: -10 + css/components/textarea.css: + weight: -10 + css/components/ui-dialog.css: + weight: -10 +book-navigation: + version: VERSION + css: + component: + css/components/book-navigation.css: { } +dialog: + version: VERSION + css: + component: + css/components/dialog.css: + weight: -10 +dropbutton: + version: VERSION + css: + component: + css/components/dropbutton.css: + weight: -10 +file: + version: VERSION + css: + component: + css/components/file.css: + weight: -10 +forum: + version: VERSION + css: + component: + css/components/forum.css: + weight: -10 +image-widget: + version: VERSION + css: + component: + css/components/image-widget.css: { } +indented: + version: VERSION + css: + component: + css/components/indented.css: { } +media_library: + version: VERSION + css: + layout: + css/layout/media-library.css: { } +messages: + version: VERSION + css: + component: + css/components/messages.css: + weight: -10 +node: + version: VERSION + css: + component: + css/components/node.css: + weight: -10 +progress: + version: VERSION + css: + component: + css/components/progress.css: + weight: -10 +search-results: + version: VERSION + css: + component: + css/components/search-results.css: { } +user: + version: VERSION + css: + component: + css/components/user.css: + weight: -10 +media_embed_error: + version: VERSION + css: + component: + css/components/media-embed-error.css: { } +media_embed_ckeditor_theme: + version: VERSION + js: + js/media_embed_ckeditor.theme.js: { } diff --git a/core/themes/starterkit_theme/starterkit_theme.theme b/core/themes/starterkit_theme/starterkit_theme.theme new file mode 100644 index 0000000000000000000000000000000000000000..a095c0fc88ab8586979f8d03e83c767cf33b8978 --- /dev/null +++ b/core/themes/starterkit_theme/starterkit_theme.theme @@ -0,0 +1,49 @@ +<?php + +/** + * @file + * Functions to support theming. + */ + +use Drupal\Core\Form\FormStateInterface; +use Drupal\views\Form\ViewsForm; + +/** + * Implements hook_preprocess_links__media_library_menu(). + * + * This targets the menu of available media types in the media library's modal + * dialog. + * + * @todo Do this in the relevant template once + * https://www.drupal.org/project/drupal/issues/3088856 is resolved. + */ +function starterkit_theme_preprocess_links__media_library_menu(array &$variables) { + foreach ($variables['links'] as &$link) { + $link['link']['#options']['attributes']['class'][] = 'media-library-menu__link'; + } +} + +/** + * Implements hook_form_alter(). + */ +function starterkit_theme_form_alter(array &$form, FormStateInterface $form_state, $form_id) { + $form_object = $form_state->getFormObject(); + if ($form_object instanceof ViewsForm && strpos($form_object->getBaseFormId(), 'views_form_media_library') === 0) { + $form['#attributes']['class'][] = 'media-library-views-form'; + } +} + +/** + * Implements hook_preprocess_image_widget(). + */ +function starterkit_theme_preprocess_image_widget(array &$variables) { + $data = &$variables['data']; + + // This prevents image widget templates from rendering preview container HTML + // to users that do not have permission to access these previews. + // @todo revisit in https://drupal.org/node/953034 + // @todo revisit in https://drupal.org/node/3114318 + if (isset($data['preview']['#access']) && $data['preview']['#access'] === FALSE) { + unset($data['preview']); + } +} diff --git a/core/themes/starterkit_theme/templates/block/block--local-actions-block.html.twig b/core/themes/starterkit_theme/templates/block/block--local-actions-block.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..97df94b66670796b1186a3349fb949ed7124e832 --- /dev/null +++ b/core/themes/starterkit_theme/templates/block/block--local-actions-block.html.twig @@ -0,0 +1,12 @@ +{% extends "block.html.twig" %} +{# +/** + * @file + * Theme override for local actions (primary admin actions.) + */ +#} +{% block content %} + {% if content %} + <nav class="action-links">{{ content }}</nav> + {% endif %} +{% endblock %} diff --git a/core/themes/starterkit_theme/templates/block/block--local-tasks-block.html.twig b/core/themes/starterkit_theme/templates/block/block--local-tasks-block.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..0f25f59d83131f120371ed25943903c48c3abe63 --- /dev/null +++ b/core/themes/starterkit_theme/templates/block/block--local-tasks-block.html.twig @@ -0,0 +1,14 @@ +{% extends "block.html.twig" %} +{# +/** + * @file + * Theme override for tabs. + */ +#} +{% block content %} + {% if content %} + <nav class="tabs" role="navigation" aria-label="{{ 'Tabs'|t }}"> + {{ content }} + </nav> + {% endif %} +{% endblock %} diff --git a/core/themes/starterkit_theme/templates/block/block--search-form-block.html.twig b/core/themes/starterkit_theme/templates/block/block--search-form-block.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..667202fb6b658bf3b0aae080d6687913074ef6d1 --- /dev/null +++ b/core/themes/starterkit_theme/templates/block/block--search-form-block.html.twig @@ -0,0 +1,45 @@ +{# +/** + * @file + * Theme override for the search form block. + * + * Available variables: + * - plugin_id: The ID of the block implementation. + * - label: The configured label of the block if visible. + * - configuration: A list of the block's configuration values, including: + * - label: The configured label for the block. + * - label_display: The display settings for the label. + * - provider: The module or other provider that provided this block plugin. + * - Block plugin specific settings will also be stored here. + * - content: The content of this block. + * - attributes: A list HTML attributes populated by modules, intended to + * be added to the main container tag of this template. Includes: + * - id: A valid HTML ID and guaranteed unique. + * - title_attributes: Same as attributes, except applied to the main title + * tag that appears in the template. + * - title_prefix: Additional output populated by modules, intended to be + * displayed in front of the main title tag that appears in the template. + * - title_suffix: Additional output populated by modules, intended to be + * displayed after the main title tag that appears in the template. + * + * @see template_preprocess_block() + * @see search_preprocess_block() + */ +#} +{% + set classes = [ + 'block', + 'block-search', + 'container-inline', + ] +%} +<div{{ attributes.addClass(classes) }}> + {{ title_prefix }} + {% if label %} + <h2{{ title_attributes }}>{{ label }}</h2> + {% endif %} + {{ title_suffix }} + {% block content %} + {{ content }} + {% endblock %} +</div> diff --git a/core/themes/starterkit_theme/templates/block/block--system-branding-block.html.twig b/core/themes/starterkit_theme/templates/block/block--system-branding-block.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..baa015b17729687d9d9d078d573e8212ae7dd409 --- /dev/null +++ b/core/themes/starterkit_theme/templates/block/block--system-branding-block.html.twig @@ -0,0 +1,30 @@ +{% extends "block.html.twig" %} +{# +/** + * @file + * Theme override for a branding block. + * + * Each branding element variable (logo, name, slogan) is only available if + * enabled in the block configuration. + * + * Available variables: + * - site_logo: Logo for site as defined in Appearance or theme settings. + * - site_name: Name for site as defined in Site information settings. + * - site_slogan: Slogan for site as defined in Site information settings. + */ +#} +{% block content %} + {% if site_logo %} + <a href="{{ path('<front>') }}" rel="home" class="site-logo"> + <img src="{{ site_logo }}" alt="{{ 'Home'|t }}" /> + </a> + {% endif %} + {% if site_name %} + <div class="site-name"> + <a href="{{ path('<front>') }}" rel="home">{{ site_name }}</a> + </div> + {% endif %} + {% if site_slogan %} + <div class="site-slogan">{{ site_slogan }}</div> + {% endif %} +{% endblock %} diff --git a/core/themes/starterkit_theme/templates/block/block--system-menu-block.html.twig b/core/themes/starterkit_theme/templates/block/block--system-menu-block.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..407f8403fd28c7db920f68ccbd4927bc2bbccb21 --- /dev/null +++ b/core/themes/starterkit_theme/templates/block/block--system-menu-block.html.twig @@ -0,0 +1,56 @@ +{# +/** + * @file + * Theme override for a menu block. + * + * Available variables: + * - plugin_id: The ID of the block implementation. + * - label: The configured label of the block if visible. + * - configuration: A list of the block's configuration values. + * - label: The configured label for the block. + * - label_display: The display settings for the label. + * - provider: The module or other provider that provided this block plugin. + * - Block plugin specific settings will also be stored here. + * - content: The content of this block. + * - attributes: HTML attributes for the containing element. + * - id: A valid HTML ID and guaranteed unique. + * - title_attributes: HTML attributes for the title element. + * - content_attributes: HTML attributes for the content element. + * - title_prefix: Additional output populated by modules, intended to be + * displayed in front of the main title tag that appears in the template. + * - title_suffix: Additional output populated by modules, intended to be + * displayed after the main title tag that appears in the template. + * + * Headings should be used on navigation menus that consistently appear on + * multiple pages. When this menu block's label is configured to not be + * displayed, it is automatically made invisible using the 'visually-hidden' CSS + * class, which still keeps it visible for screen-readers and assistive + * technology. Headings allow screen-reader and keyboard only users to navigate + * to or skip the links. + * See http://juicystudio.com/article/screen-readers-display-none.php and + * http://www.w3.org/TR/WCAG-TECHS/H42.html for more information. + */ +#} +{% + set classes = [ + 'block', + 'block-menu', + 'navigation', + 'menu--' ~ derivative_plugin_id|clean_class, + ] +%} +{% set heading_id = attributes.id ~ '-menu'|clean_id %} +<nav role="navigation" aria-labelledby="{{ heading_id }}"{{ attributes.addClass(classes)|without('role', 'aria-labelledby') }}> + {# Label. If not displayed, we still provide it for screen readers. #} + {% if not configuration.label_display %} + {% set title_attributes = title_attributes.addClass('visually-hidden') %} + {% endif %} + {{ title_prefix }} + <h2{{ title_attributes.setAttribute('id', heading_id) }}>{{ configuration.label }}</h2> + {{ title_suffix }} + + {# Menu. #} + {% block content %} + {{ content }} + {% endblock %} +</nav> diff --git a/core/themes/starterkit_theme/templates/block/block.html.twig b/core/themes/starterkit_theme/templates/block/block.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..fd3311be958b9de2fcd17108309c854fdc807217 --- /dev/null +++ b/core/themes/starterkit_theme/templates/block/block.html.twig @@ -0,0 +1,44 @@ +{# +/** + * @file + * Theme override to display a block. + * + * Available variables: + * - plugin_id: The ID of the block implementation. + * - label: The configured label of the block if visible. + * - configuration: A list of the block's configuration values. + * - label: The configured label for the block. + * - label_display: The display settings for the label. + * - provider: The module or other provider that provided this block plugin. + * - Block plugin specific settings will also be stored here. + * - content: The content of this block. + * - attributes: array of HTML attributes populated by modules, intended to + * be added to the main container tag of this template. + * - id: A valid HTML ID and guaranteed unique. + * - title_attributes: Same as attributes, except applied to the main title + * tag that appears in the template. + * - title_prefix: Additional output populated by modules, intended to be + * displayed in front of the main title tag that appears in the template. + * - title_suffix: Additional output populated by modules, intended to be + * displayed after the main title tag that appears in the template. + * + * @see template_preprocess_block() + */ +#} +{% + set classes = [ + 'block', + 'block-' ~ configuration.provider|clean_class, + 'block-' ~ plugin_id|clean_class, + ] +%} +<div{{ attributes.addClass(classes) }}> + {{ title_prefix }} + {% if label %} + <h2{{ title_attributes }}>{{ label }}</h2> + {% endif %} + {{ title_suffix }} + {% block content %} + {{ content }} + {% endblock %} +</div> diff --git a/core/themes/starterkit_theme/templates/content-edit/file-managed-file.html.twig b/core/themes/starterkit_theme/templates/content-edit/file-managed-file.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..1df95ddf618e3f435d11d540dabce4dd200e32e6 --- /dev/null +++ b/core/themes/starterkit_theme/templates/content-edit/file-managed-file.html.twig @@ -0,0 +1,22 @@ +{# +/** + * @file + * Theme override to display a file form widget. + * + * Available variables: + * - element: Form element for the file upload. + * - attributes: HTML attributes for the containing element. + * + * @see template_preprocess_file_managed_file() + */ +#} +{{ attach_library('starterkit_theme/file') }} +{% + set classes = [ + 'js-form-managed-file', + 'form-managed-file', + ] +%} +<div{{ attributes.addClass(classes) }}> + {{ element }} +</div> diff --git a/core/themes/starterkit_theme/templates/content-edit/file-upload-help.html.twig b/core/themes/starterkit_theme/templates/content-edit/file-upload-help.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..d05822ebcbd49870cfa8e590fd467c04475778d5 --- /dev/null +++ b/core/themes/starterkit_theme/templates/content-edit/file-upload-help.html.twig @@ -0,0 +1,12 @@ +{# +/** + * @file + * Theme override to display help text for file fields. + * + * Available variables: + * - descriptions: Lines of help text for uploading a file. + * + * @see template_preprocess_file_upload_help() + */ +#} +{{ descriptions|safe_join('<br />') }} diff --git a/core/themes/starterkit_theme/templates/content-edit/file-widget-multiple.html.twig b/core/themes/starterkit_theme/templates/content-edit/file-widget-multiple.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..34646fe7796b1204850362dd07b1970f1c933327 --- /dev/null +++ b/core/themes/starterkit_theme/templates/content-edit/file-widget-multiple.html.twig @@ -0,0 +1,14 @@ +{# +/** + * @file + * Theme override to display a multi file form widget. + * + * Available variables: + * - table: Table of previously uploaded files. + * - element: The form element for uploading another file. + * + * @see template_preprocess_file_widget_multiple() + */ +#} +{{ table }} +{{ element }} diff --git a/core/themes/starterkit_theme/templates/content-edit/filter-caption.html.twig b/core/themes/starterkit_theme/templates/content-edit/filter-caption.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..1e35795fc153cc516987f5157e7edac1e728437f --- /dev/null +++ b/core/themes/starterkit_theme/templates/content-edit/filter-caption.html.twig @@ -0,0 +1,18 @@ +{# +/** + * @file + * Theme override for a filter caption. + * + * Returns HTML for a captioned image, audio, video or other tag. + * + * Available variables + * - string node: The complete HTML tag whose contents are being captioned. + * - string tag: The name of the HTML tag whose contents are being captioned. + * - string caption: The caption text. + * - string classes: The classes of the captioned HTML tag. + */ +#} +<figure role="group" class="caption caption-{{ tag }}{%- if classes %} {{ classes }}{%- endif %}"> +{{ node }} +<figcaption>{{ caption }}</figcaption> +</figure> diff --git a/core/themes/starterkit_theme/templates/content-edit/filter-guidelines.html.twig b/core/themes/starterkit_theme/templates/content-edit/filter-guidelines.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..afef2d2cfb37a41943a26e9c98cee45d81a36eb7 --- /dev/null +++ b/core/themes/starterkit_theme/templates/content-edit/filter-guidelines.html.twig @@ -0,0 +1,29 @@ +{# +/** + * @file + * Theme override for guidelines for a text format. + * + * Available variables: + * - format: Contains information about the current text format, including the + * following: + * - name: The name of the text format, potentially unsafe and needs to be + * escaped. + * - format: The machine name of the text format, e.g. 'basic_html'. + * - attributes: HTML attributes for the containing element. + * - tips: Descriptions and a CSS ID in the form of 'module-name/filter-id' + * (only used when 'long' is TRUE) for each filter in one or more text + * formats. + * + * @see template_preprocess_filter_tips() + */ +#} +{% + set classes = [ + 'filter-guidelines-item', + 'filter-guidelines-' ~ format.id, + ] +%} +<div{{ attributes.addClass(classes) }}> + <h4 class="label">{{ format.label }}</h4> + {{ tips }} +</div> diff --git a/core/themes/starterkit_theme/templates/content-edit/filter-tips.html.twig b/core/themes/starterkit_theme/templates/content-edit/filter-tips.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..25ed49d6ae18a9ef97a71308518f9fb998a5bce3 --- /dev/null +++ b/core/themes/starterkit_theme/templates/content-edit/filter-tips.html.twig @@ -0,0 +1,61 @@ +{# +/** + * @file + * Theme override for a set of filter tips. + * + * Available variables: + * - tips: Descriptions and a CSS ID in the form of 'module-name/filter-id' + * (only used when 'long' is TRUE) for each filter in one or more text + * formats. + * - long: A flag indicating whether the passed-in filter tips contain extended + * explanations, i.e. intended to be output on the path 'filter/tips' + * (TRUE), or are in a short format, i.e. suitable to be displayed below a + * form element. Defaults to FALSE. + * - multiple: A flag indicating there is more than one filter tip. + * + * @see template_preprocess_filter_tips() + */ +#} +{% if multiple %} + <h2>{{ 'Text Formats'|t }}</h2> +{% endif %} + +{% if tips|length %} + {% if multiple %} + <div class="compose-tips"> + {% endif %} + + {% for name, tip in tips %} + {% if multiple %} + {% + set tip_classes = [ + 'filter-type', + 'filter-' ~ name|clean_class, + ] + %} + <div{{ tip.attributes.addClass(tip_classes) }}> + <h3>{{ tip.name }}</h3> + {% endif %} + + {% if tip.list|length %} + <ul class="tips"> + {% for item in tip.list %} + {% + set item_classes = [ + long ? 'filter-' ~ item.id|replace({'/': '-'}), + ] + %} + <li{{ item.attributes.addClass(item_classes) }}>{{ item.tip }}</li> + {% endfor %} + </ul> + {% endif %} + + {% if multiple %} + </div> + {% endif %} + {% endfor %} + + {% if multiple %} + </div> + {% endif %} +{% endif %} diff --git a/core/themes/starterkit_theme/templates/content-edit/image-widget.html.twig b/core/themes/starterkit_theme/templates/content-edit/image-widget.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..dac3a227b3d3a5eadd45b2538311a1c894fea040 --- /dev/null +++ b/core/themes/starterkit_theme/templates/content-edit/image-widget.html.twig @@ -0,0 +1,23 @@ +{# +/** + * @file + * Theme override for an image field widget. + * + * Available variables: + * - attributes: HTML attributes for the containing element. + * - data: Render elements of the image widget. + * + * @see template_preprocess_image_widget() + */ +#} +<div{{ attributes }}> + {% if data.preview %} + <div class="image-preview"> + {{ data.preview }} + </div> + {% endif %} + <div class="image-widget-data"> + {# Render widget data without the image preview that was output already. #} + {{ data|without('preview') }} + </div> +</div> diff --git a/core/themes/starterkit_theme/templates/content-edit/node-add-list.html.twig b/core/themes/starterkit_theme/templates/content-edit/node-add-list.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..f38fe3a5c67d5d97ae6dbdd0e67debfee7c0df99 --- /dev/null +++ b/core/themes/starterkit_theme/templates/content-edit/node-add-list.html.twig @@ -0,0 +1,30 @@ +{# +/** + * @file + * Theme override to list node types available for adding content. + * + * This list is displayed on the Add content admin page. + * + * Available variables: + * - types: A list of content types, each with the following properties: + * - add_link: Link to create a piece of content of this type. + * - description: Description of this type of content. + * + * @see template_preprocess_node_add_list() + */ +#} +{% if types is not empty %} + <dl class="node-type-list"> + {% for type in types %} + <dt>{{ type.add_link }}</dt> + <dd>{{ type.description }}</dd> + {% endfor %} + </dl> +{% else %} + <p> + {% set create_content = path('node.type_add') %} + {% trans %} + You have not created any content types yet. Go to the <a href="{{ create_content }}">content type creation page</a> to add a new content type. + {% endtrans %} + </p> +{% endif %} diff --git a/core/themes/starterkit_theme/templates/content-edit/node-edit-form.html.twig b/core/themes/starterkit_theme/templates/content-edit/node-edit-form.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..18097f37974ce1239e7493cdc1d3a26d54e91fd8 --- /dev/null +++ b/core/themes/starterkit_theme/templates/content-edit/node-edit-form.html.twig @@ -0,0 +1,28 @@ +{# +/** + * @file + * Theme override for a node edit form. + * + * Two column template for the node add/edit form. + * + * This template will be used when a node edit form specifies 'node_edit_form' + * as its #theme callback. Otherwise, by default, node add/edit forms will be + * themed by form.html.twig. + * + * Available variables: + * - form: The node add/edit form. + * + * @see seven_form_node_form_alter() + */ +#} +<div class="layout-node-form clearfix"> + <div class="layout-region layout-region-node-main"> + {{ form|without('advanced', 'actions') }} + </div> + <div class="layout-region layout-region-node-secondary"> + {{ form.advanced }} + </div> + <div class="layout-region layout-region-node-footer"> + {{ form.actions }} + </div> +</div> diff --git a/core/themes/starterkit_theme/templates/content-edit/text-format-wrapper.html.twig b/core/themes/starterkit_theme/templates/content-edit/text-format-wrapper.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..08a88ca1ce1d95fba8fe44a30f3fdaca95210143 --- /dev/null +++ b/core/themes/starterkit_theme/templates/content-edit/text-format-wrapper.html.twig @@ -0,0 +1,26 @@ +{# +/** + * @file + * Theme override for a text format-enabled form element. + * + * Available variables: + * - children: Text format element children. + * - description: Text format element description. + * - attributes: HTML attributes for the containing element. + * - aria_description: Flag for whether or not an ARIA description has been + * added to the description container. + * + * @see template_preprocess_text_format_wrapper() + */ +#} +<div class="js-text-format-wrapper text-format-wrapper js-form-item form-item"> + {{ children }} + {% if description %} + {% + set classes = [ + aria_description ? 'description', + ] + %} + <div{{ attributes.addClass(classes) }}>{{ description }}</div> + {% endif %} +</div> diff --git a/core/themes/starterkit_theme/templates/content/aggregator-item.html.twig b/core/themes/starterkit_theme/templates/content/aggregator-item.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..16f4428a03d81e039afd2f2129e37bc24709d47d --- /dev/null +++ b/core/themes/starterkit_theme/templates/content/aggregator-item.html.twig @@ -0,0 +1,31 @@ +{# +/** + * @file + * Theme override to present a feed item in an aggregator page. + * + * Available variables: + * - url: URL to the originating feed item. + * - title: (optional) Title of the feed item. + * - content: All field items. Use {{ content }} to print them all, + * or print a subset such as {{ content.field_example }}. Use + * {{ content|without('field_example') }} to temporarily suppress the printing + * of a given element. + * - attributes: HTML attributes for the wrapper. + * - title_prefix: Additional output populated by modules, intended to be + * displayed in front of the main title tag that appears in the template. + * - title_suffix: Additional output populated by modules, intended to be + * displayed after the main title tag that appears in the template. + * + * @see template_preprocess_aggregator_item() + */ +#} +<article{{ attributes.addClass('aggregator-item') }}> + {{ title_prefix }} + {% if title %} + <h3 class="feed-item-title"> + <a href="{{ url }}">{{ title }}</a> + </h3> + {% endif %} + {{ title_suffix }} + {{ content }} +</article> diff --git a/core/themes/starterkit_theme/templates/content/book-node-export-html.html.twig b/core/themes/starterkit_theme/templates/content/book-node-export-html.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..94a4c24dc714d510299c202402d6e575b739a126 --- /dev/null +++ b/core/themes/starterkit_theme/templates/content/book-node-export-html.html.twig @@ -0,0 +1,20 @@ +{# +/** + * @file + * Theme override for a single node in a printer-friendly outline. + * + * Available variables: + * - node: Fully loaded node. + * - depth: Depth of the current node inside the outline. + * - title: Node title. + * - content: Node content. + * - children: All the child nodes recursively rendered through this file. + * + * @see template_preprocess_book_node_export_html() + */ +#} +<article id="node-{{ node.id }}" class="section-{{ depth }}"> + <h1 class="book-heading">{{ title }}</h1> + {{ content }} + {{ children }} +</article> diff --git a/core/themes/starterkit_theme/templates/content/comment.html.twig b/core/themes/starterkit_theme/templates/content/comment.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..ccfcfc84c3e3711cb991d2a6182c3aaba56e9efd --- /dev/null +++ b/core/themes/starterkit_theme/templates/content/comment.html.twig @@ -0,0 +1,111 @@ +{# +/** + * @file + * Theme override for comments. + * + * Available variables: + * - author: Comment author. Can be a link or plain text. + * - content: The content-related items for the comment display. Use + * {{ content }} to print them all, or print a subset such as + * {{ content.field_example }}. Use the following code to temporarily suppress + * the printing of a given child element: + * @code + * {{ content|without('field_example') }} + * @endcode + * - created: Formatted date and time for when the comment was created. + * Preprocess functions can reformat it by calling DateFormatter::format() + * with the desired parameters on the 'comment.created' variable. + * - changed: Formatted date and time for when the comment was last changed. + * Preprocess functions can reformat it by calling DateFormatter::format() + * with the desired parameters on the 'comment.changed' variable. + * - permalink: Comment permalink. + * - submitted: Submission information created from author and created + * during template_preprocess_comment(). + * - user_picture: The comment author's profile picture. + * - status: Comment status. Possible values are: + * unpublished, published, or preview. + * - title: Comment title, linked to the comment. + * - attributes: HTML attributes for the containing element. + * The attributes.class may contain one or more of the following classes: + * - comment: The current template type; e.g., 'theming hook'. + * - by-anonymous: Comment by an unregistered user. + * - by-{entity-type}-author: Comment by the author of the parent entity, + * eg. by-node-author. + * - preview: When previewing a new or edited comment. + * The following applies only to viewers who are registered users: + * - unpublished: An unpublished comment visible only to administrators. + * - title_prefix: Additional output populated by modules, intended to be + * displayed in front of the main title tag that appears in the template. + * - title_suffix: Additional output populated by modules, intended to be + * displayed after the main title tag that appears in the template. + * - content_attributes: List of classes for the styling of the comment content. + * - title_attributes: Same as attributes, except applied to the main title + * tag that appears in the template. + * - threaded: A flag indicating whether the comments are threaded or not. + * + * These variables are provided to give context about the parent comment (if + * any): + * - parent_comment: Full parent comment entity (if any). + * - parent_author: Equivalent to author for the parent comment. + * - parent_created: Equivalent to created for the parent comment. + * - parent_changed: Equivalent to changed for the parent comment. + * - parent_title: Equivalent to title for the parent comment. + * - parent_permalink: Equivalent to permalink for the parent comment. + * - parent: A text string of parent comment submission information created from + * 'parent_author' and 'parent_created' during template_preprocess_comment(). + * This information is presented to help screen readers follow lengthy + * discussion threads. You can hide this from sighted users using the class + * visually-hidden. + * + * These two variables are provided for context: + * - comment: Full comment object. + * - entity: Entity the comments are attached to. + * + * @see template_preprocess_comment() + */ +#} +{% if threaded %} + {{ attach_library('starterkit_theme/indented') }} +{% endif %} +{% + set classes = [ + 'comment', + 'js-comment', + status != 'published' ? status, + comment.owner.anonymous ? 'by-anonymous', + author_id and author_id == commented_entity.getOwnerId() ? 'by-' ~ commented_entity.getEntityTypeId() ~ '-author', + ] +%} +<article{{ attributes.addClass(classes) }}> + {# + Hide the "new" indicator by default, let a piece of JavaScript ask the + server which comments are new for the user. Rendering the final "new" + indicator here would break the render cache. + #} + <mark class="hidden" data-comment-timestamp="{{ new_indicator_timestamp }}"></mark> + + <footer class="comment__meta"> + {{ user_picture }} + <p class="comment__submitted">{{ submitted }}</p> + + {# + Indicate the semantic relationship between parent and child comments for + accessibility. The list is difficult to navigate in a screen reader + without this information. + #} + {% if parent %} + <p class="parent visually-hidden">{{ parent }}</p> + {% endif %} + + {{ permalink }} + </footer> + + <div{{ content_attributes.addClass('content') }}> + {% if title %} + {{ title_prefix }} + <h3{{ title_attributes }}>{{ title }}</h3> + {{ title_suffix }} + {% endif %} + {{ content }} + </div> +</article> diff --git a/core/themes/starterkit_theme/templates/content/links--node.html.twig b/core/themes/starterkit_theme/templates/content/links--node.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..e6cda0d7bb557e1be0c732d456ffcbb353f81269 --- /dev/null +++ b/core/themes/starterkit_theme/templates/content/links--node.html.twig @@ -0,0 +1,40 @@ +{# +/** + * @file + * Theme override to display node links. + * + * Available variables: + * - attributes: Attributes for the UL containing the list of links. + * - links: Links to be output. + * Each link will have the following elements: + * - link: (optional) A render array that returns a link. See + * template_preprocess_links() for details how it is generated. + * - text: The link text. + * - attributes: HTML attributes for the list item element. + * - text_attributes: (optional) HTML attributes for the span element if no + * 'url' was supplied. + * - heading: (optional) A heading to precede the links. + * - text: The heading text. + * - level: The heading level (e.g. 'h2', 'h3'). + * - attributes: (optional) A keyed list of attributes for the heading. + * If the heading is a string, it will be used as the text of the heading and + * the level will default to 'h2'. + * + * Headings should be used on navigation menus and any list of links that + * consistently appears on multiple pages. To make the heading invisible use + * the 'visually-hidden' CSS class. Do not use 'display:none', which + * removes it from screen readers and assistive technology. Headings allow + * screen reader and keyboard only users to navigate to or skip the links. + * See http://juicystudio.com/article/screen-readers-display-none.php and + * http://www.w3.org/TR/WCAG-TECHS/H42.html for more information. + * + * @see template_preprocess_links() + * + * @ingroup themeable + */ +#} +{% if links %} + <div class="node__links"> + {% include "links.html.twig" %} + </div> +{% endif %} diff --git a/core/themes/starterkit_theme/templates/content/mark.html.twig b/core/themes/starterkit_theme/templates/content/mark.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..9219915ce5d567258169d4b58cdf44a32263e0b4 --- /dev/null +++ b/core/themes/starterkit_theme/templates/content/mark.html.twig @@ -0,0 +1,20 @@ +{# +/** + * @file + * Theme override for a marker for new or updated content. + * + * Available variables: + * - status: Number representing the marker status to display. Use the constants + * below for comparison: + * - MARK_NEW + * - MARK_UPDATED + * - MARK_READ + */ +#} +{% if logged_in %} + {% if status is constant('MARK_NEW') %} + <span class="marker">{{ 'New'|t }}</span> + {% elseif status is constant('MARK_UPDATED') %} + <span class="marker">{{ 'Updated'|t }}</span> + {% endif %} +{% endif %} diff --git a/core/themes/starterkit_theme/templates/content/media-embed-error.html.twig b/core/themes/starterkit_theme/templates/content/media-embed-error.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..5b8dce4c412fbe008179adb7c20761a78b7f91d8 --- /dev/null +++ b/core/themes/starterkit_theme/templates/content/media-embed-error.html.twig @@ -0,0 +1,21 @@ +{# +/** + * @file + * Theme override for a missing media error. + * + * Available variables + * - message: The message text. + * - attributes: HTML attributes for the containing element. + * + * When a response from the back end can't be returned, a related error message + * is displayed from JavaScript. + * + * @see Drupal.theme.mediaEmbedPreviewError + * + * @ingroup themeable + */ +#} +{{ attach_library('starterkit_theme/media_embed_error') }} +<div{{ attributes.addClass('media-embed-error', 'media-embed-error--missing-source') }}> + {{ message }} +</div> diff --git a/core/themes/starterkit_theme/templates/content/media.html.twig b/core/themes/starterkit_theme/templates/content/media.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..422030e9d027b79f2b77d252f09bad1fb7821bdd --- /dev/null +++ b/core/themes/starterkit_theme/templates/content/media.html.twig @@ -0,0 +1,28 @@ +{# +/** + * @file + * Theme override to display a media item. + * + * Available variables: + * - name: Name of the media. + * - content: Media content. + * + * @see template_preprocess_media() + * + * @ingroup themeable + */ +#} +{% + set classes = [ + 'media', + 'media--type-' ~ media.bundle()|clean_class, + not media.isPublished() ? 'media--unpublished', + view_mode ? 'media--view-mode-' ~ view_mode|clean_class, + ] +%} +<article{{ attributes.addClass(classes) }}> + {{ title_suffix.contextual_links }} + {% if content %} + {{ content }} + {% endif %} +</article> diff --git a/core/themes/starterkit_theme/templates/content/node.html.twig b/core/themes/starterkit_theme/templates/content/node.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..0dd41d3f4a675321d2781d2e17863b191239bd24 --- /dev/null +++ b/core/themes/starterkit_theme/templates/content/node.html.twig @@ -0,0 +1,108 @@ +{# +/** + * @file + * Theme override to display a node. + * + * Available variables: + * - node: The node entity with limited access to object properties and methods. + * Only method names starting with "get", "has", or "is" and a few common + * methods such as "id", "label", and "bundle" are available. For example: + * - node.getCreatedTime() will return the node creation timestamp. + * - node.hasField('field_example') returns TRUE if the node bundle includes + * field_example. (This does not indicate the presence of a value in this + * field.) + * - node.isPublished() will return whether the node is published or not. + * Calling other methods, such as node.delete(), will result in an exception. + * See \Drupal\node\Entity\Node for a full list of public properties and + * methods for the node object. + * - label: (optional) The title of the node. + * - content: All node items. Use {{ content }} to print them all, + * or print a subset such as {{ content.field_example }}. Use + * {{ content|without('field_example') }} to temporarily suppress the printing + * of a given child element. + * - author_picture: The node author user entity, rendered using the "compact" + * view mode. + * - metadata: Metadata for this node. + * - date: (optional) Themed creation date field. + * - author_name: (optional) Themed author name field. + * - url: Direct URL of the current node. + * - display_submitted: Whether submission information should be displayed. + * - attributes: HTML attributes for the containing element. + * The attributes.class element may contain one or more of the following + * classes: + * - node: The current template type (also known as a "theming hook"). + * - node--type-[type]: The current node type. For example, if the node is an + * "Article" it would result in "node--type-article". Note that the machine + * name will often be in a short form of the human readable label. + * - node--view-mode-[view_mode]: The View Mode of the node; for example, a + * teaser would result in: "node--view-mode-teaser", and + * full: "node--view-mode-full". + * The following are controlled through the node publishing options. + * - node--promoted: Appears on nodes promoted to the front page. + * - node--sticky: Appears on nodes ordered above other non-sticky nodes in + * teaser listings. + * - node--unpublished: Appears on unpublished nodes visible only to site + * admins. + * - title_attributes: Same as attributes, except applied to the main title + * tag that appears in the template. + * - content_attributes: Same as attributes, except applied to the main + * content tag that appears in the template. + * - author_attributes: Same as attributes, except applied to the author of + * the node tag that appears in the template. + * - title_prefix: Additional output populated by modules, intended to be + * displayed in front of the main title tag that appears in the template. + * - title_suffix: Additional output populated by modules, intended to be + * displayed after the main title tag that appears in the template. + * - view_mode: View mode; for example, "teaser" or "full". + * - teaser: Flag for the teaser state. Will be true if view_mode is 'teaser'. + * - page: Flag for the full page state. Will be true if view_mode is 'full'. + * - readmore: Flag for more state. Will be true if the teaser content of the + * node cannot hold the main body content. + * - logged_in: Flag for authenticated user status. Will be true when the + * current user is a logged-in member. + * - is_admin: Flag for admin user status. Will be true when the current user + * is an administrator. + * + * @see template_preprocess_node() + * + * @todo Remove the id attribute (or make it a class), because if that gets + * rendered twice on a page this is invalid CSS for example: two lists + * in different view modes. + */ +#} +{% + set classes = [ + 'node', + 'node--type-' ~ node.bundle|clean_class, + node.isPromoted() ? 'node--promoted', + node.isSticky() ? 'node--sticky', + not node.isPublished() ? 'node--unpublished', + view_mode ? 'node--view-mode-' ~ view_mode|clean_class, + ] +%} +{{ attach_library('starterkit_theme/node') }} +<article{{ attributes.addClass(classes) }}> + + {{ title_prefix }} + {% if label and not page %} + <h2{{ title_attributes }}> + <a href="{{ url }}" rel="bookmark">{{ label }}</a> + </h2> + {% endif %} + {{ title_suffix }} + + {% if display_submitted %} + <footer class="node__meta"> + {{ author_picture }} + <div{{ author_attributes.addClass('node__submitted') }}> + {% trans %}Submitted by {{ author_name }} on {{ date }}{% endtrans %} + {{ metadata }} + </div> + </footer> + {% endif %} + + <div{{ content_attributes.addClass('node__content') }}> + {{ content }} + </div> + +</article> diff --git a/core/themes/starterkit_theme/templates/content/page-title.html.twig b/core/themes/starterkit_theme/templates/content/page-title.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..e1de7266074e092d5d5d99d1c0c12bc36955989b --- /dev/null +++ b/core/themes/starterkit_theme/templates/content/page-title.html.twig @@ -0,0 +1,19 @@ +{# +/** + * @file + * Theme override for page titles. + * + * Available variables: + * - title_attributes: HTML attributes for the page title element. + * - title_prefix: Additional output populated by modules, intended to be + * displayed in front of the main title tag that appears in the template. + * - title: The page title, for use in the actual content. + * - title_suffix: Additional output populated by modules, intended to be + * displayed after the main title tag that appears in the template. + */ +#} +{{ title_prefix }} +{% if title %} + <h1{{ title_attributes.addClass('page-title') }}>{{ title }}</h1> +{% endif %} +{{ title_suffix }} diff --git a/core/themes/starterkit_theme/templates/content/search-result.html.twig b/core/themes/starterkit_theme/templates/content/search-result.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..f879bc58852215aa69928634d97d83c24fc822e7 --- /dev/null +++ b/core/themes/starterkit_theme/templates/content/search-result.html.twig @@ -0,0 +1,72 @@ +{# +/** + * @file + * Theme override for displaying a single search result. + * + * This template renders a single search result. The list of results is + * rendered using '#theme' => 'item_list', with suggestions of: + * - item_list__search_results__(plugin_id) + * - item_list__search_results + * + * Available variables: + * - url: URL of the result. + * - title: Title of the result. + * - snippet: A small preview of the result. Does not apply to user searches. + * - info: String of all the meta information ready for print. Does not apply + * to user searches. + * - plugin_id: The machine-readable name of the plugin being executed,such + * as "node_search" or "user_search". + * - title_prefix: Additional output populated by modules, intended to be + * displayed in front of the main title tag that appears in the template. + * - title_suffix: Additional output populated by modules, intended to be + * displayed after the main title tag that appears in the template. + * - info_split: Contains same data as info, but split into separate parts. + * - info_split.type: Node type (or item type string supplied by module). + * - info_split.user: Author of the node linked to users profile. Depends + * on permission. + * - info_split.date: Last update of the node. Short formatted. + * - info_split.comment: Number of comments output as "% comments", % + * being the count. (Depends on comment.module). + * @todo The info variable needs to be made drillable and each of these sub + * items should instead be within info and renamed info.foo, info.bar, etc. + * + * Other variables: + * - title_attributes: HTML attributes for the title. + * - content_attributes: HTML attributes for the content. + * + * Since info_split is keyed, a direct print of the item is possible. + * This array does not apply to user searches so it is recommended to check + * for its existence before printing. The default keys of 'type', 'user' and + * 'date' always exist for node searches. Modules may provide other data. + * @code + * {% if (info_split.comment) %} + * <span class="info-comment"> + * {{ info_split.comment }} + * </span> + * {% endif %} + * @endcode + * + * To check for all available data within info_split, use the code below. + * @code + * <pre> + * {{ dump(info_split) }} + * </pre> + * @endcode + * + * @see template_preprocess_search_result() + */ +#} +{{ attach_library('starterkit_theme/search-results') }} +{{ title_prefix }} +<h3{{ title_attributes.addClass('search-result__title') }}> + <a href="{{ url }}">{{ title }}</a> +</h3> +{{ title_suffix }} +<div class="search-result__snippet-info"> + {% if snippet %} + <p{{ content_attributes.addClass('search-result__snippet') }}>{{ snippet }}</p> + {% endif %} + {% if info %} + <p class="search-result__info">{{ info }}</p> + {% endif %} +</div> diff --git a/core/themes/starterkit_theme/templates/content/taxonomy-term.html.twig b/core/themes/starterkit_theme/templates/content/taxonomy-term.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..6478b507d006fdd2386ab35f7eef09eb89be16b3 --- /dev/null +++ b/core/themes/starterkit_theme/templates/content/taxonomy-term.html.twig @@ -0,0 +1,41 @@ +{# +/** + * @file + * Theme override to display a taxonomy term. + * + * Available variables: + * - url: URL of the current term. + * - name: (optional) Name of the current term. + * - content: Items for the content of the term (fields and description). + * Use 'content' to print them all, or print a subset such as + * 'content.description'. Use the following code to exclude the + * printing of a given child element: + * @code + * {{ content|without('description') }} + * @endcode + * - attributes: HTML attributes for the wrapper. + * - page: Flag for the full page state. + * - term: The taxonomy term entity, including: + * - id: The ID of the taxonomy term. + * - bundle: Machine name of the current vocabulary. + * - view_mode: View mode, e.g. 'full', 'teaser', etc. + * + * @see template_preprocess_taxonomy_term() + */ +#} +{% + set classes = [ + 'taxonomy-term', + 'vocabulary-' ~ term.bundle|clean_class, + ] +%} +<div{{ attributes.setAttribute('id', 'taxonomy-term-' ~ term.id).addClass(classes) }}> + {{ title_prefix }} + {% if name and not page %} + <h2><a href="{{ url }}">{{ name }}</a></h2> + {% endif %} + {{ title_suffix }} + <div class="content"> + {{ content }} + </div> +</div> diff --git a/core/themes/starterkit_theme/templates/dataset/aggregator-feed.html.twig b/core/themes/starterkit_theme/templates/dataset/aggregator-feed.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..9eacccb60481cf07f94c7427af4c4f193f1ca939 --- /dev/null +++ b/core/themes/starterkit_theme/templates/dataset/aggregator-feed.html.twig @@ -0,0 +1,36 @@ +{# +/** + * @file + * Theme override to present an aggregator feed. + * + * The contents are rendered above feed listings when browsing source feeds. + * For example, "example.com/aggregator/sources/1". + * + * Available variables: + * - title: (optional) Title of the feed item. + * - content: All field items. Use {{ content }} to print them all, + * or print a subset such as {{ content.field_example }}. Use + * {{ content|without('field_example') }} to temporarily suppress the printing + * of a given element. + * - attributes: HTML attributes for the wrapper. + * - title_attributes: Same as attributes, except applied to the main title + * tag that appears in the template. + * - title_prefix: Additional output populated by modules, intended to be + * displayed in front of the main title tag that appears in the template. + * - title_suffix: Additional output populated by modules, intended to be + * displayed after the main title tag that appears in the template. + * + * @see template_preprocess_aggregator_feed() + */ +#} +<div{{ attributes.addClass('aggregator-feed') }}> + + {{ title_prefix }} + {% if title and not full %} + <h2{{ title_attributes }}>{{ title }}</h2> + {% endif %} + {{ title_suffix }} + + {{ content }} + +</div> diff --git a/core/themes/starterkit_theme/templates/dataset/forum-icon.html.twig b/core/themes/starterkit_theme/templates/dataset/forum-icon.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..d6be503bb2af344d3f149ce285f0980c0878fc28 --- /dev/null +++ b/core/themes/starterkit_theme/templates/dataset/forum-icon.html.twig @@ -0,0 +1,30 @@ +{# +/** + * @file + * Theme override to display a status icon for a forum post. + * + * Available variables: + * - attributes: HTML attributes to be applied to the wrapper element. + * - class: HTML classes that determine which icon to display. May be one of + * 'hot', 'hot-new', 'new', 'default', 'closed', or 'sticky'. + * - title: Text alternative for the forum icon. + * - icon_title: Text alternative for the forum icon, same as above. + * - new_posts: '1' when this topic contains new posts, otherwise '0'. + * - first_new: '1' when this is the first topic with new posts, otherwise '0'. + * - icon_status: Indicates which status icon should be used. + * + * @see template_preprocess_forum_icon() + */ +#} +{% + set classes = [ + 'forum__icon', + 'forum__topic-status--' ~ icon_status, + ] +%} +<div{{ attributes.addClass(classes) }}> + {% if first_new -%} + <a id="new"></a> + {%- endif %} + <span class="visually-hidden">{{ icon_title }}</span> +</div> diff --git a/core/themes/starterkit_theme/templates/dataset/forum-list.html.twig b/core/themes/starterkit_theme/templates/dataset/forum-list.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..d8523f1598276ca42a5d759fd45852f871158774 --- /dev/null +++ b/core/themes/starterkit_theme/templates/dataset/forum-list.html.twig @@ -0,0 +1,79 @@ +{# +/** + * @file + * Theme override to display a list of forums and containers. + * + * Available variables: + * - forums: A collection of forums and containers to display. It is keyed to + * the numeric IDs of all child forums and containers. Each forum in forums + * contains: + * - is_container: A flag indicating if the forum can contain other + * forums. Otherwise, the forum can only contain topics. + * - depth: How deep the forum is in the current hierarchy. + * - zebra: 'even' or 'odd', used for row class. + * - icon_class: 'default' or 'new', used for forum icon class. + * - icon_title: Text alternative for the forum icon. + * - name: The name of the forum. + * - link: The URL to link to this forum. + * - description: The description field for the forum, containing: + * - value: The descriptive text for the forum. + * - new_topics: A flag indicating if the forum contains unread posts. + * - new_url: A URL to the forum's unread posts. + * - new_text: Text for the above URL, which tells how many new posts. + * - old_topics: A count of posts that have already been read. + * - num_posts: The total number of posts in the forum. + * - last_reply: Text representing the last time a forum was posted or + * commented in. + * - forum_id: Forum ID for the current forum. Parent to all items within the + * forums array. + * + * @see template_preprocess_forum_list() + */ +#} +<table id="forum-{{ forum_id }}"> + <thead> + <tr> + <th>{{ 'Forum'|t }}</th> + <th>{{ 'Topics'|t }}</th> + <th>{{ 'Posts'|t }}</th> + <th>{{ 'Last post'|t }}</th> + </tr> + </thead> + <tbody> + {% for child_id, forum in forums %} + <tr id="forum-list-{{ child_id }}" class="{{ forum.zebra }}"> + <td {% if forum.is_container == true -%} + colspan="4" class="container" + {%- else -%} + class="forum-list__forum" + {%- endif -%}> + {# + Enclose the contents of this cell with X divs, where X is the + depth this forum resides at. This will allow us to use CSS + left-margin for indenting. + #} + {% if forum.depth > 0 %}{% for i in 1..forum.depth %}<div class="indented">{% endfor %}{% endif %} + <div class="forum__icon forum-status-{{ forum.icon_class }}" title="{{ forum.icon_title }}"> + <span class="visually-hidden">{{ forum.icon_title }}</span> + </div> + <div class="forum__name"><a href="{{ forum.link }}">{{ forum.label }}</a></div> + {% if forum.description.value %} + <div class="forum__description">{{ forum.description.value }}</div> + {% endif %} + {% if forum.depth > 0 %}{% for i in 1..forum.depth %}</div>{% endfor %}{% endif %} + </td> + {% if forum.is_container == false %} + <td class="forum__topics"> + {{ forum.num_topics }} + {% if forum.new_topics == true %} + <br /> + <a href="{{ forum.new_url }}">{{ forum.new_text }}</a> + {% endif %} + </td> + <td class="forum__posts">{{ forum.num_posts }}</td> + <td class="forum__last-reply">{{ forum.last_reply }}</td> + {% endif %} + </tr> + {% endfor %} + </tbody> +</table> diff --git a/core/themes/starterkit_theme/templates/dataset/forums.html.twig b/core/themes/starterkit_theme/templates/dataset/forums.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..15da6020f7a2860998865d69db79050aec6d78c8 --- /dev/null +++ b/core/themes/starterkit_theme/templates/dataset/forums.html.twig @@ -0,0 +1,24 @@ +{# +/** + * @file + * Theme override to display a forum. + * + * May contain forum containers as well as forum topics. + * + * Available variables: + * - forums: The forums to display (as processed by forum-list.html.twig). + * - topics: The topics to display. + * - topics_pager: The topics pager. + * - forums_defined: A flag to indicate that the forums are configured. + * + * @see template_preprocess_forums() + */ +#} +{{ attach_library('starterkit_theme/forum') }} +{% if forums_defined %} + <div class="forum"> + {{ forums }} + {{ topics }} + {{ topics_pager }} + </div> +{% endif %} diff --git a/core/themes/starterkit_theme/templates/dataset/item-list--search-results.html.twig b/core/themes/starterkit_theme/templates/dataset/item-list--search-results.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..e9928fd776600c762b9f096370e9978ff1c6495a --- /dev/null +++ b/core/themes/starterkit_theme/templates/dataset/item-list--search-results.html.twig @@ -0,0 +1,29 @@ +{% extends "item-list.html.twig" %} +{# +/** + * @file + * Theme override for an item list of search results. + * + * Available variables: + * - items: A list of items. Each item contains: + * - attributes: HTML attributes to be applied to each list item. + * - value: The content of the list element. + * - title: The title of the list. + * - list_type: The tag for list element ("ul" or "ol"). + * - attributes: HTML attributes to be applied to the list. + * - empty: A message to display when there are no items. Allowed value is a + * string or render array. + * - context: An list of contextual data associated with the list. For search + * results, the following data is set: + * - plugin: The search plugin ID, for example "node_search". + * + * @see template_preprocess_item_list() + */ +#} +{% + set classes = [ + 'search-results', + context.plugin ~ '-results', + ] +%} +{% set attributes = attributes.addClass(classes) %} diff --git a/core/themes/starterkit_theme/templates/dataset/item-list.html.twig b/core/themes/starterkit_theme/templates/dataset/item-list.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..20541b0b7e6652761504f747ad9972a2759fe27b --- /dev/null +++ b/core/themes/starterkit_theme/templates/dataset/item-list.html.twig @@ -0,0 +1,41 @@ +{# +/** + * @file + * Theme override for an item list. + * + * Available variables: + * - items: A list of items. Each item contains: + * - attributes: HTML attributes to be applied to each list item. + * - value: The content of the list element. + * - title: The title of the list. + * - list_type: The tag for list element ("ul" or "ol"). + * - wrapper_attributes: HTML attributes to be applied to the list wrapper. + * - attributes: HTML attributes to be applied to the list. + * - empty: A message to display when there are no items. Allowed value is a + * string or render array. + * - context: A list of contextual data associated with the list. May contain: + * - list_style: The custom list style. + * + * @see template_preprocess_item_list() + */ +#} +{% if context.list_style %} + {%- set wrapper_attributes = wrapper_attributes.addClass('item-list--' ~ context.list_style) %} + {%- set attributes = attributes.addClass('item-list__' ~ context.list_style) %} +{% endif %} +{% if items or empty -%} + <div{{ wrapper_attributes.addClass('item-list') }}> + {%- if title is not empty -%} + <h3>{{ title }}</h3> + {%- endif -%} + {%- if items -%} + <{{ list_type }}{{ attributes }}> + {%- for item in items -%} + <li{{ item.attributes }}>{{ item.value }}</li> + {%- endfor -%} + </{{ list_type }}> + {%- else -%} + {{- empty -}} + {%- endif -%} + </div> +{%- endif %} diff --git a/core/themes/starterkit_theme/templates/dataset/table.html.twig b/core/themes/starterkit_theme/templates/dataset/table.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..2afa9c155642349eea89066b17ad245044558b80 --- /dev/null +++ b/core/themes/starterkit_theme/templates/dataset/table.html.twig @@ -0,0 +1,113 @@ +{# +/** + * @file + * Theme override to display a table. + * + * Available variables: + * - attributes: HTML attributes to apply to the <table> tag. + * - caption: A localized string for the <caption> tag. + * - colgroups: Column groups. Each group contains the following properties: + * - attributes: HTML attributes to apply to the <col> tag. + * Note: Drupal currently supports only one table header row, see + * https://www.drupal.org/node/893530 and + * http://api.drupal.org/api/drupal/includes!theme.inc/function/theme_table/7#comment-5109. + * - header: Table header cells. Each cell contains the following properties: + * - tag: The HTML tag name to use; either 'th' or 'td'. + * - attributes: HTML attributes to apply to the tag. + * - content: A localized string for the title of the column. + * - field: Field name (required for column sorting). + * - sort: Default sort order for this column ("asc" or "desc"). + * - sticky: A flag indicating whether to use a "sticky" table header. + * - rows: Table rows. Each row contains the following properties: + * - attributes: HTML attributes to apply to the <tr> tag. + * - data: Table cells. + * - no_striping: A flag indicating that the row should receive no + * 'even / odd' styling. Defaults to FALSE. + * - cells: Table cells of the row. Each cell contains the following keys: + * - tag: The HTML tag name to use; either 'th' or 'td'. + * - attributes: Any HTML attributes, such as "colspan", to apply to the + * table cell. + * - content: The string to display in the table cell. + * - active_table_sort: A boolean indicating whether the cell is the active + table sort. + * - footer: Table footer rows, in the same format as the rows variable. + * - empty: The message to display in an extra row if table does not have + * any rows. + * - no_striping: A boolean indicating that the row should receive no striping. + * - header_columns: The number of columns in the header. + * + * @see template_preprocess_table() + */ +#} +<table{{ attributes }}> + {% if caption %} + <caption>{{ caption }}</caption> + {% endif %} + + {% for colgroup in colgroups %} + {% if colgroup.cols %} + <colgroup{{ colgroup.attributes }}> + {% for col in colgroup.cols %} + <col{{ col.attributes }} /> + {% endfor %} + </colgroup> + {% else %} + <colgroup{{ colgroup.attributes }} /> + {% endif %} + {% endfor %} + + {% if header %} + <thead> + <tr> + {% for cell in header %} + {% + set cell_classes = [ + cell.active_table_sort ? 'is-active', + ] + %} + <{{ cell.tag }}{{ cell.attributes.addClass(cell_classes) }}> + {{- cell.content -}} + </{{ cell.tag }}> + {% endfor %} + </tr> + </thead> + {% endif %} + + {% if rows %} + <tbody> + {% for row in rows %} + {% + set row_classes = [ + not no_striping ? cycle(['odd', 'even'], loop.index0), + ] + %} + <tr{{ row.attributes.addClass(row_classes) }}> + {% for cell in row.cells %} + <{{ cell.tag }}{{ cell.attributes }}> + {{- cell.content -}} + </{{ cell.tag }}> + {% endfor %} + </tr> + {% endfor %} + </tbody> + {% elseif empty %} + <tbody> + <tr class="odd"> + <td colspan="{{ header_columns }}" class="empty message">{{ empty }}</td> + </tr> + </tbody> + {% endif %} + {% if footer %} + <tfoot> + {% for row in footer %} + <tr{{ row.attributes }}> + {% for cell in row.cells %} + <{{ cell.tag }}{{ cell.attributes }}> + {{- cell.content -}} + </{{ cell.tag }}> + {% endfor %} + </tr> + {% endfor %} + </tfoot> + {% endif %} +</table> diff --git a/core/themes/starterkit_theme/templates/field/field--comment.html.twig b/core/themes/starterkit_theme/templates/field/field--comment.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..1ec3ee64b104b032ae9486871d7565890ff580a0 --- /dev/null +++ b/core/themes/starterkit_theme/templates/field/field--comment.html.twig @@ -0,0 +1,57 @@ +{# +/** + * @file + * Theme override for comment fields. + * + * Available variables: + * - attributes: HTML attributes for the containing element. + * - label_hidden: Whether to show the field label or not. + * - title_attributes: HTML attributes for the title. + * - label: The label for the field. + * - title_prefix: Additional output populated by modules, intended to be + * displayed in front of the main title tag that appears in the template. + * - title_suffix: Additional title output populated by modules, intended to + * be displayed after the main title tag that appears in the template. + * - comments: List of comments rendered through comment.html.twig. + * - comment_form: The 'Add new comment' form. + * - comment_display_mode: Is the comments are threaded. + * - comment_type: The comment type bundle ID for the comment field. + * - entity_type: The entity type to which the field belongs. + * - field_name: The name of the field. + * - field_type: The type of the field. + * - label_display: The display settings for the label. + * + * @see template_preprocess_field() + * @see comment_preprocess_field() + */ +#} +{% + set classes = [ + 'field', + 'field--name-' ~ field_name|clean_class, + 'field--type-' ~ field_type|clean_class, + 'field--label-' ~ label_display, + 'comment-wrapper', + ] +%} +{% + set title_classes = [ + 'title', + label_display == 'visually_hidden' ? 'visually-hidden', + ] +%} +<section{{ attributes.addClass(classes) }}> + {% if comments and not label_hidden %} + {{ title_prefix }} + <h2{{ title_attributes.addClass(title_classes) }}>{{ label }}</h2> + {{ title_suffix }} + {% endif %} + + {{ comments }} + + {% if comment_form %} + <h2 class="title comment-form__title">{{ 'Add new comment'|t }}</h2> + {{ comment_form }} + {% endif %} + +</section> diff --git a/core/themes/starterkit_theme/templates/field/field--node--created.html.twig b/core/themes/starterkit_theme/templates/field/field--node--created.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..72d5d6737d26898d95e1fd4a76875d107bee9e5d --- /dev/null +++ b/core/themes/starterkit_theme/templates/field/field--node--created.html.twig @@ -0,0 +1,34 @@ +{# +/** + * @file + * Theme override for the node created field. + * + * This is an override of field.html.twig for the node created field. See that + * template for documentation about its details and overrides. + * + * Available variables: + * - attributes: HTML attributes for the containing span element. + * - items: List of all the field items. Each item contains: + * - attributes: List of HTML attributes for each item. + * - content: The field item content. + * - entity_type: The entity type to which the field belongs. + * - field_name: The name of the field. + * - field_type: The type of the field. + * - label_display: The display settings for the label. + * + * @see field.html.twig + */ +#} +{% + set classes = [ + 'field', + 'field--name-' ~ field_name|clean_class, + 'field--type-' ~ field_type|clean_class, + 'field--label-' ~ label_display, + ] +%} +<span{{ attributes.addClass(classes) }}> + {%- for item in items -%} + {{ item.content }} + {%- endfor -%} +</span> diff --git a/core/themes/starterkit_theme/templates/field/field--node--title.html.twig b/core/themes/starterkit_theme/templates/field/field--node--title.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..33b105f50b3eb1f767414d69cb22a4ec33418f93 --- /dev/null +++ b/core/themes/starterkit_theme/templates/field/field--node--title.html.twig @@ -0,0 +1,34 @@ +{# +/** + * @file + * Theme override for the node title field. + * + * This is an override of field.html.twig for the node title field. See that + * template for documentation about its details and overrides. + * + * Available variables: + * - attributes: HTML attributes for the containing span element. + * - items: List of all the field items. Each item contains: + * - attributes: List of HTML attributes for each item. + * - content: The field item content. + * - entity_type: The entity type to which the field belongs. + * - field_name: The name of the field. + * - field_type: The type of the field. + * - label_display: The display settings for the label. + * + * @see field.html.twig + */ +#} +{% + set classes = [ + 'field', + 'field--name-' ~ field_name|clean_class, + 'field--type-' ~ field_type|clean_class, + 'field--label-' ~ label_display, + ] +%} +<span{{ attributes.addClass(classes) }}> + {%- for item in items -%} + {{ item.content }} + {%- endfor -%} +</span> diff --git a/core/themes/starterkit_theme/templates/field/field--node--uid.html.twig b/core/themes/starterkit_theme/templates/field/field--node--uid.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..9afc591b7194a73395075161ee016839d8b516f9 --- /dev/null +++ b/core/themes/starterkit_theme/templates/field/field--node--uid.html.twig @@ -0,0 +1,34 @@ +{# +/** + * @file + * Theme override for the node user field. + * + * This is an override of field.html.twig for the node user field. See that + * template for documentation about its details and overrides. + * + * Available variables: + * - attributes: HTML attributes for the containing span element. + * - items: List of all the field items. Each item contains: + * - attributes: List of HTML attributes for each item. + * - content: The field item content. + * - entity_type: The entity type to which the field belongs. + * - field_name: The name of the field. + * - field_type: The type of the field. + * - label_display: The display settings for the label. + * + * @see field.html.twig + */ +#} +{% + set classes = [ + 'field', + 'field--name-' ~ field_name|clean_class, + 'field--type-' ~ field_type|clean_class, + 'field--label-' ~ label_display, + ] +%} +<span{{ attributes.addClass(classes) }}> + {%- for item in items -%} + {{ item.content }} + {%- endfor -%} +</span> diff --git a/core/themes/starterkit_theme/templates/field/field--text-long.html.twig b/core/themes/starterkit_theme/templates/field/field--text-long.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..07ce721d2d70e767cb74b466243e590f97dfe5ef --- /dev/null +++ b/core/themes/starterkit_theme/templates/field/field--text-long.html.twig @@ -0,0 +1 @@ +{% extends "field--text.html.twig" %} diff --git a/core/themes/starterkit_theme/templates/field/field--text-with-summary.html.twig b/core/themes/starterkit_theme/templates/field/field--text-with-summary.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..07ce721d2d70e767cb74b466243e590f97dfe5ef --- /dev/null +++ b/core/themes/starterkit_theme/templates/field/field--text-with-summary.html.twig @@ -0,0 +1 @@ +{% extends "field--text.html.twig" %} diff --git a/core/themes/starterkit_theme/templates/field/field--text.html.twig b/core/themes/starterkit_theme/templates/field/field--text.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..5d1690c3ec98fe51e2ae2d7c4f5cbb2b72102b3c --- /dev/null +++ b/core/themes/starterkit_theme/templates/field/field--text.html.twig @@ -0,0 +1,28 @@ +{% extends "field.html.twig" %} +{# +/** + * @file + * Default theme implementation for a text field. + * + * A 'clearfix' class is added, because 'text' fields have a 'format' property + * that allows a Text Format to be associated with the entered text, which then + * applies filtering on output. A common use case is to align images to the left + * or right, and without this 'clearfix' class, such aligned images may be + * rendered outside of the 'text' field formatter's boundaries, and hence + * overlap with other fields. By setting the 'clearfix' class on all 'text' + * fields, we prevent that. + * + * @see https://www.drupal.org/node/2358529 + * + * A 'text-formatted' class is added to assist with default styling of base + * elements such as paragraphs and lists that may not have classes assigned to + * them. This allows user entered content to have default styling without + * interfering with the styles of other UI components such as system generated + * lists or other dynamic content. + * + * @see https://www.drupal.org/node/2539860 + * + * @ingroup themeable + */ +#} +{% set attributes = attributes.addClass('clearfix', 'text-formatted') %} diff --git a/core/themes/starterkit_theme/templates/field/field.html.twig b/core/themes/starterkit_theme/templates/field/field.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..1cfbd651ce16042e853f73c243590019058c4573 --- /dev/null +++ b/core/themes/starterkit_theme/templates/field/field.html.twig @@ -0,0 +1,81 @@ +{# +/** + * @file + * Theme override for a field. + * + * To override output, copy the "field.html.twig" from the templates directory + * to your theme's directory and customize it, just like customizing other + * Drupal templates such as page.html.twig or node.html.twig. + * + * Instead of overriding the theming for all fields, you can also just override + * theming for a subset of fields using + * @link themeable Theme hook suggestions. @endlink For example, + * here are some theme hook suggestions that can be used for a field_foo field + * on an article node type: + * - field--node--field-foo--article.html.twig + * - field--node--field-foo.html.twig + * - field--node--article.html.twig + * - field--field-foo.html.twig + * - field--text-with-summary.html.twig + * - field.html.twig + * + * Available variables: + * - attributes: HTML attributes for the containing element. + * - label_hidden: Whether to show the field label or not. + * - title_attributes: HTML attributes for the title. + * - label: The label for the field. + * - multiple: TRUE if a field can contain multiple items. + * - items: List of all the field items. Each item contains: + * - attributes: List of HTML attributes for each item. + * - content: The field item's content. + * - entity_type: The entity type to which the field belongs. + * - field_name: The name of the field. + * - field_type: The type of the field. + * - label_display: The display settings for the label. + * + * + * @see template_preprocess_field() + */ +#} +{% + set classes = [ + 'field', + 'field--name-' ~ field_name|clean_class, + 'field--type-' ~ field_type|clean_class, + 'field--label-' ~ label_display, + label_display == 'inline' ? 'clearfix', + ] +%} +{% + set title_classes = [ + 'field__label', + label_display == 'visually_hidden' ? 'visually-hidden', + ] +%} + +{% if label_hidden %} + {% if multiple %} + <div{{ attributes.addClass(classes, 'field__items') }}> + {% for item in items %} + <div{{ item.attributes.addClass('field__item') }}>{{ item.content }}</div> + {% endfor %} + </div> + {% else %} + {% for item in items %} + <div{{ attributes.addClass(classes, 'field__item') }}>{{ item.content }}</div> + {% endfor %} + {% endif %} +{% else %} + <div{{ attributes.addClass(classes) }}> + <div{{ title_attributes.addClass(title_classes) }}>{{ label }}</div> + {% if multiple %} + <div class="field__items"> + {% endif %} + {% for item in items %} + <div{{ item.attributes.addClass('field__item') }}>{{ item.content }}</div> + {% endfor %} + {% if multiple %} + </div> + {% endif %} + </div> +{% endif %} diff --git a/core/themes/starterkit_theme/templates/field/file-audio.html.twig b/core/themes/starterkit_theme/templates/field/file-audio.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..d95de878c0456669c64e69bf2687abca6affa07d --- /dev/null +++ b/core/themes/starterkit_theme/templates/field/file-audio.html.twig @@ -0,0 +1,23 @@ +{# +/** +* @file +* Default theme implementation to display the file entity as an audio tag. +* +* Available variables: +* - attributes: An array of HTML attributes, intended to be added to the +* audio tag. +* - files: And array of files to be added as sources for the audio tag. Each +* element is an array with the following elements: +* - file: The full file object. +* - source_attributes: An array of HTML attributes for to be added to the +* source tag. +* +* @ingroup themeable +*/ +#} +{{ attach_library('starterkit_theme/file') }} +<audio {{ attributes }}> + {% for file in files %} + <source {{ file.source_attributes }} /> + {% endfor %} +</audio> diff --git a/core/themes/starterkit_theme/templates/field/file-link.html.twig b/core/themes/starterkit_theme/templates/field/file-link.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..8975710a8934da6dff114c787ee4d3ef754bb037 --- /dev/null +++ b/core/themes/starterkit_theme/templates/field/file-link.html.twig @@ -0,0 +1,17 @@ +{# +/** + * @file + * Theme override for a link to a file. + * + * Available variables: + * - attributes: The HTML attributes for the containing element. + * - link: A link to the file. + * - icon: The icon image representing the file type. + * - file_size: The size of the file. + * + * @see template_preprocess_file_link() + * @see stable_preprocess_image_widget() + */ +#} +{{ attach_library('starterkit_theme/file') }} +<span{{ attributes }}>{{ icon }} {{ link }}</span> diff --git a/core/themes/starterkit_theme/templates/field/file-video.html.twig b/core/themes/starterkit_theme/templates/field/file-video.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..1a08299e63760479ea5a06dfd87c0c14a2c71007 --- /dev/null +++ b/core/themes/starterkit_theme/templates/field/file-video.html.twig @@ -0,0 +1,23 @@ +{# +/** +* @file +* Default theme implementation to display the file entity as a video tag. +* +* Available variables: +* - attributes: An array of HTML attributes, intended to be added to the +* video tag. +* - files: And array of files to be added as sources for the video tag. Each +* element is an array with the following elements: +* - file: The full file object. +* - source_attributes: An array of HTML attributes for to be added to the +* source tag. +* +* @ingroup themeable +*/ +#} +{{ attach_library('starterkit_theme/file') }} +<video {{ attributes }}> + {% for file in files %} + <source {{ file.source_attributes }} /> + {% endfor %} +</video> diff --git a/core/themes/starterkit_theme/templates/field/image-formatter.html.twig b/core/themes/starterkit_theme/templates/field/image-formatter.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..512d7588e0fd92bb0539a2aa29c2e5cc5580f45f --- /dev/null +++ b/core/themes/starterkit_theme/templates/field/image-formatter.html.twig @@ -0,0 +1,18 @@ +{# +/** + * @file + * Theme override to display a formatted image field. + * + * Available variables: + * - image: A collection of image data. + * - image_style: An optional image style. + * - url: An optional URL the image can be linked to. + * + * @see template_preprocess_image_formatter() + */ +#} +{% if url %} + {{ link(image, url) }} +{% else %} + {{ image }} +{% endif %} diff --git a/core/themes/starterkit_theme/templates/field/image-style.html.twig b/core/themes/starterkit_theme/templates/field/image-style.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..039089a3ecb5f1f2bf233fc9261c97d0a9c48093 --- /dev/null +++ b/core/themes/starterkit_theme/templates/field/image-style.html.twig @@ -0,0 +1,18 @@ +{# +/** + * @file + * Theme override for an image using a specific image style. + * + * Available variables: + * - attributes: HTML attributes for the image, including the following: + * - src: Full URL or relative path to the image file. + * - class: One or more classes to be applied to the image. + * - width: The width of the image (if known). + * - height: The height of the image (if known). + * - title: The title of the image. + * - alt: The alternative text for the image. + * + * @see template_preprocess_image_style() + */ +#} +{{ image }} diff --git a/core/themes/starterkit_theme/templates/field/image.html.twig b/core/themes/starterkit_theme/templates/field/image.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..31f782bb60a899f1682037f4c3f2b2707c543874 --- /dev/null +++ b/core/themes/starterkit_theme/templates/field/image.html.twig @@ -0,0 +1,18 @@ +{# +/** + * @file + * Theme override of an image. + * + * Available variables: + * - attributes: HTML attributes for the img tag. + * - style_name: (optional) The name of the image style applied. + * + * @see template_preprocess_image() + */ +#} +{% +set classes = [ + style_name ? 'image-style-' ~ style_name|clean_class, +] +%} +<img{{ attributes.addClass(classes) }} /> diff --git a/core/themes/starterkit_theme/templates/field/link-formatter-link-separate.html.twig b/core/themes/starterkit_theme/templates/field/link-formatter-link-separate.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..52c8d29a77fc11c037ee2811e4f2eb30f67368aa --- /dev/null +++ b/core/themes/starterkit_theme/templates/field/link-formatter-link-separate.html.twig @@ -0,0 +1,22 @@ +{# +/** + * @file + * Theme override of a link with separate title and URL elements. + * + * Available variables: + * - link: The link that has already been formatted by l(). + * - title: (optional) A descriptive or alternate title for the link, which may + * be different than the actual link text. + * + * @see template_preprocess() + * @see template_preprocess_link_formatter_link_separate() + */ +#} +{% apply spaceless %} + <div class="link-item"> + {% if title %} + <div class="link-title">{{ title }}</div> + {% endif %} + <div class="link-url">{{ link }}</div> + </div> +{% endapply %} diff --git a/core/themes/starterkit_theme/templates/field/time.html.twig b/core/themes/starterkit_theme/templates/field/time.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..f2912b7f9872f9d2343b2ebf04064f76c4b85c77 --- /dev/null +++ b/core/themes/starterkit_theme/templates/field/time.html.twig @@ -0,0 +1,22 @@ +{# +/** + * @file + * Theme override for a date / time element. + * + * Available variables + * - timestamp: (optional) A UNIX timestamp for the datetime attribute. If the + * datetime cannot be represented as a UNIX timestamp, use a valid datetime + * attribute value in attributes.datetime. + * - text: (optional) The content to display within the <time> element. + * Defaults to a human-readable representation of the timestamp value or the + * datetime attribute value using DateFormatter::format(). + * - attributes: (optional) HTML attributes to apply to the <time> element. + * A datetime attribute in 'attributes' overrides the 'timestamp'. To + * create a valid datetime attribute value from a UNIX timestamp, use + * DateFormatter::format() with one of the predefined 'html_*' formats. + * + * @see template_preprocess_time() + * @see http://www.w3.org/TR/html5-author/the-time-element.html#attr-time-datetime + */ +#} +<time{{ attributes.addClass('datetime') }}>{{ text }}</time> diff --git a/core/themes/starterkit_theme/templates/form/checkboxes.html.twig b/core/themes/starterkit_theme/templates/form/checkboxes.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..9199f7e4c4564eab9b0495eaaa43e8240d23bbe1 --- /dev/null +++ b/core/themes/starterkit_theme/templates/form/checkboxes.html.twig @@ -0,0 +1,15 @@ +{# +/** + * @file + * Theme override for a 'checkboxes' #type form element. + * + * Available variables + * - attributes: A list of HTML attributes for the wrapper element. + * - children: The rendered checkboxes. + * + * @see template_preprocess_checkboxes() + */ + @todo: remove this file once https://www.drupal.org/node/1819284 is resolved. + This is identical to core/modules/system/templates/container.html.twig +#} +<div{{ attributes.addClass('form-checkboxes') }}>{{ children }}</div> diff --git a/core/themes/starterkit_theme/templates/form/confirm-form.html.twig b/core/themes/starterkit_theme/templates/form/confirm-form.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..725f7f4df2cd2eab53fdef412d1719d96595cc90 --- /dev/null +++ b/core/themes/starterkit_theme/templates/form/confirm-form.html.twig @@ -0,0 +1,13 @@ +{# +/** + * @file + * Theme override for confirm form. + * + * By default this does not alter the appearance of a form at all, + * but is provided as a convenience for themers. + * + * Available variables: + * - form: The confirm form. + */ +#} +{{ form }} diff --git a/core/themes/starterkit_theme/templates/form/container.html.twig b/core/themes/starterkit_theme/templates/form/container.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..0da6c388d02271e901ef2f452791b6d3264063d6 --- /dev/null +++ b/core/themes/starterkit_theme/templates/form/container.html.twig @@ -0,0 +1,28 @@ +{# +/** + * @file + * Theme override of a container used to wrap child elements. + * + * Used for grouped form items. Can also be used as a theme wrapper for any + * renderable element, to surround it with a <div> and HTML attributes. + * See \Drupal\Core\Render\Element\RenderElement for more + * information on the #theme_wrappers render array property, and + * \Drupal\Core\Render\Element\container for usage of the container render + * element. + * + * Available variables: + * - attributes: HTML attributes for the containing element. + * - children: The rendered child elements of the container. + * - has_parent: A flag to indicate that the container has one or more parent + containers. + * + * @see template_preprocess_container() + */ +#} +{% + set classes = [ + has_parent ? 'js-form-wrapper', + has_parent ? 'form-wrapper', + ] +%} +<div{{ attributes.addClass(classes) }}>{{ children }}</div> diff --git a/core/themes/starterkit_theme/templates/form/datetime-form.html.twig b/core/themes/starterkit_theme/templates/form/datetime-form.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..f56182fdf2aa5c031a1966110a974d14a215b356 --- /dev/null +++ b/core/themes/starterkit_theme/templates/form/datetime-form.html.twig @@ -0,0 +1,15 @@ +{# +/** + * @file + * Theme override of a datetime form element. + * + * Available variables: + * - attributes: HTML attributes for the datetime form element. + * - content: The datelist form element to be output. + * + * @see template_preprocess_datetime_form() + */ +#} +<div{{ attributes.addClass('container-inline') }}> + {{ content }} +</div> diff --git a/core/themes/starterkit_theme/templates/form/datetime-wrapper.html.twig b/core/themes/starterkit_theme/templates/form/datetime-wrapper.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..5b52f2daa380f2ef7bb1a0cc15f433c47b2713ff --- /dev/null +++ b/core/themes/starterkit_theme/templates/form/datetime-wrapper.html.twig @@ -0,0 +1,36 @@ +{# +/** + * @file + * Theme override of a datetime form wrapper. + * + * Available variables: + * - content: The form element to be output, usually a datelist, or datetime. + * - title: The title of the form element. + * - title_attributes: HTML attributes for the title wrapper. + * - description: Description text for the form element. + * - required: An indicator for whether the associated form element is required. + * + * @see template_preprocess_datetime_wrapper() + */ +#} +{% + set title_classes = [ + 'label', + required ? 'js-form-required', + required ? 'form-required', + ] +%} +{% if title %} + <h4{{ title_attributes.addClass(title_classes) }}>{{ title }}</h4> +{% endif %} +{{ content }} +{% if errors %} + <div class="form-item--error-message"> + <strong>{{ errors }}</strong> + </div> +{% endif %} +{% if description %} + <div{{ description_attributes.addClass('description') }}> + {{ description }} + </div> +{% endif %} diff --git a/core/themes/starterkit_theme/templates/form/details.html.twig b/core/themes/starterkit_theme/templates/form/details.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..c554096da9d785597c6e1e2c317e940002430981 --- /dev/null +++ b/core/themes/starterkit_theme/templates/form/details.html.twig @@ -0,0 +1,44 @@ +{# +/** + * @file + * Theme override for a details element. + * + * Available variables + * - attributes: A list of HTML attributes for the details element. + * - errors: (optional) Any errors for this details element, may not be set. + * - title: (optional) The title of the element, may not be set. + * - summary_attributes: A list of HTML attributes for the summary element. + * - description: (optional) The description of the element, may not be set. + * - children: (optional) The children of the element, may not be set. + * - value: (optional) The value of the element, may not be set. + * + * @see template_preprocess_details() + */ +#} +<details{{ attributes }}> + {%- if title -%} + {% + set summary_classes = [ + required ? 'js-form-required', + required ? 'form-required', + ] + %} + <summary{{ summary_attributes.addClass(summary_classes) }}>{{ title }}</summary> + {%- endif -%} + <div class="details-wrapper"> + {% if errors %} + <div class="form-item--error-message"> + <strong>{{ errors }}</strong> + </div> + {% endif %} + {%- if description -%} + <div class="details-description">{{ description }}</div> + {%- endif -%} + {%- if children -%} + {{ children }} + {%- endif -%} + {%- if value -%} + {{ value }} + {%- endif -%} + </div> +</details> diff --git a/core/themes/starterkit_theme/templates/form/dropbutton-wrapper.html.twig b/core/themes/starterkit_theme/templates/form/dropbutton-wrapper.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..a2bdc21d67492b7e772e5a43549a937c6dae40da --- /dev/null +++ b/core/themes/starterkit_theme/templates/form/dropbutton-wrapper.html.twig @@ -0,0 +1,20 @@ +{# +/** + * @file + * Theme override for a dropbutton wrapper. + * + * Available variables: + * - children: Contains the child elements of the dropbutton menu. + * + * @see template_preprocess() + */ +#} +{% if children %} + {% apply spaceless %} + <div class="dropbutton-wrapper"> + <div class="dropbutton-widget"> + {{ children }} + </div> + </div> + {% endapply %} +{% endif %} diff --git a/core/themes/starterkit_theme/templates/form/field-multiple-value-form.html.twig b/core/themes/starterkit_theme/templates/form/field-multiple-value-form.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..246ac41bfdca66fe6b4a9f678fb393a0c7265a2a --- /dev/null +++ b/core/themes/starterkit_theme/templates/form/field-multiple-value-form.html.twig @@ -0,0 +1,42 @@ +{# +/** + * @file + * Theme override for an individual form element. + * + * Available variables for all fields: + * - multiple: Whether there are multiple instances of the field. + * + * Available variables for single cardinality fields: + * - elements: Form elements to be rendered. + * + * Available variables when there are multiple fields. + * - table: Table of field items. + * - description: The description element containing the following properties: + * - content: The description content of the form element. + * - attributes: HTML attributes to apply to the description container. + * - button: "Add another item" button. + * + * @see template_preprocess_field_multiple_value_form() + */ +#} +{% if multiple %} + {% + set classes = [ + 'js-form-item', + 'form-item' + ] + %} + <div{{ attributes.addClass(classes) }}> + {{ table }} + {% if description.content %} + <div{{ description.attributes.addClass('description') }} >{{ description.content }}</div> + {% endif %} + {% if button %} + <div class="clearfix">{{ button }}</div> + {% endif %} + </div> +{% else %} + {% for element in elements %} + {{ element }} + {% endfor %} +{% endif %} diff --git a/core/themes/starterkit_theme/templates/form/fieldset.html.twig b/core/themes/starterkit_theme/templates/form/fieldset.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..db63082e8a8979b3a54b84ec5b071fa424791470 --- /dev/null +++ b/core/themes/starterkit_theme/templates/form/fieldset.html.twig @@ -0,0 +1,60 @@ +{# +/** + * @file + * Theme override for a fieldset element and its children. + * + * Available variables: + * - attributes: HTML attributes for the fieldset element. + * - errors: (optional) Any errors for this fieldset element, may not be set. + * - required: Boolean indicating whether the fieldset element is required. + * - legend: The legend element containing the following properties: + * - title: Title of the fieldset, intended for use as the text of the legend. + * - attributes: HTML attributes to apply to the legend. + * - description: The description element containing the following properties: + * - content: The description content of the fieldset. + * - attributes: HTML attributes to apply to the description container. + * - children: The rendered child elements of the fieldset. + * - prefix: The content to add before the fieldset children. + * - suffix: The content to add after the fieldset children. + * + * @see template_preprocess_fieldset() + */ +#} +{% + set classes = [ + 'js-form-item', + 'form-item', + 'js-form-wrapper', + 'form-wrapper', + ] +%} +<fieldset{{ attributes.addClass(classes) }}> + {% + set legend_span_classes = [ + 'fieldset-legend', + required ? 'js-form-required', + required ? 'form-required', + ] + %} + {# Always wrap fieldset legends in a <span> for CSS positioning. #} + <legend{{ legend.attributes }}> + <span{{ legend_span.attributes.addClass(legend_span_classes) }}>{{ legend.title }}</span> + </legend> + <div class="fieldset-wrapper"> + {% if errors %} + <div class="form-item--error-message"> + <strong>{{ errors }}</strong> + </div> + {% endif %} + {% if prefix %} + <span class="field-prefix">{{ prefix }}</span> + {% endif %} + {{ children }} + {% if suffix %} + <span class="field-suffix">{{ suffix }}</span> + {% endif %} + {% if description.content %} + <div{{ description.attributes.addClass('description') }}>{{ description.content }}</div> + {% endif %} + </div> +</fieldset> diff --git a/core/themes/starterkit_theme/templates/form/form-element-label.html.twig b/core/themes/starterkit_theme/templates/form/form-element-label.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..7c2f8f222340cda34c7a3f5d66b469730e8cad60 --- /dev/null +++ b/core/themes/starterkit_theme/templates/form/form-element-label.html.twig @@ -0,0 +1,25 @@ +{# +/** + * @file + * Theme override for a form element label. + * + * Available variables: + * - title: The label's text. + * - title_display: Elements title_display setting. + * - required: An indicator for whether the associated form element is required. + * - attributes: A list of HTML attributes for the label. + * + * @see template_preprocess_form_element_label() + */ +#} +{% + set classes = [ + title_display == 'after' ? 'option', + title_display == 'invisible' ? 'visually-hidden', + required ? 'js-form-required', + required ? 'form-required', + ] +%} +{% if title is not empty or required -%} + <label{{ attributes.addClass(classes) }}>{{ title }}</label> +{%- endif %} diff --git a/core/themes/starterkit_theme/templates/form/form-element.html.twig b/core/themes/starterkit_theme/templates/form/form-element.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..3bde4f711545eb771de7e4df4815bd726b818153 --- /dev/null +++ b/core/themes/starterkit_theme/templates/form/form-element.html.twig @@ -0,0 +1,95 @@ +{# +/** + * @file + * Theme override for a form element. + * + * Available variables: + * - attributes: HTML attributes for the containing element. + * - errors: (optional) Any errors for this form element, may not be set. + * - prefix: (optional) The form element prefix, may not be set. + * - suffix: (optional) The form element suffix, may not be set. + * - required: The required marker, or empty if the associated form element is + * not required. + * - type: The type of the element. + * - name: The name of the element. + * - label: A rendered label element. + * - label_display: Label display setting. It can have these values: + * - before: The label is output before the element. This is the default. + * The label includes the #title and the required marker, if #required. + * - after: The label is output after the element. For example, this is used + * for radio and checkbox #type elements. If the #title is empty but the + * field is #required, the label will contain only the required marker. + * - invisible: Labels are critical for screen readers to enable them to + * properly navigate through forms but can be visually distracting. This + * property hides the label for everyone except screen readers. + * - attribute: Set the title attribute on the element to create a tooltip but + * output no label element. This is supported only for checkboxes and radios + * in \Drupal\Core\Render\Element\CompositeFormElementTrait::preRenderCompositeFormElement(). + * It is used where a visual label is not needed, such as a table of + * checkboxes where the row and column provide the context. The tooltip will + * include the title and required marker. + * - description: (optional) A list of description properties containing: + * - content: A description of the form element, may not be set. + * - attributes: (optional) A list of HTML attributes to apply to the + * description content wrapper. Will only be set when description is set. + * - description_display: Description display setting. It can have these values: + * - before: The description is output before the element. + * - after: The description is output after the element. This is the default + * value. + * - invisible: The description is output after the element, hidden visually + * but available to screen readers. + * - disabled: True if the element is disabled. + * - title_display: Title display setting. + * + * @see template_preprocess_form_element() + */ +#} +{% + set classes = [ + 'js-form-item', + 'form-item', + 'js-form-type-' ~ type|clean_class, + 'form-type-' ~ type|clean_class, + 'js-form-item-' ~ name|clean_class, + 'form-item-' ~ name|clean_class, + title_display not in ['after', 'before'] ? 'form-no-label', + disabled == 'disabled' ? 'form-disabled', + errors ? 'form-item--error', + ] +%} +{% + set description_classes = [ + 'description', + description_display == 'invisible' ? 'visually-hidden', + ] +%} +<div{{ attributes.addClass(classes) }}> + {% if label_display in ['before', 'invisible'] %} + {{ label }} + {% endif %} + {% if prefix is not empty %} + <span class="field-prefix">{{ prefix }}</span> + {% endif %} + {% if description_display == 'before' and description.content %} + <div{{ description.attributes }}> + {{ description.content }} + </div> + {% endif %} + {{ children }} + {% if suffix is not empty %} + <span class="field-suffix">{{ suffix }}</span> + {% endif %} + {% if label_display == 'after' %} + {{ label }} + {% endif %} + {% if errors %} + <div class="form-item--error-message"> + <strong>{{ errors }}</strong> + </div> + {% endif %} + {% if description_display in ['after', 'invisible'] and description.content %} + <div{{ description.attributes.addClass(description_classes) }}> + {{ description.content }} + </div> + {% endif %} +</div> diff --git a/core/themes/starterkit_theme/templates/form/form.html.twig b/core/themes/starterkit_theme/templates/form/form.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..97b4b7a3de207fc82d768ad3ce77da4379d4ff76 --- /dev/null +++ b/core/themes/starterkit_theme/templates/form/form.html.twig @@ -0,0 +1,15 @@ +{# +/** + * @file + * Theme override for a 'form' element. + * + * Available variables + * - attributes: A list of HTML attributes for the wrapper element. + * - children: The child elements of the form. + * + * @see template_preprocess_form() + */ +#} +<form{{ attributes }}> + {{ children }} +</form> diff --git a/core/themes/starterkit_theme/templates/form/input.html.twig b/core/themes/starterkit_theme/templates/form/input.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..d5cac386e006f7b7e4e2dec206efe1fcaed8a413 --- /dev/null +++ b/core/themes/starterkit_theme/templates/form/input.html.twig @@ -0,0 +1,13 @@ +{# +/** + * @file + * Theme override for an 'input' #type form element. + * + * Available variables: + * - attributes: A list of HTML attributes for the input element. + * - children: Optional additional rendered elements. + * + * @see template_preprocess_input() + */ +#} +<input{{ attributes }} />{{ children }} diff --git a/core/themes/starterkit_theme/templates/form/radios.html.twig b/core/themes/starterkit_theme/templates/form/radios.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..2e4bafd41c68f038e322cc643cc3c595dd0b9df6 --- /dev/null +++ b/core/themes/starterkit_theme/templates/form/radios.html.twig @@ -0,0 +1,13 @@ +{# +/** + * @file + * Theme override for a 'radios' #type form element. + * + * Available variables + * - attributes: A list of HTML attributes for the wrapper element. + * - children: The rendered radios. + * + * @see template_preprocess_radios() + */ +#} +<div{{ attributes.addClass('form-radios') }}>{{ children }}</div> diff --git a/core/themes/starterkit_theme/templates/form/select.html.twig b/core/themes/starterkit_theme/templates/form/select.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..9c8a97c058977793d4fed3ed5f2ef32b5abe2190 --- /dev/null +++ b/core/themes/starterkit_theme/templates/form/select.html.twig @@ -0,0 +1,27 @@ +{# +/** + * @file + * Theme override for a select element. + * + * Available variables: + * - attributes: HTML attributes for the <select> tag. + * - options: The <option> element children. + * + * @see template_preprocess_select() + */ +#} +{% apply spaceless %} + <select{{ attributes }}> + {% for option in options %} + {% if option.type == 'optgroup' %} + <optgroup label="{{ option.label }}"> + {% for sub_option in option.options %} + <option value="{{ sub_option.value }}"{{ sub_option.selected ? ' selected="selected"' }}>{{ sub_option.label }}</option> + {% endfor %} + </optgroup> + {% elseif option.type == 'option' %} + <option value="{{ option.value }}"{{ option.selected ? ' selected="selected"' }}>{{ option.label }}</option> + {% endif %} + {% endfor %} + </select> +{% endapply %} diff --git a/core/themes/starterkit_theme/templates/form/textarea.html.twig b/core/themes/starterkit_theme/templates/form/textarea.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..99e1bde09059aa3424260dcc53cefb2113288ecb --- /dev/null +++ b/core/themes/starterkit_theme/templates/form/textarea.html.twig @@ -0,0 +1,25 @@ +{# +/** + * @file + * Theme override for a 'textarea' #type form element. + * + * Available variables + * - wrapper_attributes: A list of HTML attributes for the wrapper element. + * - attributes: A list of HTML attributes for the <textarea> element. + * - resizable: An indicator for whether the textarea is resizable. + * - required: An indicator for whether the textarea is required. + * - value: The textarea content. + * + * @see template_preprocess_textarea() + */ +#} +{% + set classes = [ + 'form-textarea', + resizable ? 'resize-' ~ resizable, + required ? 'required', + ] +%} +<div{{ wrapper_attributes.addClass('form-textarea-wrapper') }}> + <textarea{{ attributes.addClass(classes) }}>{{ value }}</textarea> +</div> diff --git a/core/themes/starterkit_theme/templates/layout/book-export-html.html.twig b/core/themes/starterkit_theme/templates/layout/book-export-html.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..b7525f7efa88263beed101cbe8e0dcd4377ab5a8 --- /dev/null +++ b/core/themes/starterkit_theme/templates/layout/book-export-html.html.twig @@ -0,0 +1,45 @@ +{# +/** + * @file + * Theme override for printed version of book outline. + * + * Available variables: + * - title: Top level node title. + * - head: Header tags. + * - language: Language object. + * - language_rtl: A flag indicating whether the current display language is a + * right to left language. + * - base_url: URL to the home page. + * - contents: Nodes within the current outline rendered through + * book-node-export-html.html.twig. + * + * @see template_preprocess_book_export_html() + */ +#} +<!DOCTYPE html> +<html{{ html_attributes }}> + <head> + <title>{{ title }}</title> + {{ page.head }} + <base href="{{ base_url }}" /> + <link type="text/css" rel="stylesheet" href="misc/print.css" /> + </head> + <body> + {# + The given node is embedded to its absolute depth in a top level section. + For example, a child node with depth 2 in the hierarchy is contained in + (otherwise empty) div elements corresponding to depth 0 and depth 1. This + is intended to support WYSIWYG output - e.g., level 3 sections always look + like level 3 sections, no matter their depth relative to the node selected + to be exported as printer-friendly HTML. + #} + + {% if depth > 1 %}{% for i in 1..depth-1 %} + <div class="section-{{ i }}"> + {% endfor %}{% endif %} + {{ contents }} + {% if depth > 1 %}{% for i in 1..depth-1 %} + </div> + {% endfor %}{% endif %} + </body> +</html> diff --git a/core/themes/starterkit_theme/templates/layout/html.html.twig b/core/themes/starterkit_theme/templates/layout/html.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..4fe57a01cfdd5995db836693c453751d8ee11551 --- /dev/null +++ b/core/themes/starterkit_theme/templates/layout/html.html.twig @@ -0,0 +1,55 @@ +{# +/** + * @file + * Theme override for the basic structure of a single Drupal page. + * + * Variables: + * - logged_in: A flag indicating if user is logged in. + * - root_path: The root path of the current page (e.g., node, admin, user). + * - node_type: The content type for the current node, if the page is a node. + * - head_title: List of text elements that make up the head_title variable. + * May contain one or more of the following: + * - title: The title of the page. + * - name: The name of the site. + * - slogan: The slogan of the site. + * - page_top: Initial rendered markup. This should be printed before 'page'. + * - page: The rendered page markup. + * - page_bottom: Closing rendered markup. This variable should be printed after + * 'page'. + * - db_offline: A flag indicating if the database is offline. + * - placeholder_token: The token for generating head, css, js and js-bottom + * placeholders. + * + * @see template_preprocess_html() + */ +#} +{% + set body_classes = [ + logged_in ? 'user-logged-in', + not root_path ? 'path-frontpage' : 'path-' ~ root_path|clean_class, + node_type ? 'page-node-type-' ~ node_type|clean_class, + db_offline ? 'db-offline', + ] +%} +<!DOCTYPE html> +<html{{ html_attributes }}> + <head> + <head-placeholder token="{{ placeholder_token }}"> + <title>{{ head_title|safe_join(' | ') }}</title> + <css-placeholder token="{{ placeholder_token }}"> + <js-placeholder token="{{ placeholder_token }}"> + </head> + <body{{ attributes.addClass(body_classes) }}> + {# + Keyboard navigation/accessibility link to main content section in + page.html.twig. + #} + <a href="#main-content" class="visually-hidden focusable skip-link"> + {{ 'Skip to main content'|t }} + </a> + {{ page_top }} + {{ page }} + {{ page_bottom }} + <js-bottom-placeholder token="{{ placeholder_token }}"> + </body> +</html> diff --git a/core/themes/starterkit_theme/templates/layout/maintenance-page.html.twig b/core/themes/starterkit_theme/templates/layout/maintenance-page.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..7463b0238ca35b8a709b53e0148352b42486d68d --- /dev/null +++ b/core/themes/starterkit_theme/templates/layout/maintenance-page.html.twig @@ -0,0 +1,65 @@ +{# +/** + * @file + * Theme override to display a single Drupal page while offline. + * + * All available variables are mirrored in page.html.twig. + * Some may be blank but they are provided for consistency. + * + * @see template_preprocess_maintenance_page() + */ +#} +<div class="layout-container"> + + <header role="banner"> + {% if logo %} + <a href="{{ front_page }}" title="{{ 'Home'|t }}" rel="home"> + <img src="{{ logo }}" alt="{{ 'Home'|t }}"/> + </a> + {% endif %} + + {% if site_name or site_slogan %} + <div class="name-and-slogan"> + {% if site_name %} + <h1 class="site-name"> + <a href="{{ front_page }}" title="{{ 'Home'|t }}" rel="home">{{ site_name }}</a> + </h1> + {% endif %} + + {% if site_slogan %} + <div class="site-slogan">{{ site_slogan }}</div> + {% endif %} + </div>{# /.name-and-slogan #} + {% endif %} + + </header> + + <main role="main"> + {% if title %} + <h1>{{ title }}</h1> + {% endif %} + + {{ page.highlighted }} + + {{ page.content }} + </main> + + {% if page.sidebar_first %} + <aside class="layout-sidebar-first" role="complementary"> + {{ page.sidebar_first }} + </aside>{# /.layout-sidebar-first #} + {% endif %} + + {% if page.sidebar_second %} + <aside class="layout-sidebar-second" role="complementary"> + {{ page.sidebar_second }} + </aside>{# /.layout-sidebar-second #} + {% endif %} + + {% if page.footer %} + <footer role="contentinfo"> + {{ page.footer }} + </footer> + {% endif %} + +</div>{# /.layout-container #} diff --git a/core/themes/starterkit_theme/templates/layout/page.html.twig b/core/themes/starterkit_theme/templates/layout/page.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..0f5ba83f2071e0cb0223c5d0d417e8a45ad07289 --- /dev/null +++ b/core/themes/starterkit_theme/templates/layout/page.html.twig @@ -0,0 +1,87 @@ +{# +/** + * @file + * Theme override to display a single page. + * + * The doctype, html, head and body tags are not in this template. Instead they + * can be found in the html.html.twig template in this directory. + * + * Available variables: + * + * General utility variables: + * - base_path: The base URL path of the Drupal installation. Will usually be + * "/" unless you have installed Drupal in a sub-directory. + * - is_front: A flag indicating if the current page is the front page. + * - logged_in: A flag indicating if the user is registered and signed in. + * - is_admin: A flag indicating if the user has permission to access + * administration pages. + * + * Site identity: + * - front_page: The URL of the front page. Use this instead of base_path when + * linking to the front page. This includes the language domain or prefix. + * + * Page content (in order of occurrence in the default page.html.twig): + * - node: Fully loaded node, if there is an automatically-loaded node + * associated with the page and the node ID is the second argument in the + * page's path (e.g. node/12345 and node/12345/revisions, but not + * comment/reply/12345). + * + * Regions: + * - page.header: Items for the header region. + * - page.primary_menu: Items for the primary menu region. + * - page.secondary_menu: Items for the secondary menu region. + * - page.highlighted: Items for the highlighted content region. + * - page.help: Dynamic help text, mostly for admin pages. + * - page.content: The main content of the current page. + * - page.sidebar_first: Items for the first sidebar. + * - page.sidebar_second: Items for the second sidebar. + * - page.footer: Items for the footer region. + * - page.breadcrumb: Items for the breadcrumb region. + * + * @see template_preprocess_page() + * @see html.html.twig + */ +#} +<div class="layout-container"> + + <header role="banner"> + {{ page.header }} + </header> + + {{ page.primary_menu }} + {{ page.secondary_menu }} + + {{ page.breadcrumb }} + + {{ page.highlighted }} + + {{ page.help }} + + <main role="main"> + <a id="main-content" tabindex="-1"></a>{# link is in html.html.twig #} + + <div class="layout-content"> + {{ page.content }} + </div>{# /.layout-content #} + + {% if page.sidebar_first %} + <aside class="layout-sidebar-first" role="complementary"> + {{ page.sidebar_first }} + </aside> + {% endif %} + + {% if page.sidebar_second %} + <aside class="layout-sidebar-second" role="complementary"> + {{ page.sidebar_second }} + </aside> + {% endif %} + + </main> + + {% if page.footer %} + <footer role="contentinfo"> + {{ page.footer }} + </footer> + {% endif %} + +</div>{# /.layout-container #} diff --git a/core/themes/starterkit_theme/templates/layout/region.html.twig b/core/themes/starterkit_theme/templates/layout/region.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..95e71cec37e409bdfab1d8d90e0a192bede54e9c --- /dev/null +++ b/core/themes/starterkit_theme/templates/layout/region.html.twig @@ -0,0 +1,25 @@ +{# +/** + * @file + * Theme override to display a region. + * + * Available variables: + * - content: The content for this region, typically blocks. + * - attributes: HTML attributes for the region <div>. + * - region: The name of the region variable as defined in the theme's + * .info.yml file. + * + * @see template_preprocess_region() + */ +#} +{% + set classes = [ + 'region', + 'region-' ~ region|clean_class, + ] +%} +{% if content %} + <div{{ attributes.addClass(classes) }}> + {{ content }} + </div> +{% endif %} diff --git a/core/themes/starterkit_theme/templates/media-library/container--media-library-content.html.twig b/core/themes/starterkit_theme/templates/media-library/container--media-library-content.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..7c930e2c7b64980f3b1ea8413d143f2791f888b7 --- /dev/null +++ b/core/themes/starterkit_theme/templates/media-library/container--media-library-content.html.twig @@ -0,0 +1,28 @@ +{# +/** + * @file + * Theme implementation the content area of the modal media library dialog. + * + * The content area is everything that is not the menu of available media + * types. This includes the form to add new media items, if available, and + * the view of available media to select. + * + * Available variables: + * - attributes: HTML attributes for the containing element. + * - children: The rendered child elements of the container. + * - has_parent: A flag to indicate that the container has one or more parent + containers. + * + * @see template_preprocess_container() + * + * @ingroup themeable + */ +#} +{% + set classes = [ + has_parent ? 'js-form-wrapper', + has_parent ? 'form-wrapper', + 'media-library-content', + ] +%} +<div{{ attributes.addClass(classes) }}>{{ children }}</div> diff --git a/core/themes/starterkit_theme/templates/media-library/container--media-library-widget-selection.html.twig b/core/themes/starterkit_theme/templates/media-library/container--media-library-widget-selection.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..7c0af44307f6ac054143fd886c80bdff1c84fbc1 --- /dev/null +++ b/core/themes/starterkit_theme/templates/media-library/container--media-library-widget-selection.html.twig @@ -0,0 +1,28 @@ +{# +/** + * @file + * Theme implementation of a wrapper for selected media items. + * + * This is used to wrap around the set of media items that are currently + * selected in the media library widget (not the modal dialog), which may + * be used for entity reference fields that target media. + * + * Available variables: + * - attributes: HTML attributes for the containing element. + * - children: The rendered child elements of the container. + * - has_parent: A flag to indicate that the container has one or more parent + containers. + * + * @see template_preprocess_container() + * + * @ingroup themeable + */ +#} +{% + set classes = [ + has_parent ? 'js-form-wrapper', + has_parent ? 'form-wrapper', + 'media-library-selection', + ] +%} +<div{{ attributes.addClass(classes) }}>{{ children }}</div> diff --git a/core/themes/starterkit_theme/templates/media-library/links--media-library-menu.html.twig b/core/themes/starterkit_theme/templates/media-library/links--media-library-menu.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..ef92fbb3c38af80fa32780ecce1f63bbd9fe60e1 --- /dev/null +++ b/core/themes/starterkit_theme/templates/media-library/links--media-library-menu.html.twig @@ -0,0 +1,35 @@ +{% extends "links.html.twig" %} +{# +/** + * @file + * Theme implementation of the media type menu in the media library dialog. + * + * Available variables: + * - attributes: Attributes for the UL containing the list of links. + * - links: Links to be output. + * Each link will have the following elements: + * - link: (optional) A render array that returns a link. See + * template_preprocess_links() for details how it is generated. + * - text: The link text. + * - attributes: HTML attributes for the list item element. + * - text_attributes: (optional) HTML attributes for the span element if no + * 'url' was supplied. + * - heading: (optional) A heading to precede the links. + * - text: The heading text. + * - level: The heading level (e.g. 'h2', 'h3'). + * - attributes: (optional) A keyed list of attributes for the heading. + * If the heading is a string, it will be used as the text of the heading and + * the level will default to 'h2'. + * + * Headings should be used on navigation menus and any list of links that + * consistently appears on multiple pages. To make the heading invisible use + * the 'visually-hidden' CSS class. Do not use 'display:none', which + * removes it from screen readers and assistive technology. Headings allow + * screen reader and keyboard only users to navigate to or skip the links. + * See http://juicystudio.com/article/screen-readers-display-none.php and + * http://www.w3.org/TR/WCAG-TECHS/H42.html for more information. + * + * @see template_preprocess_links() + */ +#} +{% set attributes = attributes.addClass('media-library-menu') %} diff --git a/core/themes/starterkit_theme/templates/media-library/media--media-library.html.twig b/core/themes/starterkit_theme/templates/media-library/media--media-library.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..e88635424fc07f47e181e5e894427f9e931c7bc8 --- /dev/null +++ b/core/themes/starterkit_theme/templates/media-library/media--media-library.html.twig @@ -0,0 +1,55 @@ +{# +/** + * @file + * Theme override of a media item in the media library. + * + * This is used for media that the user can select from the grid of media + * items. It is not used for items that have already been selected in the + * corresponding field widget, or for items that have been previously selected + * before adding new media to the library. + * + * Available variables: + * - media: The entity with limited access to object properties and methods. + * Only method names starting with "get", "has", or "is" and a few common + * methods such as "id", "label", and "bundle" are available. For example: + * - entity.getEntityTypeId() will return the entity type ID. + * - entity.hasField('field_example') returns TRUE if the entity includes + * field_example. (This does not indicate the presence of a value in this + * field.) + * Calling other methods, such as entity.delete(), will result in an exception. + * See \Drupal\Core\Entity\EntityInterface for a full list of methods. + * - name: Name of the media. + * - content: Media content. + * - title_prefix: Additional output populated by modules, intended to be + * displayed in front of the main title tag that appears in the template. + * - title_suffix: Additional output populated by modules, intended to be + * displayed after the main title tag that appears in the template. + * - view_mode: View mode; for example, "teaser" or "full". + * - attributes: HTML attributes for the containing element. + * - title_attributes: Same as attributes, except applied to the main title + * tag that appears in the template. + * - url: Direct URL of the media. + * - preview_attributes: HTML attributes for the preview wrapper. + * - metadata_attributes: HTML attributes for the expandable metadata area. + * - status: Whether or not the Media is published. + * + * @see template_preprocess_media() + * + * @ingroup themeable + */ +#} +<article{{ attributes }}> + {% if content %} + <div{{ preview_attributes.addClass('media-library-item__preview js-media-library-item-preview') }}> + {{ content|without('name') }} + </div> + {% if not status %} + <div class="media-library-item__status">{{ "unpublished" | t }}</div> + {% endif %} + <div{{ metadata_attributes.addClass('media-library-item__attributes') }}> + <div class="media-library-item__name"> + {{ name }} + </div> + </div> + {% endif %} +</article> diff --git a/core/themes/starterkit_theme/templates/media-library/media-library-item--small.html.twig b/core/themes/starterkit_theme/templates/media-library/media-library-item--small.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..ba03858b7f82cd64b985264cc9f120bd80db6038 --- /dev/null +++ b/core/themes/starterkit_theme/templates/media-library/media-library-item--small.html.twig @@ -0,0 +1,31 @@ +{# +/** + * @file + * Default theme implementation of a media library item. + * + * This is used when displaying selected media items, either in the field + * widget or in the "Additional selected media" area when adding new + * media items in the media library modal dialog. + * + * Available variables: + * - attributes: HTML attributes for the containing element. + * - content: The content of the media library item, plus any additional + * fields or elements surrounding it. + * + * @see seven_preprocess_media_library_item__small() + * @see seven_preprocess_media_library_item__widget() + * @see template_preprocess_media_library_item() + * + * @ingroup themeable + */ +#} +{% + set classes = [ + 'media-library-item', + 'media-library-item--grid', + 'media-library-item--small', + ] +%} +<div{{ attributes.addClass(classes) }}> + {{ content }} +</div> diff --git a/core/themes/starterkit_theme/templates/media-library/media-library-item.html.twig b/core/themes/starterkit_theme/templates/media-library/media-library-item.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..297780e0f736548762e4bef93aa85e98c84b9142 --- /dev/null +++ b/core/themes/starterkit_theme/templates/media-library/media-library-item.html.twig @@ -0,0 +1,28 @@ +{# +/** + * @file + * Default theme implementation of a media library item. + * + * This is used when displaying selected media items, either in the field + * widget or in the "Additional selected media" area when adding new + * media items in the media library modal dialog. + * + * Available variables: + * - attributes: HTML attributes for the containing element. + * - content: The content of the media library item, plus any additional + * fields or elements surrounding it. + * + * @see template_preprocess_media_library_item() + * + * @ingroup themeable + */ +#} +{% + set classes = [ + 'media-library-item', + 'media-library-item--grid', + ] +%} +<div{{ attributes.addClass(classes) }}> + {{ content }} +</div> diff --git a/core/themes/starterkit_theme/templates/media-library/media-library-wrapper.html.twig b/core/themes/starterkit_theme/templates/media-library/media-library-wrapper.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..4d5458ac795566fe697dd8031d4f8cb1449054ca --- /dev/null +++ b/core/themes/starterkit_theme/templates/media-library/media-library-wrapper.html.twig @@ -0,0 +1,21 @@ +{# +/** + * @file + * Theme override of a container used to wrap the media library's modal dialog + * interface. + * + * Available variables: + * - attributes: HTML attributes for the containing element. + * - menu: The menu of available media types to choose from. + * - content: The form to add new media items, followed by the grid or table of + * existing media items to choose from. + * + * @see template_preprocess_media_library_wrapper() + * + * @ingroup themeable + */ +#} +<div{{ attributes.addClass('media-library-wrapper') }}> + {{ menu }} + {{ content }} +</div> diff --git a/core/themes/starterkit_theme/templates/media-library/views-view-unformatted--media-library.html.twig b/core/themes/starterkit_theme/templates/media-library/views-view-unformatted--media-library.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..a94d4e2b636dd65a0bbf0aa27e8c11eb06935383 --- /dev/null +++ b/core/themes/starterkit_theme/templates/media-library/views-view-unformatted--media-library.html.twig @@ -0,0 +1,35 @@ +{# +/** + * @file + * Theme override of the media library view. + * + * This is used to display a grid of media items, in both the administrative + * interface and in the modal media library dialog's grid layout. + * + * Available variables: + * - title: The title of this group of rows. May be empty. + * - rows: A list of the view's row items. + * - attributes: The row's HTML attributes. + * - content: The row's content. + * - view: The view object. + * - default_row_class: A flag indicating whether default classes should be + * used on rows. + * + * @see template_preprocess_views_view_unformatted() + */ +#} +{% if title %} + <h3>{{ title }}</h3> +{% endif %} +{% for row in rows %} + {% + set row_classes = [ + default_row_class ? 'views-row', + 'media-library-item', + 'media-library-item--grid', + ] + %} + <div{{ row.attributes.addClass(row_classes) }}> + {{- row.content -}} + </div> +{% endfor %} diff --git a/core/themes/starterkit_theme/templates/misc/help-section.html.twig b/core/themes/starterkit_theme/templates/misc/help-section.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..6cfaa38da26655da2c5e1915b603563fc877accc --- /dev/null +++ b/core/themes/starterkit_theme/templates/misc/help-section.html.twig @@ -0,0 +1,48 @@ +{# +/** + * @file + * Theme override for a section of the help page. + * + * This implementation divides the links into 4 columns. + * + * Available variables: + * - title: The section title. + * - description: The description text for the section. + * - links: Links to display in the section. + * - empty: Text to display if there are no links. + */ +#} +<div class="clearfix"> + <h2>{{ title }}</h2> + <p>{{ description }}</p> + {% if links %} + {# Calculate the column length, to divide links into 4 columns. #} + {% set size = links|length // 4 %} + {% if size * 4 < links|length %} + {% set size = size + 1 %} + {% endif %} + + {# Output the links in 4 columns. #} + {% set count = 0 %} + {% for link in links %} + {% if count == 0 %} + {# Start a new column. #} + <div class="layout-column layout-column--quarter"><ul> + {% endif %} + <li>{{ link }}</li> + {% set count = count + 1 %} + {% if count >= size %} + {# End the current column. #} + {% set count = 0 %} + </ul></div> + {% endif %} + {% endfor %} + + {# End the last column, if one is open. #} + {% if count > 0 %} + </ul></div> + {% endif %} + {% else %} + <p>{{ empty }}</p> + {% endif %} +</div> diff --git a/core/themes/starterkit_theme/templates/misc/progress-bar.html.twig b/core/themes/starterkit_theme/templates/misc/progress-bar.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..0e9c8dc91705dc56cb013e5bc24fc36ffa8a611f --- /dev/null +++ b/core/themes/starterkit_theme/templates/misc/progress-bar.html.twig @@ -0,0 +1,22 @@ +{# +/** + * @file + * Theme override for a progress bar. + * + * Note that the core Batch API uses this only for non-JavaScript batch jobs. + * + * Available variables: + * - label: The label of the working task. + * - percent: The percentage of the progress. + * - message: A string containing information to be displayed. + */ +#} +{{ attach_library('starterkit_theme/progress') }} +<div class="progress" data-drupal-progress> + {% if label %} + <div class="progress__label">{{ label }}</div> + {% endif %} + <div class="progress__track"><div class="progress__bar" style="width: {{ percent }}%"></div></div> + <div class="progress__percentage">{{ percent }}%</div> + <div class="progress__description">{{ message }}</div> +</div> diff --git a/core/themes/starterkit_theme/templates/misc/rdf-metadata.html.twig b/core/themes/starterkit_theme/templates/misc/rdf-metadata.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..acc62df16d41b5e10442c5ef92e61ae01a511c28 --- /dev/null +++ b/core/themes/starterkit_theme/templates/misc/rdf-metadata.html.twig @@ -0,0 +1,20 @@ +{# +/** + * @file + * Theme override for empty spans with RDF attributes. + * + * The XHTML+RDFa doctype allows either <span></span> or <span /> syntax to + * be used, but for maximum browser compatibility, W3C recommends the + * former when serving pages using the text/html media type, see + * http://www.w3.org/TR/xhtml1/#C_3. + * + * Available variables: + * - metadata: Each item within corresponds to its own set of attributes, + * and therefore, needs its own 'attributes' element. + * + * @see template_preprocess_rdf_metadata() + */ +#} +{% for attributes in metadata %} + <span{{ attributes.addClass('rdf-meta', 'hidden') }}></span> +{% endfor %} diff --git a/core/themes/starterkit_theme/templates/misc/status-messages.html.twig b/core/themes/starterkit_theme/templates/misc/status-messages.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..7dda6c040c49d7fc9bde68e76182fc5487183c4f --- /dev/null +++ b/core/themes/starterkit_theme/templates/misc/status-messages.html.twig @@ -0,0 +1,55 @@ +{# +/** + * @file + * Theme override for status messages. + * + * Displays status, error, and warning messages, grouped by type. + * + * An invisible heading identifies the messages for assistive technology. + * Sighted users see a colored box. See http://www.w3.org/TR/WCAG-TECHS/H69.html + * for info. + * + * Add an ARIA label to the contentinfo area so that assistive technology + * user agents will better describe this landmark. + * + * Available variables: + * - message_list: List of messages to be displayed, grouped by type. + * - status_headings: List of all status types. + * - attributes: HTML attributes for the element, including: + * - class: HTML classes. + */ +#} +<div data-drupal-messages> +{% block messages %} +{% for type, messages in message_list %} + {% + set classes = [ + 'messages', + 'messages--' ~ type, + ] + %} + <div role="contentinfo" aria-label="{{ status_headings[type] }}"{{ attributes.addClass(classes)|without('role', 'aria-label') }}> + {% if type == 'error' %} + <div role="alert"> + {% endif %} + {% if status_headings[type] %} + <h2 class="visually-hidden">{{ status_headings[type] }}</h2> + {% endif %} + {% if messages|length > 1 %} + <ul class="messages__list"> + {% for message in messages %} + <li class="messages__item">{{ message }}</li> + {% endfor %} + </ul> + {% else %} + {{ messages|first }} + {% endif %} + {% if type == 'error' %} + </div> + {% endif %} + </div> + {# Remove type specific classes. #} + {% set attributes = attributes.removeClass(classes) %} +{% endfor %} +{% endblock messages %} +</div> diff --git a/core/themes/starterkit_theme/templates/navigation/book-all-books-block.html.twig b/core/themes/starterkit_theme/templates/navigation/book-all-books-block.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..b4cb64de3d5bfdb2bbbfdf2a32793f53d825a9c6 --- /dev/null +++ b/core/themes/starterkit_theme/templates/navigation/book-all-books-block.html.twig @@ -0,0 +1,22 @@ +{# +/** + * @file + * Theme override for rendering book outlines within a block. + * + * This template is used only when the block is configured to "show block on all + * pages", which presents multiple independent books on all pages. + * + * Available variables: + * - book_menus: Book outlines. + * - id: The parent book ID. + * - title: The parent book title. + * - menu: The top-level book links. + * + * @see template_preprocess_book_all_books_block() + */ +#} +{% for book in book_menus %} + <nav id="book-block-menu-{{ book.id }}" class="book-block-menu" role="navigation" aria-label="{% trans %}Book outline for {{ book.title }}{% endtrans %}"> + {{ book.menu }} + </nav> +{% endfor %} diff --git a/core/themes/starterkit_theme/templates/navigation/book-navigation.html.twig b/core/themes/starterkit_theme/templates/navigation/book-navigation.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..48a8638c85f1e0b4801911149bf89eb47296fb42 --- /dev/null +++ b/core/themes/starterkit_theme/templates/navigation/book-navigation.html.twig @@ -0,0 +1,56 @@ +{# +/** + * @file + * Theme override to navigate books. + * + * Presented under nodes that are a part of book outlines. + * + * Available variables: + * - tree: The immediate children of the current node rendered as an unordered + * list. + * - current_depth: Depth of the current node within the book outline. Provided + * for context. + * - prev_url: URL to the previous node. + * - prev_title: Title of the previous node. + * - parent_url: URL to the parent node. + * - parent_title: Title of the parent node. Not printed by default. Provided + * as an option. + * - next_url: URL to the next node. + * - next_title: Title of the next node. + * - has_links: Flags TRUE whenever the previous, parent or next data has a + * value. + * - book_id: The book ID of the current outline being viewed. Same as the node + * ID containing the entire outline. Provided for context. + * - book_url: The book/node URL of the current outline being viewed. Provided + * as an option. Not used by default. + * - book_title: The book/node title of the current outline being viewed. + * + * @see template_preprocess_book_navigation() + */ +#} +{{ attach_library('starterkit_theme/book-navigation') }} +{% if tree or has_links %} + <nav id="book-navigation-{{ book_id }}" class="book-navigation" role="navigation" aria-labelledby="book-label-{{ book_id }}"> + {{ tree }} + {% if has_links %} + <h2 class="visually-hidden" id="book-label-{{ book_id }}">{{ 'Book traversal links for'|t }} {{ book_title }}</h2> + <ul class="book-pager"> + {% if prev_url %} + <li class="book-pager__item book-pager__item--previous"> + <a href="{{ prev_url }}" rel="prev" title="{{ 'Go to previous page'|t }}"><b>{{ '‹'|t }}</b> {{ prev_title }}</a> + </li> + {% endif %} + {% if parent_url %} + <li class="book-pager__item book-pager__item--center"> + <a href="{{ parent_url }}" title="{{ 'Go to parent page'|t }}">{{ 'Up'|t }}</a> + </li> + {% endif %} + {% if next_url %} + <li class="book-pager__item book-pager__item--next"> + <a href="{{ next_url }}" rel="next" title="{{ 'Go to next page'|t }}">{{ next_title }} <b>{{ '›'|t }}</b></a> + </li> + {% endif %} + </ul> + {% endif %} + </nav> +{% endif %} diff --git a/core/themes/starterkit_theme/templates/navigation/book-tree.html.twig b/core/themes/starterkit_theme/templates/navigation/book-tree.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..94fac5598b5780700a112eaf63d9e14859bce1d7 --- /dev/null +++ b/core/themes/starterkit_theme/templates/navigation/book-tree.html.twig @@ -0,0 +1,55 @@ +{# +/** + * @file + * Theme override to display a book tree. + * + * Returns HTML for a wrapper for a book sub-tree. + * + * Available variables: + * - items: A nested list of book items. Each book item contains: + * - attributes: HTML attributes for the book item. + * - below: The book item child items. + * - title: The book link title. + * - url: The book link URL, instance of \Drupal\Core\Url. + * - is_expanded: TRUE if the link has visible children within the current + * book tree. + * - is_collapsed: TRUE if the link has children within the current book tree + * that are not currently visible. + * - in_active_trail: TRUE if the link is in the active trail. + */ +#} +{% import _self as book_tree %} + +{# + We call a macro which calls itself to render the full tree. + @see https://twig.symfony.com/doc/1.x/tags/macro.html +#} +{{ book_tree.book_links(items, attributes, 0) }} + +{% macro book_links(items, attributes, menu_level) %} + {% import _self as book_tree %} + {% if items %} + {% if menu_level == 0 %} + <ul{{ attributes.addClass('menu') }}> + {% else %} + <ul class="menu"> + {% endif %} + {% for item in items %} + {% + set classes = [ + 'menu-item', + item.is_expanded ? 'menu-item--expanded', + item.is_collapsed ? 'menu-item--collapsed', + item.in_active_trail ? 'menu-item--active-trail', + ] + %} + <li{{ item.attributes.addClass(classes) }}> + {{ link(item.title, item.url) }} + {% if item.below %} + {{ book_tree.book_links(item.below, attributes, menu_level + 1) }} + {% endif %} + </li> + {% endfor %} + </ul> + {% endif %} +{% endmacro %} diff --git a/core/themes/starterkit_theme/templates/navigation/breadcrumb.html.twig b/core/themes/starterkit_theme/templates/navigation/breadcrumb.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..7dc08c5207eff25b57e6cbdcefbc95db1ef4a951 --- /dev/null +++ b/core/themes/starterkit_theme/templates/navigation/breadcrumb.html.twig @@ -0,0 +1,25 @@ +{# +/** + * @file + * Theme override for a breadcrumb trail. + * + * Available variables: + * - breadcrumb: Breadcrumb trail items. + */ +#} +{% if breadcrumb %} + <nav class="breadcrumb" role="navigation" aria-labelledby="system-breadcrumb"> + <h2 id="system-breadcrumb" class="visually-hidden">{{ 'Breadcrumb'|t }}</h2> + <ol> + {% for item in breadcrumb %} + <li> + {% if item.url %} + <a href="{{ item.url }}">{{ item.text }}</a> + {% else %} + {{ item.text }} + {% endif %} + </li> + {% endfor %} + </ol> + </nav> +{% endif %} diff --git a/core/themes/starterkit_theme/templates/navigation/links.html.twig b/core/themes/starterkit_theme/templates/navigation/links.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..8eb003355eb37a99af14833a25eb8b9b302f19c8 --- /dev/null +++ b/core/themes/starterkit_theme/templates/navigation/links.html.twig @@ -0,0 +1,55 @@ +{# +/** + * @file + * Theme override for a set of links. + * + * Available variables: + * - attributes: Attributes for the UL containing the list of links. + * - links: Links to be output. + * Each link will have the following elements: + * - link: (optional) A render array that returns a link. See + * template_preprocess_links() for details how it is generated. + * - text: The link text. + * - attributes: HTML attributes for the list item element. + * - text_attributes: (optional) HTML attributes for the span element if no + * 'url' was supplied. + * - heading: (optional) A heading to precede the links. + * - text: The heading text. + * - level: The heading level (e.g. 'h2', 'h3'). + * - attributes: (optional) A keyed list of attributes for the heading. + * If the heading is a string, it will be used as the text of the heading and + * the level will default to 'h2'. + * + * Headings should be used on navigation menus and any list of links that + * consistently appears on multiple pages. To make the heading invisible use + * the 'visually-hidden' CSS class. Do not use 'display:none', which + * removes it from screen readers and assistive technology. Headings allow + * screen reader and keyboard only users to navigate to or skip the links. + * See http://juicystudio.com/article/screen-readers-display-none.php and + * http://www.w3.org/TR/WCAG-TECHS/H42.html for more information. + * + * @see template_preprocess_links() + */ +#} +{% if links -%} + {%- if heading -%} + {%- if heading.level -%} + <{{ heading.level }}{{ heading.attributes }}>{{ heading.text }}</{{ heading.level }}> + {%- else -%} + <h2{{ heading.attributes }}>{{ heading.text }}</h2> + {%- endif -%} + {%- endif -%} + <ul{{ attributes }}> + {%- for item in links -%} + <li{{ item.attributes }}> + {%- if item.link -%} + {{ item.link }} + {%- elseif item.text_attributes -%} + <span{{ item.text_attributes }}>{{ item.text }}</span> + {%- else -%} + {{ item.text }} + {%- endif -%} + </li> + {%- endfor -%} + </ul> +{%- endif %} diff --git a/core/themes/starterkit_theme/templates/navigation/menu-local-action.html.twig b/core/themes/starterkit_theme/templates/navigation/menu-local-action.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..27872837abdca839f016b791feb731656f653108 --- /dev/null +++ b/core/themes/starterkit_theme/templates/navigation/menu-local-action.html.twig @@ -0,0 +1,13 @@ +{# +/** + * @file + * Theme override for a single local action link. + * + * Available variables: + * - attributes: HTML attributes for the wrapper element. + * - link: A rendered link element. + * + * @see template_preprocess_menu_local_action() + */ +#} +<li{{ attributes }}>{{ link }}</li> diff --git a/core/themes/starterkit_theme/templates/navigation/menu-local-task.html.twig b/core/themes/starterkit_theme/templates/navigation/menu-local-task.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..b8559815b9e937120f8fd4f87bcfe27e7a30c0b0 --- /dev/null +++ b/core/themes/starterkit_theme/templates/navigation/menu-local-task.html.twig @@ -0,0 +1,17 @@ +{# +/** + * @file + * Theme override for a local task link. + * + * Available variables: + * - attributes: HTML attributes for the wrapper element. + * - is_active: Whether the task item is an active tab. + * - link: A rendered link element. + * + * Note: This template renders the content for each task item in + * menu-local-tasks.html.twig. + * + * @see template_preprocess_menu_local_task() + */ +#} +<li{{ attributes.addClass(is_active ? 'is-active') }}>{{ link }}</li> diff --git a/core/themes/starterkit_theme/templates/navigation/menu-local-tasks.html.twig b/core/themes/starterkit_theme/templates/navigation/menu-local-tasks.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..8eb20ab44c24bd4d4bdce372022998885257ae8d --- /dev/null +++ b/core/themes/starterkit_theme/templates/navigation/menu-local-tasks.html.twig @@ -0,0 +1,21 @@ +{# +/** + * @file + * Theme override to display primary and secondary local tasks. + * + * Available variables: + * - primary: HTML list items representing primary tasks. + * - secondary: HTML list items representing secondary tasks. + * + * Each item in these variables (primary and secondary) can be individually + * themed in menu-local-task.html.twig. + */ +#} +{% if primary %} + <h2 class="visually-hidden">{{ 'Primary tabs'|t }}</h2> + <ul class="tabs primary">{{ primary }}</ul> +{% endif %} +{% if secondary %} + <h2 class="visually-hidden">{{ 'Secondary tabs'|t }}</h2> + <ul class="tabs secondary">{{ secondary }}</ul> +{% endif %} diff --git a/core/themes/starterkit_theme/templates/navigation/menu.html.twig b/core/themes/starterkit_theme/templates/navigation/menu.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..b437f8760e978d34f8ce6945969e17abf29f5e6a --- /dev/null +++ b/core/themes/starterkit_theme/templates/navigation/menu.html.twig @@ -0,0 +1,55 @@ +{# +/** + * @file + * Theme override to display a menu. + * + * Available variables: + * - menu_name: The machine name of the menu. + * - items: A nested list of menu items. Each menu item contains: + * - attributes: HTML attributes for the menu item. + * - below: The menu item child items. + * - title: The menu link title. + * - url: The menu link url, instance of \Drupal\Core\Url + * - localized_options: Menu link localized options. + * - is_expanded: TRUE if the link has visible children within the current + * menu tree. + * - is_collapsed: TRUE if the link has children within the current menu tree + * that are not currently visible. + * - in_active_trail: TRUE if the link is in the active trail. + */ +#} +{% import _self as menus %} + +{# + We call a macro which calls itself to render the full tree. + @see https://twig.symfony.com/doc/1.x/tags/macro.html +#} +{{ menus.menu_links(items, attributes, 0) }} + +{% macro menu_links(items, attributes, menu_level) %} + {% import _self as menus %} + {% if items %} + {% if menu_level == 0 %} + <ul{{ attributes.addClass('menu') }}> + {% else %} + <ul class="menu"> + {% endif %} + {% for item in items %} + {% + set classes = [ + 'menu-item', + item.is_expanded ? 'menu-item--expanded', + item.is_collapsed ? 'menu-item--collapsed', + item.in_active_trail ? 'menu-item--active-trail', + ] + %} + <li{{ item.attributes.addClass(classes) }}> + {{ link(item.title, item.url) }} + {% if item.below %} + {{ menus.menu_links(item.below, attributes, menu_level + 1) }} + {% endif %} + </li> + {% endfor %} + </ul> + {% endif %} +{% endmacro %} diff --git a/core/themes/starterkit_theme/templates/navigation/pager.html.twig b/core/themes/starterkit_theme/templates/navigation/pager.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..6f863faaf91206bd7e563c9dde65327b4645ccfa --- /dev/null +++ b/core/themes/starterkit_theme/templates/navigation/pager.html.twig @@ -0,0 +1,99 @@ +{# +/** + * @file + * Theme override to display a pager. + * + * Available variables: + * - heading_id: Pagination heading ID. + * - items: List of pager items. + * The list is keyed by the following elements: + * - first: Item for the first page; not present on the first page of results. + * - previous: Item for the previous page; not present on the first page + * of results. + * - next: Item for the next page; not present on the last page of results. + * - last: Item for the last page; not present on the last page of results. + * - pages: List of pages, keyed by page number. + * Sub-sub elements: + * items.first, items.previous, items.next, items.last, and each item inside + * items.pages contain the following elements: + * - href: URL with appropriate query parameters for the item. + * - attributes: A keyed list of HTML attributes for the item. + * - text: The visible text used for the item link, such as "‹ Previous" + * or "Next ›". + * - current: The page number of the current page. + * - ellipses: If there are more pages than the quantity allows, then an + * ellipsis before or after the listed pages may be present. + * - previous: Present if the currently visible list of pages does not start + * at the first page. + * - next: Present if the visible list of pages ends before the last page. + * + * @see template_preprocess_pager() + */ +#} +{% if items %} + <nav class="pager" role="navigation" aria-labelledby="{{ heading_id }}"> + <h4 id="{{ heading_id }}" class="visually-hidden">{{ 'Pagination'|t }}</h4> + <ul class="pager__items js-pager__items"> + {# Print first item if we are not on the first page. #} + {% if items.first %} + <li class="pager__item pager__item--first"> + <a href="{{ items.first.href }}" title="{{ 'Go to first page'|t }}"{{ items.first.attributes|without('href', 'title') }}> + <span class="visually-hidden">{{ 'First page'|t }}</span> + <span aria-hidden="true">{{ items.first.text|default('« First'|t) }}</span> + </a> + </li> + {% endif %} + {# Print previous item if we are not on the first page. #} + {% if items.previous %} + <li class="pager__item pager__item--previous"> + <a href="{{ items.previous.href }}" title="{{ 'Go to previous page'|t }}" rel="prev"{{ items.previous.attributes|without('href', 'title', 'rel') }}> + <span class="visually-hidden">{{ 'Previous page'|t }}</span> + <span aria-hidden="true">{{ items.previous.text|default('‹ Previous'|t) }}</span> + </a> + </li> + {% endif %} + {# Add an ellipsis if there are further previous pages. #} + {% if ellipses.previous %} + <li class="pager__item pager__item--ellipsis" role="presentation">…</li> + {% endif %} + {# Now generate the actual pager piece. #} + {% for key, item in items.pages %} + <li class="pager__item{{ current == key ? ' is-active' : '' }}"> + {% if current == key %} + {% set title = 'Current page'|t %} + {% else %} + {% set title = 'Go to page @key'|t({'@key': key}) %} + {% endif %} + <a href="{{ item.href }}" title="{{ title }}"{{ item.attributes|without('href', 'title') }}> + <span class="visually-hidden"> + {{ current == key ? 'Current page'|t : 'Page'|t }} + </span> + {{- key -}} + </a> + </li> + {% endfor %} + {# Add an ellipsis if there are further next pages. #} + {% if ellipses.next %} + <li class="pager__item pager__item--ellipsis" role="presentation">…</li> + {% endif %} + {# Print next item if we are not on the last page. #} + {% if items.next %} + <li class="pager__item pager__item--next"> + <a href="{{ items.next.href }}" title="{{ 'Go to next page'|t }}" rel="next"{{ items.next.attributes|without('href', 'title', 'rel') }}> + <span class="visually-hidden">{{ 'Next page'|t }}</span> + <span aria-hidden="true">{{ items.next.text|default('Next ›'|t) }}</span> + </a> + </li> + {% endif %} + {# Print last item if we are not on the last page. #} + {% if items.last %} + <li class="pager__item pager__item--last"> + <a href="{{ items.last.href }}" title="{{ 'Go to last page'|t }}"{{ items.last.attributes|without('href', 'title') }}> + <span class="visually-hidden">{{ 'Last page'|t }}</span> + <span aria-hidden="true">{{ items.last.text|default('Last »'|t) }}</span> + </a> + </li> + {% endif %} + </ul> + </nav> +{% endif %} diff --git a/core/themes/starterkit_theme/templates/navigation/toolbar.html.twig b/core/themes/starterkit_theme/templates/navigation/toolbar.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..5ef3ffad3a3283c4ed4f21b8551271f600cbfe06 --- /dev/null +++ b/core/themes/starterkit_theme/templates/navigation/toolbar.html.twig @@ -0,0 +1,46 @@ +{# +/** + * @file + * Theme override for the administrative toolbar. + * + * Available variables: + * - attributes: HTML attributes for the wrapper. + * - toolbar_attributes: HTML attributes to apply to the toolbar. + * - toolbar_heading: The heading or label for the toolbar. + * - tabs: List of tabs for the toolbar. + * - attributes: HTML attributes for the tab container. + * - link: Link or button for the menu tab. + * - trays: Toolbar tray list, each associated with a tab. Each tray in trays + * contains: + * - attributes: HTML attributes to apply to the tray. + * - label: The tray's label. + * - links: The tray menu links. + * - remainder: Any non-tray, non-tab elements left to be rendered. + * + * @see template_preprocess_toolbar() + */ +#} +<div{{ attributes.addClass('toolbar') }}> + <nav{{ toolbar_attributes.addClass('toolbar-bar', 'clearfix') }}> + <h2 class="visually-hidden">{{ toolbar_heading }}</h2> + {% for key, tab in tabs %} + {% set tray = trays[key] %} + <div{{ tab.attributes.addClass('toolbar-tab') }}> + {{ tab.link }} + {% apply spaceless %} + <div{{ tray.attributes }}> + {% if tray.label %} + <nav class="toolbar-lining clearfix" role="navigation" aria-label="{{ tray.label }}"> + <h3 class="toolbar-tray-name visually-hidden">{{ tray.label }}</h3> + {% else %} + <nav class="toolbar-lining clearfix" role="navigation"> + {% endif %} + {{ tray.links }} + </nav> + </div> + {% endapply %} + </div> + {% endfor %} + </nav> + {{ remainder }} +</div> diff --git a/core/themes/starterkit_theme/templates/navigation/vertical-tabs.html.twig b/core/themes/starterkit_theme/templates/navigation/vertical-tabs.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..5872220b2a751dfeb132901e1b8e0c9c0f09284b --- /dev/null +++ b/core/themes/starterkit_theme/templates/navigation/vertical-tabs.html.twig @@ -0,0 +1,13 @@ +{# +/** + * @file + * Theme override for vertical tabs. + * + * Available variables + * - attributes: A list of HTML attributes for the wrapper element. + * - children: The rendered tabs. + * + * @see template_preprocess_vertical_tabs() + */ +#} +<div{{ attributes.setAttribute('data-vertical-tabs-panes', TRUE) }}>{{ children }}</div> diff --git a/core/themes/starterkit_theme/templates/user/forum-submitted.html.twig b/core/themes/starterkit_theme/templates/user/forum-submitted.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..57311e96b59b19efc03430cb193a4606d9cbe782 --- /dev/null +++ b/core/themes/starterkit_theme/templates/user/forum-submitted.html.twig @@ -0,0 +1,21 @@ +{# +/** + * @file + * Theme override for a forum post submission string. + * + * The submission string indicates when and by whom a topic was submitted. + * + * Available variables: + * - author: The author of the post. + * - time: How long ago the post was created. + * - topic: An object with the raw data of the post. Potentially unsafe. Be + * sure to clean this data before printing. + * + * @see template_preprocess_forum_submitted() + */ +#} +{% if time %} + <span class="submitted">{% trans %}By {{ author }} {{ time }} ago{% endtrans %}</span> +{% else %} + {{ 'n/a'|t }} +{% endif %} diff --git a/core/themes/starterkit_theme/templates/user/user.html.twig b/core/themes/starterkit_theme/templates/user/user.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..9a824effd35f59462e2bc14b740fde5f437f50a3 --- /dev/null +++ b/core/themes/starterkit_theme/templates/user/user.html.twig @@ -0,0 +1,23 @@ +{# +/** + * @file + * Theme override to present all user data. + * + * This template is used when viewing a registered user's page, + * e.g., example.com/user/123. 123 being the user's ID. + * + * Available variables: + * - content: A list of content items. Use 'content' to print all content, or + * print a subset such as 'content.field_example'. Fields attached to a user + * such as 'user_picture' are available as 'content.user_picture'. + * - attributes: HTML attributes for the container element. + * - user: A Drupal User entity. + * + * @see template_preprocess_user() + */ +#} +<article{{ attributes.addClass('profile') }}> + {% if content %} + {{- content -}} + {% endif %} +</article> diff --git a/core/themes/starterkit_theme/templates/user/username.html.twig b/core/themes/starterkit_theme/templates/user/username.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..df694dff698073f72e1addd165d4891db8aa67a6 --- /dev/null +++ b/core/themes/starterkit_theme/templates/user/username.html.twig @@ -0,0 +1,29 @@ +{# +/** + * @file + * Theme override for displaying a username. + * + * Available variables: + * - account: The full account information for the user. + * - uid: The user ID, or zero if not a user. As used in anonymous comments. + * - name: The user's name, sanitized, and optionally truncated. + * - name_raw: The user's name, un-truncated. + * - truncated: Whether the user's name was truncated. + * - extra: Additional text to append to the user's name, sanitized. + * - profile_access: Whether the current user has permission to access this + users profile page. + * - link_path: The path or URL of the user's profile page, home page, + * or other desired page to link to for more information about the user. + * - homepage: (optional) The home page of the account, only set for non users. + * - link_options: Options to set on the \Drupal\Core\Url object if linking the + * user's name to the user's page. + * - attributes: HTML attributes for the containing element. + * + * @see template_preprocess_username() + */ +#} +{% if link_path -%} + <a{{ attributes.addClass('username') }}>{{ name }}{{ extra }}</a> +{%- else -%} + <span{{ attributes }}>{{ name }}{{ extra }}</span> +{%- endif -%} diff --git a/core/themes/starterkit_theme/templates/views/views-exposed-form.html.twig b/core/themes/starterkit_theme/templates/views/views-exposed-form.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..3c679ae58326b5df55b78698003767192e72d4dc --- /dev/null +++ b/core/themes/starterkit_theme/templates/views/views-exposed-form.html.twig @@ -0,0 +1,21 @@ +{# +/** + * @file + * Theme override for a views exposed form. + * + * Available variables: + * - form: A render element representing the form. + * + * @see template_preprocess_views_exposed_form() + */ +#} +{% if q is not empty %} + {# + This ensures that, if clean URLs are off, the 'q' is added first, + as a hidden form element, so that it shows up first in the POST URL. + #} +{{ q }} +{% endif %} +<div class="form--inline clearfix"> + {{ form }} +</div> diff --git a/core/themes/starterkit_theme/templates/views/views-mini-pager.html.twig b/core/themes/starterkit_theme/templates/views/views-mini-pager.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..4b46f2bb1f698633968b8e0290d2730cd1ef52aa --- /dev/null +++ b/core/themes/starterkit_theme/templates/views/views-mini-pager.html.twig @@ -0,0 +1,42 @@ +{# +/** + * @file + * Theme override for a views mini-pager. + * + * Available variables: + * - heading_id: Pagination heading ID. + * - items: List of pager items. + * + * @see template_preprocess_views_mini_pager() + */ +#} +{% if items.previous or items.next %} + <nav class="pager" role="navigation" aria-labelledby="{{ heading_id }}"> + <h4 id="{{ heading_id }}" class="pager__heading visually-hidden">{{ 'Pagination'|t }}</h4> + <ul class="pager__items js-pager__items"> + {% if items.previous %} + <li class="pager__item pager__item--previous"> + <a href="{{ items.previous.href }}" title="{{ 'Go to previous page'|t }}" rel="prev"{{ items.previous.attributes|without('href', 'title', 'rel') }}> + <span class="visually-hidden">{{ 'Previous page'|t }}</span> + <span aria-hidden="true">{{ items.previous.text|default('‹‹'|t) }}</span> + </a> + </li> + {% endif %} + {% if items.current %} + <li class="pager__item is-active"> + {% trans %} + Page {{ items.current }} + {% endtrans %} + </li> + {% endif %} + {% if items.next %} + <li class="pager__item pager__item--next"> + <a href="{{ items.next.href }}" title="{{ 'Go to next page'|t }}" rel="next"{{ items.next.attributes|without('href', 'title', 'rel') }}> + <span class="visually-hidden">{{ 'Next page'|t }}</span> + <span aria-hidden="true">{{ items.next.text|default('››'|t) }}</span> + </a> + </li> + {% endif %} + </ul> + </nav> +{% endif %} diff --git a/core/themes/starterkit_theme/templates/views/views-view-grid.html.twig b/core/themes/starterkit_theme/templates/views/views-view-grid.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..8a3a20bbfbcb33eeee42a8d220e12435574df08f --- /dev/null +++ b/core/themes/starterkit_theme/templates/views/views-view-grid.html.twig @@ -0,0 +1,76 @@ +{# +/** + * @file + * Theme override for views to display rows in a grid. + * + * Available variables: + * - attributes: HTML attributes for the wrapping element. + * - title: The title of this group of rows. + * - view: The view object. + * - rows: The rendered view results. + * - options: The view plugin style options. + * - row_class_default: A flag indicating whether default classes should be + * used on rows. + * - col_class_default: A flag indicating whether default classes should be + * used on columns. + * - items: A list of grid items. Each item contains a list of rows or columns. + * The order in what comes first (row or column) depends on which alignment + * type is chosen (horizontal or vertical). + * - attributes: HTML attributes for each row or column. + * - content: A list of columns or rows. Each row or column contains: + * - attributes: HTML attributes for each row or column. + * - content: The row or column contents. + * + * @see template_preprocess_views_view_grid() + */ +#} +{% + set classes = [ + 'views-view-grid', + options.alignment, + 'cols-' ~ options.columns, + 'clearfix', + ] +%} +{% if options.row_class_default %} + {% + set row_classes = [ + 'views-row', + options.alignment == 'horizontal' ? 'clearfix', + ] + %} +{% endif %} +{% if options.col_class_default %} + {% + set col_classes = [ + 'views-col', + options.alignment == 'vertical' ? 'clearfix', + ] + %} +{% endif %} +{% if title %} + <h3>{{ title }}</h3> +{% endif %} +<div{{ attributes.addClass(classes) }}> + {% if options.alignment == 'horizontal' %} + {% for row in items %} + <div{{ row.attributes.addClass(row_classes, options.row_class_default ? 'row-' ~ loop.index) }}> + {% for column in row.content %} + <div{{ column.attributes.addClass(col_classes, options.col_class_default ? 'col-' ~ loop.index) }}> + {{- column.content -}} + </div> + {% endfor %} + </div> + {% endfor %} + {% else %} + {% for column in items %} + <div{{ column.attributes.addClass(col_classes, options.col_class_default ? 'col-' ~ loop.index) }}> + {% for row in column.content %} + <div{{ row.attributes.addClass(row_classes, options.row_class_default ? 'row-' ~ loop.index) }}> + {{- row.content -}} + </div> + {% endfor %} + </div> + {% endfor %} + {% endif %} +</div> diff --git a/core/themes/starterkit_theme/templates/views/views-view-grouping.html.twig b/core/themes/starterkit_theme/templates/views/views-view-grouping.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..44905e56b7942e64446eba7fef095974f48ec64b --- /dev/null +++ b/core/themes/starterkit_theme/templates/views/views-view-grouping.html.twig @@ -0,0 +1,20 @@ +{# +/** + * @file + * Theme override to display a single views grouping. + * + * Available variables: + * - view: The view object. + * - grouping: The grouping instruction. + * - grouping_level: A number indicating the hierarchical level of the grouping. + * - title: The group heading. + * - content: The content to be grouped. + * - rows: The rows returned from the view. + * + * @see template_preprocess_views_view_grouping() + */ +#} +<div class="view-grouping"> + <div class="view-grouping-header">{{ title }}</div> + <div class="view-grouping-content">{{ content }}</div> +</div> diff --git a/core/themes/starterkit_theme/templates/views/views-view-list.html.twig b/core/themes/starterkit_theme/templates/views/views-view-list.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..50cc74ba13fb0a8f922c2471cdce7c98246c9c01 --- /dev/null +++ b/core/themes/starterkit_theme/templates/views/views-view-list.html.twig @@ -0,0 +1,38 @@ +{# +/** + * @file + * Theme override for a view template to display a list of rows. + * + * Available variables: + * - attributes: HTML attributes for the container. + * - rows: A list of rows for this list. + * - attributes: The row's HTML attributes. + * - content: The row's contents. + * - title: The title of this group of rows. May be empty. + * - list: @todo. + * - type: Starting tag will be either a ul or ol. + * - attributes: HTML attributes for the list element. + * + * @see template_preprocess_views_view_list() + */ +#} +{% if attributes -%} + <div{{ attributes }}> +{% endif %} + {% if title %} + <h3>{{ title }}</h3> + {% endif %} + + <{{ list.type }}{{ list.attributes }}> + + {% for row in rows %} + <li{{ row.attributes }}> + {{- row.content -}} + </li> + {% endfor %} + + </{{ list.type }}> + +{% if attributes -%} + </div> +{% endif %} diff --git a/core/themes/starterkit_theme/templates/views/views-view-mapping-test.html.twig b/core/themes/starterkit_theme/templates/views/views-view-mapping-test.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..26d06692967bbab306b00f42cd88b1f862d2e82e --- /dev/null +++ b/core/themes/starterkit_theme/templates/views/views-view-mapping-test.html.twig @@ -0,0 +1,12 @@ +{# +/** + * @file + * Theme override for testing the mapping row style. + * + * Available variables: + * - element: The view content. + * + * @see template_preprocess_views_view_mapping_test() + */ +#} +{{ element }} diff --git a/core/themes/starterkit_theme/templates/views/views-view-opml.html.twig b/core/themes/starterkit_theme/templates/views/views-view-opml.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..4165ccf4dfbd3f6c7b4a8cb4c5d845daa6a661df --- /dev/null +++ b/core/themes/starterkit_theme/templates/views/views-view-opml.html.twig @@ -0,0 +1,23 @@ +{# +/** + * @file + * Theme override for feed displays that use the OPML style. + * + * Available variables: + * - title: The title of the feed (as set in the view). + * - updated: The modified date of the feed. + * - items: The feed items themselves. + * + * @see template_preprocess_views_view_opml() + */ +#} +<?xml version="1.0" encoding="utf-8"?> +<opml version="2.0"> + <head> + <title>{{ title }}</title> + <dateModified>{{ updated }}</dateModified> + </head> + <body> + {{ items }} + </body> +</opml> diff --git a/core/themes/starterkit_theme/templates/views/views-view-row-opml.html.twig b/core/themes/starterkit_theme/templates/views/views-view-row-opml.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..3316b1a3d7e9daa5e8fc80055028a7c511d21ef0 --- /dev/null +++ b/core/themes/starterkit_theme/templates/views/views-view-row-opml.html.twig @@ -0,0 +1,12 @@ +{# +/** + * @file + * Theme override to display an item in a views OPML feed. + * + * Available variables: + * - attributes: Attributes for outline element. + * + * @see template_preprocess_views_view_row_opml() + */ +#} + <outline{{ attributes }}/> diff --git a/core/themes/starterkit_theme/templates/views/views-view-row-rss.html.twig b/core/themes/starterkit_theme/templates/views/views-view-row-rss.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..aee08aee6e27407c9187efe69ec02b92ee8a3b05 --- /dev/null +++ b/core/themes/starterkit_theme/templates/views/views-view-row-rss.html.twig @@ -0,0 +1,30 @@ +{# +/** + * @file + * Theme override to display an item in a views RSS feed. + * + * Available variables: + * - title: RSS item title. + * - link: RSS item link. + * - description: RSS body text. + * - item_elements: RSS item elements to be rendered as XML (pubDate, creator, + * guid). + * + * @see template_preprocess_views_view_row_rss() + * + * @ingroup themeable + */ +#} +<item> + <title>{{ title }}</title> + <link>{{ link }}</link> + <description>{{ description }}</description> + {% for item in item_elements -%} + <{{ item.key }}{{ item.attributes -}} + {% if item.value -%} + >{{ item.value }}</{{ item.key }}> + {% else -%} + {{ ' />' }} + {% endif %} + {%- endfor %} +</item> diff --git a/core/themes/starterkit_theme/templates/views/views-view-rss.html.twig b/core/themes/starterkit_theme/templates/views/views-view-rss.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..0800237e39dc95490900eae930e12be3c4dfe11f --- /dev/null +++ b/core/themes/starterkit_theme/templates/views/views-view-rss.html.twig @@ -0,0 +1,28 @@ +{# +/** + * @file + * Theme override for feed displays that use the RSS style. + * + * Available variables: + * - link: The link to the feed (the view path). + * - namespaces: The XML namespaces (added automatically). + * - title: The title of the feed (as set in the view). + * - description: The feed description (from feed settings). + * - langcode: The language encoding. + * - channel_elements: The formatted channel elements. + * - items: The feed items themselves. + * + * @see template_preprocess_views_view_rss() + */ +#} +<?xml version="1.0" encoding="utf-8"?> +<rss version="2.0" xml:base="{{ link }}"{{ namespaces }}> + <channel> + <title>{{ title }}</title> + <link>{{ link }}</link> + <description>{{ description }}</description> + <language>{{ langcode }}</language> + {{ channel_elements }} + {{ items }} + </channel> +</rss> diff --git a/core/themes/starterkit_theme/templates/views/views-view-summary-unformatted.html.twig b/core/themes/starterkit_theme/templates/views/views-view-summary-unformatted.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..151734e948eea2fbb1c29261a0c169c1cd49581e --- /dev/null +++ b/core/themes/starterkit_theme/templates/views/views-view-summary-unformatted.html.twig @@ -0,0 +1,31 @@ +{# +/** + * @file + * Theme override for unformatted summary links. + * + * Available variables: + * - rows: The rows contained in this view. + * - url: The URL to this row's content. + * - count: The number of items this summary item represents. + * - separator: A separator between each row. + * - attributes: HTML attributes for a row. + * - active: A flag indicating whether the row is active. + * - options: Flags indicating how each row should be displayed. This contains: + * - count: A flag indicating whether the row's 'count' should be displayed. + * - inline: A flag indicating whether the item should be wrapped in an inline + * or block level HTML element. + * + * @see template_preprocess_views_view_summary_unformatted() + */ +#} +{% for row in rows %} + {{ options.inline ? '<span' : '<div' }} class="views-summary views-summary-unformatted"> + {% if row.separator -%} + {{ row.separator }} + {%- endif %} + <a href="{{ row.url }}"{{ row.attributes.addClass(row.active ? 'is-active')|without('href') }}>{{ row.link }}</a> + {% if options.count %} + ({{ row.count }}) + {% endif %} + {{ options.inline ? '</span>' : '</div>' }} +{% endfor %} diff --git a/core/themes/starterkit_theme/templates/views/views-view-summary.html.twig b/core/themes/starterkit_theme/templates/views/views-view-summary.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..3190a45ada4fb066a2fbae94e0b39ae8f326e186 --- /dev/null +++ b/core/themes/starterkit_theme/templates/views/views-view-summary.html.twig @@ -0,0 +1,31 @@ +{# +/** + * @file + * Theme override to display a list of summary lines. + * + * Available variables: + * - rows: The rows contained in this view. + * Each row contains: + * - url: The summary link URL. + * - link: The summary link text. + * - count: The number of items under this grouping. + * - attributes: HTML attributes to apply to each row. + * - active: A flag indicating whether the row is active. + * - options: Flags indicating how the summary should be displayed. + * This contains: + * - count: A flag indicating whether the count should be displayed. + * + * @see template_preprocess_views_view_summary() + */ +#} +<div class="item-list"> + <ul class="views-summary"> + {% for row in rows %} + <li><a href="{{ row.url }}"{{ row.attributes.addClass(row.active ? 'is-active')|without('href') }}>{{ row.link }}</a> + {% if options.count %} + ({{ row.count }}) + {% endif %} + </li> + {% endfor %} + </ul> +</div> diff --git a/core/themes/starterkit_theme/templates/views/views-view-table.html.twig b/core/themes/starterkit_theme/templates/views/views-view-table.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..edc14983da77f19519d5e5fcba6230c281cc634a --- /dev/null +++ b/core/themes/starterkit_theme/templates/views/views-view-table.html.twig @@ -0,0 +1,120 @@ +{# +/** + * @file + * Theme override for displaying a view as a table. + * + * Available variables: + * - attributes: Remaining HTML attributes for the element. + * - class: HTML classes that can be used to style contextually through CSS. + * - title : The title of this group of rows. + * - header: The table header columns. + * - attributes: Remaining HTML attributes for the element. + * - content: HTML classes to apply to each header cell, indexed by + * the header's key. + * - default_classes: A flag indicating whether default classes should be + * used. + * - caption_needed: Is the caption tag needed. + * - caption: The caption for this table. + * - accessibility_description: Extended description for the table details. + * - accessibility_summary: Summary for the table details. + * - rows: Table row items. Rows are keyed by row number. + * - attributes: HTML classes to apply to each row. + * - columns: Row column items. Columns are keyed by column number. + * - attributes: HTML classes to apply to each column. + * - content: The column content. + * - default_classes: A flag indicating whether default classes should be + * used. + * - responsive: A flag indicating whether table is responsive. + * - sticky: A flag indicating whether table header is sticky. + * - summary_element: A render array with table summary information (if any). + * + * @see template_preprocess_views_view_table() + */ +#} +{% + set classes = [ + 'views-table', + 'views-view-table', + 'cols-' ~ header|length, + responsive ? 'responsive-enabled', + sticky ? 'sticky-enabled', + ] +%} +<table{{ attributes.addClass(classes) }}> + {% if caption_needed %} + <caption> + {% if caption %} + {{ caption }} + {% else %} + {{ title }} + {% endif %} + {% if (summary_element is not empty) %} + {{ summary_element }} + {% endif %} + </caption> + {% endif %} + {% if header %} + <thead> + <tr> + {% for key, column in header %} + {% if column.default_classes %} + {% + set column_classes = [ + 'views-field', + 'views-field-' ~ fields[key], + ] + %} + {% endif %} + <th{{ column.attributes.addClass(column_classes).setAttribute('scope', 'col') }}> + {%- if column.wrapper_element -%} + <{{ column.wrapper_element }}> + {%- if column.url -%} + <a href="{{ column.url }}" title="{{ column.title }}" rel="nofollow">{{ column.content }}{{ column.sort_indicator }}</a> + {%- else -%} + {{ column.content }}{{ column.sort_indicator }} + {%- endif -%} + </{{ column.wrapper_element }}> + {%- else -%} + {%- if column.url -%} + <a href="{{ column.url }}" title="{{ column.title }}" rel="nofollow">{{ column.content }}{{ column.sort_indicator }}</a> + {%- else -%} + {{- column.content }}{{ column.sort_indicator }} + {%- endif -%} + {%- endif -%} + </th> + {% endfor %} + </tr> + </thead> + {% endif %} + <tbody> + {% for row in rows %} + <tr{{ row.attributes }}> + {% for key, column in row.columns %} + {% if column.default_classes %} + {% + set column_classes = [ + 'views-field' + ] + %} + {% for field in column.fields %} + {% set column_classes = column_classes|merge(['views-field-' ~ field]) %} + {% endfor %} + {% endif %} + <td{{ column.attributes.addClass(column_classes) }}> + {%- if column.wrapper_element -%} + <{{ column.wrapper_element }}> + {% for content in column.content %} + {{ content.separator }}{{ content.field_output }} + {% endfor %} + </{{ column.wrapper_element }}> + {%- else -%} + {% for content in column.content %} + {{- content.separator }}{{ content.field_output -}} + {% endfor %} + {%- endif %} + </td> + {% endfor %} + </tr> + {% endfor %} + </tbody> +</table> diff --git a/core/themes/starterkit_theme/templates/views/views-view-unformatted.html.twig b/core/themes/starterkit_theme/templates/views/views-view-unformatted.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..534ac9a95520d850af5b49adbc8c53124ffa11a5 --- /dev/null +++ b/core/themes/starterkit_theme/templates/views/views-view-unformatted.html.twig @@ -0,0 +1,30 @@ +{# +/** + * @file + * Theme override to display a view of unformatted rows. + * + * Available variables: + * - title: The title of this group of rows. May be empty. + * - rows: A list of the view's row items. + * - attributes: The row's HTML attributes. + * - content: The row's content. + * - view: The view object. + * - default_row_class: A flag indicating whether default classes should be + * used on rows. + * + * @see template_preprocess_views_view_unformatted() + */ +#} +{% if title %} + <h3>{{ title }}</h3> +{% endif %} +{% for row in rows %} + {% + set row_classes = [ + default_row_class ? 'views-row', + ] + %} + <div{{ row.attributes.addClass(row_classes) }}> + {{- row.content -}} + </div> +{% endfor %} diff --git a/core/themes/starterkit_theme/templates/views/views-view.html.twig b/core/themes/starterkit_theme/templates/views/views-view.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..251b0611dda6860b969faadcdbc08c9a84dfe8d8 --- /dev/null +++ b/core/themes/starterkit_theme/templates/views/views-view.html.twig @@ -0,0 +1,95 @@ +{# +/** + * @file + * Theme override for a main view template. + * + * Available variables: + * - attributes: Remaining HTML attributes for the element. + * - css_name: A CSS-safe version of the view name. + * - css_class: The user-specified classes names, if any. + * - header: The optional header. + * - footer: The optional footer. + * - rows: The results of the view query, if any. + * - empty: The content to display if there are no rows. + * - pager: The optional pager next/prev links to display. + * - exposed: Exposed widget form/info to display. + * - feed_icons: Optional feed icons to display. + * - more: An optional link to the next page of results. + * - title: Title of the view, only used when displaying in the admin preview. + * - title_prefix: Additional output populated by modules, intended to be + * displayed in front of the view title. + * - title_suffix: Additional output populated by modules, intended to be + * displayed after the view title. + * - attachment_before: An optional attachment view to be displayed before the + * view content. + * - attachment_after: An optional attachment view to be displayed after the + * view content. + * - dom_id: Unique id for every view being printed to give unique class for + * JavaScript. + * + * @see template_preprocess_views_view() + */ +#} +{% + set classes = [ + 'view', + 'view-' ~ id|clean_class, + 'view-id-' ~ id, + 'view-display-id-' ~ display_id, + dom_id ? 'js-view-dom-id-' ~ dom_id, + ] +%} +<div{{ attributes.addClass(classes) }}> + {{ title_prefix }} + {% if title %} + {{ title }} + {% endif %} + {{ title_suffix }} + {% if header %} + <div class="view-header"> + {{ header }} + </div> + {% endif %} + {% if exposed %} + <div class="view-filters"> + {{ exposed }} + </div> + {% endif %} + {% if attachment_before %} + <div class="attachment attachment-before"> + {{ attachment_before }} + </div> + {% endif %} + + {% if rows %} + <div class="view-content"> + {{ rows }} + </div> + {% elseif empty %} + <div class="view-empty"> + {{ empty }} + </div> + {% endif %} + + {% if pager %} + {{ pager }} + {% endif %} + {% if attachment_after %} + <div class="attachment attachment-after"> + {{ attachment_after }} + </div> + {% endif %} + {% if more %} + {{ more }} + {% endif %} + {% if footer %} + <div class="view-footer"> + {{ footer }} + </div> + {% endif %} + {% if feed_icons %} + <div class="feed-icons"> + {{ feed_icons }} + </div> + {% endif %} +</div>