| OLD | NEW |
| (Empty) |
| 1 <app> | |
| 2 <import src="../resources/run-after-display.sky" /> | |
| 3 <style> | |
| 4 * { box-sizing: border-box; } | |
| 5 | |
| 6 t, span { | |
| 7 display: inline; | |
| 8 } | |
| 9 | |
| 10 app { | |
| 11 display: flex; | |
| 12 flex-direction: column; | |
| 13 min-height: 100%; | |
| 14 background-color: #494949; | |
| 15 font-family: "Helvetica", sans-serif; | |
| 16 font-size: 16px; | |
| 17 color: #2B2B2B; | |
| 18 } | |
| 19 | |
| 20 app-header { | |
| 21 display: flex; | |
| 22 background: linear-gradient(#3E77B7, #6C98C4); | |
| 23 padding: 8px; | |
| 24 color: white; | |
| 25 border-bottom: 1px solid #3E77B7; | |
| 26 } | |
| 27 | |
| 28 app-title { | |
| 29 flex: 1; | |
| 30 display: flex; | |
| 31 align-items: center; | |
| 32 font-size: 22px; | |
| 33 margin-left: 8px; | |
| 34 } | |
| 35 | |
| 36 app-menu-button { | |
| 37 display: flex; | |
| 38 border-radius: 4px; | |
| 39 justify-content: center; | |
| 40 align-items: center; | |
| 41 width: 30px; | |
| 42 height: 30px; | |
| 43 } | |
| 44 | |
| 45 .menu-icon { | |
| 46 width: 18px; | |
| 47 } | |
| 48 | |
| 49 .menu-icon-inner { | |
| 50 width: 14px; | |
| 51 } | |
| 52 | |
| 53 app-scrollable { | |
| 54 flex: 1; | |
| 55 box-shadow: inset 0px 0px 22px 2px rgba(22, 22, 22, 0.63); | |
| 56 overflow: hidden; | |
| 57 } | |
| 58 | |
| 59 app-panel { | |
| 60 display: flex; | |
| 61 flex-direction: column; | |
| 62 background-color: white; | |
| 63 } | |
| 64 | |
| 65 app-panel-header { | |
| 66 background-color: #DEDEDE; | |
| 67 padding: 8px; | |
| 68 display: flex; | |
| 69 align-items: center; | |
| 70 } | |
| 71 | |
| 72 app-panel-content { | |
| 73 display: flex; | |
| 74 } | |
| 75 | |
| 76 app-toolbar { | |
| 77 background-color: #F6F6F6; | |
| 78 padding: 0 8px; | |
| 79 } | |
| 80 | |
| 81 app-search-input { | |
| 82 background-color: #F6F6F6; | |
| 83 padding: 4px; | |
| 84 display: flex; | |
| 85 align-items: center; | |
| 86 font-size: 1.2em; | |
| 87 } | |
| 88 | |
| 89 app-toast { | |
| 90 position: absolute; | |
| 91 bottom: 32px; | |
| 92 right: 32px; | |
| 93 max-width: 55%; | |
| 94 box-shadow: 0px 0px 12px 2px rgba(22, 22, 22, 0.4); | |
| 95 background-image: linear-gradient(#E5D658, #DFCF43); | |
| 96 border: 1px solid #AEA477; | |
| 97 padding: 6px; | |
| 98 border-radius: 2px; | |
| 99 display: flex; | |
| 100 align-items: center; | |
| 101 font-size: 0.8em; | |
| 102 overflow: hidden; | |
| 103 } | |
| 104 | |
| 105 app-toast-header { | |
| 106 flex-shrink: 0; | |
| 107 margin-right: 6px; | |
| 108 } | |
| 109 | |
| 110 app-toast-close-box { | |
| 111 position: absolute; | |
| 112 top: 3px; | |
| 113 right: 3px; | |
| 114 width: 1em; | |
| 115 overflow: hidden; | |
| 116 text-align: center; | |
| 117 outline: 1px solid #AEA477; | |
| 118 } | |
| 119 | |
| 120 .tip-icon { | |
| 121 font-weight: bold; | |
| 122 font-size: 24px; | |
| 123 border-radius: 16px; | |
| 124 width: 32px; | |
| 125 height: 32px; | |
| 126 border: 2px solid black; | |
| 127 line-height: 30px; | |
| 128 text-align: center; | |
| 129 } | |
| 130 | |
| 131 .tip-price { | |
| 132 font-weight: bold; | |
| 133 } | |
| 134 | |
| 135 .input-text { | |
| 136 margin-left: 8px; | |
| 137 } | |
| 138 | |
| 139 .route-result { | |
| 140 margin: 16px 16px 0 16px; | |
| 141 outline: 1px solid black; | |
| 142 } | |
| 143 | |
| 144 .route-title { | |
| 145 flex: 1; | |
| 146 } | |
| 147 | |
| 148 .airline { | |
| 149 border-radius: 2px; | |
| 150 align-items: center; | |
| 151 padding: 8px; | |
| 152 } | |
| 153 | |
| 154 .airline-name { | |
| 155 flex: 1; | |
| 156 } | |
| 157 | |
| 158 .airline-logo-image { | |
| 159 width: 50px; | |
| 160 flex-shrink: 0; | |
| 161 } | |
| 162 | |
| 163 .airline-best-price { | |
| 164 color: #ABB4B6; | |
| 165 } | |
| 166 | |
| 167 .airline-name, | |
| 168 .airline-best-price { | |
| 169 padding: 8px; | |
| 170 } | |
| 171 | |
| 172 a { | |
| 173 text-decoration: none; | |
| 174 color: #1155CC; | |
| 175 } | |
| 176 </style> | |
| 177 <app-header> | |
| 178 <app-title> | |
| 179 <t>Search</t> | |
| 180 </app-title> | |
| 181 <app-menu-button> | |
| 182 <img src="resources/menu-white.png" class="menu-icon"> | |
| 183 </app-menu-button> | |
| 184 </app-header> | |
| 185 <app-toolbar> | |
| 186 <app-search-input> | |
| 187 <span class="input-icon"> | |
| 188 <img src="resources/magnifying-glass.png" style="width: 16px"> | |
| 189 </span> | |
| 190 <span class="input-text"><t>flights today to dc by price</t></span> | |
| 191 </app-search-input> | |
| 192 </app-toolbar> | |
| 193 <app-scrollable> | |
| 194 <app-panel class="route-result"> | |
| 195 <app-panel-header> | |
| 196 <div class="route-title"> | |
| 197 <t>SFO to DCA</t> | |
| 198 </div> | |
| 199 <app-menu-button> | |
| 200 <img src="resources/menu-enabled.png" class="menu-icon-inner"> | |
| 201 </app-menu-button> | |
| 202 </app-panel-header> | |
| 203 <app-panel-content class="airline"> | |
| 204 <div class="airline-logo"> | |
| 205 <img class="airline-logo-image" src="resources/virgin-america.jpg"> | |
| 206 </div> | |
| 207 <div class="airline-name"> | |
| 208 <t>Virgin America</t> | |
| 209 </div> | |
| 210 <div class="airline-best-price"> | |
| 211 <t><a>$800</a></t> | |
| 212 </div> | |
| 213 </app-panel-content> | |
| 214 <app-panel-content class="airline"> | |
| 215 <div class="airline-logo"> | |
| 216 <img class="airline-logo-image" src="resources/ba.jpg"> | |
| 217 </div> | |
| 218 <div class="airline-name"> | |
| 219 <t>British Airways</t> | |
| 220 </div> | |
| 221 <div class="airline-best-price"> | |
| 222 <t><a>$700</a></t> | |
| 223 </div> | |
| 224 </app-panel-content> | |
| 225 <app-panel-content class="airline"> | |
| 226 <div class="airline-logo"> | |
| 227 <img class="airline-logo-image" src="resources/united.jpg"> | |
| 228 </div> | |
| 229 <div class="airline-name"> | |
| 230 <t>United</t> | |
| 231 </div> | |
| 232 <div class="airline-best-price"> | |
| 233 <t><a>$667</a></t> | |
| 234 </div> | |
| 235 </app-panel-content> | |
| 236 <app-panel-content class="airline"> | |
| 237 <div class="airline-logo"> | |
| 238 <img class="airline-logo-image" src="resources/delta.jpg"> | |
| 239 </div> | |
| 240 <div class="airline-name"> | |
| 241 <t>Delta</t> | |
| 242 </div> | |
| 243 <div class="airline-best-price"> | |
| 244 <t><a>$450</a></t> | |
| 245 </div> | |
| 246 </app-panel-content> | |
| 247 </app-panel> | |
| 248 <app-panel class="route-result"> | |
| 249 <app-panel-header> | |
| 250 <div class="route-title"> | |
| 251 <t>SJC to DCA</t> | |
| 252 </div> | |
| 253 <app-menu-button> | |
| 254 <img src="resources/menu-enabled.png" class="menu-icon-inner"> | |
| 255 </app-menu-button> | |
| 256 </app-panel-header> | |
| 257 <app-panel-content class="airline"> | |
| 258 <div class="airline-logo"> | |
| 259 <img class="airline-logo-image" src="resources/virgin-america.jpg"> | |
| 260 </div> | |
| 261 <div class="airline-name"> | |
| 262 <t>Virgin America</t> | |
| 263 </div> | |
| 264 <div class="airline-best-price"> | |
| 265 <t><a>$1500</a></t> | |
| 266 </div> | |
| 267 </app-panel-content> | |
| 268 <app-panel-content class="airline"> | |
| 269 <div class="airline-logo"> | |
| 270 <img class="airline-logo-image" src="resources/jetblue.jpg"> | |
| 271 </div> | |
| 272 <div class="airline-name"> | |
| 273 <t>jetBlue</t> | |
| 274 </div> | |
| 275 <div class="airline-best-price"> | |
| 276 <t><a>$650</a></t> | |
| 277 </div> | |
| 278 </app-panel-content> | |
| 279 <app-panel-content class="airline"> | |
| 280 <div class="airline-logo"> | |
| 281 <img class="airline-logo-image" src="resources/united.jpg"> | |
| 282 </div> | |
| 283 <div class="airline-name"> | |
| 284 <t>United</t> | |
| 285 </div> | |
| 286 <div class="airline-best-price"> | |
| 287 <t><a>$367</a></t> | |
| 288 </div> | |
| 289 </app-panel-content> | |
| 290 </app-panel> | |
| 291 </app-scrollable> | |
| 292 <app-toast> | |
| 293 <app-toast-header> | |
| 294 <div class="tip-icon"> | |
| 295 <t>?</t> | |
| 296 </div> | |
| 297 </app-toast-header> | |
| 298 <app-toast-content> | |
| 299 <t>Flights are <span class="tip-price">$200</span> cheaper tomorrow.</t> | |
| 300 </app-toast-content> | |
| 301 <app-toast-close-box> | |
| 302 X | |
| 303 </app-toast-close-box> | |
| 304 </app-toast> | |
| 305 <script> | |
| 306 import "dart:sky"; | |
| 307 import "dart:sky.internals" as internals; | |
| 308 import "dart:async"; | |
| 309 | |
| 310 var app; | |
| 311 | |
| 312 bool imagesLoaded() { | |
| 313 var images = window.document.querySelectorAll('img'); | |
| 314 for (var i = 0; i < images.length; i++) { | |
| 315 if (!images[i].complete) | |
| 316 return false; | |
| 317 } | |
| 318 return true; | |
| 319 } | |
| 320 | |
| 321 void checkImagesLoaded() { | |
| 322 if (!imagesLoaded()) { | |
| 323 new Timer(new Duration(seconds:10), checkImagesLoaded); | |
| 324 return; | |
| 325 } | |
| 326 runAfterDisplay(() { | |
| 327 internals.notifyTestComplete(""); | |
| 328 }); | |
| 329 } | |
| 330 void main() { | |
| 331 window.addEventListener("load", (_) { | |
| 332 var input = document.querySelector('.input-text'); | |
| 333 window.getSelection().selectAllChildren(input.firstChild); | |
| 334 checkImagesLoaded(); | |
| 335 }); | |
| 336 } | |
| 337 </script> | |
| 338 </app> | |
| OLD | NEW |