| <app> |
| <import src="../resources/run-after-display.sky" /> |
| <style> |
| * { box-sizing: border-box; } |
| |
| t, span { |
| display: inline; |
| } |
| |
| app { |
| display: flex; |
| flex-direction: column; |
| min-height: 100%; |
| background-color: #494949; |
| font-family: "Helvetica", sans-serif; |
| font-size: 16px; |
| color: #2B2B2B; |
| } |
| |
| app-header { |
| display: flex; |
| background: linear-gradient(#3E77B7, #6C98C4); |
| padding: 8px; |
| color: white; |
| border-bottom: 1px solid #3E77B7; |
| } |
| |
| app-title { |
| flex: 1; |
| display: flex; |
| align-items: center; |
| font-size: 22px; |
| margin-left: 8px; |
| } |
| |
| app-menu-button { |
| display: flex; |
| border-radius: 4px; |
| justify-content: center; |
| align-items: center; |
| width: 30px; |
| height: 30px; |
| } |
| |
| .menu-icon { |
| width: 18px; |
| } |
| |
| .menu-icon-inner { |
| width: 14px; |
| } |
| |
| app-scrollable { |
| flex: 1; |
| box-shadow: inset 0px 0px 22px 2px rgba(22, 22, 22, 0.63); |
| overflow: hidden; |
| } |
| |
| app-panel { |
| display: flex; |
| flex-direction: column; |
| background-color: white; |
| } |
| |
| app-panel-header { |
| background-color: #DEDEDE; |
| padding: 8px; |
| display: flex; |
| align-items: center; |
| } |
| |
| app-panel-content { |
| display: flex; |
| } |
| |
| app-toolbar { |
| background-color: #F6F6F6; |
| padding: 0 8px; |
| } |
| |
| app-search-input { |
| background-color: #F6F6F6; |
| padding: 4px; |
| display: flex; |
| align-items: center; |
| font-size: 1.2em; |
| } |
| |
| app-toast { |
| position: absolute; |
| bottom: 32px; |
| right: 32px; |
| max-width: 55%; |
| box-shadow: 0px 0px 12px 2px rgba(22, 22, 22, 0.4); |
| background-image: linear-gradient(#E5D658, #DFCF43); |
| border: 1px solid #AEA477; |
| padding: 6px; |
| border-radius: 2px; |
| display: flex; |
| align-items: center; |
| font-size: 0.8em; |
| overflow: hidden; |
| } |
| |
| app-toast-header { |
| flex-shrink: 0; |
| margin-right: 6px; |
| } |
| |
| app-toast-close-box { |
| position: absolute; |
| top: 3px; |
| right: 3px; |
| width: 1em; |
| overflow: hidden; |
| text-align: center; |
| outline: 1px solid #AEA477; |
| } |
| |
| .tip-icon { |
| font-weight: bold; |
| font-size: 24px; |
| border-radius: 16px; |
| width: 32px; |
| height: 32px; |
| border: 2px solid black; |
| line-height: 30px; |
| text-align: center; |
| } |
| |
| .tip-price { |
| font-weight: bold; |
| } |
| |
| .input-text { |
| margin-left: 8px; |
| } |
| |
| .route-result { |
| margin: 16px 16px 0 16px; |
| outline: 1px solid black; |
| } |
| |
| .route-title { |
| flex: 1; |
| } |
| |
| .airline { |
| border-radius: 2px; |
| align-items: center; |
| padding: 8px; |
| } |
| |
| .airline-name { |
| flex: 1; |
| } |
| |
| .airline-logo-image { |
| width: 50px; |
| flex-shrink: 0; |
| } |
| |
| .airline-best-price { |
| color: #ABB4B6; |
| } |
| |
| .airline-name, |
| .airline-best-price { |
| padding: 8px; |
| } |
| |
| a { |
| text-decoration: none; |
| color: #1155CC; |
| } |
| </style> |
| <app-header> |
| <app-title> |
| <t>Search</t> |
| </app-title> |
| <app-menu-button> |
| <img src="resources/menu-white.png" class="menu-icon"> |
| </app-menu-button> |
| </app-header> |
| <app-toolbar> |
| <app-search-input> |
| <span class="input-icon"> |
| <img src="resources/magnifying-glass.png" style="width: 16px"> |
| </span> |
| <span class="input-text"><t>flights today to dc by price</t></span> |
| </app-search-input> |
| </app-toolbar> |
| <app-scrollable> |
| <app-panel class="route-result"> |
| <app-panel-header> |
| <div class="route-title"> |
| <t>SFO to DCA</t> |
| </div> |
| <app-menu-button> |
| <img src="resources/menu-enabled.png" class="menu-icon-inner"> |
| </app-menu-button> |
| </app-panel-header> |
| <app-panel-content class="airline"> |
| <div class="airline-logo"> |
| <img class="airline-logo-image" src="resources/virgin-america.jpg"> |
| </div> |
| <div class="airline-name"> |
| <t>Virgin America</t> |
| </div> |
| <div class="airline-best-price"> |
| <t><a>$800</a></t> |
| </div> |
| </app-panel-content> |
| <app-panel-content class="airline"> |
| <div class="airline-logo"> |
| <img class="airline-logo-image" src="resources/ba.jpg"> |
| </div> |
| <div class="airline-name"> |
| <t>British Airways</t> |
| </div> |
| <div class="airline-best-price"> |
| <t><a>$700</a></t> |
| </div> |
| </app-panel-content> |
| <app-panel-content class="airline"> |
| <div class="airline-logo"> |
| <img class="airline-logo-image" src="resources/united.jpg"> |
| </div> |
| <div class="airline-name"> |
| <t>United</t> |
| </div> |
| <div class="airline-best-price"> |
| <t><a>$667</a></t> |
| </div> |
| </app-panel-content> |
| <app-panel-content class="airline"> |
| <div class="airline-logo"> |
| <img class="airline-logo-image" src="resources/delta.jpg"> |
| </div> |
| <div class="airline-name"> |
| <t>Delta</t> |
| </div> |
| <div class="airline-best-price"> |
| <t><a>$450</a></t> |
| </div> |
| </app-panel-content> |
| </app-panel> |
| <app-panel class="route-result"> |
| <app-panel-header> |
| <div class="route-title"> |
| <t>SJC to DCA</t> |
| </div> |
| <app-menu-button> |
| <img src="resources/menu-enabled.png" class="menu-icon-inner"> |
| </app-menu-button> |
| </app-panel-header> |
| <app-panel-content class="airline"> |
| <div class="airline-logo"> |
| <img class="airline-logo-image" src="resources/virgin-america.jpg"> |
| </div> |
| <div class="airline-name"> |
| <t>Virgin America</t> |
| </div> |
| <div class="airline-best-price"> |
| <t><a>$1500</a></t> |
| </div> |
| </app-panel-content> |
| <app-panel-content class="airline"> |
| <div class="airline-logo"> |
| <img class="airline-logo-image" src="resources/jetblue.jpg"> |
| </div> |
| <div class="airline-name"> |
| <t>jetBlue</t> |
| </div> |
| <div class="airline-best-price"> |
| <t><a>$650</a></t> |
| </div> |
| </app-panel-content> |
| <app-panel-content class="airline"> |
| <div class="airline-logo"> |
| <img class="airline-logo-image" src="resources/united.jpg"> |
| </div> |
| <div class="airline-name"> |
| <t>United</t> |
| </div> |
| <div class="airline-best-price"> |
| <t><a>$367</a></t> |
| </div> |
| </app-panel-content> |
| </app-panel> |
| </app-scrollable> |
| <app-toast> |
| <app-toast-header> |
| <div class="tip-icon"> |
| <t>?</t> |
| </div> |
| </app-toast-header> |
| <app-toast-content> |
| <t>Flights are <span class="tip-price">$200</span> cheaper tomorrow.</t> |
| </app-toast-content> |
| <app-toast-close-box> |
| X |
| </app-toast-close-box> |
| </app-toast> |
| <script> |
| import "dart:sky"; |
| import "dart:sky.internals" as internals; |
| import "dart:async"; |
| |
| var app; |
| |
| bool imagesLoaded() { |
| var images = window.document.querySelectorAll('img'); |
| for (var i = 0; i < images.length; i++) { |
| if (!images[i].complete) |
| return false; |
| } |
| return true; |
| } |
| |
| void checkImagesLoaded() { |
| if (!imagesLoaded()) { |
| new Timer(new Duration(seconds:10), checkImagesLoaded); |
| return; |
| } |
| runAfterDisplay(() { |
| internals.notifyTestComplete(""); |
| }); |
| } |
| void main() { |
| window.addEventListener("load", (_) { |
| var input = document.querySelector('.input-text'); |
| window.getSelection().selectAllChildren(input.firstChild); |
| checkImagesLoaded(); |
| }); |
| } |
| </script> |
| </app> |