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