| <!-- |
| 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="../bower_components/iron-ajax/iron-ajax.html"> |
| <link rel="import" href="gr-change-list.html"> |
| |
| <dom-module id="gr-change-list-view"> |
| <template> |
| <style> |
| :host { |
| background-color: var(--view-background-color); |
| display: block; |
| margin: 0 1.25rem; |
| } |
| gr-change-list { |
| margin-top: 1em; |
| width: 100%; |
| } |
| nav { |
| margin-bottom: 1em; |
| padding: .5em 0; |
| text-align: center; |
| } |
| nav a { |
| display: inline-block; |
| } |
| nav a:first-of-type { |
| margin-right: .5em; |
| } |
| [hidden] { |
| display: none !important; |
| } |
| </style> |
| <iron-ajax |
| auto |
| url="/changes/" |
| params="[[_computeQueryParams(query, offset)]]" |
| json-prefix=")]}'" |
| last-response="{{_changes}}" |
| debounce-duration="300"></iron-ajax> |
| <gr-change-list changes="{{_changes}}"></gr-change-list> |
| <nav> |
| <a href$="[[_computeNavLink(query, offset, -1)]]" |
| hidden$="[[_hidePrevArrow(offset)]]">← Prev</a> |
| <a href$="[[_computeNavLink(query, offset, 1)]]" |
| hidden$="[[_hideNextArrow(_changes.length)]]">Next →</a> |
| </nav> |
| </template> |
| <script> |
| (function() { |
| 'use strict'; |
| |
| var DEFAULT_NUM_CHANGES = 25; |
| |
| Polymer({ |
| is: 'gr-change-list-view', |
| |
| properties: { |
| /** |
| * URL params passed from the router. |
| */ |
| params: { |
| type: Object, |
| observer: '_paramsChanged', |
| }, |
| |
| /** |
| * Change objects loaded from the server. |
| */ |
| _changes: Array, |
| }, |
| |
| _paramsChanged: function(value) { |
| this.query = value.query; |
| this.offset = value.offset || 0; |
| }, |
| |
| _computeQueryParams: function(query, offset) { |
| var options = Changes.listChangesOptionsToHex( |
| Changes.ListChangesOption.LABELS, |
| Changes.ListChangesOption.DETAILED_ACCOUNTS |
| ); |
| var obj = { |
| n: DEFAULT_NUM_CHANGES, // Number of results to return. |
| O: options, |
| S: offset || 0, |
| }; |
| if (query && query.length > 0) { |
| obj.q = query; |
| } |
| return obj; |
| }, |
| |
| _computeNavLink: function(query, offset, direction) { |
| // Offset could be a string when passed from the router. |
| offset = +(offset || 0); |
| var newOffset = Math.max(0, offset + (25 * direction)); |
| var href = '/q/' + query; |
| if (newOffset > 0) { |
| href += ',' + newOffset; |
| } |
| return href; |
| }, |
| |
| _hidePrevArrow: function(offset) { |
| return offset == 0; |
| }, |
| |
| _hideNextArrow: function(changesLen) { |
| return changesLen < DEFAULT_NUM_CHANGES; |
| }, |
| |
| }); |
| })(); |
| </script> |
| </dom-module> |