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.

630 lines
18 KiB

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