<!--
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">

<dom-module id="gr-diff-selection">
  <template>
    <style>
      .contentWrapper ::content .content,
      .contentWrapper ::content .contextControl {
        -webkit-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
        user-select: none;
      }

      :host.selected-right .contentWrapper ::content .side-by-side .right + .content,
      :host.selected-left .contentWrapper ::content .side-by-side .left + .content,
      :host.selected-right .contentWrapper ::content .unified .right.lineNum ~ .content,
      :host.selected-left .contentWrapper ::content .unified .left.lineNum ~ .content:not(.both),
      :host .contentWrapper ::content .unified .gr-diff-comment .message {
        -webkit-user-select: text;
        -moz-user-select: text;
        -ms-user-select: text;
        user-select: text;
      }
    </style>
    <div class="contentWrapper">
      <content></content>
    </div>
  </template>
  <script src="gr-diff-selection.js"></script>
</dom-module>
