commit b7239e216e88bfddfe248552b6872b2e315d7c22
Author: Julien Dubois <julien@happyculture.coop>
Date:   Mon Jun 27 23:58:20 2016 +0200

    Issue #1399990: Testing the twig template approach.

diff --git a/core/config/schema/core.entity.schema.yml b/core/config/schema/core.entity.schema.yml
index bf0e12d..843f9e9 100644
--- a/core/config/schema/core.entity.schema.yml
+++ b/core/config/schema/core.entity.schema.yml
@@ -318,6 +318,17 @@ field.formatter.settings.timestamp:
     timezone:
       type: string
       label: 'Time zone'
+    show_prefix_label:
+      type: boolean
+      label: 'Show prefix label'
+
+field.formatter.settings.author:
+  type: mapping
+  label: 'Author display settings'
+  mapping:
+    show_prefix:
+      type: boolean
+      label: 'Show author prefix'
 
 field.formatter.settings.timestamp_ago:
   type: mapping
diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/TimestampFormatter.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/TimestampFormatter.php
index 8efe8d5..f0ea3bb 100644
--- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/TimestampFormatter.php
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/TimestampFormatter.php
@@ -94,6 +94,7 @@ public static function defaultSettings() {
       'date_format' => 'medium',
       'custom_date_format' => '',
       'timezone' => '',
+      'show_prefix_label' => FALSE,
     ) + parent::defaultSettings();
   }
 
@@ -111,6 +112,13 @@ public function settingsForm(array $form, FormStateInterface $form_state) {
 
     $date_formats['custom'] = $this->t('Custom');
 
+    $elements['show_prefix_label'] = array(
+      '#type' => 'checkbox',
+      '#title' => $this->t('Show the "On" prefix'),
+      '#description' => $this->t('Displays a prefix "on" before the content creation date.'),
+      '#default_value' => $this->getSetting('show_prefix_label'),
+    );
+
     $elements['date_format'] = array(
       '#type' => 'select',
       '#title' => $this->t('Date format'),
@@ -145,6 +153,12 @@ public function settingsForm(array $form, FormStateInterface $form_state) {
   public function settingsSummary() {
     $summary = parent::settingsSummary();
 
+    if ($this->getSetting('show_prefix_label')) {
+      $summary[] = $this->t('The "on" creation date prefix is displayed.');
+    }
+    else {
+      $summary[] = $this->t('The "on" creation date prefix is hidden.');
+    }
     $date_format = $this->getSetting('date_format');
     $summary[] = $this->t('Date format: @date_format', array('@date_format' => $date_format));
     if ($this->getSetting('date_format') === 'custom' && ($custom_date_format = $this->getSetting('custom_date_format'))) {
@@ -183,6 +197,9 @@ public function viewElements(FieldItemListInterface $items, $langcode) {
         ],
         '#markup' => $this->dateFormatter->format($item->value, $date_format, $custom_date_format, $timezone, $langcode),
       ];
+      if ($this->getSetting('show_prefix_label')) {
+        $elements[$delta]['#prefix'] = $this->t('on ');
+      }
     }
 
     return $elements;
diff --git a/core/modules/book/config/install/node.type.book.yml b/core/modules/book/config/install/node.type.book.yml
index 0c07a79..9838ed9 100644
--- a/core/modules/book/config/install/node.type.book.yml
+++ b/core/modules/book/config/install/node.type.book.yml
@@ -10,4 +10,4 @@ description: '<em>Books</em> have a built-in hierarchical navigation. Use for ha
 help: ''
 new_revision: true
 preview_mode: 1
-display_submitted: true
+display_submitted: false
diff --git a/core/modules/field_ui/src/Tests/ManageDisplayTest.php b/core/modules/field_ui/src/Tests/ManageDisplayTest.php
index 4cd2901..7750ddf 100644
--- a/core/modules/field_ui/src/Tests/ManageDisplayTest.php
+++ b/core/modules/field_ui/src/Tests/ManageDisplayTest.php
@@ -2,11 +2,11 @@
 
 namespace Drupal\field_ui\Tests;
 
+use Drupal\block_content\Entity\BlockContentType;
 use Drupal\Component\Utility\Unicode;
 use Drupal\Core\Entity\Entity\EntityViewDisplay;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Language\LanguageInterface;
-use Drupal\node\Entity\NodeType;
 use Drupal\simpletest\WebTestBase;
 use Drupal\taxonomy\Entity\Vocabulary;
 
@@ -24,7 +24,7 @@ class ManageDisplayTest extends WebTestBase {
    *
    * @var array
    */
-  public static $modules = array('node', 'field_ui', 'taxonomy', 'search', 'field_test', 'field_third_party_test', 'block');
+  public static $modules = array('node', 'field_ui', 'taxonomy', 'search', 'field_test', 'field_third_party_test', 'block', 'block_content');
 
   /**
    * {@inheritdoc}
@@ -34,7 +34,7 @@ protected function setUp() {
     $this->drupalPlaceBlock('system_breadcrumb_block');
 
     // Create a test user.
-    $admin_user = $this->drupalCreateUser(array('access content', 'administer content types', 'administer node fields', 'administer node form display', 'administer node display', 'administer taxonomy', 'administer taxonomy_term fields', 'administer taxonomy_term display', 'administer users', 'administer account settings', 'administer user display', 'bypass node access'));
+    $admin_user = $this->drupalCreateUser(array('access content', 'administer content types', 'administer node fields', 'administer node form display', 'administer node display', 'administer taxonomy', 'administer taxonomy_term fields', 'administer taxonomy_term display', 'administer users', 'administer account settings', 'administer user display', 'bypass node access', 'administer block_content display'));
     $this->drupalLogin($admin_user);
 
     // Create content type, with underscores.
@@ -396,14 +396,14 @@ function testSingleViewMode() {
    * Tests that a message is shown when there are no fields.
    */
   function testNoFieldsDisplayOverview() {
-    // Create a fresh content type without any fields.
-    NodeType::create(array(
-      'type' => 'no_fields',
-      'name' => 'No fields',
+    // Create a fresh block content type without any fields.
+    BlockContentType::create(array(
+      'id' => 'no_fields',
+      'label' => 'No fields',
+      'revision' => FALSE,
     ))->save();
-
-    $this->drupalGet('admin/structure/types/manage/no_fields/display');
-    $this->assertRaw(t('There are no fields yet added. You can add new fields on the <a href=":link">Manage fields</a> page.', array(':link' => \Drupal::url('entity.node.field_ui_fields', array('node_type' => 'no_fields')))));
+    $this->drupalGet('admin/structure/block/block-content/manage/no_fields/display');
+    $this->assertRaw(t('There are no fields yet added. You can add new fields on the <a href=":link">Manage fields</a> page.', array(':link' => \Drupal::url('entity.block_content.field_ui_fields', array('block_content_type' => 'no_fields')))));
   }
 
   /**
diff --git a/core/modules/forum/config/optional/node.type.forum.yml b/core/modules/forum/config/optional/node.type.forum.yml
index 8ed965d..9ec4217 100644
--- a/core/modules/forum/config/optional/node.type.forum.yml
+++ b/core/modules/forum/config/optional/node.type.forum.yml
@@ -10,4 +10,4 @@ description: 'A <em>forum topic</em> starts a new discussion thread within a for
 help: ''
 new_revision: false
 preview_mode: 1
-display_submitted: true
+display_submitted: false
diff --git a/core/modules/node/node.module b/core/modules/node/node.module
index aade3e8..42a5bde 100644
--- a/core/modules/node/node.module
+++ b/core/modules/node/node.module
@@ -575,10 +575,14 @@ function template_preprocess_node(&$variables) {
   $variables['node'] = $variables['elements']['#node'];
   /** @var \Drupal\node\NodeInterface $node */
   $node = $variables['node'];
-  $variables['date'] = drupal_render($variables['elements']['created']);
-  unset($variables['elements']['created']);
-  $variables['author_name'] = drupal_render($variables['elements']['uid']);
-  unset($variables['elements']['uid']);
+  $bundle = $node->bundle();
+  $node_type_config = NodeType::load($bundle);
+  if ($node_type_config->displaySubmitted()) {
+    $variables['date'] = drupal_render($variables['elements']['created']);
+    unset($variables['elements']['created']);
+    $variables['author_name'] = drupal_render($variables['elements']['uid']);
+    unset($variables['elements']['uid']);
+  }
 
   $variables['url'] = $node->url('canonical', array(
     'language' => $node->language(),
@@ -601,13 +605,12 @@ function template_preprocess_node(&$variables) {
   // Used by RDF to add attributes around the author and date submitted.
   $variables['author_attributes'] = new Attribute();
   $variables['display_submitted'] = $node_type->displaySubmitted();
-  if ($variables['display_submitted']) {
-    if (theme_get_setting('features.node_user_picture')) {
-      // To change user picture settings (e.g. image style), edit the 'compact'
-      // view mode on the User entity. Note that the 'compact' view mode might
-      // not be configured, so remember to always check the theme setting first.
-      $variables['author_picture'] = user_view($node->getOwner(), 'compact');
-    }
+
+  if (theme_get_setting('features.node_user_picture')) {
+    // To change user picture settings (e.g. image style), edit the 'compact'
+    // view mode on the User entity. Note that the 'compact' view mode might
+    // not be configured, so remember to always check the theme setting first.
+    $variables['author_picture'] = user_view($node->getOwner(), 'compact');
   }
 
   // Add article ARIA role.
diff --git a/core/modules/node/src/Entity/Node.php b/core/modules/node/src/Entity/Node.php
index ecbcaaf..1cd5d3f 100644
--- a/core/modules/node/src/Entity/Node.php
+++ b/core/modules/node/src/Entity/Node.php
@@ -396,7 +396,10 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
       ->setDisplayOptions('view', array(
         'label' => 'hidden',
         'type' => 'author',
-        'weight' => 0,
+        'weight' => -3,
+        'settings' => array(
+          'show_prefix' => TRUE,
+        ),
       ))
       ->setDisplayOptions('form', array(
         'type' => 'entity_reference_autocomplete',
@@ -407,6 +410,7 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
           'placeholder' => '',
         ),
       ))
+      ->setDisplayConfigurable('view', TRUE)
       ->setDisplayConfigurable('form', TRUE);
 
     $fields['status'] = BaseFieldDefinition::create('boolean')
@@ -424,12 +428,19 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
       ->setDisplayOptions('view', array(
         'label' => 'hidden',
         'type' => 'timestamp',
-        'weight' => 0,
+        'weight' => -2,
+        'settings' => array(
+          'format_type' => 'medium',
+          'custom_date_format' => '',
+          'timezone' => '',
+          'show_prefix_label' => TRUE,
+        ),
       ))
       ->setDisplayOptions('form', array(
         'type' => 'datetime_timestamp',
         'weight' => 10,
       ))
+      ->setDisplayConfigurable('view', TRUE)
       ->setDisplayConfigurable('form', TRUE);
 
     $fields['changed'] = BaseFieldDefinition::create('changed')
diff --git a/core/modules/node/src/NodeTypeInterface.php b/core/modules/node/src/NodeTypeInterface.php
index c034ffb..5162134 100644
--- a/core/modules/node/src/NodeTypeInterface.php
+++ b/core/modules/node/src/NodeTypeInterface.php
@@ -38,6 +38,8 @@ public function setNewRevision($new_revision);
    *
    * @return bool
    *   TRUE if the submitted by information should be shown.
+   *
+   * @deprecated in Drupal 8.2.x, will be removed before Drupal 9.0.
    */
   public function displaySubmitted();
 
@@ -46,6 +48,8 @@ public function displaySubmitted();
    *
    * @param bool $display_submitted
    *   TRUE if the submitted by information should be shown.
+   *
+   * @deprecated in Drupal 8.2.x, will be removed before Drupal 9.0.
    */
   public function setDisplaySubmitted($display_submitted);
 
diff --git a/core/modules/node/src/Tests/NodeCreationTest.php b/core/modules/node/src/Tests/NodeCreationTest.php
index bf3ce86..67353d3 100644
--- a/core/modules/node/src/Tests/NodeCreationTest.php
+++ b/core/modules/node/src/Tests/NodeCreationTest.php
@@ -21,12 +21,15 @@ class NodeCreationTest extends NodeTestBase {
    *
    * @var array
    */
-  public static $modules = array('node_test_exception', 'dblog', 'test_page_test');
+  public static $modules = array('node_test_exception', 'dblog', 'field_ui', 'test_page_test');
 
   protected function setUp() {
     parent::setUp();
-
-    $web_user = $this->drupalCreateUser(array('create page content', 'edit own page content'));
+    $web_user = $this->drupalCreateUser(array(
+      'create page content',
+      'edit own page content',
+      'administer node display',
+    ));
     $this->drupalLogin($web_user);
   }
 
@@ -58,20 +61,30 @@ function testNodeCreation() {
     $node = $this->drupalGetNodeByTitle($edit['title[0][value]']);
     $this->assertTrue($node, 'Node found in database.');
 
-    // Verify that pages do not show submitted information by default.
+    // Ensure that the authored by and authored on information are visible by
+    // default for a content type.
     $this->drupalGet('node/' . $node->id());
-    $this->assertNoText($node->getOwner()->getUsername());
-    $this->assertNoText(format_date($node->getCreatedTime()));
+    $this->assertText($node->getOwner()->getUsername());
+    $this->assertText(format_date($node->getCreatedTime()));
+
+    // Change the node type setting to hide submitted by information.
+    $this->drupalGet('admin/structure/types/manage/page/display');
 
-    // Change the node type setting to show submitted by information.
-    /** @var \Drupal\node\NodeTypeInterface $node_type */
-    $node_type = $node_type_storage->load('page');
-    $node_type->setDisplaySubmitted(TRUE);
-    $node_type->save();
+    // Hide the author field.
+    $edit = array('fields[uid][type]' => 'hidden', 'refresh_rows' => 'uid');
+    $this->drupalPostAjaxForm(NULL, $edit, array('op' => t('Refresh')));
 
+    // Hide the submitted on field.
+    $edit = array('fields[created][type]' => 'hidden', 'refresh_rows' => 'created');
+    $this->drupalPostAjaxForm(NULL, $edit, array('op' => t('Refresh')));
+
+    // Save the new configuration.
+    $this->drupalPostForm(NULL, array(), t('Save'));
+
+    // Verify that pages do not show submitted information anymore.
     $this->drupalGet('node/' . $node->id());
-    $this->assertText($node->getOwner()->getUsername());
-    $this->assertText(format_date($node->getCreatedTime()));
+    $this->assertNoText($node->getOwner()->getUsername());
+    $this->assertNoText(format_date($node->getCreatedTime()));
   }
 
   /**
diff --git a/core/modules/node/tests/modules/node_test_config/config/install/node.type.default.yml b/core/modules/node/tests/modules/node_test_config/config/install/node.type.default.yml
index b65ee9f..14cebe5 100644
--- a/core/modules/node/tests/modules/node_test_config/config/install/node.type.default.yml
+++ b/core/modules/node/tests/modules/node_test_config/config/install/node.type.default.yml
@@ -3,7 +3,7 @@ name: Default
 description: 'Default description.'
 help: ''
 new_revision: true
-display_submitted: true
+display_submitted: false
 preview_mode: 1
 status: true
 langcode: en
diff --git a/core/modules/node/tests/modules/node_test_config/sync/node.type.import.yml b/core/modules/node/tests/modules/node_test_config/sync/node.type.import.yml
index f1bafe4..e1c7cbf 100644
--- a/core/modules/node/tests/modules/node_test_config/sync/node.type.import.yml
+++ b/core/modules/node/tests/modules/node_test_config/sync/node.type.import.yml
@@ -3,7 +3,7 @@ name: Import
 description: 'Import description.'
 help: ''
 new_revision: false
-display_submitted: true
+display_submitted: false
 preview_mode: 1
 status: true
 langcode: en
diff --git a/core/modules/options/tests/options_config_install_test/config/install/node.type.options_install_test.yml b/core/modules/options/tests/options_config_install_test/config/install/node.type.options_install_test.yml
index 5d843bc..1ed193d 100644
--- a/core/modules/options/tests/options_config_install_test/config/install/node.type.options_install_test.yml
+++ b/core/modules/options/tests/options_config_install_test/config/install/node.type.options_install_test.yml
@@ -7,5 +7,5 @@ description: null
 help: null
 new_revision: false
 preview_mode: 1
-display_submitted: true
+display_submitted: false
 third_party_settings: {  }
diff --git a/core/modules/rdf/rdf.module b/core/modules/rdf/rdf.module
index 3108ee1..6ad869f 100644
--- a/core/modules/rdf/rdf.module
+++ b/core/modules/rdf/rdf.module
@@ -323,7 +323,7 @@ function rdf_preprocess_node(&$variables) {
 
   // Adds RDFa markup for the date.
   $created_mapping = $mapping->getPreparedFieldMapping('created');
-  if (!empty($created_mapping) && $variables['display_submitted']) {
+  if (!empty($created_mapping)) {
     $date_attributes = rdf_rdfa_attributes($created_mapping, $variables['node']->get('created')->first()->toArray());
     $rdf_metadata = array(
       '#theme' => 'rdf_metadata',
diff --git a/core/modules/user/src/Plugin/Field/FieldFormatter/AuthorFormatter.php b/core/modules/user/src/Plugin/Field/FieldFormatter/AuthorFormatter.php
index df97a79..165e94f 100644
--- a/core/modules/user/src/Plugin/Field/FieldFormatter/AuthorFormatter.php
+++ b/core/modules/user/src/Plugin/Field/FieldFormatter/AuthorFormatter.php
@@ -7,6 +7,7 @@
 use Drupal\Core\Field\FieldDefinitionInterface;
 use Drupal\Core\Field\FieldItemListInterface;
 use Drupal\Core\Field\Plugin\Field\FieldFormatter\EntityReferenceFormatterBase;
+use Drupal\Core\Form\FormStateInterface;
 
 /**
  * Plugin implementation of the 'author' formatter.
@@ -25,6 +26,43 @@ class AuthorFormatter extends EntityReferenceFormatterBase {
   /**
    * {@inheritdoc}
    */
+  public static function defaultSettings() {
+    return array(
+      'show_prefix' => 'TRUE',
+    ) + parent::defaultSettings();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function settingsForm(array $form, FormStateInterface $form_state) {
+    $elements = parent::settingsForm($form, $form_state);
+    $elements['show_prefix'] = array(
+      '#type' => 'checkbox',
+      '#title' => $this->t('Show "Submitted by" prefix'),
+      '#default_value' => $this->getSetting('show_prefix') ? TRUE : FALSE,
+    );
+    return $elements;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function settingsSummary() {
+    $summary = parent::settingsSummary();
+
+    if ($this->getSetting('show_prefix')) {
+      $summary[] = $this->t('"Submitted by" prefix displayed.');
+    }
+    else {
+      $summary[] = $this->t('"Submitted by" prefix not displayed.');
+    }
+    return $summary;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
   public function viewElements(FieldItemListInterface $items, $langcode) {
     $elements = array();
 
@@ -32,6 +70,7 @@ public function viewElements(FieldItemListInterface $items, $langcode) {
       /** @var $referenced_user \Drupal\user\UserInterface */
       $elements[$delta] = array(
         '#theme' => 'username',
+        '#show_prefix' => $this->getSetting('show_prefix'),
         '#account' => $entity,
         '#link_options' => array('attributes' => array('rel' => 'author')),
         '#cache' => array(
diff --git a/core/modules/user/templates/username.html.twig b/core/modules/user/templates/username.html.twig
index 6c1fccb..75f7bb9 100644
--- a/core/modules/user/templates/username.html.twig
+++ b/core/modules/user/templates/username.html.twig
@@ -18,6 +18,9 @@
  * @ingroup themeable
  */
 #}
+{% if show_prefix %}
+  {{ 'Submitted by '|t }}
+{%- endif -%}
 {% if link_path -%}
   <a{{ attributes }}>{{ name }}{{ extra }}</a>
 {%- else -%}
diff --git a/core/modules/user/user.module b/core/modules/user/user.module
index 1394b23..adc1c4e 100644
--- a/core/modules/user/user.module
+++ b/core/modules/user/user.module
@@ -100,7 +100,7 @@ function user_theme() {
       'render element' => 'elements',
     ),
     'username' => array(
-      'variables' => array('account' => NULL, 'attributes' => array(), 'link_options' => array()),
+      'variables' => array('account' => NULL, 'attributes' => array(), 'link_options' => array(), 'show_prefix' => FALSE),
     ),
   );
 }
diff --git a/core/profiles/standard/config/install/core.entity_view_display.node.article.default.yml b/core/profiles/standard/config/install/core.entity_view_display.node.article.default.yml
index f880cfd..61d97fc 100644
--- a/core/profiles/standard/config/install/core.entity_view_display.node.article.default.yml
+++ b/core/profiles/standard/config/install/core.entity_view_display.node.article.default.yml
@@ -53,6 +53,23 @@ content:
     settings:
       pager_id: 0
     third_party_settings: {  }
+  created:
+    label: hidden
+    type: timestamp
+    weight: -2
+    settings:
+      custom_date_format: ''
+      timezone: ''
+      show_prefix_label: true
+      date_format: medium
+    third_party_settings: {  }
+  uid:
+    label: hidden
+    type: author
+    weight: -3
+    settings:
+      show_prefix: true
+    third_party_settings: {  }
   links:
     weight: 100
 hidden:
diff --git a/core/profiles/standard/config/install/core.entity_view_display.node.article.rss.yml b/core/profiles/standard/config/install/core.entity_view_display.node.article.rss.yml
index 75a14a3..d199fc7 100644
--- a/core/profiles/standard/config/install/core.entity_view_display.node.article.rss.yml
+++ b/core/profiles/standard/config/install/core.entity_view_display.node.article.rss.yml
@@ -19,6 +19,8 @@ content:
     weight: 100
 hidden:
   body: true
+  created: true
+  uid: true
   comment: true
   field_image: true
   field_tags: true
diff --git a/core/profiles/standard/config/install/core.entity_view_display.node.article.teaser.yml b/core/profiles/standard/config/install/core.entity_view_display.node.article.teaser.yml
index 43ee079..e62bf94 100644
--- a/core/profiles/standard/config/install/core.entity_view_display.node.article.teaser.yml
+++ b/core/profiles/standard/config/install/core.entity_view_display.node.article.teaser.yml
@@ -42,6 +42,23 @@ content:
     label: above
   links:
     weight: 100
+  created:
+    label: hidden
+    type: timestamp
+    weight: -2
+    settings:
+      custom_date_format: ''
+      timezone: ''
+      show_prefix_label: true
+      date_format: medium
+    third_party_settings: {  }
+  uid:
+    label: hidden
+    type: author
+    weight: -3
+    settings:
+      show_prefix: true
+    third_party_settings: {  }
 hidden:
   comment: true
   field_image: true
diff --git a/core/profiles/standard/config/install/core.entity_view_display.node.page.default.yml b/core/profiles/standard/config/install/core.entity_view_display.node.page.default.yml
index dcb2d3e..7d06e3c 100644
--- a/core/profiles/standard/config/install/core.entity_view_display.node.page.default.yml
+++ b/core/profiles/standard/config/install/core.entity_view_display.node.page.default.yml
@@ -20,4 +20,6 @@ content:
     third_party_settings: {  }
   links:
     weight: 101
-hidden: {  }
+hidden:
+  created: true
+  uid: true
diff --git a/core/profiles/standard/config/install/core.entity_view_display.node.page.teaser.yml b/core/profiles/standard/config/install/core.entity_view_display.node.page.teaser.yml
index f235a10..6c4c15d 100644
--- a/core/profiles/standard/config/install/core.entity_view_display.node.page.teaser.yml
+++ b/core/profiles/standard/config/install/core.entity_view_display.node.page.teaser.yml
@@ -22,4 +22,6 @@ content:
     third_party_settings: {  }
   links:
     weight: 101
-hidden: {  }
+hidden:
+  created: true
+  uid: true
diff --git a/core/profiles/standard/config/install/node.type.article.yml b/core/profiles/standard/config/install/node.type.article.yml
index 1fd439c..b8a1f4d 100644
--- a/core/profiles/standard/config/install/node.type.article.yml
+++ b/core/profiles/standard/config/install/node.type.article.yml
@@ -7,4 +7,4 @@ description: 'Use <em>articles</em> for time-sensitive content like news, press
 help: ''
 new_revision: true
 preview_mode: 1
-display_submitted: true
+display_submitted: false
diff --git a/core/themes/bartik/templates/node.html.twig b/core/themes/bartik/templates/node.html.twig
index b257ad3..a6924b2 100644
--- a/core/themes/bartik/templates/node.html.twig
+++ b/core/themes/bartik/templates/node.html.twig
@@ -87,13 +87,17 @@
       </h2>
     {% endif %}
     {{ title_suffix }}
-    {% if display_submitted %}
+    {% if display_submitted or author_picture %}
       <div class="node__meta">
-        {{ author_picture }}
-        <span{{ author_attributes }}>
-          {% trans %}Submitted by {{ author_name }} on {{ date }}{% endtrans %}
-        </span>
+        {% if author_picture %}
+          {{ author_picture }}
+        {% endif %}
+        {% if display_submitted %}
+          <span{{ author_attributes }}>
+            {% trans %}Submitted by {{ author_name }} on {{ date }}{% endtrans %}
+          </span>
         {{ metadata }}
+        {% endif %}
       </div>
     {% endif %}
   </header>
diff --git a/core/themes/classy/templates/user/username.html.twig b/core/themes/classy/templates/user/username.html.twig
index 5a6c3a5..a26b458 100644
--- a/core/themes/classy/templates/user/username.html.twig
+++ b/core/themes/classy/templates/user/username.html.twig
@@ -16,6 +16,9 @@
  * @see template_preprocess_username()
  */
 #}
+{% if show_prefix %}
+  {{ 'Submitted by '|t }}
+{%- endif -%}
 {% if link_path -%}
   <a{{ attributes.addClass('username') }}>{{ name }}{{ extra }}</a>
 {%- else -%}
diff --git a/core/themes/stable/templates/user/username.html.twig b/core/themes/stable/templates/user/username.html.twig
index 480225f..229d2c8 100644
--- a/core/themes/stable/templates/user/username.html.twig
+++ b/core/themes/stable/templates/user/username.html.twig
@@ -16,6 +16,9 @@
  * @see template_preprocess_username()
  */
 #}
+{% if show_prefix %}
+  {{ 'Submitted by '|t }}
+{%- endif -%}
 {% if link_path -%}
   <a{{ attributes }}>{{ name }}{{ extra }}</a>
 {%- else -%}
