<!--
Copyright (C) 2016 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.
-->
<link rel="import" href="../../../bower_components/polymer/polymer.html">
<link rel="import" href="../gr-linked-text/gr-linked-text.html">
<link rel="import" href="../../../styles/shared-styles.html">

<dom-module id="gr-formatted-text">
  <template>
    <style include="shared-styles">
      :host {
        display: block;
        font-family: var(--font-family);
      }
      p,
      ul,
      blockquote,
      gr-linked-text.pre {
        margin: 0 0 1.4em 0;
      }
      p,
      ul,
      blockquote {
        max-width: var(--gr-formatted-text-prose-max-width, none);
      }
      :host(.noTrailingMargin) p:last-child,
      :host(.noTrailingMargin) ul:last-child,
      :host(.noTrailingMargin) blockquote:last-child,
      :host(.noTrailingMargin) gr-linked-text.pre:last-child {
        margin: 0;
      }
      blockquote {
        border-left: 1px solid #aaa;
        padding: 0 .7em;
      }
      li {
        list-style-type: disc;
        margin-left: 1.4em;
      }
      gr-linked-text.pre {
        font-family: var(--monospace-font-family);
      }

    </style>
    <div id="container"></div>
  </template>
  <script src="gr-formatted-text.js"></script>
</dom-module>
