/** * Implements hook_preprocess_HOOK() for file_video. */ function MYTHEME_preprocess_file_video(array &$variables) { $variables['attributes']['playsinline'] = TRUE; $variables['attributes']['webkit-playsinline'] = TRUE; } /** * @file * Functions to support theming in the Bartik theme. */ use Drupal\Component\Utility\Html; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\StringTranslation\ByteSizeMarkup; use Drupal\Core\Template\Attribute; use Drupal\views\Form\ViewsForm; /** * Implements hook_preprocess_HOOK() for HTML document templates. * * Adds body classes if certain regions have content. */ function bartik_preprocess_html(&$variables) { // Add information about the number of sidebars. if (!empty($variables['page']['sidebar_first']) && !empty($variables['page']['sidebar_second'])) { $variables['attributes']['class'][] = 'layout-two-sidebars'; } elseif (!empty($variables['page']['sidebar_first'])) { $variables['attributes']['class'][] = 'layout-one-sidebar'; $variables['attributes']['class'][] = 'layout-sidebar-first'; } elseif (!empty($variables['page']['sidebar_second'])) { $variables['attributes']['class'][] = 'layout-one-sidebar'; $variables['attributes']['class'][] = 'layout-sidebar-second'; } else { $variables['attributes']['class'][] = 'layout-no-sidebars'; } if (!empty($variables['page']['featured_top'])) { $variables['attributes']['class'][] = 'has-featured-top'; } } /** * Implements hook_preprocess_HOOK() for page title templates. */ function bartik_preprocess_page_title(&$variables) { // Since the title and the shortcut link are both block level elements, // positioning them next to each other is much simpler with a wrapper div. if (!empty($variables['title_suffix']['add_or_remove_shortcut']) && $variables['title']) { // Add a wrapper div using the title_prefix and title_suffix render // elements. $variables['title_prefix']['shortcut_wrapper'] = [ '#markup' => '
', '#weight' => 100, ]; $variables['title_suffix']['shortcut_wrapper'] = [ '#markup' => '
', '#weight' => -99, ]; // Make sure the shortcut link is the first item in title_suffix. $variables['title_suffix']['add_or_remove_shortcut']['#weight'] = -100; } } /** * Implements hook_preprocess_HOOK() for maintenance-page.html.twig. */ function bartik_preprocess_maintenance_page(&$variables) { // By default, site_name is set to Drupal if no db connection is available // or during site installation. Setting site_name to an empty string makes // the site and update pages look cleaner. // @see template_preprocess_maintenance_page if (!$variables['db_is_active']) { $variables['site_name'] = ''; } // Bartik has custom styling for the maintenance page. $variables['#attached']['library'][] = 'bartik/maintenance_page'; } /** * Implements hook_preprocess_HOOK() for node.html.twig. */ function bartik_preprocess_node(&$variables) { // Remove the "Add new comment" link on teasers or when the comment form is // displayed on the page. if ($variables['teaser'] || !empty($variables['content']['comments']['comment_form'])) { unset($variables['content']['links']['comment']['#links']['comment-add']); } } /** * Implements hook_preprocess_HOOK() for block.html.twig. */ function bartik_preprocess_block(&$variables) { // Add a clearfix class to system branding blocks. if ($variables['plugin_id'] == 'system_branding_block') { $variables['attributes']['class'][] = 'clearfix'; } } /** * Implements hook_preprocess_HOOK() for menu.html.twig. */ function bartik_preprocess_menu(&$variables) { $variables['attributes']['class'][] = 'clearfix'; } /** * Implements hook_theme_suggestions_HOOK_alter() for form templates. */ function bartik_theme_suggestions_form_alter(array &$suggestions, array $variables) { if ($variables['element']['#form_id'] == 'search_block_form') { $suggestions[] = 'form__search_block_form'; } } /** * Implements hook_form_alter(). */ function bartik_form_alter(&$form, FormStateInterface $form_state, $form_id) { // Add classes to the search form. if (in_array($form_id, ['search_block_form', 'search_form'])) { $key = ($form_id == 'search_block_form') ? 'actions' : 'basic'; if (!isset($form[$key]['submit']['#attributes'])) { $form[$key]['submit']['#attributes'] = new Attribute(); } $form[$key]['submit']['#attributes']->addClass('search-form__submit'); } $form_object = $form_state->getFormObject(); // Add class to the Media Library views form. if ($form_object instanceof ViewsForm && strpos($form_object->getBaseFormId(), 'views_form_media_library') === 0) { // The conditional below exists because the media-library-views-form class // is currently added by Classy, but Umami will eventually not use Classy as // a base theme. // @todo remove conditional, keep class addition in // https://drupal.org/node/3110137 // @see https://www.drupal.org/node/3109287 // @see classy_form_alter() if (!isset($form['#attributes']['class']) || !in_array('media-library-views-form', $form['#attributes']['class'])) { $form['#attributes']['class'][] = 'media-library-views-form'; } } } /** * 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 bartik_preprocess_links__media_library_menu(array &$variables) { foreach ($variables['links'] as &$link) { // This conditional exists because the media-library-menu__link class is // currently added by Classy, but Bartik will eventually not use Classy as a // base theme. // @todo remove conditional, keep class addition in // https://drupal.org/node/3110137 // @see https://www.drupal.org/node/3109287 // @see classy_preprocess_links__media_library_menu() if (!isset($link['link']['#options']['attributes']['class']) || !in_array('media-library-menu__link', $link['link']['#options']['attributes']['class'])) { $link['link']['#options']['attributes']['class'][] = 'media-library-menu__link'; } } } /** * Implements hook_preprocess_image_widget(). * * @todo Revisit in https://drupal.org/node/3117430 */ function bartik_preprocess_image_widget(&$variables) { if (!empty($variables['element']['fids']['#value'])) { $file = reset($variables['element']['#files']); $variables['data']["file_{$file->id()}"]['filename']['#suffix'] = ' (' . ByteSizeMarkup::create($file->getSize()) . ') '; } } /** * Implements template_preprocess_links(). * * This makes it so array keys of #links items are added as a class. This * functionality was removed in Drupal 8.1, but still necessary in some * instances. * * @todo remove in https://drupal.org/node/3120962 */ function bartik_preprocess_links(&$variables) { if (!empty($variables['links'])) { foreach ($variables['links'] as $key => $value) { if (!is_numeric($key)) { $class = Html::getClass($key); $variables['links'][$key]['attributes']->addClass($class); } } } } The Fateful Adventures of the Good Soldier Švejk During the World War, Book One | The Good Soldier Švejk Central

The Fateful Adventures of the Good Soldier Švejk During the World War is a landmark work of twentieth-century European fiction and one of the defining novels of the First World War.

Set in the opening months of the conflict, Book One follows Josef Švejk, a Prague dog dealer conscripted into the Austro-Hungarian army, as he moves through a world of military offices, police stations, hospitals, churches, and barracks. Rather than focusing on combat, the novel unfolds in the administrative and civilian hinterland of war, where orders circulate endlessly, procedures multiply, and authority is exercised through language as much as through force.

Jaroslav Hašek's narrative advances episodically, through encounters with officers, clerks, priests, doctors, informers, and fellow soldiers. In these scenes, ordinary routines, medical examinations, interrogations, religious instruction, and transport arrangements-become sites of confusion and contradiction. Švejk navigates this environment with a distinctive literalness and verbal ingenuity that exposes the self-defeating logic of the systems surrounding him.

This Centennial Edition presents a new English translation that preserves the structure, register, and tonal shifts of Hašek's original Czech. Book One establishes the social, bureaucratic, and linguistic landscape through which the subsequent volumes will move.

First published in the early 1920s, The Good Soldier Švejk remains a foundational work of literary satire, offering a detailed portrait of institutional life under the pressures of mobilization and authority. A century after its appearance, it continues to challenge readers with its formal originality, precision of observation, and enduring relevance.

The Centennial Edition includes extensive analytical apparatus, among it František Josef and the Grammar of Czech Subjecthood in Hašek's Opening Line and Švejk on Trial: Rethinking Hašek's Novel as a Pendulum of Prosecution and Defense.

An additional companion essay, Svejkardom: Recognition, Survival, and the Grammar of a World, extends this interpretive framework online at svejkcentral.com/Analyses.

Together these translator-authored texts examine how Czech morphosyntax, procedural language, and the experiential concept švejkárna (svejkardom) shape contemporary readings of Hašek's novel.

The volumes of the edition: Book One, Book Two, Book(s) Three&Four