1"use strict";(self.webpackChunkone_web=self.webpackChunkone_web||[]).push([[7614],{10427:(t,e,s)=>{s.d(e,{Ay:()=>u,nU:()=>p});var i=s(71413),a=s(52706),r=s(30555),l=s(24634),o=s(56365),n=s(65585),d=(s(5366),Object.defineProperty),c=Object.getOwnPropertyDescriptor,h=(t,e,s,i)=>{for(var a,r=i>1?void 0:i?c(e,s):e,l=t.length-1;l>=0;l--)(a=t[l])&&(r=(i?a(e,s,r):a(r))||r);return i&&r&&d(e,s,r),r},p=(t=>(t.CENTER="CENTER",t.LEFT="LEFT",t.RIGHT="RIGHT",t))(p||{});let b=class extends i.WF{constructor(){super(...arguments),this.splash=!1,this.expanded=!1,this.forceExpanded=!1,this.noAutoClose=!1,this._disable=!1,this.onBodyClick=t=>{const e=this.renderRoot.querySelector("#toggler");(0,n.A)(this.noAutoClose?this:e,t)||(this.expanded=!1)},this.onBodyEsc=t=>{"Escape"===t.key&&(this.expanded=!1)}}get disable(){return this._disable}set disable(t){const e=this._disable;this._disable=t,this.expanded=!1,this.requestUpdate("disable",e)}static get styles(){return[o.A,l.A,i.AH` 2 :host { 3 position: relative; 4 display: flex; 5 } 6 .btn.btn-link { 7 margin-top: var(--gap); 8 } 9 .menu { 10 text-align: end; 11 } 12 .menu.splash-menu { 13 text-align: start; 14 width: 375px; 15 } 16 .menu.splash-menu { 17 color: rgb(var(--darker)); 18 background-color: #fff; 19 font-size: var(--smaller); 20 } 21 `]}render(){return i.qy` 22 <popper-container 23 @click="${this.toggleExpanded}" 24 is-flip 25 ?is-visible=${this.expanded||this.forceExpanded} 26 style=${this.splash?"width: 100%; height: 100%":""} 27 > 28 <div 29 slot="toggler" 30 id="toggler" 31 style=${this.splash?"width: 100%; height: 100%":""} 32 class=${(0,r.H)({active:this.expanded||this.forceExpanded})} 33 > 34 <slot name="toggler"></slot> 35 </div> 36 <div 37 class="menu ${this.splash?"splash-menu":""}" 38 role="menu" 39 part="menu" 40 aria-hidden=${!this.expanded} 41 > 42 <slot id="options"></slot> 43 ${this.noAutoClose?i.qy`<button id="close-dropdown" class="btn btn-link">Close</button>`:null} 44 </div> 45 </popper-container> 46 `}updated(){(this.expanded||this.forceExpanded)&&this.dispatchEvent(new CustomEvent("show")),this.expanded||this.forceExpanded||this.dispatchEvent(new CustomEvent("hide"))}toggleExpanded(t){const e=this.renderRoot.querySelector("#close-dropdown");(0,n.A)(e,t)?this.expanded=!1:this.disable||this.noAutoClose&&this.expanded||(this.expanded=!this.expanded)}connectedCallback(){super.connectedCallback(),document.addEventListener("click",this.onBodyClick),document.addEventListener("keyup",this.onBodyEsc)}disconnectedCallback(){document.removeEventListener("click",this.onBodyClick),document.removeEventListener("keyup",this.onBodyEsc),super.disconnectedCallback()}};h([(0,a.MZ)({type:Boolean})],b.prototype,"splash",2),h([(0,a.MZ)({type:Boolean,reflect:!0})],b.prototype,"expanded",2),h([(0,a.MZ)({type:Boolean,reflect:!0,attribute:"force-expanded"})],b.prototype,"forceExpanded",2),h([(0,a.MZ)({type:Boolean,reflect:!0,attribute:"no-auto-close"})],b.prototype,"noAutoClose",2),h([(0,a.MZ)({type:Boolean})],b.prototype,"disable",1),b=h([(0,a.EM)("dropdown-menu")],b);const u=b},97335:(t,e,s)=>{s.r(e),s.d(e,{default:()=>k});var i=s(92943),a=s(71413),r=s(52706),l=s(30555),o=s(80480),n=s(56599),d=s(35135),c=s(25461),h=s(5218),p=s(80027),b=s(52850),u=s(4983),v=s(73502),g=s(10514),y=s(21693),f=s(80662),w=s(32701),m=s(31376),$=s(24634),A=s(30842),L=s(69199),E=(s(15245),s(5233),s(4169),Object.defineProperty),S=Object.getOwnPropertyDescriptor,_=(t,e,s,i)=>{for(var a,r=i>1?void 0:i?S(e,s):e,l=t.length-1;l>=0;l--)(a=t[l])&&(r=(i?a(e,s,r):a(r))||r);return i&&r&&E(e,s,r),r};let k=class extends((0,n.N)(g.A)(L.A)){constructor(){super(...arguments),this.listType=b.OXP.WEATHER_STATIONS,this.stationListBodyRowWeather=t=>Object.keys(p.Bw).map((e=>a.qy` 47 <div 48 role="cell" 49 class=${(0,l.H)({"list-table_cell":!0,"alert-state":this.getAlertState(e,t.weatherStationFields)})} 50 > 51 <span class="small-label"><strong>${v.d[e]} </strong></span 52 >${this.getWeatherDisplay(e,t.weatherStationFields)} 53 </div> 54 `)),this.stationListBodyRow=t=>a.qy` 55 <div 56 class="list-table-row" 57 role="row" 58 style=${(0,o.W)({"--row-color":t.color||"rgb(var(--concrete))"})} 59 > 60 <div role="cell" class="list-table_cell"> 61 <div class=" list-table-row_title-cell"> 62 <img 63 src=${(0,d.J)(t.icon??void 0)} 64 alt="Weather Station ${t.status===u.LV.Alert?"Alert":""}" 65 class="list-table_icon" 66 /> 67 ${t.title} 68 ${t.status===u.LV.Alert||t.status===u.LV.AlertFreezing?a.qy`<div class="alert-tag">Alert</div>`:a.qy``}
69 </div> 70 <view-on-map-link .href="#${y.UG.MAP}/${t.uri}"></view-on-map-link> 71 </div> 72 <div role="cell" class="list-table_cell "> 73 <span class="small-label"><strong>Roadway: </strong></span>${t.location?.routeDesignator||"-"} 74 </div> 75 <!-- here --> 76 ${this.stationListBodyRowWeather(t)} 77 <div role="cell" class="list-table_cell list-table-row_title"> 78 <span class="small-label"><strong>Last Updated: </strong></span> 79 <absolute-time 80 timestamp=${(0,d.J)(t.lastUpdated?.timestamp)} 81 timezone=${(0,d.J)(t.lastUpdated?.timezone)} 82 shortDate 83 ignore 84 ></absolute-time> 85 </div> 86 </div> 87 `,this.quantities=t=>{if(t)return a.qy`${t.label}: ${t.value}`}}static get styles(){const t=`0.5rem 2.3fr repeat(${Object.keys(v.d).length-4}, 1fr)`;return[w.A,m.A,$.A,A.A,a.AH` 88 /* for android upper and lower bars */ 89 :host { 90 display: block; 91 background-color: #fff; 92 box-shadow: var(--shadow-sm); 93 border-top: var(--border-width) solid rgb(var(--silver)); 94 border-bottom: var(--border-width) solid rgb(var(--silver)); 95 } 96 97 .alert-tag { 98 border: 1px solid rgb(var(--alert)); 99 color: rgba(var(--alert), 1); 100 background-color: rgba(var(--alert), 0.01); 101 font-size: var(--smallest); 102 padding: 1px 3px 1px 3px; 103 margin-left: calc(var(--gap) / 4); 104 } 105 106 .alert-state { 107 color: rgb(var(--alert)); 108 } 109 110 .list-table-row_title { 111 grid-column: 2 / 4; 112 } 113 114 @media (min-width: ${(0,a.iz)(b.EA.DESKTOP)}) { 115 .list-table-row { 116 grid-template-columns: ${(0,a.iz)(t)}; 117 } 118 119 .list-table-row_title { 120 grid-column: auto; 121 } 122 123 .alert-tag { 124 margin: calc(var(--gap) / 2) 0; 125 } 126 } 127 128 @media (min-width: ${(0,a.iz)(b.EA.DESKTOP_XL)}) { 129 .alert-tag { 130 margin-left: 5px; 131 } 132 } 133 `]}onTableHeaderClick(t){return()=>this.updateSortType(t)}render(){return a.qy` 134 <h1 class="list-page-header"> 135 ${i.zx.find((({slug:t})=>t===this.page))?.label} 136 </h1> 137 <div id="scroll-sentinel"></div> 138 <div class="controls">${this.renderControls()}</div> 139 <div class="list-table" role="table" data-test-table> 140 <div 141 role="rowgroup" 142 class=${(0,l.H)({"list-table-header":!0,"sticky-header":!0,"sticky-header--shadow":this.isHeaderStuck})} 143 > 144 ${this.stationListHeader()} 145 ${this.isOffline||this.error?.type!==b.i65.INTERNAL_SERVER_ERROR?void 0:a.qy` 146 <div role="row" data-test-table-error> 147 <div role="cell" aria-rowspan="6" class="notification notification--error"> 148 ${(0,h._)(p.s1.error.application)} 149 </div> 150 </div> 151 `} 152 ${this.isOffline?a.qy` 153 <div role="row" data-test-table-network> 154 <div role="cell" aria-rowspan="6" class="notification notification--warning"> 155 ${(0,h._)(p.s1.error.network)} 156 </div> 157 </div> 158 `:void 0} 159 </div> 160 <div role="rowgroup"> 161 ${this.error||this.weatherStationList&&0!==this.weatherStationList.length?void 0:a.qy` 162 <div role="row"> 163 <div role="cell" aria-rowspan="6" class="notification notification--warning"> 164 ${this.renderNoData()} 165 </div> 166 </div> 167 `} 168 ${this.weatherStationList?a.qy` ${this.weatherStationList.map(this.stationListBodyRow)} `:void 0} 169 </div> 170 </div> 171 <span class="visually-hidden" aria-live="polite"> 172 ${L.A.ariaLive(k.tableDescription,this.sortType,this.sortDirection)} 173 </span> 174 `}stationListWeatherHeaders(){return Object.keys(p.Bw).map((t=>{const e=t;return a.qy`<div 175 class="list-table_header list-table_header--sortable" 176 role="columnheader" 177 aria-sort=${this.ariaSortDirection(e)} 178 title=${v.d[e]} 179 > 180 <button class="btn list-table_hbtn" @click=${this.onTableHeaderClick(e)}> 181 <span class="list-table_htxt">${v.d[e]}</span> 182 ${a.qy`${this.renderSortArrow(t,this.sortType)}`} 183 </button> 184 </div>`}))}stationListHeader(){return a.qy` 185 <div role="row" class="list-table-row list-table-headers"> 186 <div 187 class="list-table_header list-table_header--sortable" 188 role="columnheader" 189 aria-sort=${this.ariaSortDirection("NAME")} 190 title=${v.d.NAME} 191 > 192 <button class="btn list-table_hbtn" @click=${this.onTableHeaderClick("NAME")}> 193 <span class="list-table_htxt">${v.d.NAME}</span> 194 ${a.qy`${this.renderSortArrow("NAME",this.sortType)}`} 195 </button> 196 </div> 197 <div 198 class="list-table_header list-table_header--sortable" 199 role="columnheader" 200 aria-sort=${this.ariaSortDirection("ROADWAY")} 201 title=${v.d.ROADWAY} 202 > 203 <button class="btn list-table_hbtn" @click=${this.onTableHeaderClick("ROADWAY")}> 204 <span class="list-table_htxt">${v.d.ROADWAY}</span> 205 ${a.qy`${this.renderSortArrow("ROADWAY",this.sortType)}`} 206 </button> 207 </div> 208 ${this.stationListWeatherHeaders()} 209 <div 210 class="list-table_header list-table_header--sortable" 211 role="columnheader" 212 aria-sort=${this.ariaSortDirection("LAST_UPDATED")} 213 title=${v.d.LAST_UPDATED} 214 > 215 <button class="btn list-table_hbtn" @click=${this.onTableHeaderClick("LAST_UPDATED")}> 216 <span class="list-table_htxt">${v.d.LAST_UPDATED}</span> 217 ${a.qy`${this.renderSortArrow("LAST_UPDATED",this.sortType)}`} 218 </button> 219 </div> 220 </div> 221 `}renderFilters(){return a.qy` 222 <ow-multi-select 223 name="roadway" 224 label="Roadway" 225 class="form-element filter-select" 226 .value=${(0,c.V)(this.routes)} 227 .categorizedChoices=${this.getMultiSelectRoadwayChoices()} 228 ?loading=${!this.allRoutes} 229 @change=${this.filterPredRoutes} 230 ></ow-multi-select> 231 <ow-multi-select 232 name="area" 233 label="Predefined area" 234 class="form-element filter-select" 235 .value=${(0,c.V)(this.areas)} 236 .categorizedChoices=${this.getAllPredefinedAreaChoices()} 237 ?loading=${!this.allPredefinedAreas} 238 @change=${this.filterArea} 239 ></ow-multi-select> 240 <ow-multi-select 241 name="status" 242 label="Status" 243 class="form-element filter-select" 244 .value=${(0,c.V)(this.classificationsOrSlugs)} 245 .categorizedChoices=${[{choices:[{id:b.f2p.RWIS_NORMAL,label:"Weather Stations w/ No Alerts"},{id:b.f2p.RWIS_ALERT,label:"Weather Stations w/ Alerts"}]}]} 246 @change=${this.filterType} 247 ></ow-multi-select> 248 `}getAlertState(t,e){let s=!1;return e&&e[t]&&e[t].inAlertState&&(s=!0),s}getWeatherDisplay(t,e){let s="N/A";if(e&&e[t]){const{displayValue:i}=e[t];i&&(s=i)}return s}stateChanged(t){this.allPredefinedAreas=t.filterList.allPredefinedAreas,this.allRoutes=t.filterList.allRoutes,this.sortDirection=t.filterList.sortDirection,this.sortType=t.filterList.sortType,this.freeSearchTerm=t.filterList.freeSearchTerm,this.routes=t.filterList.routes,this.areas=t.filterList.areas,this.classificationsOrSlugs=t.filterList.classificationsOrSlugs,this.page=t.routingList.page,this.pageRecordLimit=t.filterList.pageRecordLimit,this.currentPage=t.filterList.currentPage,this.totalRecords=t.filterList.totalRecords,this.isLoading=t.weatherStationList.isLoading,this.weatherStationList=(0,f.zE)(t),this.modalView=t.modalList.modalView,this.isOffline=t.layoutList.isOffline,this.error=t.weatherStationList.error}};k.tableDescription="Weather Stations",_([(0,r.MZ)({type:Array})],k.prototype,"weatherStationList",2),k=_([(0,r.EM)("list-weather-stations")],k)},65585:(t,e,s)=>{s.d(e,{A:()=>i});const i=(t,e)=>e.composedPath?!!e.composedPath().find((e=>t===e)):!!t.contains(e.target)}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.