{"version":3,"file":"js/application-f5ea34e2a6d19934fb28.js","mappings":"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","sources":["webpack:///./app/javascript/controllers/ sync _controller\\.js$","webpack:///./app/javascript/controllers/mobile_menu_button_controller.js","webpack:///./app/javascript/src/utm_passthrough.js","webpack:///./app/javascript/controllers/jobs_controller.js","webpack:///./app/javascript/controllers/index.js","webpack:///./app/javascript/controllers/hire_us_form_iframe_controller.js","webpack:///./app/javascript/controllers/application_header_controller.js","webpack:///./app/javascript/controllers/case_study_link_cards_controller.js","webpack:///./app/javascript/controllers/twitch_controller.js","webpack:///./app/javascript/controllers/book_toc_controller.js","webpack:///./app/javascript/controllers/dropdown_menu_controller.js"],"sourcesContent":["var map = {\n\t\"./application_header_controller.js\": 794,\n\t\"./book_toc_controller.js\": 948,\n\t\"./case_study_link_cards_controller.js\": 913,\n\t\"./dropdown_menu_controller.js\": 963,\n\t\"./hire_us_form_iframe_controller.js\": 657,\n\t\"./jobs_controller.js\": 512,\n\t\"./mobile_menu_button_controller.js\": 171,\n\t\"./twitch_controller.js\": 933,\n\t\"controllers/application_header_controller.js\": 794,\n\t\"controllers/book_toc_controller.js\": 948,\n\t\"controllers/case_study_link_cards_controller.js\": 913,\n\t\"controllers/dropdown_menu_controller.js\": 963,\n\t\"controllers/hire_us_form_iframe_controller.js\": 657,\n\t\"controllers/jobs_controller.js\": 512,\n\t\"controllers/mobile_menu_button_controller.js\": 171,\n\t\"controllers/twitch_controller.js\": 933\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 124;","import { Controller } from 'stimulus';\n\nexport default class extends Controller {\n toggleState(event) {\n event.preventDefault();\n\n const expanded = this.element.getAttribute('aria-expanded');\n const toggledState = (expanded === 'true') ? 'false' : 'true';\n this.element.setAttribute('aria-expanded', toggledState);\n }\n}\n","(function () {\n const params = new URLSearchParams(window.location.search);\n const utm_params = [];\n params.forEach(function (value, key) {\n if (key.startsWith('utm_')) {\n utm_params.push(key + '=' + value)\n }\n })\n utm_search = utm_params.join('&');\n if (!!utm_search) {\n document.querySelectorAll('a[href]').forEach(function (ele, idx) {\n if (ele.href.indexOf('/') === 0 || ele.href.indexOf(location.host) !== -1) {\n ele.href = ele.href + (ele.href.indexOf('?') === -1 ? '?' : '&') + utm_search;\n }\n });\n }\n})();\n","import { Controller } from 'stimulus';\n\nexport default class extends Controller {\n static targets = [\"filter\", \"job\", \"none\"]\n\n connect() {\n }\n\n markSelected(event) {\n var filter = event.target\n filter.parentNode.classList.toggle(\"selected\", filter.checked)\n }\n\n filter() {\n var visibleJobs = []\n if (this.filterTargets.some((filter) => filter.checked)) {\n this.jobTargets.forEach((job) => {\n this.filterTargets.forEach((filter) => {\n if (filter.checked) {\n if (job.dataset[filter.dataset.type] == filter.dataset.value) {\n visibleJobs.push(job)\n }\n }\n })\n })\n } else {\n visibleJobs = this.jobTargets\n }\n\n this.jobTargets.forEach((job) => {\n job.classList.add(\"job--hidden\")\n })\n visibleJobs.forEach((job) => {\n job.classList.remove(\"job--hidden\")\n })\n this.noneTargets.forEach((none) => {\n if (!none.parentNode.querySelector(\"ul li:not(.job--hidden)\")) {\n none.classList.remove(\"job--hidden\")\n } else {\n none.classList.add(\"job--hidden\")\n }\n })\n }\n}\n","// Load all the controllers within this directory and all subdirectories.\n// Controller files must be named *_controller.js.\n\nimport { Application } from 'stimulus';\nimport { definitionsFromContext } from 'stimulus/webpack-helpers';\n\nconst application = Application.start();\nconst context = require.context('controllers', true, /_controller\\.js$/);\napplication.load(definitionsFromContext(context));\n","import { Controller } from 'stimulus';\n\nexport default class extends Controller {\n connect() {\n const iframe = this.element;\n\n // listen for message and set iframe height\n window.addEventListener('message', (event) => {\n iframe.style.height = `${event.data.height}px`;\n });\n\n // listen for window resize events and trigger new message from iframe\n window.addEventListener('resize', () => {\n iframe.contentWindow.postMessage('resize', '*');\n });\n }\n}\n","import { Controller } from 'stimulus';\n\nexport default class extends Controller {\n toggleMobileMenu(event) {\n event.preventDefault();\n\n this.element.classList.toggle('mobile-menu');\n if(this.element.classList.contains('mobile-menu') ){\n document.body.style.overflow = 'hidden';\n } else {\n document.body.style.overflow = 'auto';\n }\n }\n\n openSearch(event) {\n event.preventDefault();\n document.querySelector('.st-search-show-outputs').click();\n }\n}\n","import { Controller } from \"stimulus\";\n\nexport default class extends Controller {\n static targets = [\n \"filterBtn\",\n \"secondaryFilter\",\n \"industryFilters\",\n \"projectAttributeFilters\",\n \"secondaryFilterBtn\",\n \"case\",\n \"showMore\",\n \"none\",\n ];\n\n static values = {\n selectedIndustries: { type: Array, default: [] },\n selectedProjectAttributes: { type: Array, default: [] },\n showMore: Boolean,\n };\n\n connect() {\n this.currentlySelected = \"showAllBtn\";\n const showAllInput = document.getElementById(\"showAllBtn\");\n if (showAllInput) {\n showAllInput.checked = true;\n const showAllLabel = document.querySelector(`label[for=\"showAllBtn\"]`);\n if (showAllLabel) {\n showAllLabel.classList.add(\"active\");\n }\n }\n this.filter();\n }\n\n toggle(event) {\n const input = document.getElementById(event.target.getAttribute(\"for\"));\n\n if (this.currentlySelected === input.id) {\n event.preventDefault();\n input.checked = false;\n this.currentlySelected = null;\n event.target.classList.remove(\"active\");\n this.secondaryFilterTargets.forEach((filters) => {\n filters.classList.remove(\"show\");\n });\n this.selectedIndustriesValue = [];\n this.selectedProjectAttributesValue = [];\n this.showMoreValue = false;\n this.filter();\n return;\n }\n\n this.filterBtnTargets.forEach((btn) => {\n btn.classList.remove(\"active\");\n });\n\n event.target.classList.add(\"active\");\n this.currentlySelected = input.id;\n\n if (input.id === \"showAllBtn\") {\n this.industryFiltersTarget.classList.remove(\"show\");\n this.projectAttributeFiltersTarget.classList.remove(\"show\");\n this.selectedIndustriesValue = [];\n this.selectedProjectAttributesValue = [];\n this.showMoreValue = false;\n this.filter();\n } else if (input.id === \"industryBtn\") {\n this.industryFiltersTarget.classList.add(\"show\");\n this.projectAttributeFiltersTarget.classList.remove(\"show\");\n } else if (input.id === \"projectAttributeBtn\") {\n this.industryFiltersTarget.classList.remove(\"show\");\n this.projectAttributeFiltersTarget.classList.add(\"show\");\n }\n }\n\n toggleSecondary(event) {\n const button = event.target;\n const filterValue = button.textContent.trim();\n\n button.classList.toggle(\"active\");\n\n if (this.currentlySelected === \"industryBtn\") {\n if (button.classList.contains(\"active\")) {\n this.selectedIndustriesValue = [\n ...this.selectedIndustriesValue,\n filterValue,\n ];\n } else {\n this.selectedIndustriesValue = this.selectedIndustriesValue.filter(\n (v) => v !== filterValue\n );\n }\n } else if (this.currentlySelected === \"projectAttributeBtn\") {\n if (button.classList.contains(\"active\")) {\n this.selectedProjectAttributesValue = [\n ...this.selectedProjectAttributesValue,\n filterValue,\n ];\n } else {\n this.selectedProjectAttributesValue =\n this.selectedProjectAttributesValue.filter((v) => v !== filterValue);\n }\n }\n\n this.showMoreValue = false;\n this.filter();\n }\n\n showMoreCaseStudies() {\n this.showMoreValue = true;\n this.filter();\n }\n\n filter() {\n const hasIndustryFilters = this.selectedIndustriesValue.length > 0;\n const hasProjectAttributeFilters =\n this.selectedProjectAttributesValue.length > 0;\n\n let visibleCases = [];\n\n this.caseTargets.forEach((caseStudy) => {\n const industry = caseStudy.dataset.industry;\n const projectAttributes = caseStudy.dataset.projectAttributes\n .split(\";\")\n .map((attr) => attr.trim());\n\n let showCase = true;\n\n if (hasIndustryFilters) {\n showCase = showCase && this.selectedIndustriesValue.includes(industry);\n }\n\n if (hasProjectAttributeFilters) {\n showCase =\n showCase &&\n this.selectedProjectAttributesValue.some((attr) =>\n projectAttributes.includes(attr)\n );\n }\n\n if (!hasIndustryFilters && !hasProjectAttributeFilters) {\n showCase = true;\n }\n\n if (showCase) {\n visibleCases.push(caseStudy);\n }\n });\n\n this.caseTargets.forEach((caseStudy) => {\n caseStudy.classList.add(\"case--hidden\");\n });\n\n if (visibleCases.length > 0) {\n this.noneTargets.forEach((none) => none.classList.add(\"case--hidden\"));\n } else {\n this.noneTargets.forEach((none) => none.classList.remove(\"case--hidden\"));\n }\n\n const firstCases = visibleCases.slice(0, 5);\n visibleCases.splice(0, 5);\n\n firstCases.forEach((caseStudy) => {\n caseStudy.classList.remove(\"case--hidden\");\n });\n\n if (visibleCases.length > 0 && !this.showMoreValue) {\n this.showMoreTargets.forEach((showMore) =>\n showMore.classList.remove(\"case--hidden\")\n );\n } else {\n this.showMoreTargets.forEach((showMore) =>\n showMore.classList.add(\"case--hidden\")\n );\n }\n\n if (this.showMoreValue) {\n visibleCases.forEach((caseStudy) => {\n caseStudy.classList.remove(\"case--hidden\");\n });\n }\n }\n}\n","import { Controller } from 'stimulus'\n\nexport default class extends Controller {\n static targets = ['twitchButton', 'twitchButtonMobile', 'iconButton']\n mobile_breakpoint = 1120;\n\n connect() {\n const twitchScript = document.createElement('script')\n twitchScript.async = true\n twitchScript.defer = true\n document.body.appendChild(twitchScript)\n twitchScript.addEventListener('load', () => {\n setTimeout(() => {\n this.initializeTwitchPlayer()\n }, 100)\n })\n twitchScript.src = 'https://player.twitch.tv/js/embed/v1.js'\n }\n\n initializeTwitchPlayer() {\n this.player = new Twitch.Player('twitch-player', {\n channel: 'thoughtbot',\n width: '100%',\n height: '100%',\n autoplay: false,\n })\n\n window.addEventListener('resize', this.handleOnline.bind(this))\n this.player.addEventListener(Twitch.Player.READY, this.initiate.bind(this));\n }\n\n initiate() {\n this.addPlayerEventListeners(this.player);\n }\n\n addPlayerEventListeners(player) {\n player.addEventListener(Twitch.Player.ONLINE, () => {\n this.isChannelLive = true;\n this.handleOnline();\n });\n player.addEventListener(Twitch.Player.OFFLINE, () => {\n this.isChannelLive = false;\n this.handleOffline();\n });\n }\n\n handleOnline() {\n if (!this.isChannelLive) return;\n\n if (window.innerWidth < this.mobile_breakpoint) {\n this.twitchButtonMobileTarget.style.display = 'block';\n this.twitchButtonTarget.style.display = 'none';\n this.iconButtonTarget.classList.add('live');\n } else {\n this.twitchButtonTarget.style.display = 'block';\n this.twitchButtonMobileTarget.style.display = 'none';\n this.iconButtonTarget.classList.remove('live');\n }\n }\n\n handleOffline() {\n this.twitchButtonTarget.style.display = 'none';\n this.twitchButtonMobileTarget.style.display = 'none';\n }\n}\n","import { Controller } from 'stimulus';\n\nexport default class extends Controller {\n toggle(event) {\n event.preventDefault();\n\n this.element.classList.toggle('expanded');\n }\n}\n","import { Controller } from \"stimulus\";\n\nexport default class extends Controller {\n static targets = [\"dropdownButton\", \"resources\", \"services\"];\n toggleDropdownMobileClose(event) {\n event.target.closest(\".dropdown-menu\").classList.toggle(\"dropdown-menu\");\n this.dropdownButtonTargets.forEach((element) => {\n element.classList.remove(\"rotate\");\n element.setAttribute(\"aria-expanded\", \"false\");\n });\n }\n toggleState(event) {\n this.dropdownButtonTargets.forEach((element) => {\n if (element === event.target.closest(\".application-nav__link-button\")) {\n element.classList.toggle(\"rotate\");\n const expanded = element.getAttribute(\"aria-expanded\");\n const toggledState = expanded === \"true\" ? \"false\" : \"true\";\n element.setAttribute(\"aria-expanded\", toggledState);\n } else {\n element.classList.remove(\"rotate\");\n element.setAttribute(\"aria-expanded\", \"false\");\n }\n });\n }\n toggleDropdown(event) {\n if (\n event.target.closest(\".application-nav__link-button\").id === \"services\"\n ) {\n this.servicesTarget.classList.toggle(\"dropdown-menu\");\n this.servicesTarget.focus();\n this.resourcesTarget.classList.remove(\"dropdown-menu\");\n }\n if (\n event.target.closest(\".application-nav__link-button\").id === \"resources\"\n ) {\n this.resourcesTarget.classList.toggle(\"dropdown-menu\");\n this.resourcesTarget.focus();\n this.servicesTarget.classList.remove(\"dropdown-menu\");\n }\n }\n}\n"],"names":["map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","module","exports","Controller","toggleState","event","preventDefault","toggledState","this","element","getAttribute","setAttribute","params","URLSearchParams","window","location","search","utm_params","forEach","value","key","startsWith","push","utm_search","join","document","querySelectorAll","ele","idx","href","indexOf","host","static","connect","markSelected","filter","target","parentNode","classList","toggle","checked","visibleJobs","filterTargets","some","jobTargets","job","dataset","type","add","remove","noneTargets","none","querySelector","application","Application","start","context","require","load","definitionsFromContext","iframe","addEventListener","style","height","data","contentWindow","postMessage","toggleMobileMenu","contains","body","overflow","openSearch","click","selectedIndustries","Array","default","selectedProjectAttributes","showMore","Boolean","currentlySelected","showAllInput","getElementById","showAllLabel","input","secondaryFilterTargets","filters","selectedIndustriesValue","selectedProjectAttributesValue","showMoreValue","filterBtnTargets","btn","industryFiltersTarget","projectAttributeFiltersTarget","toggleSecondary","button","filterValue","textContent","trim","v","showMoreCaseStudies","hasIndustryFilters","length","hasProjectAttributeFilters","visibleCases","caseTargets","caseStudy","industry","projectAttributes","split","attr","showCase","includes","firstCases","slice","splice","showMoreTargets","mobile_breakpoint","twitchScript","createElement","async","defer","appendChild","setTimeout","initializeTwitchPlayer","src","player","Twitch","Player","channel","width","autoplay","handleOnline","bind","READY","initiate","addPlayerEventListeners","ONLINE","isChannelLive","OFFLINE","handleOffline","innerWidth","twitchButtonMobileTarget","display","twitchButtonTarget","iconButtonTarget","toggleDropdownMobileClose","closest","dropdownButtonTargets","toggleDropdown","servicesTarget","focus","resourcesTarget"],"sourceRoot":""}