<!--
Copyright (C) 2015 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-diff-comment-thread/gr-diff-comment-thread.html">

<dom-module id="gr-diff-side">
  <template>
    <style>
      :host,
      .container {
        display: flex;
        flex: 0 0 auto;
      }
      .lineNum:before,
      .code:before {
        /* To ensure the height is non-zero in these elements, a
           zero-width space is set as its content. The character
           itself doesn't matter. Just that there is something
           there. */
        content: '\200B';
      }
      .lineNum {
        background-color: #eee;
        color: #666;
        padding: 0 .75em;
        text-align: right;
      }
      .canComment .lineNum {
        cursor: pointer;
        text-decoration: underline;
      }
      .canComment .lineNum:hover {
        background-color: #ccc;
      }
      .lightHighlight {
        background-color: var(--light-highlight-color);
      }
      hl,
      .darkHighlight {
        background-color: var(--dark-highlight-color);
      }
      .br:after {
        /* Line feed */
        content: '\A';
      }
      .tab {
        display: inline-block;
      }
      .tab.withIndicator:before {
        color: #C62828;
        /* >> character */
        content: '\00BB';
      }
      .numbers,
      .content {
        white-space: pre;
      }
      .numbers .filler {
        background-color: #eee;
      }
      .contextControl {
        background-color: #fef;
      }
      .contextControl a:link,
      .contextControl a:visited {
        display: block;
        text-decoration: none;
      }
      .numbers .contextControl {
        padding: 0 .75em;
        text-align: right;
      }
      .content .contextControl {
        text-align: center;
      }
    </style>
    <div class$="[[_computeContainerClass(canComment)]]">
      <div class="numbers" id="numbers"></div>
      <div class="content" id="content"></div>
    </div>
  </template>
  <script src="gr-diff-side.js"></script>
</dom-module>
