{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./app/javascript/packs/pages/public/carousel.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","currentQuoteId","quotes","id","headline","title","organization","quote","loadQuote","quoteId","toString","quoteElement","document","querySelector","headlineElement","nameElement","titleElement","organizationElement","querySelectorAll","forEach","control","index","getAttribute","classList","remove","add","quoteData","find","innerHTML","init","controlsContainer","previousQuoteButton","nextQuoteButton","addEventListener","event","length","currentQuoteIndex","findIndex","data","createElement","setAttribute","target","appendChild","console","warn","readyState"],"mappings":"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","file":"js/pages/public/carousel-ada46b516daf315b4157.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/packs/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 774);\n","// --------------------------------------------------------------------------------------------------\n// Carousel / Testimonials (display order matches array order)\n// --------------------------------------------------------------------------------------------------\nlet currentQuoteId\nconst quotes = [\n {\n id: '13',\n headline: 'Modern Gate Management at SAT',\n name: 'Amanda Simmons',\n title: 'Assistant Operations Manager',\n organization: 'San Antonio International Airport',\n quote: 'GoApron has been an asset for managing city gates and ramp spot parking at SAT. The platform has streamlined our operations and improved coordination. With real-time updates and greater visibility into gate assignments and aircraft parking availability, we can better accommodate fluctuating schedules and boost efficiency.',\n },\n {\n id: '12',\n headline: 'Streamlining Aircraft Parking at Houston Airport',\n name: 'Jose Escalera ',\n title: 'Airside Operations Field Manager',\n organization: 'George Bush Intercontinental Airport',\n quote: 'GoApron has modernized the way we manage our aircraft parking operations. The platform is intuitive and easy to use, making on-boarding and daily use a breeze. Its robust billing features ensure accuracy and transparency, which our team greatly values. Airlines frequently compliment how efficiently GoApron supports our collaboration, and the customization options allow us to adapt the system to meet our unique operational needs. The customer service team is top-notch, always proactive and attentive to our feedback. GoApron has truly enhanced our efficiency and strengthened our partnerships.',\n },\n {\n id: '11',\n headline: 'Modern Gate Management at STL',\n name: 'Cole Meyer, A.A.E.',\n title: 'Airport Assistant Director
of Airside Operations',\n organization: 'St. Louis Lambert International Airport',\n quote: 'Since implementing GoApron, our gate management has become much more streamlined and efficient. The platform offers real-time insights into gate usage, which not only improves scheduling but has also virtually eliminated revenue leakage from unauthorized or mismanaged gate use. With GoApron, we can track everything accurately, ensuring that all gate usage and remote parking is accounted for. Some additional features allow us to track diversions, manage gate usage during construction and ensure that only aircraft of the correct design group and type are allowed to use our common use gates. Their responsive customer service and customizable features make the system even more valuable. The time and resources we’ve saved, along with the added control over our operations, have made a huge difference for our team.',\n },\n {\n id: '1',\n headline: 'Billing at Birmingham',\n name: 'Korey Campbell',\n title: 'BHM Chief Financial Officer',\n organization: 'Birmingham-Shuttlesworth International Airport',\n quote: 'GoApron has been a wonderful asset for BHM. Now that we have buy-in from the airlines, scheduling and billing for our common use gates and RONs is much easier. The GoApron team is very responsive and has implemented requested changes that help us do our job more efficiently.',\n },\n {\n id: '2',\n headline: 'Scheduling made easy in Savannah',\n name: 'Andy Singhas, C.M.',\n title: 'SAV Senior Operations Manager',\n organization: 'Savannah/Hilton Head International Airport',\n quote: 'Gate planning for construction projects and fluctuating seasonal flight schedules had our heads spinning. GoApron has been a game changer for SAV. Everyone’s schedules, requests, and needs are in one easy-to-use place for all to see. Implementation and support have been superb!',\n },\n {\n id: '3',\n headline: 'Smarter Plane Parking in Wichita',\n name: 'Brian Cowles',\n title: 'Airport Operations Manager',\n organization: 'Wichita Airport Authority',\n quote: 'It’s been a pleasure working with GoApron for several reasons, including their easy to use product, amazing customer service, and continuous product updates. Before GoApron, we would spend countless hours trying to manage our gates and RON spots with our manual process. GoApron automates the data for gate assignments and helps ICT park planes smarter. Working with GoApron has been seamless for our airport and airline partners, we look forward to growing with them.',\n },\n {\n id: '4',\n headline: 'Creating Seamless Solutions in Spokane',\n name: 'Jennifer Keyen',\n title: 'Operations Specialist',\n organization: 'Spokane International Airport',\n quote: 'GoApron offers solutions for otherwise longer procedures as it pertains to gate and ramp management. Reservations are completed in a matter of minutes, from request to approval thereby saving time and doing away with paper trails and possible miscommunication. I have so far enjoyed the ease of using GoApron as almost all the data required is inbuilt and will auto-populate. Working with the administrators has been seamless and I look forward to more developments as we continue to work together.',\n },\n {\n id: '5',\n headline: 'Easing Gate Assignments in Boise',\n name: 'Scott Gwiazda',\n title: 'Airport Operations Manager',\n organization: 'Boise Airport',\n quote: 'GoApron has really organized and streamlined our gate management. It has made assigning the limited gates at the airport easier for all involved. It is very easy to use for both airlines and the airport. The staff at GoApron is extremely helpful for any type of inquiry we present to them. They are also constantly working to add more features to GoApron that will make it easier to use and provide more detailed information.',\n },\n {\n id: '6',\n headline: 'Effortless Adoption in Spokane',\n name: 'Joshua Rykken',\n title: 'Operations Manager',\n organization: 'Trego-Dugan Aviation',\n quote: 'GoApron is an easy to use scheduling tool. The GoApron team has worked side by side with us since the beginning to make sure we got the tool we wanted! We could not be more pleased with the ease and functionality GoApron offers.',\n },\n {\n id: '7',\n headline: 'Meeting Operations Needs in Spokane',\n name: 'Rachel Jordan',\n title: 'Station Manager',\n organization: 'GEG Horizon Air Ops',\n quote: 'It is pretty simple to use and it has worked just fine for Horizon’s aircraft parking needs.',\n },\n {\n id: '8',\n headline: 'MKE Gate Management Goes Digital with GoApron',\n name: 'Ryan Collins',\n title: 'Director of Operations & Maintenance',\n organization: 'Milwaukee Mitchell International Airport',\n quote: 'We took a laborious process and turn it into something very streamlined.',\n },\n {\n id: '9',\n headline: 'Real-Time Business Intelligence at MKE',\n name: 'Brian Dranzik',\n title: 'Airport Director',\n organization: 'Milwaukee Mitchell International Airport',\n quote: 'This technology gives us real-time business intelligence and increased accuracy while reducing staff workload.',\n },\n {\n id: '10',\n headline: 'Improving Relationships in Glacier Park',\n name: 'Ian Mckay',\n title: 'Deputy Director',\n organization: 'Glacier Park International Airport',\n quote: 'We struggled creating a system that would allow us to make the best use of our gates as a recourse that was easy to use and could get the buy-in we needed from our stakeholders. As a highly seasonal airport, our flights are often scheduled within minutes of one another, so it takes the entire team weeks of planning and preparation to keep the operation running smoothly. GoApron has helped us simplify the process of disseminating information and coordinate the use of our gates. This benefit extends beyond the operational component by bringing our stakeholders closer together and improving relationships. I look forward to seeing the product develop and continuing to put it to good use.',\n },\n]\n\nconst loadQuote = (quoteId) => {\n // console.log('')\n // console.log('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')\n // console.log('carousel.js - loadQuote - quoteId: ', quoteId)\n // console.log('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')\n // console.log('')\n\n currentQuoteId = quoteId.toString()\n\n // console.log('')\n // console.log('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')\n // console.log('carousel.js - loadQuote - currentQuoteId: ', currentQuoteId)\n // console.log('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')\n // console.log('')\n\n const quoteElement = document.querySelector('#testimonials blockquote q')\n const headlineElement = document.querySelector('#testimonials header h3')\n const nameElement = document.querySelector('#testimonials .name')\n const titleElement = document.querySelector('#testimonials .title')\n const organizationElement = document.querySelector('#testimonials .organization')\n const controls = document.querySelectorAll('#testimonials #controls .control')\n\n // console.log('')\n // console.log('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')\n // console.log('carousel.js - loadQuote - quoteElement: ', quoteElement)\n // console.log('--------------------------------------')\n // console.log('carousel.js - loadQuote - nameElement: ', nameElement)\n // console.log('--------------------------------------')\n // console.log('carousel.js - loadQuote - titleElement: ', titleElement)\n // console.log('--------------------------------------')\n // console.log('carousel.js - loadQuote - organizationElement: ', organizationElement)\n // console.log('--------------------------------------')\n // console.log('carousel.js - loadQuote - controls: ', controls)\n // console.log('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')\n // console.log('')\n\n // eslint-disable-next-line no-unused-vars\n controls.forEach((control, index) => {\n // console.log('')\n // console.log('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')\n // console.log('carousel.js - loadQuote - control: ', control)\n // console.log('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')\n // console.log('')\n\n if (control.getAttribute('data-quote-id') !== quoteId.toString()) {\n control.classList.remove('active')\n } else {\n control.classList.add('active')\n }\n })\n\n // console.log('')\n // console.log('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')\n // console.log('carousel.js - loadQuote - quotes: ', quotes)\n // console.log('--------------------------------------')\n // console.log('carousel.js - loadQuote - quotes[1].id: ', quotes[1].id)\n // console.log('carousel.js - loadQuote - quoteId: ', quoteId)\n // console.log('--------------------------------------')\n // console.log('carousel.js - loadQuote - (quotes[1].id.toString() === quoteId.toString()): ', (quotes[1].id.toString() === quoteId.toString()))\n // console.log('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')\n // console.log('')\n\n const quoteData = quotes.find(quote => quote.id.toString() === quoteId.toString())\n // console.log('')\n // console.log('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')\n // console.log('carousel.js - loadQuote - quoteData: ', quoteData)\n // console.log('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')\n // console.log('')\n\n quoteElement.innerHTML = quoteData.quote\n headlineElement.innerHTML = quoteData.headline\n nameElement.innerHTML = quoteData.name\n titleElement.innerHTML = quoteData.title\n organizationElement.innerHTML = quoteData.organization\n}\n\n// --------------------------------------------------------------------------------------------------\n// \"Ready\"\n// --------------------------------------------------------------------------------------------------\n// eslint-disable-next-line no-unused-vars\nconst init = (event = null) => {\n // console.log('carousel.js - init')\n\n const quotesContainer = document.querySelector('#testimonials')\n // const randomQuote = Math.round(Math.random() * 5 + 1)\n\n // console.log('')\n // console.log('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')\n // console.log('carousel.js - init - quotesContainer: ', quotesContainer)\n // // console.log('carousel.js - init - randomQuote: ', randomQuote)\n // console.log('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')\n // console.log('')\n\n if (quotesContainer) {\n const controlsContainer = document.querySelector('#testimonials #controls #control-btn-container')\n const previousQuoteButton = document.querySelector('#testimonials #controls #prev-quote')\n const nextQuoteButton = document.querySelector('#testimonials #controls #next-quote')\n\n // console.log('')\n // console.log('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')\n // console.log('carousel.js - init - previousQuoteButton: ', previousQuoteButton)\n // console.log('carousel.js - init - nextQuoteButton: ', nextQuoteButton)\n // console.log('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')\n // console.log('')\n\n // eslint-disable-next-line no-unused-vars\n previousQuoteButton.addEventListener('click', (event) => {\n if (currentQuoteId === quotes[0].id) {\n loadQuote(quotes[quotes.length - 1].id)\n } else {\n const currentQuoteIndex = quotes.findIndex(quoteData => quoteData.id === currentQuoteId)\n // console.log('')\n // console.log('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')\n // console.log('carousel.js - DOMContentLoaded - previousQuoteButton - currentQuoteIndex: ', currentQuoteIndex)\n // console.log('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')\n // console.log('')\n\n loadQuote(quotes[currentQuoteIndex - 1].id)\n }\n })\n\n // eslint-disable-next-line no-unused-vars\n nextQuoteButton.addEventListener('click', (event) => {\n if (currentQuoteId === quotes[quotes.length - 1].id) {\n loadQuote(quotes[0].id)\n } else {\n const currentQuoteIndex = quotes.findIndex(quoteData => quoteData.id === currentQuoteId)\n // console.log('')\n // console.log('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')\n // console.log('carousel.js - DOMContentLoaded - nextQuoteButton - currentQuoteIndex: ', currentQuoteIndex)\n // console.log('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')\n // console.log('')\n\n loadQuote(quotes[currentQuoteIndex + 1].id)\n }\n })\n\n // console.log('')\n // console.log('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')\n // console.log('carousel.js - init - quotes: ', quotes)\n // console.log('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')\n // console.log('')\n\n quotes.forEach((data, index) => {\n // console.log('')\n // console.log('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')\n // console.log('carousel.js - init - quotes.forEach - data: ', data)\n // console.log('carousel.js - init - quotes.forEach - index: ', index)\n // console.log('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')\n // console.log('')\n\n const control = document.createElement('div')\n control.setAttribute('data-quote-id', data.id)\n control.addEventListener('click', (event) => {\n const quoteId = event.target.getAttribute('data-quote-id')\n // console.log('quoteId: ', quoteId)\n\n loadQuote(quoteId)\n })\n\n // console.log('')\n // console.log('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')\n // console.log('carousel.js - init - quotes.forEach - control: ', control)\n // console.log('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')\n // console.log('')\n\n if (index === 0) {\n control.setAttribute('class', 'control active')\n loadQuote(data.id)\n } else {\n control.setAttribute('class', 'control')\n }\n\n // console.log('')\n // console.log('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')\n // console.log('carousel.js - init - quotes.forEach - control (FINAL): ', control)\n // console.log('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')\n // console.log('')\n\n controlsContainer.appendChild(control)\n })\n } else {\n console.warn('carousel.js - `quotesContainer` could not be found.')\n }\n}\n\nif (document.readyState !== 'loading') {\n init()\n} else {\n document.addEventListener('DOMContentLoaded', init)\n}\n"],"sourceRoot":""}