Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(574)

Side by Side Diff: sky/examples/city-list/city-list.sky

Issue 788943003: Make SkyElement more classy. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Don't change indent. Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | sky/examples/file-browser.sky » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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>
11 // TODO(esprehn): exports should start as the empty object.
12 module.exports = {};
13 </script>
14
15 <sky-element name="state-header">
10 <template> 16 <template>
11 <style> 17 <style>
12 div { 18 div {
13 font-size: 16px; 19 font-size: 16px;
14 color: #FFF; 20 color: #FFF;
15 background-color: #333; 21 background-color: #333;
16 padding: 4px 4px 4px 12px; 22 padding: 4px 4px 4px 12px;
17 display: paragraph; 23 display: paragraph;
18 } 24 }
19 </style> 25 </style>
20 <div>{{ state }}</div> 26 <div>{{ state }}</div>
21 </template> 27 </template>
22 <script> 28 <script>
23 SkyElement({ 29 module.exports.StateHeaderElement = class extends SkyElement {
24 name: 'state-header',
25
26 set datum(datum) { 30 set datum(datum) {
27 this.state = datum.state; 31 this.state = datum.state;
28 } 32 }
29 }); 33 }.register();
30 </script> 34 </script>
35 </sky-element>
31 36
37 <sky-element name="letter-header">
32 <template> 38 <template>
33 <style> 39 <style>
34 div { 40 div {
35 font-size: 12px; 41 font-size: 12px;
36 font-weight: bold; 42 font-weight: bold;
37 padding: 2px 4px 4px 12px; 43 padding: 2px 4px 4px 12px;
38 background-color: #DDD; 44 background-color: #DDD;
39 display: paragraph; 45 display: paragraph;
40 } 46 }
41 </style> 47 </style>
42 <div>{{ letter }}</div> 48 <div>{{ letter }}</div>
43 </template> 49 </template>
44 <script> 50 <script>
45 SkyElement({ 51 module.exports.LetterHeaderElement = class extends SkyElement {
46 name: 'letter-header',
47
48 set datum(datum) { 52 set datum(datum) {
49 this.letter = datum.letter; 53 this.letter = datum.letter;
50 } 54 }
51 }); 55 }.register();
52 </script> 56 </script>
57 </sky-element>
53 58
59 <sky-element name="city-item">
54 <template> 60 <template>
55 <style> 61 <style>
56 :host { 62 :host {
57 display: flex; 63 display: flex;
58 font-size: 13px; 64 font-size: 13px;
59 padding: 8px 4px 4px 12px; 65 padding: 8px 4px 4px 12px;
60 border-bottom: 1px solid #EEE; 66 border-bottom: 1px solid #EEE;
61 line-height: 15px; 67 line-height: 15px;
62 overflow: hidden; 68 overflow: hidden;
63 } 69 }
(...skipping 14 matching lines...) Expand all
78 color: #AAA; 84 color: #AAA;
79 } 85 }
80 86
81 </style> 87 </style>
82 <div> 88 <div>
83 <span id="name">{{ name }}</span>, 89 <span id="name">{{ name }}</span>,
84 <span id="population">population {{ population }}</span> 90 <span id="population">population {{ population }}</span>
85 </div> 91 </div>
86 </template> 92 </template>
87 <script> 93 <script>
88 SkyElement({ 94 module.exports.CityItemElement = class extends SkyElement {
89 name: 'city-item', 95 set datum(datum) {
96 this.name = datum.name;
97 this.population = datum.population;
98 }
99 }.register();
100 </script>
101 </sky-element>
90 102
91 set datum(datum) { 103 <sky-element name="city-list">
92 this.name = datum.name;
93 this.population = datum.population;
94 }
95 });
96 </script>
97
98 <template> 104 <template>
99 <style> 105 <style>
100 106
101 :host { 107 :host {
102 overflow: hidden; 108 overflow: hidden;
103 position: absolute; 109 position: absolute;
104 top: 0; 110 top: 0;
105 right: 0; 111 right: 0;
106 bottom: 0; 112 bottom: 0;
107 left: 0; 113 left: 0;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 display: none; 145 display: none;
140 } 146 }
141 147
142 .position { 148 .position {
143 position: absolute; 149 position: absolute;
144 left: 0; 150 left: 0;
145 right: 0; 151 right: 0;
146 } 152 }
147 153
148 </style> 154 </style>
149
150 <div id="scroller" fit> 155 <div id="scroller" fit>
151 <div id="scrollarea"> 156 <div id="scrollarea">
152 <div id="contentarea"> 157 <div id="contentarea">
153 </div> 158 </div>
154 </div> 159 </div>
155 </div> 160 </div>
156
157 </template> 161 </template>
158 <script> 162 <script>
159 163
160 (function(global) { 164 (function(global) {
161 "use strict"; 165 "use strict";
162 166
163 var LOAD_LENGTH = 20; 167 var LOAD_LENGTH = 20;
164 var LOAD_BUFFER_PRE = LOAD_LENGTH * 4; 168 var LOAD_BUFFER_PRE = LOAD_LENGTH * 4;
165 var LOAD_BUFFER_POST = LOAD_LENGTH * 4; 169 var LOAD_BUFFER_POST = LOAD_LENGTH * 4;
166 170
(...skipping 366 matching lines...) Expand 10 before | Expand all | Expand 10 after
533 this.checkinTile(tiles.pop()); 537 this.checkinTile(tiles.pop());
534 } 538 }
535 } 539 }
536 540
537 Tiler.prototype.reset = function() { 541 Tiler.prototype.reset = function() {
538 this.checkinAllTiles(); 542 this.checkinAllTiles();
539 this.drawTop = 0; 543 this.drawTop = 0;
540 this.drawBottom = 0; 544 this.drawBottom = 0;
541 } 545 }
542 546
543 SkyElement({ 547 module.exports.CityListElement = class extends SkyElement {
544 name: 'city-list',
545 loader: null,
546 scroller: null,
547 tiler: null,
548 date: null,
549 month: null,
550 views: null,
551 548
552 attached: function() { 549 created() {
550 this.loader = null;
551 this.scroller = null;
552 this.tiler = null;
553 this.date = null;
554 this.month = null;
555 this.views = null;
556 }
557
558 attached() {
553 this.views = {}; 559 this.views = {};
554 this.loader = new Loader(this); 560 this.loader = new Loader(this);
555 this.scroller = new Scroller(); 561 this.scroller = new Scroller();
556 this.tiler = new Tiler( 562 this.tiler = new Tiler(
557 this.shadowRoot.getElementById('contentarea'), this.views, { 563 this.shadowRoot.getElementById('contentarea'), this.views, {
558 stateHeader: 27, 564 stateHeader: 27,
559 letterHeader: 18, 565 letterHeader: 18,
560 cityItem: 30 566 cityItem: 30
561 }); 567 });
562 568
563 this.dataLoaded = this.dataLoaded.bind(this); 569 this.dataLoaded = this.dataLoaded.bind(this);
564 this.scrollerElement = this.shadowRoot.getElementById('scroller'); 570 this.scrollerElement = this.shadowRoot.getElementById('scroller');
565 this.scrollerElement.addEventListener('scroll', 571 this.scrollerElement.addEventListener('scroll',
566 this.handleScroll.bind(this)); 572 this.handleScroll.bind(this));
567 573
568 var self = this; 574 var self = this;
569 setTimeout(function() { 575 setTimeout(function() {
570 self.domReady(); 576 self.domReady();
571 self.loader.maybeLoadMoreData(self.dataLoaded); 577 self.loader.maybeLoadMoreData(self.dataLoaded);
572 }); 578 });
573 }, 579 }
574 580
575 domReady: function() { 581 domReady() {
576 this.scroller.setup(this.shadowRoot.getElementById('scroller'), 582 this.scroller.setup(this.shadowRoot.getElementById('scroller'),
577 this.shadowRoot.getElementById('scrollarea'), 583 this.shadowRoot.getElementById('scrollarea'),
578 this.shadowRoot.getElementById('contentarea')); 584 this.shadowRoot.getElementById('contentarea'));
579 var scrollFrame = this.scroller.getCurrentFrame(); 585 var scrollFrame = this.scroller.getCurrentFrame();
580 this.tiler.setupViews(scrollFrame); 586 this.tiler.setupViews(scrollFrame);
581 }, 587 }
582 588
583 updateView: function(data, scrollChanged) { 589 updateView(data, scrollChanged) {
584 var scrollFrame = this.scroller.getCurrentFrame(); 590 var scrollFrame = this.scroller.getCurrentFrame();
585 this.tiler.drawTiles(scrollFrame, data); 591 this.tiler.drawTiles(scrollFrame, data);
586 var datum = scrollChanged ? 592 var datum = scrollChanged ?
587 this.tiler.getFirstVisibleDatum(scrollFrame) : null; 593 this.tiler.getFirstVisibleDatum(scrollFrame) : null;
588 this.loader.maybeLoadMoreData(this.dataLoaded, datum); 594 this.loader.maybeLoadMoreData(this.dataLoaded, datum);
589 }, 595 }
590 596
591 dataLoaded: function(data, indexOffset) { 597 dataLoaded(data, indexOffset) {
592 var scrollFrame = this.scroller.getCurrentFrame(); 598 var scrollFrame = this.scroller.getCurrentFrame();
593 this.tiler.updateFirstItem(indexOffset); 599 this.tiler.updateFirstItem(indexOffset);
594 this.updateView(data.items, false); 600 this.updateView(data.items, false);
595 }, 601 }
596 602
597 handleScroll: function(event) { 603 handleScroll(event) {
598 if (!this.scroller.captureNewFrame(event)) 604 if (!this.scroller.captureNewFrame(event))
599 return; 605 return;
600 606
601 this.updateView(this.loader.getItems(), true); 607 this.updateView(this.loader.getItems(), true);
602 }, 608 }
603 609
604 scrollBy: function(amount) { 610 scrollBy(amount) {
605 this.scrollerElement.scrollTop += amount; 611 this.scrollerElement.scrollTop += amount;
606 this.handleScroll({ target: this.scrollerElement }); 612 this.handleScroll({ target: this.scrollerElement });
607 } 613 }
608 }); 614 }.register();
609 615
610 })(this); 616 })(this);
611
612 </script> 617 </script>
613 618 </sky-element>
OLDNEW
« no previous file with comments | « no previous file | sky/examples/file-browser.sky » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698