{"version":3,"file":"resize-img.js","sources":["../../../dev/assets/js/resize-img.js"],"sourcesContent":["// Utility function to get user's device size. This function is intentionally duplicated here to be available for use within this file. Second instance lives in utilities.js\nfunction getBrowserDevice() {\n\tif (window.matchMedia(\"(max-width : 767px)\").matches) return \"mobile\";\n\tif (window.matchMedia(\"(min-width : 768px) AND (max-width : 1023px)\").matches) return \"tablet\";\n\tif (window.matchMedia(\"(min-width : 1024px)\").matches) return \"desktop\";\n\treturn \"unsure\";\n}\n\n// Accommodation repeaters that are misisng images ... must run before next\n// Updated : 12.27.21 - jQuery to Vanilla JS\nconst fixMissingImages = () => {\n\tconst imagesNodeList = document.querySelectorAll(\"[lightbox~='open'] img\");\n\tconst imagesArray = Array.from(imagesNodeList);\n\timagesArray.forEach((image) => {\n\t\tconst srcValue = image.getAttribute(\"src\");\n\t\tif (srcValue == \"\\xA0\" || srcValue == \"\" || srcValue == \" \") {\n\t\t\tlet closest = image.closest(\"[lightbox='open']\");\n\t\t\tlet forAttr = closest.getAttribute(\"for\");\n\t\t\tforAttr = forAttr.replace(\"lightbox\", \"lightSlider\");\n\t\t\timage.setAttribute(\"for\", forAttr);\n\t\t\tconst thisLightbox = `#${image.getAttribute(\"for\")}`;\n\t\t\tconst firstPhotoParent = document.querySelector(`${thisLightbox}`);\n\t\t\tconst firstPhoto = firstPhotoParent.querySelector(\"img:first-of-type\");\n\t\t\tif (!firstPhoto) return;\n\t\t\tconst firstPhotoSrc = firstPhoto.getAttribute(\"src\");\n\t\t\timage.setAttribute(\"src\", firstPhotoSrc);\n\t\t}\n\t});\n};\ntry {\n\tfixMissingImages();\n} catch (error) {\n\tconsole.log(error);\n}\n\n// change src to filestack\n// Updated : 04.21.22 - jQuery to Vanilla JS\nconst cdnifyImages = () => {\n\tconst cdnSrc = \"https://cdn.filestackcontent.com/A6dTpd53SmIg0pBfJJhgAz/cache=expiry:31536002/\";\n\tconst cdnSrcAccommodations = \"https://cdn.filestackcontent.com/A6dTpd53SmIg0pBfJJhgAz/resize=width:800,fit:max/quality=value:70/cache=expiry:31536002/\";\n\tconst images = document.querySelectorAll(\"img\");\n\tconst imagesArray = Array.from(images);\n\tlet paredDownImages = [];\n\n\timagesArray.forEach((image) => {\n\t\tconst attributesArray = Array.from(image.attributes);\n\t\tlet add = true;\n\t\tattributesArray.find((attr) => {\n\t\t\tif (attr.name === \"logo\" || attr.name === \"resize-img-src\" || attr.name === \"resize-30-img-src\" || attr.name === \"hero-desktop\" || attr.name === \"ignore-cdn\") {\n\t\t\t\tadd = false;\n\t\t\t}\n\t\t});\n\t\tif (image.parentNode.id === \"lightSlider\") {\n\t\t\tadd = false;\n\t\t}\n\t\tif (add) {\n\t\t\tparedDownImages.push(image);\n\t\t}\n\t});\n\tparedDownImages.forEach((image) => {\n\t\tlet originalSrc = image.getAttribute(\"src\");\n\t\tlet newSrc;\n\n\t\tif (originalSrc && originalSrc.startsWith(\"https://process\")) return; // Not really needed anymore but left it just in case\n\n\t\tif (originalSrc && originalSrc.startsWith(\"https://cdn\")) return;\n\n\t\tif (originalSrc) {\n\t\t\toriginalSrc = originalSrc.replace(\"https://www.nathab.com\", \"\");\n\t\t\toriginalSrc = originalSrc.replace(\"https://nha.ensocloud.com\", \"\");\n\t\t\tif (originalSrc !== \"undefined\" && !originalSrc.includes(\"undefined\")) {\n\t\t\t\tif (image.parentNode.hasAttribute(\"data-thumb\")) {\n\t\t\t\t\tnewSrc = cdnSrcAccommodations + \"https://www.nathab.com\" + originalSrc;\n\t\t\t\t} else {\n\t\t\t\t\tnewSrc = cdnSrc + \"https://www.nathab.com\" + originalSrc;\n\t\t\t\t}\n\t\t\t\timage.setAttribute(\"src\", newSrc);\n\t\t\t}\n\t\t}\n\t});\n};\ntry {\n\tcdnifyImages();\n} catch (error) {\n\tconsole.log(error);\n}\n\n// NEW FEATURE : 06.07.19 - Dynamically set mobile, tablet, desktop hero image\n// Updated : 12.27.21 - jQuery to Vanilla JS\nconst setDynamicImages = () => {\n\tconst imagesNodeList = document.querySelectorAll(\"[hero-desktop]\");\n\tconst imagesArray = Array.from(imagesNodeList);\n\timagesArray.forEach((image) => {\n\t\tconst container = image.closest(\"div\");\n\t\tconst containerWidth = container ? container.offsetWidth : null;\n\t\tconst mobile = image.getAttribute(\"hero-mobile\");\n\t\tconst tablet = image.getAttribute(\"hero-tablet\");\n\t\tconst desktop = image.getAttribute(\"hero-desktop\");\n\t\tlet newSrcSet = \"undefined\";\n\t\tconst template = image.getAttribute(\"jstemplate\");\n\t\tconst fsPath = \"https://cdn.filestackcontent.com/A6dTpd53SmIg0pBfJJhgAz\";\n\t\tconst fsQuality = \"/quality=value:60/compress/\";\n\t\tconst fsDomain = \"https://www.nathab.com\";\n\t\tif (containerWidth < 481) {\n\t\t\tif (mobile !== \"\") {\n\t\t\t\tnewSrcSet = fsPath + fsQuality + fsDomain + mobile;\n\t\t\t\timage.setAttribute(\"src\", newSrcSet);\n\t\t\t} else if (tablet && tablet !== \"\") {\n\t\t\t\tnewSrcSet = newSrcSet.replace(\"undefined\", \"\") + fsPath + fsQuality + fsDomain + tablet;\n\t\t\t\timage.setAttribute(\"src\", newSrcSet);\n\t\t\t} else {\n\t\t\t\timage.setAttribute(\"resize-img-src\", desktop); // resize-img-src only works on home\n\t\t\t}\n\t\t} else if (containerWidth < 1024) {\n\t\t\tif (tablet && tablet !== \"\") {\n\t\t\t\tnewSrcSet = newSrcSet.replace(\"undefined\", \"\") + fsPath + fsQuality + fsDomain + tablet;\n\t\t\t\timage.setAttribute(\"src\", newSrcSet);\n\t\t\t} else {\n\t\t\t\tif (template == \"page\") {\n\t\t\t\t\timage.setAttribute(\"resize-30-img-src\", desktop);\n\t\t\t\t} else {\n\t\t\t\t\timage.setAttribute(\"resize-img-src\", desktop);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif (template == \"page\") {\n\t\t\t\timage.setAttribute(\"resize-30-img-src\", desktop);\n\t\t\t} else {\n\t\t\t\timage.setAttribute(\"resize-img-src\", desktop);\n\t\t\t}\n\t\t}\n\t});\n};\ntry {\n\tsetDynamicImages();\n} catch (error) {\n\tconsole.log(error);\n}\n\nconst containerSizes = [\n\t{\n\t\tmin: 1,\n\t\tmax: 415,\n\t\twidth: 414,\n\t\tusePixelDensityRatio: true\n\t},\n\t{\n\t\tmin: 414,\n\t\tmax: 685,\n\t\twidth: 684,\n\t\tusePixelDensityRatio: true\n\t},\n\t{\n\t\tmin: 684,\n\t\tmax: 955,\n\t\twidth: 954,\n\t\tusePixelDensityRatio: true\n\t},\n\t{\n\t\tmin: 954,\n\t\tmax: 1255,\n\t\twidth: 1224,\n\t\tusePixelDensityRatio: true\n\t},\n\t{\n\t\tmin: 1224,\n\t\tmax: 1495,\n\t\twidth: 1494,\n\t\tusePixelDensityRatio: false\n\t},\n\t{\n\t\tmin: 1494,\n\t\tmax: 1765,\n\t\twidth: 1764,\n\t\tusePixelDensityRatio: false\n\t},\n\t{\n\t\tmin: 1764,\n\t\tmax: 2035,\n\t\twidth: 2034,\n\t\tusePixelDensityRatio: false\n\t},\n\t{\n\t\tmin: 2564,\n\t\tmax: null,\n\t\twidth: 2880,\n\t\tusePixelDensityRatio: false\n\t}\n];\n\nconst resize = (attr) => {\n\tconst imagesNodeList = document.querySelectorAll(`[${attr}]`);\n\tconst imagesArray = Array.from(imagesNodeList);\n\timagesArray.forEach((image) => {\n\t\tif (image.hasAttribute(\"resized\")) return;\n\n\t\t// NOTES :\n\t\t// getting closest 'div' is a bit fragile, but with the current patterns set in the architecture (img within parent div),\n\t\t// it should be totally fine. however, the patterns must be maintained in order for this function to\n\t\t// continue to work properly.\n\t\tconst container = image.closest(\"div\"); // should this use a more specific selector like [hero~='photo']\n\n\t\tlet containerWidth = container ? container.offsetWidth : null;\n\t\tlet containerHeight = container ? container.offsetHeight : null;\n\t\tif (containerHeight <= 50) {\n\t\t\tcontainerHeight = 200;\n\t\t}\n\t\tconst smartCropValue = image.getAttribute(\"hero-smart-crop\") ? image.getAttribute(\"hero-smart-crop\") : \"auto\";\n\t\tconst containerRatio = containerHeight / containerWidth;\n\t\t// const newAttr = attr.replace(/[\\[\\]']+/g, \"\"); // No need to do this if you use template literal on line 167\n\t\tlet resizeImgSrc = image.getAttribute(attr);\n\n\t\tif (!resizeImgSrc || resizeImgSrc.trim() === \"\") return;\n\n\t\tlet originalSrc;\n\t\tif (resizeImgSrc) {\n\t\t\tresizeImgSrc.includes(\"https://www.nathab.com\") ? (resizeImgSrc = resizeImgSrc.replace(\"https://www.nathab.com\", \"\")) : resizeImgSrc;\n\t\t\toriginalSrc = \"https://www.nathab.com\" + resizeImgSrc;\n\t\t\t// image.setAttribute(\"src\", originalSrc); // Turned off for testing, not sure why this is needed considering the fallback on line 221\n\t\t}\n\t\tlet newSrc = \"\";\n\t\tconst pixelDensityRatio = window.devicePixelRatio ? window.devicePixelRatio : 2;\n\t\tconst fsPath = \"https://cdn.filestackcontent.com/A6dTpd53SmIg0pBfJJhgAz\";\n\t\tconst fsCropBase = \"/smart_crop=\";\n\t\tconst fsCropValue = `width:${Math.floor(containerWidth * 1.5)},height:${Math.floor(containerHeight * 1.5)},mode:object,object:${smartCropValue}`;\n\t\tconst fsResize = \"/resize=width:\";\n\t\tconst fsQuality = \",fit:max/quality=value:80/cache=expiry:31536000/compress/\";\n\t\tconst isPortrait = containerRatio >= 1 ? true : false;\n\t\tif (originalSrc) {\n\t\t\tcontainerRatio >= 0.5208 ? (containerWidth = containerHeight * (containerRatio + 1)) : containerWidth;\n\t\t\tcontainerSizes.forEach((size) => {\n\t\t\t\tif (size.min && size.max && !newSrc) {\n\t\t\t\t\tif (containerWidth > size.min && containerWidth < size.max) {\n\t\t\t\t\t\tcontainerWidth = size.usePixelDensityRatio ? pixelDensityRatio * size.width : size.width;\n\t\t\t\t\t\tif (isPortrait && (smartCropValue !== \"auto\" || !smartCropValue)) {\n\t\t\t\t\t\t\tnewSrc = fsPath + fsCropBase + fsCropValue + fsQuality + originalSrc;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnewSrc = fsPath + fsResize + Math.floor(containerWidth) + fsQuality + originalSrc;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tnewSrc = fsPath + fsResize + Math.floor(containerWidth) + fsQuality + originalSrc;\n\t\t\t\t}\n\t\t\t});\n\t\t\timage.setAttribute(\"src\", newSrc || originalSrc); // seems to fallback to originalSrc for homepage when not logged into cms which is interesting\n\t\t}\n\t});\n};\ntry {\n\tresize(\"resize-30-img-src\");\n\tresize(\"resize-img-src\");\n} catch (error) {\n\tconsole.log(error);\n}\n\nfunction setGradientValue() {\n\tconst elementWithGradientAttribute = document.querySelector(\"[js-set-gradient]\");\n\n\tif (!elementWithGradientAttribute || elementWithGradientAttribute.getAttribute(\"gradient\") !== \"auto\") return;\n\n\tconst userDevice = getBrowserDevice();\n\n\tif (userDevice === \"mobile\") return;\n\n\tlet imageHero = document.querySelector(\".js-get-hero-brightness\");\n\n\timageHero.addEventListener(\"load\", () => {\n\t\tlet brightness = calcHeroBrightness(imageHero);\n\t\tbrightness = brightness - 35; // We prefer the dark gradient so typing the scales. Def not a hack.\n\t\tif (brightness <= 127.5) {\n\t\t\telementWithGradientAttribute.setAttribute(\"gradient\", \"dark\");\n\t\t} else {\n\t\t\telementWithGradientAttribute.setAttribute(\"gradient\", \"light\");\n\t\t}\n\t});\n}\ntry {\n\tsetGradientValue();\n} catch (error) {\n\tconsole.log(error);\n}\n\nfunction calcHeroBrightness(imageHero) {\n\tlet colorSum = 0;\n\tlet canvas = document.createElement(\"canvas\");\n\tlet ctx = canvas.getContext(\"2d\");\n\tcanvas.width = imageHero.naturalWidth;\n\tcanvas.height = imageHero.naturalHeight;\n\tctx.drawImage(imageHero, 0, 0);\n\n\tconst testWidth = canvas.width;\n\tconst testHeight = 100; //100px\n\tconst imageData = ctx.getImageData(0, 0, testWidth, testHeight);\n\tconst data = imageData.data;\n\tconst testArea = testWidth * testHeight;\n\tlet r, g, b, avg;\n\n\tfor (let i = 0; i < testArea; i++) {\n\t\tr = data[i];\n\t\tg = data[++i];\n\t\tb = data[++i];\n\t\tavg = Math.floor(r + g + b);\n\t\tcolorSum = colorSum + avg;\n\t}\n\treturn Math.floor(colorSum / testArea);\n}\n"],"names":[],"mappings":"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"}