OLD | NEW |
1 <!-- | 1 <!-- |
2 // Copyright 2015 The Chromium Authors. All rights reserved. | 2 // Copyright 2015 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="/sky/framework/sky-element.sky" /> | 6 <import src="/sky/framework/sky-element.sky" /> |
7 | 7 |
8 <sky-element> | 8 <sky-element> |
9 <template> | 9 <template> |
10 <style> | 10 <style> |
11 :host { | 11 :host { |
12 height: 50px; | 12 // TODO(eseidel): Why does setting height here make this too big? |
| 13 // height: 48px; |
| 14 max-height: 48px; |
13 display: flex; | 15 display: flex; |
14 width: 100%; | 16 border-bottom: 1px solid black; |
15 border: 1px solid black; | 17 padding-top: 16px; |
| 18 padding-left: 16px; |
| 19 padding-right: 16px; |
| 20 padding-bottom: 20px; |
16 } | 21 } |
17 #ticker { | 22 #ticker { |
18 padding: 10px; | |
19 flex-grow: 1; | 23 flex-grow: 1; |
20 } | 24 } |
21 #last-sale { | 25 #last-sale { |
22 padding: 10px; | 26 padding-right: 20px; |
23 } | 27 } |
24 #change { | 28 #change { |
25 padding: 10px; | |
26 border-radius: 5px; | 29 border-radius: 5px; |
27 min-width: 70px; | 30 min-width: 72px; |
| 31 padding-right: 10px; |
28 text-align: right; | 32 text-align: right; |
29 } | 33 } |
30 .positive { | |
31 background-color: green; | |
32 } | |
33 .negative { | |
34 background-color: red; | |
35 } | |
36 </style> | 34 </style> |
37 <div id="ticker" /> | 35 <div id="ticker" /> |
38 <div id="last-sale" /> | 36 <div id="last-sale" /> |
39 <div id="change" /> | 37 <div id="change" /> |
40 </template> | 38 </template> |
41 <script> | 39 <script> |
42 import "dart:sky"; | 40 import "dart:sky"; |
| 41 import "dart:math"; |
| 42 |
| 43 List<String> redColors = [ |
| 44 '#FFEBEE', |
| 45 '#FFCDD2', |
| 46 '#EF9A9A', |
| 47 '#E57373', |
| 48 '#EF5350', |
| 49 '#F44336', |
| 50 '#E53935', |
| 51 '#D32F2F', |
| 52 '#C62828', |
| 53 '#B71C1C', |
| 54 ]; |
| 55 |
| 56 List<String> greenColors = [ |
| 57 '#E8F5E9', |
| 58 '#C8E6C9', |
| 59 '#A5D6A7', |
| 60 '#81C784', |
| 61 '#66BB6A', |
| 62 '#4CAF50', |
| 63 '#43A047', |
| 64 '#388E3C', |
| 65 '#2E7D32', |
| 66 '#1B5E20', |
| 67 ]; |
| 68 |
| 69 int colorIndexForPercentChange(double percentChange) { |
| 70 // Currently the max is 10%. |
| 71 double maxPercent = 10.0; |
| 72 return max(0, ((percentChange.abs() / maxPercent) * greenColors.length).floor(
)); |
| 73 } |
| 74 |
| 75 String colorForPercentChange(double percentChange) { |
| 76 if (percentChange > 0) |
| 77 return greenColors[colorIndexForPercentChange(percentChange)]; |
| 78 return redColors[colorIndexForPercentChange(percentChange)]; |
| 79 } |
43 | 80 |
44 @Tagname('stock') | 81 @Tagname('stock') |
45 class Stock extends SkyElement { | 82 class Stock extends SkyElement { |
46 var model; // model.Stock | 83 var model; // model.Stock |
47 | 84 |
48 void shadowRootReady() { | 85 void shadowRootReady() { |
49 shadowRoot.getElementById('ticker').textContent = model.symbol; | 86 shadowRoot.getElementById('ticker').textContent = model.symbol; |
50 | 87 |
51 Element lastSale = shadowRoot.getElementById('last-sale'); | 88 Element lastSale = shadowRoot.getElementById('last-sale'); |
52 lastSale.textContent = "\$${model.lastSale.toStringAsFixed(2)}"; | 89 lastSale.textContent = "\$${model.lastSale.toStringAsFixed(2)}"; |
53 | 90 |
54 Element change = shadowRoot.getElementById('change'); | 91 Element change = shadowRoot.getElementById('change'); |
55 String changeString = "${model.percentChange.toStringAsFixed(2)}%"; | 92 String changeString = "${model.percentChange.toStringAsFixed(2)}%"; |
56 if (model.percentChange > 0) | 93 if (model.percentChange > 0) |
57 changeString = "+" + changeString; | 94 changeString = "+" + changeString; |
58 change.textContent = changeString; | 95 change.textContent = changeString; |
59 change.classList.add((model.percentChange < 0) ? 'negative' : 'positive'); | 96 change.style['background-color'] = colorForPercentChange(model.percentChange
); |
60 } | 97 } |
61 } | 98 } |
62 | 99 |
63 _init(script) => register(script, Stock); | 100 _init(script) => register(script, Stock); |
64 </script> | 101 </script> |
65 </sky-element> | 102 </sky-element> |
OLD | NEW |