OLD | NEW |
1 <!-- | 1 <!-- |
2 // Copyright 2014 The Chromium Authors. All rights reserved. | 2 // Copyright 2014 The Chromium Authors. All rights reserved. |
3 // Use of this source code is governed by a BSD-style license that can be | 3 // Use of this source code is governed by a BSD-style license that can be |
4 // found in the LICENSE file. | 4 // found in the LICENSE file. |
5 --> | 5 --> |
6 <import src="../../framework/sky-element/sky-element.sky" as="SkyElement" /> | 6 <import src="../../framework/sky-element/sky-element.sky" as="SkyElement" /> |
7 <import src="city-data-service.sky" as="CityDataService" /> | 7 <import src="city-data-service.sky" as="CityDataService" /> |
8 <import src="city-sequence.sky" as="CitySequence" /> | 8 <import src="city-sequence.sky" as="CitySequence" /> |
9 | 9 |
10 <script> | 10 <script> |
11 // TODO(esprehn): exports should start as the empty object. | 11 // TODO(esprehn): exports should start as the empty object. |
12 module.exports = {}; | 12 module.exports = {}; |
13 </script> | 13 </script> |
14 | 14 |
15 <sky-element name="state-header"> | 15 <sky-element name="state-header"> |
16 <template> | 16 <template> |
17 <style> | 17 <style> |
18 div { | 18 div { |
19 font-size: 16px; | 19 font-size: 16px; |
20 color: #FFF; | 20 color: #FFF; |
21 background-color: #333; | 21 background-color: #333; |
22 padding: 4px 4px 4px 12px; | 22 padding: 4px 4px 4px 12px; |
23 display: paragraph; | 23 display: paragraph; |
24 } | 24 } |
25 </style> | 25 </style> |
26 <div>{{ state }}</div> | 26 <div>{{ state }}</div> |
27 </template> | 27 </template> |
28 <script> | 28 <script> |
29 module.exports.StateHeaderElement = class extends SkyElement { | 29 module.exports.StateHeaderElement = class extends SkyElement { |
| 30 created() { |
| 31 this.state = ""; |
| 32 } |
30 set datum(datum) { | 33 set datum(datum) { |
31 this.state = datum.state; | 34 this.state = datum.state; |
32 } | 35 } |
33 }.register(); | 36 }.register(); |
34 </script> | 37 </script> |
35 </sky-element> | 38 </sky-element> |
36 | 39 |
37 <sky-element name="letter-header"> | 40 <sky-element name="letter-header"> |
38 <template> | 41 <template> |
39 <style> | 42 <style> |
40 div { | 43 div { |
41 font-size: 12px; | 44 font-size: 12px; |
42 font-weight: bold; | 45 font-weight: bold; |
43 padding: 2px 4px 4px 12px; | 46 padding: 2px 4px 4px 12px; |
44 background-color: #DDD; | 47 background-color: #DDD; |
45 display: paragraph; | 48 display: paragraph; |
46 } | 49 } |
47 </style> | 50 </style> |
48 <div>{{ letter }}</div> | 51 <div>{{ letter }}</div> |
49 </template> | 52 </template> |
50 <script> | 53 <script> |
51 module.exports.LetterHeaderElement = class extends SkyElement { | 54 module.exports.LetterHeaderElement = class extends SkyElement { |
| 55 created() { |
| 56 this.letter = ""; |
| 57 } |
52 set datum(datum) { | 58 set datum(datum) { |
53 this.letter = datum.letter; | 59 this.letter = datum.letter; |
54 } | 60 } |
55 }.register(); | 61 }.register(); |
56 </script> | 62 </script> |
57 </sky-element> | 63 </sky-element> |
58 | 64 |
59 <sky-element name="city-item"> | 65 <sky-element name="city-item"> |
60 <template> | 66 <template> |
61 <style> | 67 <style> |
(...skipping 23 matching lines...) Expand all Loading... |
85 } | 91 } |
86 | 92 |
87 </style> | 93 </style> |
88 <div> | 94 <div> |
89 <span id="name">{{ name }}</span>, | 95 <span id="name">{{ name }}</span>, |
90 <span id="population">population {{ population }}</span> | 96 <span id="population">population {{ population }}</span> |
91 </div> | 97 </div> |
92 </template> | 98 </template> |
93 <script> | 99 <script> |
94 module.exports.CityItemElement = class extends SkyElement { | 100 module.exports.CityItemElement = class extends SkyElement { |
| 101 created() { |
| 102 this.name = ""; |
| 103 this.population = ""; |
| 104 } |
95 set datum(datum) { | 105 set datum(datum) { |
96 this.name = datum.name; | 106 this.name = datum.name; |
97 this.population = datum.population; | 107 this.population = datum.population; |
98 } | 108 } |
99 }.register(); | 109 }.register(); |
100 </script> | 110 </script> |
101 </sky-element> | 111 </sky-element> |
102 | 112 |
103 <sky-element name="city-list"> | 113 <sky-element name="city-list"> |
104 <template> | 114 <template> |
(...skipping 441 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
546 | 556 |
547 module.exports.CityListElement = class extends SkyElement { | 557 module.exports.CityListElement = class extends SkyElement { |
548 | 558 |
549 created() { | 559 created() { |
550 this.loader = null; | 560 this.loader = null; |
551 this.scroller = null; | 561 this.scroller = null; |
552 this.tiler = null; | 562 this.tiler = null; |
553 this.date = null; | 563 this.date = null; |
554 this.month = null; | 564 this.month = null; |
555 this.views = null; | 565 this.views = null; |
| 566 this.scrollerElement = null; |
556 } | 567 } |
557 | 568 |
558 attached() { | 569 attached() { |
559 this.views = {}; | 570 this.views = {}; |
560 this.loader = new Loader(this); | 571 this.loader = new Loader(this); |
561 this.scroller = new Scroller(); | 572 this.scroller = new Scroller(); |
562 this.tiler = new Tiler( | 573 this.tiler = new Tiler( |
563 this.shadowRoot.getElementById('contentarea'), this.views, { | 574 this.shadowRoot.getElementById('contentarea'), this.views, { |
564 stateHeader: 27, | 575 stateHeader: 27, |
565 letterHeader: 18, | 576 letterHeader: 18, |
566 cityItem: 30 | 577 cityItem: 30 |
567 }); | 578 }); |
568 | 579 |
569 this.dataLoaded = this.dataLoaded.bind(this); | |
570 this.scrollerElement = this.shadowRoot.getElementById('scroller'); | 580 this.scrollerElement = this.shadowRoot.getElementById('scroller'); |
571 this.scrollerElement.addEventListener('scroll', | 581 this.scrollerElement.addEventListener('scroll', |
572 this.handleScroll.bind(this)); | 582 this.handleScroll.bind(this)); |
573 | 583 |
574 var self = this; | 584 var self = this; |
575 setTimeout(function() { | 585 setTimeout(function() { |
576 self.domReady(); | 586 self.domReady(); |
577 self.loader.maybeLoadMoreData(self.dataLoaded); | 587 self.loader.maybeLoadMoreData(self.dataLoaded.bind(self)); |
578 }); | 588 }); |
579 } | 589 } |
580 | 590 |
581 domReady() { | 591 domReady() { |
582 this.scroller.setup(this.shadowRoot.getElementById('scroller'), | 592 this.scroller.setup(this.shadowRoot.getElementById('scroller'), |
583 this.shadowRoot.getElementById('scrollarea'), | 593 this.shadowRoot.getElementById('scrollarea'), |
584 this.shadowRoot.getElementById('contentarea')); | 594 this.shadowRoot.getElementById('contentarea')); |
585 var scrollFrame = this.scroller.getCurrentFrame(); | 595 var scrollFrame = this.scroller.getCurrentFrame(); |
586 this.tiler.setupViews(scrollFrame); | 596 this.tiler.setupViews(scrollFrame); |
587 } | 597 } |
588 | 598 |
589 updateView(data, scrollChanged) { | 599 updateView(data, scrollChanged) { |
590 var scrollFrame = this.scroller.getCurrentFrame(); | 600 var scrollFrame = this.scroller.getCurrentFrame(); |
591 this.tiler.drawTiles(scrollFrame, data); | 601 this.tiler.drawTiles(scrollFrame, data); |
592 var datum = scrollChanged ? | 602 var datum = scrollChanged ? |
593 this.tiler.getFirstVisibleDatum(scrollFrame) : null; | 603 this.tiler.getFirstVisibleDatum(scrollFrame) : null; |
594 this.loader.maybeLoadMoreData(this.dataLoaded, datum); | 604 this.loader.maybeLoadMoreData(this.dataLoaded.bind(this), datum); |
595 } | 605 } |
596 | 606 |
597 dataLoaded(data, indexOffset) { | 607 dataLoaded(data, indexOffset) { |
598 var scrollFrame = this.scroller.getCurrentFrame(); | 608 var scrollFrame = this.scroller.getCurrentFrame(); |
599 this.tiler.updateFirstItem(indexOffset); | 609 this.tiler.updateFirstItem(indexOffset); |
600 this.updateView(data.items, false); | 610 this.updateView(data.items, false); |
601 } | 611 } |
602 | 612 |
603 handleScroll(event) { | 613 handleScroll(event) { |
604 if (!this.scroller.captureNewFrame(event)) | 614 if (!this.scroller.captureNewFrame(event)) |
605 return; | 615 return; |
606 | 616 |
607 this.updateView(this.loader.getItems(), true); | 617 this.updateView(this.loader.getItems(), true); |
608 } | 618 } |
609 | 619 |
610 scrollBy(amount) { | 620 scrollBy(amount) { |
611 this.scrollerElement.scrollTop += amount; | 621 this.scrollerElement.scrollTop += amount; |
612 this.handleScroll({ target: this.scrollerElement }); | 622 this.handleScroll({ target: this.scrollerElement }); |
613 } | 623 } |
614 }.register(); | 624 }.register(); |
615 | 625 |
616 })(this); | 626 })(this); |
617 </script> | 627 </script> |
618 </sky-element> | 628 </sky-element> |
OLD | NEW |