/**
 * Copyright (C) 2023 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
*/

{namespace com.google.gerrit.server.mail.template.EmailHtml}

/**
 * The .EmailHtml template defines the structure of the content in the email.
 */
{template EmailHtml}
  {@param styles: css}
  {@param body_sections_html: list<html>}
  {@param footer_html: html}
  <!DOCTYPE html>
  <html>
    <head>
      <style>
        {$styles}
      </style>
    </head>
    <body>
      {for $section in $body_sections_html}
        {$section}
      {/for}
      {$footer_html}
    </body>
  </html>
{/template}
