<!--
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="mock-diff-response">
  <template></template>
  <script>
    (function() {
      'use strict';

      var RESPONSE = {
        'meta_a': {
          'name': 'lorem-ipsum.txt',
          'content_type': 'text/plain',
          'lines': 45,
        },
        'meta_b': {
          'name': 'lorem-ipsum.txt',
          'content_type': 'text/plain',
          'lines': 48,
        },
        'intraline_status': 'OK',
        'change_type': 'MODIFIED',
        'diff_header': [
          'diff --git a/lorem-ipsum.txt b/lorem-ipsum.txt',
          'index b2adcf4..554ae49 100644',
          '--- a/lorem-ipsum.txt',
          '+++ b/lorem-ipsum.txt',
        ],
        'content': [
          {
            'ab': [
              'Lorem ipsum dolor sit amet, suspendisse inceptos vehicula, ' +
                'nulla phasellus.',
              'Mattis lectus.',
              'Sodales duis.',
              'Orci a faucibus.',
            ]
          },
          {
            'b': [
              'Nullam neque, ligula ac, id blandit.',
              'Sagittis tincidunt torquent, tempor nunc amet.',
              'At rhoncus id.',
            ],
          },
          {
            'ab': [
              'Sem nascetur, erat ut, non in.',
              'A donec, venenatis pellentesque dis.',
              'Mauris mauris.',
              'Quisque nisl duis, facilisis viverra.',
              'Justo purus, semper eget et.',
            ],
          },
          {
            'a': [
              'Est amet, vestibulum pellentesque.',
              'Erat ligula.',
              'Justo eros.',
              'Fringilla quisque.',
            ],
          },
          {
            'ab': [
              'Arcu eget, rhoncus amet cursus, ipsum elementum.',
              'Eros suspendisse.',
            ],
          },
          {
            'a': [
              'Rhoncus tempor, ultricies aliquam ipsum.',
            ],
            'b': [
              'Rhoncus tempor, ultricies praesent ipsum.',
            ],
            'edit_a': [
              [
                26,
                7,
              ],
            ],
            'edit_b': [
              [
                26,
                8,
              ],
            ],
          },
          {
            'ab': [
              'Sollicitudin duis.',
              'Blandit blandit, ante nisl fusce.',
              'Felis ac at, tellus consectetuer.',
              'Sociis ligula sapien, egestas leo.',
              'Cum pulvinar, sed mauris, cursus neque velit.',
              'Augue porta lobortis.',
              'Nibh lorem, amet fermentum turpis, vel pulvinar diam.',
              'Id quam ipsum, id urna et, massa suspendisse.',
              'Ac nec, nibh praesent.',
              'Rutrum vestibulum.',
              'Est tellus, bibendum habitasse.',
              'Justo facilisis, vel nulla.',
              'Donec eu, vulputate neque aliquam, nulla dui.',
              'Risus adipiscing in.',
              'Lacus arcu arcu.',
              'Urna velit.',
              'Urna a dolor.',
              'Lectus magna augue, convallis mattis tortor, sed tellus ' +
                'consequat.',
              'Etiam dui, blandit wisi.',
              'Mi nec.',
              'Vitae eget vestibulum.',
              'Ullamcorper nunc ante, nec imperdiet felis, consectetur in.',
              'Ac eget.',
              'Vel fringilla, interdum pellentesque placerat, proin ante.',
            ],
          },
          {
            'b': [
              'Eu congue risus.',
              'Enim ac, quis elementum.',
              'Non et elit.',
              'Etiam aliquam, diam vel nunc.',
            ],
          },
          {
            'ab': [
              'Nec at.',
              'Arcu mauris, venenatis lacus fermentum, praesent duis.',
              'Pellentesque amet et, tellus duis.',
              'Ipsum arcu vitae, justo elit, sed libero tellus.',
              'Metus rutrum euismod, vivamus sodales, vel arcu nisl.',
            ],
          },
        ],
      };

      Polymer({
        is: 'mock-diff-response',
        properties: {
          diffResponse: {
            type: Object,
            value: function() {
              return RESPONSE;
            },
          },
        },
      });
    })();
  </script>
</dom-module>
