OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 Polymer({ | 5 Polymer({ |
6 is: 'viewer-page-selector', | 6 is: 'viewer-page-selector', |
7 | 7 |
8 properties: { | 8 properties: { |
9 /** | 9 /** |
10 * The number of pages the document contains. | 10 * The number of pages the document contains. |
11 */ | 11 */ |
12 docLength: { | 12 docLength: { |
13 type: Number, | 13 type: Number, |
14 value: 1, | 14 value: 1, |
15 observer: 'docLengthChanged' | 15 observer: 'docLengthChanged' |
16 }, | 16 }, |
17 | 17 |
18 /** | 18 /** |
19 * The current page being viewed (1-based). | 19 * The current page being viewed (1-based). A change to pageNo is mirrored |
| 20 * immediately to the input field. A change to the input field is not |
| 21 * mirrored back until pageNoCommitted() is called and change-page is fired. |
20 */ | 22 */ |
21 pageNo: { | 23 pageNo: { |
22 type: String, | 24 type: Number, |
23 value: '1' | 25 value: 1 |
24 }, | 26 }, |
25 | 27 |
26 strings: Object | 28 strings: Object |
27 }, | 29 }, |
28 | 30 |
29 pageNoCommitted: function() { | 31 pageNoCommitted: function() { |
30 var page = parseInt(this.pageNo); | 32 var page = parseInt(this.$.input.value); |
31 if (!isNaN(page)) { | 33 |
| 34 if (!isNaN(page) && page <= this.docLength && page > 0) |
32 this.fire('change-page', {page: page - 1}); | 35 this.fire('change-page', {page: page - 1}); |
33 this.$.input.blur(); | 36 else |
34 } | 37 this.$.input.value = this.pageNo; |
| 38 this.$.input.blur(); |
35 }, | 39 }, |
36 | 40 |
37 docLengthChanged: function() { | 41 docLengthChanged: function() { |
38 var numDigits = this.docLength.toString().length; | 42 var numDigits = this.docLength.toString().length; |
39 this.$.pageselector.style.width = numDigits + 'ch'; | 43 this.$.pageselector.style.width = numDigits + 'ch'; |
40 // Set both sides of the slash to the same width, so that the layout is | 44 // Set both sides of the slash to the same width, so that the layout is |
41 // exactly centered. | 45 // exactly centered. |
42 this.$['pagelength-spacer'].style.width = numDigits + 'ch'; | 46 this.$['pagelength-spacer'].style.width = numDigits + 'ch'; |
43 }, | 47 }, |
44 | 48 |
45 select: function() { | 49 select: function() { |
46 this.$.input.select(); | 50 this.$.input.select(); |
47 }, | 51 }, |
48 | 52 |
49 /** | 53 /** |
50 * @return {boolean} True if the selector input field is currently focused. | 54 * @return {boolean} True if the selector input field is currently focused. |
51 */ | 55 */ |
52 isActive: function() { | 56 isActive: function() { |
53 return this.shadowRoot.activeElement == this.$.input; | 57 return this.shadowRoot.activeElement == this.$.input; |
54 } | 58 } |
55 }); | 59 }); |
OLD | NEW |