You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

592 lines
16 KiB

3 years ago
  1. <template>
  2. <div>
  3. <button class="btn btn--primary sidebar-button" @click="showSidebar">
  4. <svg
  5. v-if="!isSidebarVisible"
  6. xmlns="http://www.w3.org/2000/svg"
  7. class="icon icon-tabler icon-tabler-menu"
  8. width="24"
  9. height="24"
  10. viewBox="0 0 24 24"
  11. stroke-width="3"
  12. stroke="#ffffff"
  13. fill="none"
  14. stroke-linecap="round"
  15. stroke-linejoin="round"
  16. >
  17. <path stroke="none" d="M0 0h24v24H0z" fill="none" />
  18. <line x1="4" y1="8" x2="20" y2="8" />
  19. <line x1="4" y1="16" x2="20" y2="16" />
  20. </svg>
  21. <svg
  22. v-if="isSidebarVisible"
  23. xmlns="http://www.w3.org/2000/svg"
  24. class="icon icon-tabler icon-tabler-arrow-bar-to-right"
  25. width="24"
  26. height="24"
  27. viewBox="0 0 24 24"
  28. stroke-width="3"
  29. stroke="#ffffff"
  30. fill="none"
  31. stroke-linecap="round"
  32. stroke-linejoin="round"
  33. >
  34. <path stroke="none" d="M0 0h24v24H0z" fill="none" />
  35. <line x1="14" y1="12" x2="4" y2="12" />
  36. <line x1="14" y1="12" x2="10" y2="16" />
  37. <line x1="14" y1="12" x2="10" y2="8" />
  38. <line x1="20" y1="4" x2="20" y2="20" />
  39. </svg>
  40. </button>
  41. <aside
  42. :class="[
  43. 'sidebar-container',
  44. { 'sidebar-container--hide': !isSidebarVisible },
  45. { 'sidebar-container--show': isSidebarVisible },
  46. ]"
  47. >
  48. <div class="sidebar">
  49. <div class="sidebar-content">
  50. <h1 class="h1--about">
  51. What is FlyLocal Alaska?
  52. </h1>
  53. <div class="img-divider">
  54. <img
  55. class="img--about"
  56. src="https://openmoji.org/data/black/svg/1F3D4.svg"
  57. alt=""
  58. srcset=""
  59. >
  60. <img
  61. class="img--about"
  62. src="https://openmoji.org/data/black/svg/1F4C5.svg"
  63. alt=""
  64. srcset=""
  65. >
  66. <img
  67. class="img--about"
  68. src="https://openmoji.org/data/black/svg/1F601.svg"
  69. alt=""
  70. srcset=""
  71. >
  72. </div>
  73. <p class="text--about">
  74. <strong>FlyLocal-Alaska</strong> is an easy way to view the
  75. schedules for your favorite Alaskan airlines - all in one place.
  76. </p>
  77. <h1 class="h1--about">
  78. Why FlyLocal in Alaska?
  79. </h1>
  80. <div class="img-divider">
  81. <img
  82. class="img--about"
  83. src="https://openmoji.org/data/black/svg/1F6AB.svg"
  84. alt=""
  85. srcset=""
  86. >
  87. <img
  88. class="img--about"
  89. src="https://openmoji.org/data/black/svg/1F697.svg"
  90. alt=""
  91. srcset=""
  92. >
  93. <img
  94. class="img--about"
  95. src="https://openmoji.org/data/black/svg/1F6E3.svg"
  96. alt=""
  97. srcset=""
  98. >
  99. </div>
  100. <p class="text--about">
  101. <strong>80% of Alaskan communities are not connected to the road
  102. system.</strong>
  103. Therefore, they rely heavily on local airlines for transportation.
  104. </p>
  105. <div class="img-divider">
  106. <img
  107. class="img--about"
  108. src="https://openmoji.org/data/black/svg/1F6A3.svg"
  109. alt=""
  110. srcset=""
  111. >
  112. <img
  113. class="img--about"
  114. src="https://openmoji.org/data/black/svg/1F3D5.svg"
  115. alt=""
  116. srcset=""
  117. >
  118. <img
  119. class="img--about"
  120. src="https://openmoji.org/data/black/svg/1F43B.svg"
  121. alt=""
  122. srcset=""
  123. >
  124. </div>
  125. <p class="text--about">
  126. <strong>See new places.</strong> There are ~400 public airports in
  127. Alaska, but only 20 (or 5%) with service from major US carriers.
  128. </p>
  129. <div class="img-divider">
  130. <img
  131. class="img--about"
  132. src="https://openmoji.org/data/black/svg/1F6E9.svg"
  133. alt=""
  134. srcset=""
  135. >
  136. <img
  137. class="img--about"
  138. src="https://openmoji.org/data/black/svg/1F681.svg"
  139. alt=""
  140. srcset=""
  141. >
  142. <img
  143. class="img--about"
  144. src="https://openmoji.org/data/black/svg/1F6F8.svg"
  145. alt=""
  146. srcset=""
  147. >
  148. </div>
  149. <p class="text--about">
  150. Enjoy a completely <strong>unique flying experience</strong>. Have
  151. you ever landed on a lake in a seaplane? Now is your chance to check
  152. it off the bucket-list.
  153. </p>
  154. <h1 class="h1--about">
  155. Up-to-date Travel Info
  156. </h1>
  157. <ul class="about-carriers list-lrg">
  158. <li>
  159. <a href="https://covid19.alaska.gov/travelers/">
  160. <img
  161. class="img--carrier-logo"
  162. :src="require(`@/assets/images/orgs/alaska-travel-info.png`)"
  163. alt="Alaska Travel Info"
  164. >
  165. </a>
  166. </li>
  167. </ul>
  168. <h1 class="h1--about">
  169. Explore Alaska on these great local airlines
  170. </h1>
  171. <ul class="about-carriers">
  172. <li v-for="carrier in carriers" :key="carrier.id">
  173. <a :href="carrier.fields.BookingLink" target="_blank">
  174. <img
  175. class="img--carrier-logo"
  176. :src="require(`@/assets/images/carriers/${carrier.fields.Slug}.png`)"
  177. :alt="carrier.fields.Name"
  178. >
  179. </a>
  180. </li>
  181. </ul>
  182. <h1 class="h1--about">
  183. Proud Member of
  184. </h1>
  185. <ul class="about-carriers list-med">
  186. <li>
  187. <a href="https://alaskaaircarriers.org">
  188. <img
  189. class="img--carrier-logo"
  190. :src="require(`@/assets/images/orgs/aaca.png`)"
  191. alt="Alaska Air Carriers Association"
  192. >
  193. </a>
  194. </li>
  195. <li>
  196. <a href="https://alaskatia.org">
  197. <img
  198. class="img--carrier-logo"
  199. :src="require(`@/assets/images/orgs/alaska-tia.png`)"
  200. alt="Alaska Travel Industry Association"
  201. >
  202. </a>
  203. </li>
  204. </ul>
  205. <h1 class="h1--about">
  206. Featured on
  207. </h1>
  208. <ul class="about-carriers list-med">
  209. <li>
  210. <a href="https://www.1millioncups.com/anchorage/presentations/flylocal-alaska-35304">
  211. <img
  212. class="img--carrier-logo"
  213. :src="require(`@/assets/images/orgs/1-million-cups.png`)"
  214. alt="1 Million Cups"
  215. >
  216. </a>
  217. </li>
  218. <li>
  219. <a href="https://www.travelalaska.com/offers/FlyLocal/Plane-Statewide.aspx">
  220. <img
  221. class="img--carrier-logo"
  222. style="background: black; border-radius: 0.5rem; padding-left: 0.4rem;"
  223. :src="require(`@/assets/images/orgs/travel-alaska.png`)"
  224. alt="Travel Alaska"
  225. >
  226. </a>
  227. </li>
  228. </ul>
  229. <div class="company-footer">
  230. &nbsp; FlyLocal v5.0.2 &nbsp;&nbsp;𐄙&nbsp;&nbsp; ©2021 FlyLocal LLC &nbsp;
  231. </div>
  232. </div>
  233. <ul class="contact">
  234. <li class="contact-item">
  235. <a href="https://twitter.com/fly_local">
  236. <svg
  237. xmlns="http://www.w3.org/2000/svg"
  238. class="icon icon-tabler icon-tabler-brand-twitter"
  239. width="40"
  240. height="40"
  241. viewBox="0 0 24 24"
  242. stroke-width="2"
  243. stroke="#007fff"
  244. fill="none"
  245. stroke-linecap="round"
  246. stroke-linejoin="round"
  247. >
  248. <path stroke="none" d="M0 0h24v24H0z" fill="none" />
  249. <path
  250. d="M22 4.01c-1 .49 -1.98 .689 -3 .99c-1.121 -1.265 -2.783 -1.335 -4.38 -.737s-2.643 2.06 -2.62 3.737v1c-3.245 .083 -6.135 -1.395 -8 -4c0 0 -4.182 7.433 4 11c-1.872 1.247 -3.739 2.088 -6 2c3.308 1.803 6.913 2.423 10.034 1.517c3.58 -1.04 6.522 -3.723 7.651 -7.742a13.84 13.84 0 0 0 .497 -3.753c-.002 -.249 1.51 -2.772 1.818 -4.013z"
  251. />
  252. </svg>
  253. <span>@fly_local</span>
  254. </a>
  255. </li>
  256. <li class="contact-item">
  257. <a href="https://facebook.com/FlyLocalAlaska">
  258. <svg
  259. xmlns="http://www.w3.org/2000/svg"
  260. class="icon icon-tabler icon-tabler-brand-facebook"
  261. width="40"
  262. height="40"
  263. viewBox="0 0 24 24"
  264. stroke-width="2"
  265. stroke="#007fff"
  266. fill="none"
  267. stroke-linecap="round"
  268. stroke-linejoin="round"
  269. >
  270. <path stroke="none" d="M0 0h24v24H0z" fill="none" />
  271. <path
  272. d="M7 10v4h3v7h4v-7h3l1 -4h-4v-2a1 1 0 0 1 1 -1h3v-4h-3a5 5 0 0 0 -5 5v2h-3"
  273. />
  274. </svg>
  275. <span>@fly_local</span>
  276. </a>
  277. </li>
  278. <li class="contact-item">
  279. <a href="https://instagram.com/fly_local">
  280. <svg
  281. xmlns="http://www.w3.org/2000/svg"
  282. class="icon icon-tabler icon-tabler-brand-instagram"
  283. width="40"
  284. height="40"
  285. viewBox="0 0 24 24"
  286. stroke-width="2"
  287. stroke="#007fff"
  288. fill="none"
  289. stroke-linecap="round"
  290. stroke-linejoin="round"
  291. >
  292. <path stroke="none" d="M0 0h24v24H0z" fill="none" />
  293. <rect x="4" y="4" width="16" height="16" rx="4" />
  294. <circle cx="12" cy="12" r="3" />
  295. <line x1="16.5" y1="7.5" x2="16.5" y2="7.501" />
  296. </svg>
  297. <span>@fly_local</span>
  298. </a>
  299. </li>
  300. <li class="contact-item">
  301. <a href="mailto:team@iflylocal.com">
  302. <svg
  303. xmlns="http://www.w3.org/2000/svg"
  304. class="icon icon-tabler icon-tabler-user"
  305. width="40"
  306. height="40"
  307. viewBox="0 0 24 24"
  308. stroke-width="2"
  309. stroke="#007fff"
  310. fill="none"
  311. stroke-linecap="round"
  312. stroke-linejoin="round"
  313. >
  314. <path stroke="none" d="M0 0h24v24H0z" fill="none" />
  315. <circle cx="12" cy="7" r="4" />
  316. <path d="M6 21v-2a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v2" />
  317. </svg>
  318. <span>contact us</span>
  319. </a>
  320. </li>
  321. <li class="contact-item">
  322. <a href="mailto:partners@iflylocal.com">
  323. <svg
  324. xmlns="http://www.w3.org/2000/svg"
  325. class="icon icon-tabler icon-tabler-briefcase"
  326. width="40"
  327. height="40"
  328. viewBox="0 0 24 24"
  329. stroke-width="2"
  330. stroke="#007fff"
  331. fill="none"
  332. stroke-linecap="round"
  333. stroke-linejoin="round"
  334. >
  335. <path stroke="none" d="M0 0h24v24H0z" fill="none" />
  336. <rect x="3" y="7" width="18" height="13" rx="2" />
  337. <path d="M8 7v-2a2 2 0 0 1 2 -2h4a2 2 0 0 1 2 2v2" />
  338. <line x1="12" y1="12" x2="12" y2="12.01" />
  339. <path d="M3 13a20 20 0 0 0 18 0" />
  340. </svg>
  341. <span>partner with us</span>
  342. </a>
  343. </li>
  344. </ul>
  345. </div>
  346. </aside>
  347. <div
  348. :class="[
  349. 'sidebar-blockui',
  350. { 'sidebar-blockui--show': isSidebarVisible },
  351. ]"
  352. />
  353. </div>
  354. </template>
  355. <script>
  356. export default {
  357. data: () => ({
  358. isSidebarVisible: false,
  359. carriers: []
  360. }),
  361. async fetch () {
  362. const filterFormula = 'AND(NOT(Status="Inactive"),FIND("Alaska",Region)>0)'
  363. const sortFormula = '&sort[0][field]=Name&sort[0][direction]=asc'
  364. let offset
  365. let data = []
  366. while (true) {
  367. const offsetParam = offset ? `&offset=${offset}` : ''
  368. const res = await fetch(`https://api.airtable.com/v0/appiQwfVZixRgRICe/Carriers_Alaska?filterByFormula=${filterFormula}${sortFormula}${offsetParam}`, {
  369. method: 'GET',
  370. headers: {
  371. 'Content-Type': 'application/x-www-form-urlencoded',
  372. Authorization: 'Bearer keyJ2ht64ZSN57AG1'
  373. }
  374. })
  375. const json = await res.json()
  376. offset = await json.offset
  377. data = [...data, ...await json.records]
  378. // await console.log(data.length)
  379. if (await !offset) { break } // Were done let's stop this thing
  380. }
  381. this.carriers = [...data]
  382. },
  383. methods: {
  384. showSidebar () {
  385. this.isSidebarVisible = !this.isSidebarVisible
  386. }
  387. }
  388. }
  389. </script>
  390. <style>
  391. :root {
  392. --sidebar-width: 50ch;
  393. }
  394. .sidebar-container {
  395. z-index: 1002;
  396. position: fixed;
  397. top: 0;
  398. right: 0;
  399. display: flex;
  400. justify-content: flex-start;
  401. height: 100vh;
  402. transition: all 0.3s;
  403. pointer-events: none;
  404. }
  405. .sidebar-container.sidebar-container--hide {
  406. transform: translateX(calc(var(--sidebar-width) + 6rem));
  407. }
  408. .sidebar-container.sidebar-container--show {
  409. transform: translateX(0);
  410. }
  411. .sidebar {
  412. background: white;
  413. padding: 3rem 0 3rem 3rem;
  414. border-radius: 3rem 0 0 3rem;
  415. pointer-events: all;
  416. display: flex;
  417. flex-direction: column;
  418. align-items: flex-end;
  419. }
  420. .sidebar-content {
  421. overflow: auto;
  422. max-width: var(--sidebar-width);
  423. height: calc(100vh - 11rem);
  424. padding-right: 3rem;
  425. display: flex;
  426. flex-direction: column;
  427. align-items: center;
  428. }
  429. .img--about {
  430. height: min(3rem, 60px);
  431. display: inline-block;
  432. }
  433. div.img-divider {
  434. display: flex;
  435. justify-content: space-around;
  436. padding: 0 25%;
  437. }
  438. .img--carrier-logo {
  439. max-width: 6rem;
  440. max-height: 6rem;
  441. }
  442. .list-med .img--carrier-logo {
  443. max-width: 9rem;
  444. max-height: 9rem;
  445. }
  446. .list-lrg .img--carrier-logo {
  447. max-width: 15rem;
  448. max-height: 15rem;
  449. }
  450. h1.h1--about {
  451. font-weight: 200;
  452. text-transform: uppercase;
  453. color: #007fff;
  454. font-size: min(2.7rem, 50px);
  455. line-height: 1;
  456. text-align: center;
  457. margin-bottom: 1rem;
  458. }
  459. .text--about {
  460. margin-top: 1rem;
  461. margin-bottom: 1rem;
  462. max-width: 40ch;
  463. font-size: min(1rem, 18px);
  464. }
  465. .text--about:nth-of-type(1),
  466. .text--about:nth-of-type(4) {
  467. margin-bottom: 5rem;
  468. }
  469. .about-carriers {
  470. display: flex;
  471. flex-direction: row;
  472. flex-wrap: wrap;
  473. gap: 2rem;
  474. align-items: center;
  475. justify-content: space-around;
  476. margin-bottom: 5rem;
  477. }
  478. .about-carriers li {
  479. filter: saturate(0%);
  480. transition: 0.3s all;
  481. position: relative;
  482. }
  483. /* .about-carriers li::after {
  484. position: absolute;
  485. top: 0;
  486. right: 0;
  487. bottom: 0;
  488. left: 0;
  489. background-color: red;
  490. content: '';
  491. } */
  492. .about-carriers li:hover {
  493. filter: saturate(100%);
  494. transform: scale(1.05);
  495. }
  496. .sidebar-button {
  497. position: fixed;
  498. top: 1rem;
  499. right: 1rem;
  500. z-index: 1003;
  501. }
  502. .sidebar-blockui {
  503. position: fixed;
  504. top: 0;
  505. right: 0;
  506. bottom: 0;
  507. left: 0;
  508. opacity: 0;
  509. filter: blur(0.5);
  510. background-color: #007fff;
  511. transition: all 0.3s;
  512. pointer-events: none;
  513. z-index: 1001;
  514. }
  515. .sidebar-blockui.sidebar-blockui--show {
  516. opacity: 0.8;
  517. pointer-events: all;
  518. }
  519. ul.contact {
  520. display: flex;
  521. flex-direction: row;
  522. align-items: center;
  523. justify-content: center;
  524. gap: 1rem;
  525. flex-wrap: wrap;
  526. margin: 3rem 3rem 0 0;
  527. max-width: var(--sidebar-width);
  528. }
  529. li.contact-item a span {
  530. color: #007fff;
  531. transition: all 0.3s;
  532. }
  533. ul.contact li.contact-item a {
  534. display: flex;
  535. flex-direction: row;
  536. align-items: center;
  537. transition: all 0.3s;
  538. }
  539. ul.contact li.contact-item a:hover span {
  540. color: #00ca00;
  541. }
  542. ul.contact li.contact-item a svg {
  543. max-height: 2rem;
  544. max-width: 2rem;
  545. stroke-width: 1;
  546. transition: all 0.3s;
  547. }
  548. ul.contact li.contact-item a:hover svg {
  549. stroke: #00ca00;
  550. }
  551. .company-footer {
  552. font-family: monospace;
  553. font-size: 0.8rem;
  554. text-transform: uppercase;
  555. color: gray;
  556. }
  557. </style>