{"version":3,"file":"js/application-753b64a87315b132079f.js","sources":["webpack:///webpack/bootstrap","webpack:///./app/javascript/channels sync _channel\\.js$","webpack:///./app/javascript/channels/index.js","webpack:///./app/javascript/packs/application.js","webpack:///./app/javascript/src/alert.js","webpack:///./app/javascript/src/analytics.js","webpack:///./app/javascript/src/carousel.js","webpack:///./app/javascript/src/jigsaw-puzzle-hints.js","webpack:///./app/javascript/src/mailing-list.js","webpack:///./app/javascript/src/main.js","webpack:///./app/javascript/src/nav.js","webpack:///./app/javascript/src/product-bullets.js","webpack:///./app/javascript/src/reviews.js","webpack:///./app/javascript/src/shopify-add-to-cart-button.js","webpack:///./app/javascript/src/techno-dystopia-hints.js","webpack:///./app/javascript/src/utils.js","webpack:///./node_modules/@rails/activestorage/app/assets/javascripts/activestorage.js","webpack:///./node_modules/@rails/ujs/lib/assets/compiled/rails-ujs.js","webpack:///./node_modules/js-cookie/dist/js.cookie.js","webpack:///./node_modules/turbolinks/dist/turbolinks.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 = \"./app/javascript/packs/application.js\");\n","function webpackEmptyContext(req) {\n\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\te.code = 'MODULE_NOT_FOUND';\n\tthrow e;\n}\nwebpackEmptyContext.keys = function() { return []; };\nwebpackEmptyContext.resolve = webpackEmptyContext;\nmodule.exports = webpackEmptyContext;\nwebpackEmptyContext.id = \"./app/javascript/channels sync recursive _channel\\\\.js$\";","// Load all the channels within this directory and all subdirectories.\n// Channel files must be named *_channel.js.\n\nconst channels = require.context('.', true, /_channel\\.js$/)\nchannels.keys().forEach(channels)\n","// This file is automatically compiled by Webpack, along with any other files\n// present in this directory. You're encouraged to place your actual application logic in\n// a relevant structure within app/javascript and only use these pack files to reference\n// that code so it'll be compiled.\n\nimport Rails from \"@rails/ujs\"\nimport Turbolinks from \"turbolinks\"\nimport * as ActiveStorage from \"@rails/activestorage\"\nimport \"channels\"\nimport \"src/main\"\n\nRails.start()\n// Turbolinks.start() // i hate turbolinks\nActiveStorage.start()\n","import Cookies from 'js-cookie'\n\nexport let Alert = {\n DOM: {\n alert: () => $('#evermade-alert'),\n msg: () => Alert.DOM.alert().find(\"p\"),\n closeBtn: () => Alert.DOM.alert().find(\"button\")\n },\n\n collapse: null,\n COOKIE_NAME: \"evermade-alert-message-dismissed\",\n\n handle: () => {\n if(Alert.message() != \"\" && !Alert.alreadyDismissedThisMessage()) {\n setTimeout(() => {\n Alert.DOM.closeBtn().on(\"click touchstart\", Alert.dismissed)\n Alert.collapse = new bootstrap.Collapse(Alert.DOM.alert(), {toggle: false})\n Alert.collapse.show()\n }, 1000)\n }\n },\n\n message: () => {\n return Alert.DOM.msg().html().trim()\n },\n\n dismissed: () => {\n Alert.collapse.hide()\n Cookies.set(Alert.COOKIE_NAME, Alert.message(), { expires: 7 })\n },\n\n alreadyDismissedThisMessage: () => {\n return Cookies.get(Alert.COOKIE_NAME) == Alert.message()\n }\n}\n","import Cookies from 'js-cookie'\n\nexport let Analytics = {\n DOM: {\n gdprNotice: () => $(\"#gdpr-notice\"),\n gdprNoticeOKButton: () => Analytics.DOM.gdprNotice().find(\"button.ok\"),\n consentPreferencesText: () => $(\"#consent-preferences\"),\n consentPreferencesControls: () => $(\".consent-preferences-controls\"),\n statisticsConsentToggle: () => $(\"#statistics-consent-toggle\"),\n marketingConsentToggle: () => $(\"#marketing-consent-toggle\"),\n contactFormAlert: () => $(\"section.contact-form#contact p.contact-alert\")\n },\n\n Consent: {\n GRANTED: \"granted\",\n DENIED: \"denied\"\n },\n\n HAS_MADE_CONSENT_CHOICE_COOKIE: \"evermade-consent-choice-made\",\n ADS_CONSENT_CHOICE_COOKIE: \"evermade-ads-consent\",\n ANALYTICS_CONSENT_CHOICE_COOKIE: \"evermade-analytics-consent\",\n\n handle: () => {\n Analytics.handleGDPR()\n\n if(Analytics.DOM.contactFormAlert().hasClass(\"notice\")) {\n Analytics.contactFormSubmitted()\n }\n\n Analytics.pageViewed()\n },\n\n handleGDPR: () => {\n // Analytics.resetConsentCookies()\n\n if(Analytics.isSubjectToGDPR()) {\n Analytics.DOM.consentPreferencesText().show()\n Analytics.DOM.consentPreferencesControls().show()\n Analytics.DOM.marketingConsentToggle().change(Analytics.marketingConsentToggleChanged)\n Analytics.DOM.statisticsConsentToggle().change(Analytics.statisticsConsentToggleChanged)\n\n if(!Analytics.hasMadeConsentChoice()) {\n Analytics.showGDPRNotice()\n Analytics.DOM.gdprNoticeOKButton().on(\"click touchstart\", Analytics.madeConsentChoice)\n } else {\n // assumes that permissions are granted by default\n // if changed to denied by default, this needs to be updated\n if(Analytics.hasDeniedAds()) {\n Analytics.denyAdsConsent()\n Analytics.DOM.marketingConsentToggle().prop('checked', false)\n }\n if(Analytics.hasDeniedAnalytics()) {\n Analytics.denyAnalyticsConsent()\n Analytics.DOM.statisticsConsentToggle().prop('checked', false)\n }\n }\n }\n },\n\n showGDPRNotice: () => {\n Analytics.DOM.gdprNotice().collapse(\"show\")\n },\n\n resetConsentCookies: () => {\n Cookies.remove(Analytics.HAS_MADE_CONSENT_CHOICE_COOKIE)\n Cookies.remove(Analytics.ADS_CONSENT_CHOICE_COOKIE)\n Cookies.remove(Analytics.ANALYTICS_CONSENT_CHOICE_COOKIE)\n },\n\n hasMadeConsentChoice: () => {\n return Cookies.get(Analytics.HAS_MADE_CONSENT_CHOICE_COOKIE) == \"true\"\n },\n\n madeConsentChoice: () => {\n Cookies.set(Analytics.HAS_MADE_CONSENT_CHOICE_COOKIE, \"true\", { expires: 365 })\n Analytics.DOM.gdprNotice().collapse(\"hide\")\n },\n\n // if no choice has been explicity set, assumed to be granted\n hasDeniedAds: () => {\n return Cookies.get(Analytics.ADS_CONSENT_CHOICE_COOKIE) == Analytics.Consent.DENIED\n },\n\n // if no choice has been explicity set, assumed to be granted\n hasDeniedAnalytics: () => {\n return Cookies.get(Analytics.ANALYTICS_CONSENT_CHOICE_COOKIE) == Analytics.Consent.DENIED\n },\n\n isSubjectToGDPR: () => {\n var tz = Intl.DateTimeFormat().resolvedOptions().timeZone;\n switch (tz) {\n case 'Europe/Vienna':\n return true;\n case 'Europe/Brussels':\n return true;\n case 'Europe/Sofia':\n return true;\n case 'Europe/Zagreb':\n return true;\n case 'Asia/Famagusta':\n return true;\n case 'Asia/Nicosia':\n return true;\n case 'Europe/Prague':\n return true;\n case 'Europe/Copenhagen':\n return true;\n case 'Europe/Tallinn':\n return true;\n case 'Europe/Helsinki':\n return true;\n case 'Europe/Paris':\n return true;\n case 'Europe/Berlin':\n return true;\n case 'Europe/Busingen':\n return true;\n case 'Europe/Athens':\n return true;\n case 'Europe/Budapest':\n return true;\n case 'Europe/Dublin':\n return true;\n case 'Europe/Rome':\n return true;\n case 'Europe/Riga':\n return true;\n case 'Europe/Vilnius':\n return true;\n case 'Europe/Luxembourg':\n return true;\n case 'Europe/Malta':\n return true;\n case 'Europe/Amsterdam':\n return true;\n case 'Europe/Warsaw':\n return true;\n case 'Atlantic/Azores':\n return true;\n case 'Atlantic/Madeira':\n return true;\n case 'Europe/Lisbon':\n return true;\n case 'Europe/Bucharest':\n return true;\n case 'Europe/Bratislava':\n return true;\n case 'Europe/Ljubljana':\n return true;\n case 'Africa/Ceuta':\n return true;\n case 'Atlantic/Canary':\n return true;\n case 'Europe/Madrid':\n return true;\n case 'Europe/Stockholm':\n return true;\n default:\n return false;\n }\n },\n\n updateConsent: (permission, value) => {\n var opts = {}\n opts[permission] = value\n gtag('consent', 'update', opts);\n Analytics.madeConsentChoice()\n },\n\n updateAdsConsent: (value) => {\n Analytics.updateConsent(\"ad_storage\", value)\n Cookies.set(Analytics.ADS_CONSENT_CHOICE_COOKIE, value, { expires: 365 })\n },\n\n marketingConsentToggleChanged: () => {\n var isChecked = Analytics.DOM.marketingConsentToggle().is(\":checked\")\n if(isChecked)\n Analytics.grantAdsConsent()\n else\n Analytics.denyAdsConsent()\n },\n\n grantAdsConsent: () => {\n Analytics.updateAdsConsent(Analytics.Consent.GRANTED)\n },\n\n denyAdsConsent: () => {\n Analytics.updateAdsConsent(Analytics.Consent.DENIED)\n },\n\n statisticsConsentToggleChanged: () => {\n var isChecked = Analytics.DOM.statisticsConsentToggle().is(\":checked\")\n if(isChecked)\n Analytics.grantAnalyticsConsent()\n else\n Analytics.denyAnalyticsConsent()\n },\n\n updateAnalyticsConsent: (value) => {\n Analytics.updateConsent(\"analytics_storage\", value)\n Cookies.set(Analytics.ANALYTICS_CONSENT_CHOICE_COOKIE, value, { expires: 365 })\n },\n\n grantAnalyticsConsent: () => {\n Analytics.updateAnalyticsConsent(Analytics.Consent.GRANTED)\n },\n\n denyAnalyticsConsent: () => {\n Analytics.updateAnalyticsConsent(Analytics.Consent.DENIED)\n },\n\n pageViewed: () => {\n var pinterestPageVisitParams = {}\n if(window.product) {\n pinterestPageVisitParams.line_items = [{\n product_id: window.product.sku\n }]\n }\n pintrk('track', 'pagevisit', pinterestPageVisitParams);\n },\n\n contactFormSubmitted: () => {\n // var callback = function () {\n // if (typeof(url) != 'undefined') {\n // window.location = url;\n // }\n // };\n\n gtag('event', 'conversion', {\n 'send_to': 'AW-10905880235/pcksCOCCwr8DEKuNqtAo',\n 'value': 1 // for google ads conv tracking purposes\n // 'event_callback': callback\n });\n\n gtag('event', 'Contact Form Submitted');\n return false;\n },\n\n subscribedToNewsletter: (email) => {\n // var callback = function () {\n // if (typeof(url) != 'undefined') {\n // window.location = url;\n // }\n // };\n gtag('event', 'conversion', {\n 'send_to': 'AW-10905880235/ffz4COLGwb8DEKuNqtAo',\n 'value': 1 // for google ads conv tracking\n // 'event_callback': callback\n });\n gtag('event', 'Subscribed to Newsletter');\n\n pintrk('track', 'lead', {\n lead_type: 'Newsletter'\n });\n\n Analytics.emtrk(\"Subscribe\", {user_email: email})\n\n return false;\n },\n\n addToCartButtonClicked: (e) => {\n // var callback = function () {\n // if (typeof(url) != 'undefined') {\n // window.location = url;\n // }\n // };\n\n gtag('event', 'conversion', {\n 'send_to': 'AW-10905880235/7DuZCM-NwL8DEKuNqtAo',\n 'value': e.selectedVariant.price.amount/10, // google ads conv value not 100% of price since its not that valuable\n 'currency': 'USD' // ,\n // 'event_callback': callback\n });\n\n gtag('event', 'Product Added to Cart', {\n 'event_category' : e.selectedVariant.sku,\n 'value' : e.selectedVariant.price.amount\n });\n\n var productCategory = \"Games\"\n if(e.selectedVariant.sku.match(\"SZB-3\")) {\n productCategory = \"Puzzle Books\"\n } else if(e.selectedVariant.sku.match(\"SZB-5\")) {\n productCategory = \"Jigsaw Puzzles\"\n } else if(e.selectedVariant.sku.match(\"SZB-6\")) {\n productCategory = \"Kids Books\"\n }\n\n pintrk('track', 'addtocart', {\n value: e.selectedVariant.price.amount,\n currency: 'USD',\n line_items: [{\n product_id: e.selectedVariant.sku,\n product_price: e.selectedVariant.price.amount,\n product_category: productCategory\n }]\n });\n\n Analytics.emtrk(\"AddToCart\", {product: {id: e.selectedVariant.sku, price: e.selectedVariant.price.amount}})\n\n\n return false;\n },\n\n checkoutOpened: (e) => {\n var total = 0\n $.each(e.lineItemCache, (i, lineItem) => {\n total += lineItem.quantity * lineItem.variant.price\n })\n total = parseFloat(total).toFixed(2)\n\n // var callback = function () {\n // if (typeof(url) != 'undefined') {\n // window.location = url;\n // }\n // };\n gtag('event', 'conversion', {\n 'send_to': 'AW-10905880235/FQvBCI3jjb8DEKuNqtAo',\n 'value': total/10, // not full value for google ads conv purposes\n 'currency': 'USD' // ,\n // 'event_callback': callback\n });\n gtag('event', 'Checkout Opened', {\n 'value' : total\n });\n\n var emproducts = $.map(e.lineItemCache, (lineItem, i) => {\n return {\n id: lineItem.variant.sku,\n quantity: lineItem.quantity,\n price: lineItem.variant.price\n }\n })\n\n Analytics.emtrk(\"InitiateCheckout\", {products: emproducts, total: total})\n\n return false;\n },\n\n emtrk: (event_name, data) => {\n data.event_name = event_name\n data.event_source_url = window.location.href\n $.post(\"/emtrk\", data)\n }\n}\n","import { Utils } from \"./utils.js\";\n\nexport let Carousel = {\n DOM: {\n carousels: () => $('.carousel'),\n multislideCarousels: () => $(\".carousel.multislide\"),\n resizeCarousels: () => $(\".carousel.resize-heights\"),\n resizeMultislideCarousels: () => $(\".carousel.multislide.resize-heights\"),\n carouselInner: (carousel) => $(carousel).find(\".carousel-inner\"),\n carouselItems: (carousel) => $(carousel).find(\".carousel-item\"),\n activeCarouselItem: (carousel) => Carousel.DOM.carouselItems(carousel).filter(\".active\"),\n templateCarouselItem: (carousel) => $(carousel).find(\".template-carousel-item\"),\n carouselItemInners: (carousel) => Carousel.DOM.carouselItems(carousel).find(\".carousel-item-inner\"),\n carouselPrevButton: (carousel) => $(carousel).find(\"button.carousel-control-prev\").first(),\n carouselNextButton: (carousel) => $(carousel).find(\"button.carousel-control-next\").first(),\n nonWrappingCarousels: () => $(\".carousel[data-bs-wrap='false']\"),\n productImagesCarousel: () => $(\"#product-images-carousel\")\n },\n\n init: () => {\n $.each(Carousel.DOM.multislideCarousels(), (i, carousel) => {\n Carousel.makeMultislide(carousel)\n })\n\n $(window).on(Utils.VIEWPORT_RESIZE_EVENT, Carousel.remakeMultislides)\n\n $.each(Carousel.DOM.nonWrappingCarousels(), (i, carousel) => {\n Carousel.DOM.carouselPrevButton(carousel).hide()\n })\n Carousel.DOM.nonWrappingCarousels().on('slid.bs.carousel',Carousel.handleNonWrappingCarouselButtons)\n\n $(window).resize(Carousel.handleProductImagesCarouselHeight)\n Carousel.handleProductImagesCarouselHeight()\n },\n\n makeMultislide: (carousel) => {\n var templateCarouselItem = Carousel.DOM.carouselItems(carousel).first()\n var inners = templateCarouselItem.children()\n $.each(inners, (i, inner) => {\n var newCarouselItem = $(\"