{"version":3,"file":"jwsdw-productDetail.js","sources":["../../../../../../../webfrontend/assets/vendor/squarelovin.js","../../../../../../../webfrontend/assets/vendor/angularjs/youtube-embed.js","../../../../../../../webfrontend/assets/vendor/angularjs/angular-touch.js","../../../../../../../temp/ngAnnotate/assets/jwsdw-productDetail.js","../../../../../../../temp/ngAnnotate/assets/jwsdw-notifyme.js"],"sourcesContent":["(function () {\r\n if (window.jwsdwSquarelovinSettings) {\r\n var widgetId = window.jwsdwSquarelovinSettings.squarelovinId;\r\n var widgetLang = window.jwsdwSquarelovinSettings.languageCode;\r\n var widgetType = window.jwsdwSquarelovinSettings.squarelovinType;\r\n var lastURL = '';\r\n var baseURL = location.href.substring(0, location.href.lastIndexOf('/'));\r\n var colors = window.jwsdwProductDetailSettings.data.allVariations.attributes.filter(function (color) {\r\n return color.id === 'color';\r\n });\r\n var productIds = colors && colors.length === 1 ? colors[0].vals.map(function(color) {\r\n return window.jwsdwProductDetailSettings.data.masterID + '_' + color.id;\r\n }) : [];\r\n\r\n // First run\r\n loadWidget();\r\n\r\n // Wait for Angular to render the colorSelection and set the event listeners\r\n var colorSelectionInterval = setInterval(function () {\r\n var colorSelection = document.querySelector('.jwsdw-pdp-colorSelection');\r\n if (colorSelection) {\r\n setEvents(colorSelection);\r\n clearInterval(colorSelectionInterval);\r\n }\r\n }, 100);\r\n }\r\n\r\n function loadWidget() {\r\n setTimeout(function () {\r\n var url = baseURL + '/' + location.href.substr(location.href.lastIndexOf('/') + 1);\r\n if (lastURL !== location.href) {\r\n var target = document.getElementById('squarelovin-slot');\r\n var js = document.getElementById('squarelovin-js');\r\n lastURL = location.href;\r\n\r\n // Cleanup the widget code and script\r\n if (target) {\r\n target.innerHTML = '';\r\n }\r\n if (js) {\r\n js.parentElement.removeChild(js);\r\n }\r\n\r\n // The placeholder script (used by Squarelovin to render the widget)\r\n if (target) {\r\n var s1 = document.createElement('script');\r\n s1.id = 'sqln-' + widgetId;\r\n s1.type = 'text/javascript';\r\n s1.datastream = widgetId;\r\n target.appendChild(s1);\r\n }\r\n\r\n // The Squarelovin widget code\r\n var s = document.createElement('script');\r\n s.id = 'squarelovin-js';\r\n s.type = 'text/javascript';\r\n s.async = true;\r\n s.src = 'https://squarelovin.com/squarelovin.js?stream=' + widgetId +\r\n '&t=' + widgetType +\r\n '&l=' + widgetLang +\r\n '&pid=' + productIds.join(',') +\r\n '&u=' + url;\r\n\r\n var sc = document.getElementsByTagName('script')[0];\r\n sc.parentNode.insertBefore(s, sc);\r\n }\r\n }, 300); // A little delay is added to wait for the URL to change\r\n }\r\n\r\n function setEvents(el) {\r\n el.addEventListener('mouseup', loadWidget);\r\n el.addEventListener('touchend', loadWidget);\r\n }\r\n})();\r\n","/*\r\n * Source: https://github.com/brandly/angular-youtube-embed\r\n * By Matthew Brandly\r\n*/\r\n\r\n/* global YT */\r\nangular.module('youtube-embed', [])\r\n.service ('youtubeEmbedUtils', ['$window', '$rootScope', function ($window, $rootScope) {\r\n var Service = {}\r\n\r\n // adapted from http://stackoverflow.com/a/5831191/1614967\r\n var youtubeRegexp = /https?:\\/\\/(?:[0-9A-Z-]+\\.)?(?:youtu\\.be\\/|youtube(?:-nocookie)?\\.com\\S*[^\\w\\s-])([\\w-]{11})(?=[^\\w-]|$)(?![?=&+%\\w.-]*(?:['\"][^<>]*>|<\\/a>))[?=&+%\\w.-]*/ig;\r\n var timeRegexp = /t=(\\d+)[ms]?(\\d+)?s?/;\r\n\r\n function contains(str, substr) {\r\n return (str.indexOf(substr) > -1);\r\n }\r\n\r\n Service.getIdFromURL = function getIdFromURL(url) {\r\n var id = url.replace(youtubeRegexp, '$1');\r\n\r\n if (contains(id, ';')) {\r\n var pieces = id.split(';');\r\n\r\n if (contains(pieces[1], '%')) {\r\n // links like this:\r\n // \"http://www.youtube.com/attribution_link?a=pxa6goHqzaA&u=%2Fwatch%3Fv%3DdPdgx30w9sU%26feature%3Dshare\"\r\n // have the real query string URI encoded behind a ';'.\r\n // at this point, `id is 'pxa6goHqzaA;u=%2Fwatch%3Fv%3DdPdgx30w9sU%26feature%3Dshare'\r\n var uriComponent = decodeURIComponent(pieces[1]);\r\n id = ('http://youtube.com' + uriComponent)\r\n .replace(youtubeRegexp, '$1');\r\n } else {\r\n // https://www.youtube.com/watch?v=VbNF9X1waSc&feature=youtu.be\r\n // `id` looks like 'VbNF9X1waSc;feature=youtu.be' currently.\r\n // strip the ';feature=youtu.be'\r\n id = pieces[0];\r\n }\r\n } else if (contains(id, '#')) {\r\n // id might look like '93LvTKF_jW0#t=1'\r\n // and we want '93LvTKF_jW0'\r\n id = id.split('#')[0];\r\n }\r\n\r\n return id;\r\n };\r\n\r\n Service.getTimeFromURL = function getTimeFromURL(url) {\r\n url = url || '';\r\n\r\n // t=4m20s\r\n // returns ['t=4m20s', '4', '20']\r\n // t=46s\r\n // returns ['t=46s', '46']\r\n // t=46\r\n // returns ['t=46', '46']\r\n var times = url.match(timeRegexp);\r\n\r\n if (!times) {\r\n // zero seconds\r\n return 0;\r\n }\r\n\r\n // assume the first\r\n var full = times[0],\r\n minutes = times[1],\r\n seconds = times[2];\r\n\r\n // t=4m20s\r\n if (typeof seconds !== 'undefined') {\r\n seconds = parseInt(seconds, 10);\r\n minutes = parseInt(minutes, 10);\r\n\r\n // t=4m\r\n } else if (contains(full, 'm')) {\r\n minutes = parseInt(minutes, 10);\r\n seconds = 0;\r\n\r\n // t=4s\r\n // t=4\r\n } else {\r\n seconds = parseInt(minutes, 10);\r\n minutes = 0;\r\n }\r\n\r\n // in seconds\r\n return seconds + (minutes * 60);\r\n };\r\n\r\n Service.ready = false;\r\n\r\n function applyServiceIsReady() {\r\n $rootScope.$apply(function () {\r\n Service.ready = true;\r\n });\r\n };\r\n\r\n // If the library isn't here at all,\r\n if (typeof YT === \"undefined\") {\r\n // ...grab on to global callback, in case it's eventually loaded\r\n $window.onYouTubeIframeAPIReady = applyServiceIsReady;\r\n console.log('Unable to find YouTube iframe library on this page.')\r\n } else if (YT.loaded) {\r\n Service.ready = true;\r\n } else {\r\n YT.ready(applyServiceIsReady);\r\n }\r\n\r\n return Service;\r\n}])\r\n.directive('youtubeVideo', ['$window', 'youtubeEmbedUtils', function ($window, youtubeEmbedUtils) {\r\n var uniqId = 1;\r\n\r\n // from YT.PlayerState\r\n var stateNames = {\r\n '-1': 'unstarted',\r\n 0: 'ended',\r\n 1: 'playing',\r\n 2: 'paused',\r\n 3: 'buffering',\r\n 5: 'queued'\r\n };\r\n\r\n var eventPrefix = 'youtube.player.';\r\n\r\n $window.YTConfig = {\r\n host: 'https://www.youtube.com'\r\n };\r\n\r\n return {\r\n restrict: 'EA',\r\n scope: {\r\n videoId: '=?',\r\n videoUrl: '=?',\r\n player: '=?',\r\n playerVars: '=?',\r\n playerHeight: '=?',\r\n playerWidth: '=?'\r\n },\r\n link: function (scope, element, attrs) {\r\n // allows us to $watch `ready`\r\n scope.utils = youtubeEmbedUtils;\r\n\r\n // player-id attr > id attr > directive-generated ID\r\n var playerId = attrs.playerId || element[0].id || 'unique-youtube-embed-id-' + uniqId++;\r\n element[0].id = playerId;\r\n\r\n // Attach to element\r\n scope.playerHeight = scope.playerHeight || 390;\r\n scope.playerWidth = scope.playerWidth || 640;\r\n scope.playerVars = scope.playerVars || {};\r\n\r\n // YT calls callbacks outside of digest cycle\r\n function applyBroadcast () {\r\n var args = Array.prototype.slice.call(arguments);\r\n scope.$apply(function () {\r\n scope.$emit.apply(scope, args);\r\n });\r\n }\r\n\r\n function onPlayerStateChange (event) {\r\n var state = stateNames[event.data];\r\n if (typeof state !== 'undefined') {\r\n applyBroadcast(eventPrefix + state, scope.player, event);\r\n }\r\n scope.$apply(function () {\r\n scope.player.currentState = state;\r\n });\r\n }\r\n\r\n function onPlayerReady (event) {\r\n applyBroadcast(eventPrefix + 'ready', scope.player, event);\r\n }\r\n\r\n function onPlayerError (event) {\r\n applyBroadcast(eventPrefix + 'error', scope.player, event);\r\n }\r\n\r\n function createPlayer () {\r\n var playerVars = angular.copy(scope.playerVars);\r\n playerVars.start = playerVars.start || scope.urlStartTime;\r\n var player = new YT.Player(playerId, {\r\n height: scope.playerHeight,\r\n width: scope.playerWidth,\r\n videoId: scope.videoId,\r\n playerVars: playerVars,\r\n events: {\r\n onReady: onPlayerReady,\r\n onStateChange: onPlayerStateChange,\r\n onError: onPlayerError\r\n }\r\n });\r\n\r\n player.id = playerId;\r\n return player;\r\n }\r\n\r\n function loadPlayer () {\r\n if (scope.videoId || scope.playerVars.list) {\r\n if (scope.player && typeof scope.player.destroy === 'function') {\r\n scope.player.destroy();\r\n }\r\n\r\n scope.player = createPlayer();\r\n }\r\n };\r\n\r\n var stopWatchingReady = scope.$watch(\r\n function () {\r\n return scope.utils.ready\r\n // Wait until one of them is defined...\r\n && (typeof scope.videoUrl !== 'undefined'\r\n || typeof scope.videoId !== 'undefined'\r\n || typeof scope.playerVars.list !== 'undefined');\r\n },\r\n function (ready) {\r\n if (ready) {\r\n stopWatchingReady();\r\n\r\n // URL takes first priority\r\n if (typeof scope.videoUrl !== 'undefined') {\r\n scope.$watch('videoUrl', function (url) {\r\n scope.videoId = scope.utils.getIdFromURL(url);\r\n scope.urlStartTime = scope.utils.getTimeFromURL(url);\r\n\r\n loadPlayer();\r\n });\r\n\r\n // then, a video ID\r\n } else if (typeof scope.videoId !== 'undefined') {\r\n scope.$watch('videoId', function () {\r\n scope.urlStartTime = null;\r\n loadPlayer();\r\n });\r\n\r\n // finally, a list\r\n } else {\r\n scope.$watch('playerVars.list', function () {\r\n scope.urlStartTime = null;\r\n loadPlayer();\r\n });\r\n }\r\n }\r\n });\r\n\r\n scope.$watchCollection(['playerHeight', 'playerWidth'], function() {\r\n if (scope.player) {\r\n scope.player.setSize(scope.playerWidth, scope.playerHeight);\r\n }\r\n });\r\n\r\n scope.$on('$destroy', function () {\r\n scope.player && scope.player.destroy();\r\n });\r\n }\r\n };\r\n}]);","/**\r\n * @license AngularJS v1.8.0\r\n * (c) 2010-2020 Google, Inc. http://angularjs.org\r\n * License: MIT\r\n */\r\n(function(window, angular) {'use strict';\r\n\r\n/**\r\n * @ngdoc module\r\n * @name ngTouch\r\n * @description\r\n *\r\n * The `ngTouch` module provides helpers for touch-enabled devices.\r\n * The implementation is based on jQuery Mobile touch event handling\r\n * ([jquerymobile.com](http://jquerymobile.com/)). *\r\n *\r\n * See {@link ngTouch.$swipe `$swipe`} for usage.\r\n *\r\n * @deprecated\r\n * sinceVersion=\"1.7.0\"\r\n * The ngTouch module with the {@link ngTouch.$swipe `$swipe`} service and\r\n * the {@link ngTouch.ngSwipeLeft} and {@link ngTouch.ngSwipeRight} directives are\r\n * deprecated. Instead, stand-alone libraries for touch handling and gesture interaction\r\n * should be used, for example [HammerJS](https://hammerjs.github.io/) (which is also used by\r\n * Angular).\r\n */\r\n\r\n// define ngTouch module\r\n/* global ngTouch */\r\nvar ngTouch = angular.module('ngTouch', []);\r\n\r\nngTouch.info({ angularVersion: '1.8.0' });\r\n\r\nfunction nodeName_(element) {\r\n return angular.$$lowercase(element.nodeName || (element[0] && element[0].nodeName));\r\n}\r\n\r\n/* global ngTouch: false */\r\n\r\n /**\r\n * @ngdoc service\r\n * @name $swipe\r\n *\r\n * @deprecated\r\n * sinceVersion=\"1.7.0\"\r\n *\r\n * See the {@link ngTouch module} documentation for more information.\r\n *\r\n * @description\r\n * The `$swipe` service is a service that abstracts the messier details of hold-and-drag swipe\r\n * behavior, to make implementing swipe-related directives more convenient.\r\n *\r\n * Requires the {@link ngTouch `ngTouch`} module to be installed.\r\n *\r\n * `$swipe` is used by the `ngSwipeLeft` and `ngSwipeRight` directives in `ngTouch`.\r\n *\r\n * # Usage\r\n * The `$swipe` service is an object with a single method: `bind`. `bind` takes an element\r\n * which is to be watched for swipes, and an object with four handler functions. See the\r\n * documentation for `bind` below.\r\n */\r\n\r\nngTouch.factory('$swipe', [function() {\r\n // The total distance in any direction before we make the call on swipe vs. scroll.\r\n var MOVE_BUFFER_RADIUS = 10;\r\n\r\n var POINTER_EVENTS = {\r\n 'mouse': {\r\n start: 'mousedown',\r\n move: 'mousemove',\r\n end: 'mouseup'\r\n },\r\n 'touch': {\r\n start: 'touchstart',\r\n move: 'touchmove',\r\n end: 'touchend',\r\n cancel: 'touchcancel'\r\n },\r\n 'pointer': {\r\n start: 'pointerdown',\r\n move: 'pointermove',\r\n end: 'pointerup',\r\n cancel: 'pointercancel'\r\n }\r\n };\r\n\r\n function getCoordinates(event) {\r\n var originalEvent = event.originalEvent || event;\r\n var touches = originalEvent.touches && originalEvent.touches.length ? originalEvent.touches : [originalEvent];\r\n var e = (originalEvent.changedTouches && originalEvent.changedTouches[0]) || touches[0];\r\n\r\n return {\r\n x: e.clientX,\r\n y: e.clientY\r\n };\r\n }\r\n\r\n function getEvents(pointerTypes, eventType) {\r\n var res = [];\r\n angular.forEach(pointerTypes, function(pointerType) {\r\n var eventName = POINTER_EVENTS[pointerType][eventType];\r\n if (eventName) {\r\n res.push(eventName);\r\n }\r\n });\r\n return res.join(' ');\r\n }\r\n\r\n return {\r\n /**\r\n * @ngdoc method\r\n * @name $swipe#bind\r\n *\r\n * @description\r\n * The main method of `$swipe`. It takes an element to be watched for swipe motions, and an\r\n * object containing event handlers.\r\n * The pointer types that should be used can be specified via the optional\r\n * third argument, which is an array of strings `'mouse'`, `'touch'` and `'pointer'`. By default,\r\n * `$swipe` will listen for `mouse`, `touch` and `pointer` events.\r\n *\r\n * The four events are `start`, `move`, `end`, and `cancel`. `start`, `move`, and `end`\r\n * receive as a parameter a coordinates object of the form `{ x: 150, y: 310 }` and the raw\r\n * `event`. `cancel` receives the raw `event` as its single parameter.\r\n *\r\n * `start` is called on either `mousedown`, `touchstart` or `pointerdown`. After this event, `$swipe` is\r\n * watching for `touchmove`, `mousemove` or `pointermove` events. These events are ignored until the total\r\n * distance moved in either dimension exceeds a small threshold.\r\n *\r\n * Once this threshold is exceeded, either the horizontal or vertical delta is greater.\r\n * - If the horizontal distance is greater, this is a swipe and `move` and `end` events follow.\r\n * - If the vertical distance is greater, this is a scroll, and we let the browser take over.\r\n * A `cancel` event is sent.\r\n *\r\n * `move` is called on `mousemove`, `touchmove` and `pointermove` after the above logic has determined that\r\n * a swipe is in progress.\r\n *\r\n * `end` is called when a swipe is successfully completed with a `touchend`, `mouseup` or `pointerup`.\r\n *\r\n * `cancel` is called either on a `touchcancel` or `pointercancel` from the browser, or when we begin scrolling\r\n * as described above.\r\n *\r\n */\r\n bind: function(element, eventHandlers, pointerTypes) {\r\n // Absolute total movement, used to control swipe vs. scroll.\r\n var totalX, totalY;\r\n // Coordinates of the start position.\r\n var startCoords;\r\n // Last event's position.\r\n var lastPos;\r\n // Whether a swipe is active.\r\n var active = false;\r\n\r\n pointerTypes = pointerTypes || ['mouse', 'touch', 'pointer'];\r\n element.on(getEvents(pointerTypes, 'start'), function(event) {\r\n startCoords = getCoordinates(event);\r\n active = true;\r\n totalX = 0;\r\n totalY = 0;\r\n lastPos = startCoords;\r\n if (eventHandlers['start']) {\r\n eventHandlers['start'](startCoords, event);\r\n }\r\n });\r\n var events = getEvents(pointerTypes, 'cancel');\r\n if (events) {\r\n element.on(events, function(event) {\r\n active = false;\r\n if (eventHandlers['cancel']) {\r\n eventHandlers['cancel'](event);\r\n }\r\n });\r\n }\r\n\r\n element.on(getEvents(pointerTypes, 'move'), function(event) {\r\n if (!active) return;\r\n\r\n // Android will send a touchcancel if it thinks we're starting to scroll.\r\n // So when the total distance (+ or - or both) exceeds 10px in either direction,\r\n // we either:\r\n // - On totalX > totalY, we send preventDefault() and treat this as a swipe.\r\n // - On totalY > totalX, we let the browser handle it as a scroll.\r\n\r\n if (!startCoords) return;\r\n var coords = getCoordinates(event);\r\n\r\n totalX += Math.abs(coords.x - lastPos.x);\r\n totalY += Math.abs(coords.y - lastPos.y);\r\n\r\n lastPos = coords;\r\n\r\n if (totalX < MOVE_BUFFER_RADIUS && totalY < MOVE_BUFFER_RADIUS) {\r\n return;\r\n }\r\n\r\n // One of totalX or totalY has exceeded the buffer, so decide on swipe vs. scroll.\r\n if (totalY > totalX) {\r\n // Allow native scrolling to take over.\r\n active = false;\r\n if (eventHandlers['cancel']) {\r\n eventHandlers['cancel'](event);\r\n }\r\n return;\r\n } else {\r\n // Prevent the browser from scrolling.\r\n event.preventDefault();\r\n if (eventHandlers['move']) {\r\n eventHandlers['move'](coords, event);\r\n }\r\n }\r\n });\r\n\r\n element.on(getEvents(pointerTypes, 'end'), function(event) {\r\n if (!active) return;\r\n active = false;\r\n if (eventHandlers['end']) {\r\n eventHandlers['end'](getCoordinates(event), event);\r\n }\r\n });\r\n }\r\n };\r\n}]);\r\n\r\n/* global ngTouch: false */\r\n\r\n/**\r\n * @ngdoc directive\r\n * @name ngSwipeLeft\r\n *\r\n * @deprecated\r\n * sinceVersion=\"1.7.0\"\r\n *\r\n * See the {@link ngTouch module} documentation for more information.\r\n *\r\n * @description\r\n * Specify custom behavior when an element is swiped to the left on a touchscreen device.\r\n * A leftward swipe is a quick, right-to-left slide of the finger.\r\n * Though ngSwipeLeft is designed for touch-based devices, it will work with a mouse click and drag\r\n * too.\r\n *\r\n * To disable the mouse click and drag functionality, add `ng-swipe-disable-mouse` to\r\n * the `ng-swipe-left` or `ng-swipe-right` DOM Element.\r\n *\r\n * Requires the {@link ngTouch `ngTouch`} module to be installed.\r\n *\r\n * @element ANY\r\n * @param {expression} ngSwipeLeft {@link guide/expression Expression} to evaluate\r\n * upon left swipe. (Event object is available as `$event`)\r\n *\r\n * @example\r\n \r\n \r\n
\r\n Some list content, like an email in the inbox\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n angular.module('ngSwipeLeftExample', ['ngTouch']);\r\n \r\n \r\n */\r\n\r\n/**\r\n * @ngdoc directive\r\n * @name ngSwipeRight\r\n *\r\n * @deprecated\r\n * sinceVersion=\"1.7.0\"\r\n *\r\n * See the {@link ngTouch module} documentation for more information.\r\n *\r\n * @description\r\n * Specify custom behavior when an element is swiped to the right on a touchscreen device.\r\n * A rightward swipe is a quick, left-to-right slide of the finger.\r\n * Though ngSwipeRight is designed for touch-based devices, it will work with a mouse click and drag\r\n * too.\r\n *\r\n * Requires the {@link ngTouch `ngTouch`} module to be installed.\r\n *\r\n * @element ANY\r\n * @param {expression} ngSwipeRight {@link guide/expression Expression} to evaluate\r\n * upon right swipe. (Event object is available as `$event`)\r\n *\r\n * @example\r\n \r\n \r\n
\r\n Some list content, like an email in the inbox\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n angular.module('ngSwipeRightExample', ['ngTouch']);\r\n \r\n \r\n */\r\n\r\nfunction makeSwipeDirective(directiveName, direction, eventName) {\r\n ngTouch.directive(directiveName, ['$parse', '$swipe', function($parse, $swipe) {\r\n // The maximum vertical delta for a swipe should be less than 75px.\r\n var MAX_VERTICAL_DISTANCE = 75;\r\n // Vertical distance should not be more than a fraction of the horizontal distance.\r\n var MAX_VERTICAL_RATIO = 0.3;\r\n // At least a 30px lateral motion is necessary for a swipe.\r\n var MIN_HORIZONTAL_DISTANCE = 30;\r\n\r\n return function(scope, element, attr) {\r\n var swipeHandler = $parse(attr[directiveName]);\r\n\r\n var startCoords, valid;\r\n\r\n function validSwipe(coords) {\r\n // Check that it's within the coordinates.\r\n // Absolute vertical distance must be within tolerances.\r\n // Horizontal distance, we take the current X - the starting X.\r\n // This is negative for leftward swipes and positive for rightward swipes.\r\n // After multiplying by the direction (-1 for left, +1 for right), legal swipes\r\n // (ie. same direction as the directive wants) will have a positive delta and\r\n // illegal ones a negative delta.\r\n // Therefore this delta must be positive, and larger than the minimum.\r\n if (!startCoords) return false;\r\n var deltaY = Math.abs(coords.y - startCoords.y);\r\n var deltaX = (coords.x - startCoords.x) * direction;\r\n return valid && // Short circuit for already-invalidated swipes.\r\n deltaY < MAX_VERTICAL_DISTANCE &&\r\n deltaX > 0 &&\r\n deltaX > MIN_HORIZONTAL_DISTANCE &&\r\n deltaY / deltaX < MAX_VERTICAL_RATIO;\r\n }\r\n\r\n var pointerTypes = ['touch'];\r\n if (!angular.isDefined(attr['ngSwipeDisableMouse'])) {\r\n pointerTypes.push('mouse');\r\n }\r\n $swipe.bind(element, {\r\n 'start': function(coords, event) {\r\n startCoords = coords;\r\n valid = true;\r\n },\r\n 'cancel': function(event) {\r\n valid = false;\r\n },\r\n 'end': function(coords, event) {\r\n if (validSwipe(coords)) {\r\n scope.$apply(function() {\r\n element.triggerHandler(eventName);\r\n swipeHandler(scope, {$event: event});\r\n });\r\n }\r\n }\r\n }, pointerTypes);\r\n };\r\n }]);\r\n}\r\n\r\n// Left is negative X-coordinate, right is positive.\r\nmakeSwipeDirective('ngSwipeLeft', -1, 'swipeleft');\r\nmakeSwipeDirective('ngSwipeRight', 1, 'swiperight');\r\n\r\n\r\n\r\n})(window, window.angular);","'use strict';\r\n\r\n(function () {\r\n var x;\r\n /**\r\n * @description Check if explicit consent\r\n * @returns {Boolean} true if loaded\r\n */\r\n function checkConsent() {\r\n return window.dataLayer.some(function (event) {\r\n return event['consent_status']; // eslint-disable-line\r\n });\r\n }\r\n\r\n /**\r\n * @description Run auto events\r\n * @returns {Void} void\r\n */\r\n function runAutoEvent() {\r\n var oldLayer = window.dynamic_tm_data;\r\n var categoryPath = window.jwsdwProductDetailSettings.data.categoryPath;\r\n\r\n window.dataLayer.push({\r\n event: 'eec.productDetailImpression',\r\n eventCategory: 'ecommerce',\r\n eventAction: 'product detail impression',\r\n eventLabel: 'product detail page',\r\n eventValue: oldLayer.productPriceWithVAT,\r\n nonInteraction: true,\r\n ecommerce: {\r\n currencyCode: oldLayer.currency,\r\n detail: {\r\n actionField: {\r\n list: 'product detail page'\r\n },\r\n products: [\r\n {\r\n name: oldLayer.productname,\r\n id: oldLayer.productid,\r\n price: oldLayer.productPriceWithVAT,\r\n brand: (oldLayer.productbrand || '').replace(\r\n '&',\r\n '&'\r\n ),\r\n category: oldLayer.categoryid,\r\n variant: oldLayer.productColorName,\r\n list: 'product detail page',\r\n dimension13: oldLayer.productid.split('_').shift(),\r\n dimension14:\r\n categoryPath[categoryPath.length - 1].id\r\n }\r\n ]\r\n }\r\n }\r\n });\r\n }\r\n if (!!window.google_tag_manager) {\r\n if (checkConsent()) {\r\n runAutoEvent();\r\n return;\r\n }\r\n x = window.dataLayer.push;\r\n window.dataLayer.push = function (obj) {\r\n x(obj);\r\n if (obj.event === 'consent_status' && obj.type === 'explicit') {\r\n runAutoEvent();\r\n }\r\n };\r\n } else {\r\n window.addEventListener('gtm_loaded', function () {\r\n if (checkConsent()) {\r\n runAutoEvent();\r\n return;\r\n }\r\n x = window.dataLayer.push;\r\n window.dataLayer.push = function (obj) {\r\n x(obj);\r\n if (obj.event === 'consent_status' && obj.type === 'explicit') {\r\n runAutoEvent();\r\n }\r\n };\r\n });\r\n }\r\n}());\r\n\r\n(function (window, document, $, Swiper) { // eslint-disable-line max-statements\r\n var isCustomSize = window.location.hash.length && window.location.hash.indexOf('size') > -1;\r\n if (isCustomSize) {\r\n let hash = decodeURIComponent(window.location.hash)\r\n .replace('#size=', '')\r\n .split('|');\r\n for (let i = 0; i < $('.jwsdw-pdp-size .jwsdw-product-swatch-selectable span').length; i++) {\r\n for (let j = 0; j < hash.length; j++) {\r\n if ($($('.jwsdw-pdp-size .jwsdw-product-swatch-selectable span')[i]).text().trim() === hash[j]) {\r\n $($('.jwsdw-pdp-size .jwsdw-product-swatch-selectable span')[i]).click();\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n //Inits availability update\r\n initAvailabilityUpdate();\r\n\r\n //Inits promotions update\r\n initPromotionsUpdate();\r\n\r\n //Inits image gallery swiper for mobile\r\n initImageGallerySwiper();\r\n\r\n //Inits the sticky add toc art button\r\n initStickyCTAs();\r\n\r\n //Inits SAIZ tool listener\r\n initSaizToolListener();\r\n\r\n $(document).on('click', '.jwsdw-pdp-social-twitter', function () {\r\n updateMetaDataSocial();\r\n\r\n window.open($(this).data('href'), '', 'width=700, height=700');\r\n\r\n /**\r\n * @description Method to update social meta data\r\n * @returns {Boolean} true\r\n */\r\n function updateMetaDataSocial() {\r\n var metaImage = $('head meta[property=\"og:image\"]'),\r\n firstThumbnail = $(document)\r\n .find('.jwsdw-pdp-thumbGalleryContainer img')\r\n .first(),\r\n ogimageurl =\r\n firstThumbnail.length > 0 && firstThumbnail.attr('src') ? firstThumbnail.attr('src') : '',\r\n newMetaImage = $(\r\n ''\r\n );\r\n\r\n if (metaImage.length > 0) {\r\n metaImage.replaceWith(newMetaImage);\r\n } else {\r\n $('head').append(newMetaImage);\r\n }\r\n\r\n if ($('head meta[property=\"og:type\"]').length === 0) {\r\n $('head').append(\r\n $('')\r\n );\r\n }\r\n\r\n return true;\r\n }\r\n });\r\n\r\n $('#jws-pdp-showLess').on('click', function () {\r\n $('#jwsdw-pdp-productShortDesc').toggleClass('jws-hidden');\r\n $('#jwsdw-pdp-productLongDesc').toggleClass('jws-hidden');\r\n });\r\n\r\n $('#jws-pdp-showMore').on('click', function () {\r\n $('#jwsdw-pdp-productShortDesc').toggleClass('jws-hidden');\r\n $('#jwsdw-pdp-productLongDesc').toggleClass('jws-hidden');\r\n });\r\n\r\n $('[data-show-product-details]').on('click', function () {\r\n $(this).find('.jws-product-information').toggleClass('jws-hidden');\r\n $(this).find('.jws-show-less').toggleClass('jws-hidden');\r\n $(this)\r\n .parent()\r\n .find('.jws-product-details-info')\r\n .toggleClass('jws-hidden');\r\n });\r\n\r\n $('.jwsdw-pdp-mobileImageGallery').on('click', function () {\r\n setTimeout(function () {\r\n $('.jwsdw-pdp-zoomIcon-mobile').hide();\r\n }, 3000);\r\n });\r\n\r\n $('.jwsdw-pdp-imageViewer').on('click', function () {\r\n $('.jwsdw-pdp-zoomIcon-desktop').hide();\r\n });\r\n\r\n $('.jwsdw-pdp-imageViewer').on('touchstart', function () {\r\n $('.jwsdw-pdp-zoomIcon-mobile').hide();\r\n });\r\n\r\n // Open image viewer event\r\n $(document).on('click', '[data-image-zoom]', initImageViewer);\r\n\r\n // Open guide event\r\n $('[data-open-guide]').on('click', function (e) {\r\n e.preventDefault();\r\n const $productData = $('.product-data');\r\n const variationAttributes = $productData.data('productVariationAttributes');\r\n const pickerName = $(this).data('openGuide');\r\n\r\n const availableSizes = variationAttributes.filter(function (attr) {\r\n return attr.id === 'size';\r\n }).map(function (attr) {\r\n const availableSizeArray = [];\r\n Object.values(attr.values).forEach(function (valuesArray) {\r\n valuesArray.forEach(function (value) {\r\n if (value.selectable) {\r\n availableSizeArray.push(value.id.replace('B', ''));\r\n }\r\n });\r\n });\r\n return availableSizeArray;\r\n }).flat();\r\n\r\n window.jwsdwMediator.publish('openPicker', pickerName, {\r\n gender: window.jwsdwSizeGuide.gender,\r\n type: window.jwsdwSizeGuide.type,\r\n level: 1,\r\n availableSizes: availableSizes\r\n });\r\n });\r\n\r\n // Notify me event\r\n $('[data-open-notify-me]').on('click', openNotifyMePicker);\r\n\r\n // Wishlist event\r\n $('.jwsdw-pdp-button-whishlist').on('click', function () {\r\n const jwsdwSettings = window.jwsdwSettings;\r\n $(this).prop('disabled', true);\r\n const isInWishlist = $(this).data('isInWishlist');\r\n\r\n if (!isInWishlist) {\r\n if (\r\n !jwsdwSettings.customerAuthenticated &&\r\n jwsdwSettings.wishlist.count ===\r\n jwsdwSettings.maxWishlistItemsForGuest\r\n ) {\r\n window.jwsdwMediator.publish('openPicker', 'loginPicker', {\r\n callback: function () {\r\n addToWishlist($(this));\r\n }\r\n });\r\n $(this).prop('disabled', false);\r\n return;\r\n }\r\n\r\n addToWishlist($(this));\r\n return;\r\n }\r\n\r\n removeFromWishlist($(this));\r\n });\r\n\r\n $('#buy-now-online').on('click', function () {\r\n checkIfSizeSelected();\r\n });\r\n\r\n // Add to cart event\r\n $('.jwsdw-pdp-addToCartButton').on('click', function () {\r\n const hasSizeSelected = checkIfSizeSelected();\r\n if (hasSizeSelected) {\r\n addToCart($(this));\r\n }\r\n });\r\n\r\n // Giftcard swatch selection\r\n $('.jwsdw-product-swatch-giftcard').on('click', function () {\r\n const $giftcardSwatchesWrapper = $('.jwsdw-giftcard-amount-wrapper');\r\n $('.no-size-selected-warning').addClass('jws-hidden');\r\n $giftcardSwatchesWrapper\r\n .find('.jwsdw-product-swatch-giftcard.jwsdw-product-swatch-active')\r\n .removeClass('jwsdw-product-swatch-active')\r\n .addClass('jwsdw-product-swatch-selectable');\r\n $(this)\r\n .addClass('jwsdw-product-swatch-active')\r\n .removeClass('jwsdw-product-swatch-selectable');\r\n\r\n $('.jws-giftcard-pricing span').text($(this).data('giftcardPriceFormatted'));\r\n $('#jwsdw-giftcardAmount').val($(this).data('giftcardPrice'));\r\n $('.product-data').data('selectedPrice', $(this).data('giftcardPrice'));\r\n $('.jwsdw-pdp-cartButton').prop('disabled', false);\r\n\r\n $giftcardSwatchesWrapper\r\n .find('.jwsdw-add-giftcard-amount')\r\n .removeClass('jws-hidden');\r\n $giftcardSwatchesWrapper\r\n .find('.jwsdw-edit-giftcard-amount')\r\n .addClass('jws-hidden');\r\n\r\n const $stickyCartButtonLabel = $('#jwsdw-stickyAddToCart .jwsdw-pdp-addToCartButton .jwsdw-pdp-cartButtonLabel');\r\n $stickyCartButtonLabel.text($stickyCartButtonLabel.data('addToCartTitle'));\r\n });\r\n\r\n // Open giftcard amount editor\r\n $('[data-giftcard-picker-open]').on('click', function () {\r\n $('.no-size-selected-warning').addClass('jws-hidden');\r\n window.jwsdwMediator.publish('openPicker', 'giftcardAmountPicker', {\r\n isVisible: true\r\n });\r\n });\r\n\r\n // Giftcard custom amount selection\r\n $(document).on('click', '[data-giftcard-set-custom-amount]', function () {\r\n const $giftcardSwatchesWrapper = $('.jwsdw-giftcard-amount-wrapper');\r\n const $customAmountFormWrapper = $(this).parent();\r\n const $customAmountForm = $customAmountFormWrapper.find('form');\r\n const $customAmountInput = $customAmountFormWrapper.find('input#giftcardInput');\r\n\r\n $customAmountForm.validate({\r\n rules: {\r\n giftcardInput: {\r\n required: true,\r\n number: true,\r\n min: 10,\r\n max: 250\r\n }\r\n },\r\n messages: {\r\n giftcardInput: {\r\n required: $customAmountInput.data('pricingError'),\r\n min: $customAmountInput.data('pricingError'),\r\n max: $customAmountInput.data('pricingError')\r\n }\r\n }\r\n });\r\n\r\n if (!$customAmountForm.valid()) {\r\n return;\r\n }\r\n\r\n window.jwsdwMediator.publish('closePicker', 'giftcardAmountPicker', true);\r\n\r\n const customAmount = $customAmountInput.val();\r\n const $amountSwatch = $giftcardSwatchesWrapper.find(\r\n `.jwsdw-product-swatch[data-giftcard-price=\"${customAmount}\"]`\r\n );\r\n\r\n if ($amountSwatch && $amountSwatch.length > 0) {\r\n $amountSwatch.trigger('click');\r\n return;\r\n }\r\n\r\n const $amountPickerButton = $giftcardSwatchesWrapper.find('.jwsdw-add-giftcard-amount');\r\n if ($amountPickerButton.length > 0) {\r\n $amountPickerButton.addClass('jws-hidden');\r\n }\r\n\r\n const $amountEditButton = $giftcardSwatchesWrapper.find('.jwsdw-edit-giftcard-amount');\r\n if ($amountEditButton.length > 0) {\r\n const formattedPrice = window.jwsdwUtil.formatPrice(Number(customAmount));\r\n $amountEditButton.find('span').text(formattedPrice);\r\n $('.jws-giftcard-pricing span').text(formattedPrice);\r\n\r\n $amountEditButton.removeClass('jws-hidden');\r\n $giftcardSwatchesWrapper\r\n .find('.jwsdw-product-swatch-giftcard.jwsdw-product-swatch-active')\r\n .removeClass('jwsdw-product-swatch-active')\r\n .addClass('jwsdw-product-swatch-selectable');\r\n }\r\n\r\n $('#jwsdw-giftcardAmount').val(customAmount);\r\n $('.product-data').data('selectedPrice', customAmount);\r\n $('.jwsdw-pdp-cartButton').prop('disabled', false);\r\n const $stickyCartButtonLabel = $('#jwsdw-stickyAddToCart .jwsdw-pdp-addToCartButton .jwsdw-pdp-cartButtonLabel');\r\n $stickyCartButtonLabel.text($stickyCartButtonLabel.data('addToCartTitle'));\r\n });\r\n\r\n // Switch variant event\r\n $(document).on('click', '[data-select-variation]', handleVariationChange);\r\n\r\n // Open store availability picker\r\n $(document).on('click', '.jwsdw-pdp-button-availability', openStoreAvailabilityPicker);\r\n\r\n /**\r\n * Check if the user has selected a size\r\n * @returns {void}\r\n */\r\n function checkIfSizeSelected() {\r\n const $productData = $('.product-data');\r\n const selectedVariation = $productData.data('isGiftcard') ? $productData.data('selectedPrice') : $productData.data('selectedSize');\r\n const isOneSizeProduct = $productData.data('productVariationAttributes').find((attr) => attr.id === 'size').displayValue.toLowerCase() === 'one size';\r\n if (!selectedVariation && !isOneSizeProduct) {\r\n const observer = new IntersectionObserver(function (entries) {\r\n entries.forEach(function (entry) {\r\n if (!entry.isIntersecting) {\r\n $('.jwsdw-pdp-productTitle')[0].scrollIntoView({\r\n behavior: 'smooth',\r\n block: 'start'\r\n });\r\n }\r\n\r\n observer.unobserve(entry.target);\r\n });\r\n });\r\n\r\n if ($('.no-size-selected-warning').length > 0) {\r\n observer.observe($('.no-size-selected-warning')[0], {\r\n rootMargin: '60px',\r\n threshold: 1.0\r\n });\r\n $('.no-size-selected-warning').removeClass('jws-hidden');\r\n }\r\n\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n /**\r\n * Initialize the availability update for the product\r\n * @returns {void}\r\n */\r\n function initAvailabilityUpdate() {\r\n if (window.UNCACHED_DATA && window.UNCACHED_DATA.AVAILABILITY) {\r\n updateProductData(null, window.UNCACHED_DATA.AVAILABILITY.variationAttributes);\r\n updateColorVariationLinks(window.UNCACHED_DATA.AVAILABILITY.variationAttributes.find((attr) => attr.id === 'color'));\r\n updateAvailability(window.UNCACHED_DATA.AVAILABILITY.variationAttributes.find((attr) => attr.id === 'size'));\r\n } else {\r\n window.addEventListener('uncachedDataLoaded-availability', function () {\r\n updateProductData(null, window.UNCACHED_DATA.AVAILABILITY.variationAttributes);\r\n updateColorVariationLinks(window.UNCACHED_DATA.AVAILABILITY.variationAttributes.find((attr) => attr.id === 'color'));\r\n updateAvailability(window.UNCACHED_DATA.AVAILABILITY.variationAttributes.find((attr) => attr.id === 'size'));\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Initialize the promotions update for the product\r\n * @returns {void}\r\n */\r\n function initPromotionsUpdate() {\r\n if (window.UNCACHED_DATA && window.UNCACHED_DATA.PROMOTIONS) {\r\n updateSelectedPromotions(window.UNCACHED_DATA.PROMOTIONS.promotions);\r\n } else {\r\n window.addEventListener('uncachedDataLoaded-promotions', function () {\r\n updateSelectedPromotions(window.UNCACHED_DATA.PROMOTIONS.promotions);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Adds to wishlist the desired product\r\n * @param {jQuery} $wishlistButton - the wishlist button element\r\n * @returns {void}\r\n */\r\n function addToWishlist($wishlistButton) {\r\n $wishlistButton.prop('disabled', true);\r\n\r\n const $productData = $('.product-data');\r\n const productId = $productData.data('productId');\r\n const url = $wishlistButton.data('addToWishlistUrl');\r\n\r\n /* Preparing payload */\r\n const payload = {\r\n productId\r\n };\r\n payload[window.jwsdwSettings.csrfTokenName] =\r\n window.jwsdwSettings.csrfTokenValue;\r\n\r\n $.ajax({\r\n url,\r\n method: 'POST',\r\n data: payload,\r\n dataType: 'json',\r\n success: (data) => {\r\n window.jwsdwSettings.wishlist.products.push({\r\n id: data.itemId,\r\n pid: data.productId,\r\n color: data.color\r\n });\r\n\r\n $wishlistButton.find('.not-wishlisted').addClass('jws-hidden');\r\n $wishlistButton.find('.wishlisted').removeClass('jws-hidden');\r\n $wishlistButton.data('isInWishlist', true);\r\n $wishlistButton.attr('aria-checked', true);\r\n\r\n window.jwsdwMediator.publish('setWishlistCount', data.items);\r\n window.jwsdwMediator.publish('updateWishlist', data.wishlist);\r\n },\r\n error: (error) => {\r\n if (error.code === 'MAXIMUM_WISHLIST_ITEMS_FOR_GUEST') {\r\n window.jwsdwMediator.publish('openPicker', 'loginPicker', {\r\n showMaxGuestWishlistMessage: true,\r\n callback: () => {\r\n addToWishlist($wishlistButton);\r\n }\r\n });\r\n } else {\r\n // TO-DO error handling\r\n }\r\n },\r\n complete: () => {\r\n $wishlistButton.prop('disabled', false);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Removes product from wishlist\r\n * @param {jQuery.element} $wishlistButton - the wishlist button element\r\n * @returns {void}\r\n */\r\n function removeFromWishlist($wishlistButton) {\r\n const wishlist = window.jwsdwSettings.wishlist;\r\n const pid = $wishlistButton.data('masterId').toString();\r\n const color = $wishlistButton.data('selectedColor').toString();\r\n const url = $wishlistButton.data('removeFromWishlistUrl');\r\n\r\n const itemIndex = wishlist.products.findIndex(\r\n (product) => product.pid === pid && product.color === color\r\n );\r\n\r\n /* Preparing payload */\r\n const payload = {\r\n productListId: wishlist.id,\r\n itemId: wishlist.products[itemIndex].id\r\n };\r\n payload[window.jwsdwSettings.csrfTokenName] =\r\n window.jwsdwSettings.csrfTokenValue;\r\n\r\n $.ajax({\r\n url,\r\n method: 'POST',\r\n data: payload,\r\n dataType: 'json',\r\n success: (data) => {\r\n wishlist.products.splice(itemIndex, 1);\r\n\r\n $wishlistButton.find('.wishlisted').addClass('jws-hidden');\r\n $wishlistButton\r\n .find('.not-wishlisted')\r\n .removeClass('jws-hidden');\r\n $wishlistButton.data('isInWishlist', false);\r\n $wishlistButton.attr('aria-checked', false);\r\n\r\n window.jwsdwMediator.publish('setWishlistCount', data.items);\r\n },\r\n error: () => {\r\n // TO-DO error handling\r\n },\r\n complete: () => {\r\n $wishlistButton.prop('disabled', false);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Adds product to cart\r\n * @param {jQuery.element} $cartButton - the cart button element\r\n * @returns {void}\r\n */\r\n function addToCart($cartButton) {\r\n $cartButton.spinner().start();\r\n $cartButton.addClass('jwsdw-progressButton');\r\n const url = $cartButton.data('addToCartUrl');\r\n const $productData = $('.product-data');\r\n const productId = $productData.data('productId');\r\n const isGiftcard = $productData.data('isGiftcard');\r\n\r\n const payload = {\r\n productId\r\n };\r\n\r\n const productToAdd = {\r\n id: productId,\r\n name: $productData.data('productName'),\r\n price: $productData.data('selectedPrice'),\r\n isBonusProduct: false\r\n };\r\n\r\n if (isGiftcard) {\r\n payload.price = $productData.data('selectedPrice');\r\n }\r\n\r\n let productData = {\r\n products: [productToAdd],\r\n level: 1\r\n };\r\n\r\n payload[window.jwsdwSettings.csrfTokenName] =\r\n window.jwsdwSettings.csrfTokenValue;\r\n\r\n window.jwsdwMediator.publish(\r\n 'openPicker',\r\n 'cartPicker',\r\n productData\r\n );\r\n\r\n $.ajax({\r\n url,\r\n method: 'POST',\r\n data: payload,\r\n dataType: 'json',\r\n success: (data) => {\r\n productData = Object.assign(productData, data);\r\n\r\n productData.addToCartSuccessful = true;\r\n window.jwsdwMediator.publish(\r\n 'updatePicker',\r\n 'cartPicker',\r\n productData\r\n );\r\n window.jwsdwMediator.publish(\r\n 'updatePicker',\r\n 'expressCheckoutPicker',\r\n productData\r\n );\r\n window.jwsdwMediator.publish(\r\n 'setCartCount',\r\n productData.totalItems\r\n );\r\n },\r\n error: () => {\r\n // TO-DO error handling\r\n },\r\n complete: () => {\r\n $cartButton.spinner().stop();\r\n $cartButton.removeClass('jwsdw-progressButton');\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Initialize image gallery swiper\r\n * @returns {void}\r\n */\r\n function initImageGallerySwiper() {\r\n const gallerySwiper = new Swiper('#jwsdw-pdp-mobileImageSwiper', {// eslint-disable-line no-unused-vars\r\n slidesPerView: 1,\r\n navigation: {\r\n nextEl: '.swiper-button-next',\r\n prevEl: '.swiper-button-prev'\r\n },\r\n on: {\r\n slideChange: function (swiper) {\r\n updatePagination(\r\n $('#jwsdw-pdp-mobileImageSwiper'),\r\n swiper.activeIndex\r\n );\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Init the sticky add to cart button observer\r\n * @returns {void}\r\n */\r\n function initStickyCTAs() {\r\n const pdpCTAsContainer = document.querySelector('#jwsdw-pdp-ctas');\r\n const $stickyCTAsContainer = $('#jwsdw-stickyAddToCart');\r\n\r\n const options = {\r\n root: null,\r\n rootMargin: '0px',\r\n threshold: 0\r\n };\r\n\r\n const observer = new IntersectionObserver(function (entries) {\r\n entries.forEach(function (entry) {\r\n if (!entry.isIntersecting && entry.boundingClientRect.top < 0) {\r\n $stickyCTAsContainer.removeClass('jws-hidden');\r\n } else {\r\n $stickyCTAsContainer.addClass('jws-hidden');\r\n }\r\n });\r\n }, options);\r\n\r\n observer.observe(pdpCTAsContainer);\r\n }\r\n\r\n /**\r\n * Open zoom image viewer\r\n * @param {event} e - the current event\r\n * @returns {void}\r\n */\r\n function initImageViewer() {\r\n $('body').addClass('jws-overflowYHidden');\r\n const $imageViewContainer = $('[data-jwsdw-image-viewer]');\r\n const slideId = $(this).data('slideId');\r\n const $imageViewTemplate = $('#imageViewer').html();\r\n\r\n $imageViewContainer.html($imageViewTemplate);\r\n const $thumbnailContainer = $('#jwsdw-productThumbsSlider .swiper-wrapper');\r\n const $mainSliderContainer = $('#jwsdw-productImageSlider .swiper-wrapper');\r\n const selectedColor = $('.product-data').data('selectedColor');\r\n const storedMedia = $('.product-media').data('productMedia');\r\n const colorImages = storedMedia[selectedColor] ? storedMedia[selectedColor].images : [];\r\n const imagesToProcess = colorImages.full;\r\n const thumbnailImages = imagesToProcess.thumbGallery || colorImages.full;\r\n\r\n imagesToProcess.forEach((image, index) => {\r\n const $mainImage = $($('#imageViewerImageTemplate').html());\r\n\r\n // General image props\r\n processImageProps($mainImage, image, index);\r\n\r\n $mainImage.find('.jwsdw-imageContainer').prop('id', `jwsdw-imageContainer-${index}`);\r\n $mainImage.find('img').prop('id', `${index}-imageViewer`);\r\n\r\n $mainSliderContainer.append($mainImage);\r\n window.jwsdwApi.pinch.initPinch(index);\r\n });\r\n\r\n thumbnailImages.forEach((image, index) => {\r\n const $thumbnail = $($('#thumbnailImageTemplate').html());\r\n\r\n processImageProps($thumbnail, image, index);\r\n\r\n // Custom image viewer props\r\n $thumbnail.find('img').prop('id', `${index}-imageViewer`);\r\n $thumbnail.attr('data-slide-id', index); // unfortunately we need to use attr here to alter the actual attribute on the element for the swiper to work as expected\r\n\r\n $thumbnailContainer.append($thumbnail);\r\n });\r\n\r\n // eslint-disable-next-line no-unused-vars\r\n const thumbSwiper = new Swiper('#jwsdw-productThumbsSlider', {\r\n slidesPerView: 'auto',\r\n initialSlide: slideId,\r\n direction: 'vertical',\r\n on: {\r\n init: function () {\r\n $(\r\n `#jwsdw-productThumbsSlider [data-slide-id=${slideId}]`\r\n ).addClass('swiper-slide-thumb-active');\r\n }\r\n }\r\n });\r\n\r\n // eslint-disable-next-line no-unused-vars\r\n const mainSwiper = new Swiper('#jwsdw-productImageSlider', {\r\n slidesPerView: 1,\r\n initialSlide: slideId,\r\n navigation: {\r\n nextEl: '.swiper-button-next',\r\n prevEl: '.swiper-button-prev'\r\n },\r\n on: {\r\n init: function (swiper) {\r\n updatePagination(\r\n $('#jwsdw-productImageSlider'),\r\n swiper.activeIndex,\r\n swiper.slides.length\r\n );\r\n\r\n if (window.matchMedia('(max-width: 900px)').matches) {\r\n $('.jwsdw-pdp-zoomIcon-mobile').show();\r\n } else {\r\n $('.jwsdw-pdp-zoomIcon-desktop').show();\r\n }\r\n\r\n setTimeout(function () {\r\n if (window.matchMedia('(max-width: 900px)').matches) {\r\n $('.jwsdw-pdp-zoomIcon-mobile').hide();\r\n } else {\r\n $('.jwsdw-pdp-zoomIcon-desktop').hide();\r\n }\r\n }, 3000);\r\n },\r\n slideChange: function (swiper) {\r\n // eslint-disable-line no-undef\r\n updateActiveThumbsSlide(swiper.activeIndex);\r\n }\r\n }\r\n });\r\n\r\n initImageViewerEvents();\r\n }\r\n\r\n /**\r\n * Close image viewer\r\n * @returns {void}\r\n */\r\n function closeImageViewer() {\r\n $('body').removeClass('jws-overflowYHidden');\r\n $('[data-jwsdw-image-viewer]').html('');\r\n }\r\n\r\n /**\r\n * Initialize image viewer events\r\n * @returns {void}\r\n */\r\n function initImageViewerEvents() {\r\n $('[data-image-viewer-close]').on('click', closeImageViewer);\r\n\r\n $('#jwsdw-productThumbsSlider .swiper-slide').on('click', function () {\r\n const slideId = $(this).data('slideId');\r\n if (typeof slideId === 'number') {\r\n $('#jwsdw-productImageSlider')[0].swiper.slideTo(slideId);\r\n }\r\n updateActiveThumbsSlide(slideId);\r\n });\r\n }\r\n\r\n /**\r\n * Update active thumbs slide\r\n * @param {number} slideId - the slide id\r\n * @returns {void}\r\n */\r\n function updateActiveThumbsSlide(slideId) {\r\n $('#jwsdw-productThumbsSlider .swiper-slide-thumb-active').removeClass(\r\n 'swiper-slide-thumb-active'\r\n );\r\n $(`#jwsdw-productThumbsSlider [data-slide-id=${slideId}]`).addClass(\r\n 'swiper-slide-thumb-active'\r\n );\r\n updatePagination($('#jwsdw-productImageSlider'), slideId);\r\n }\r\n\r\n /**\r\n * Update the display pagination for the swiper\r\n * @param {jQuery} $container - swiper container\r\n * @param {number} currentIndex - current slide\r\n * @param {number} totalSlides - total number of slides\r\n * @returns {void}\r\n */\r\n function updatePagination($container, currentIndex, totalSlides) {\r\n const $paginationCurrent = $container.find(\r\n '.swiper-pagination-current'\r\n );\r\n const $paginationTotal = $container.find('.swiper-pagination-total');\r\n $paginationCurrent.text(currentIndex + 1);\r\n if (totalSlides && totalSlides !== $paginationTotal.text()) {\r\n $paginationTotal.text(totalSlides);\r\n }\r\n }\r\n\r\n /**\r\n * Handle the variation change\r\n * @param {event} e - the current event\r\n * @returns {void}\r\n */\r\n function handleVariationChange(e) {\r\n e.preventDefault();\r\n\r\n if ($(this).hasClass('jwsdw-product-swatch-active')) {\r\n return;\r\n }\r\n\r\n const sizeId = $(this).data('sizeId');\r\n const isColorChange = $(this).hasClass('jwsdw-product-color');\r\n const $cartButton = $('.jwsdw-pdp-addToCartButton');\r\n const $stickyCartButton = $('#jwsdw-stickyAddToCart .jwsdw-pdp-addToCartButton');\r\n const $notifyMe = $cartButton.siblings('.jwsdw-pdp-notifyMe');\r\n const $stickyNotifyMe = $stickyCartButton.siblings('.jwsdw-pdp-notifyMe');\r\n const $productData = $('.product-data');\r\n\r\n if (isColorChange) {\r\n $(this).addClass('jwsdw-product-color-active');\r\n $(this).siblings('.jwsdw-product-color-active').removeClass('jwsdw-product-color-active');\r\n handleProductImageChange($(this).data('colorId'));\r\n } else {\r\n $productData.data('selectedSize', sizeId);\r\n\r\n const $selectedSwatch = $(this).parents('.jwsdw-pdp-size').find('.jwsdw-product-swatch-active');\r\n $selectedSwatch\r\n .toggleClass('jwsdw-product-swatch-selectable', !$selectedSwatch.hasClass('jwsdw-not-in-stock'))\r\n .removeClass('jwsdw-product-swatch-active');\r\n\r\n $(this)\r\n .addClass('jwsdw-product-swatch-active')\r\n .removeClass('jwsdw-product-swatch-selectable');\r\n }\r\n\r\n const url = $(this).data('selectVariation');\r\n const availabilityUrl = $(this).data('availabilityUrl');\r\n const promotionsUrl = $(this).data('promotionsUrl');\r\n const seoUrl = $(this).data('href');\r\n\r\n $('.no-size-selected-warning').addClass('jws-hidden');\r\n\r\n if (!url) {\r\n $productData.data('selectedSize', '');\r\n $cartButton\r\n .addClass('jwsdw-pointerEvents-none jws-opacity-50')\r\n .prop('disabled', 'disabled');\r\n return;\r\n }\r\n\r\n $cartButton.addClass('jwsdw-progressButton');\r\n $cartButton.spinner().start();\r\n if ($notifyMe.length > 0) {\r\n $notifyMe.spinner().start();\r\n }\r\n\r\n if ($stickyNotifyMe.length > 0) {\r\n $stickyNotifyMe.spinner().start();\r\n }\r\n\r\n const variationCall = $.ajax({\r\n url,\r\n method: 'GET',\r\n dataType: 'json'\r\n });\r\n\r\n const promotionsCall = $.ajax({\r\n url: promotionsUrl,\r\n method: 'GET',\r\n dataType: 'json'\r\n });\r\n\r\n const availabilityCall = $.ajax({\r\n url: availabilityUrl,\r\n method: 'GET',\r\n dataType: 'json'\r\n });\r\n\r\n Promise.all([variationCall, promotionsCall, availabilityCall])\r\n .then((responses) => {\r\n const [variationData, promotionsData, availabilityData] = responses;\r\n\r\n if (variationData.meta) {\r\n updateMetaData(variationData.meta);\r\n }\r\n\r\n const state = {};\r\n availabilityData.variationAttributes.forEach((attr) => {\r\n state[attr.id] = attr.displayValue;\r\n });\r\n\r\n window.history.replaceState(state, '', seoUrl);\r\n updateProductData(variationData.product, availabilityData.variationAttributes);\r\n if (isColorChange) {\r\n updateWishlistButton(variationData.product);\r\n }\r\n updateColorVariationLinks(availabilityData.variationAttributes.find((attr) => attr.id === 'color'));\r\n updateAvailability(availabilityData.variationAttributes.find((attr) => attr.id === 'size'));\r\n updatePrice(variationData.product.renderedPrice);\r\n updateProductDetailsInfo(variationData.product.id);\r\n updateProductFlags(variationData.product.activeFlags, variationData.product.cobrandingFlag);\r\n updateSelectedPromotions(promotionsData.promotions);\r\n\r\n const isOneSizeProduct = availabilityData.variationAttributes.find((attr) => attr.id === 'size').displayValue.toLowerCase() === 'one size';\r\n const hasSizeSelected = !!$productData.data('selectedSize') || isOneSizeProduct;\r\n // Update PDP CTAs\r\n $cartButton\r\n .toggleClass('jwsdw-pointerEvents-none jws-opacity-50', hasSizeSelected && !availabilityData.available)\r\n .prop('disabled', hasSizeSelected && !availabilityData.available ? 'disabled' : '');\r\n\r\n if ($notifyMe.length > 0) {\r\n $cartButton.toggleClass('jws-hidden', hasSizeSelected && !availabilityData.available);\r\n $notifyMe.toggleClass('jws-hidden', !hasSizeSelected || availabilityData.available);\r\n $notifyMe.spinner().stop();\r\n }\r\n\r\n // Update sticky CTAs\r\n $stickyCartButton\r\n .prop('disabled', !hasSizeSelected || !availabilityData.available ? 'disabled' : '');\r\n\r\n if ($stickyNotifyMe.length > 0) {\r\n $stickyCartButton.toggleClass('jws-hidden', hasSizeSelected && !availabilityData.available);\r\n $stickyCartButton.siblings('.jwsdw-pdp-notifyMe').toggleClass('jws-hidden', !hasSizeSelected || availabilityData.available);\r\n $stickyNotifyMe.spinner().stop();\r\n }\r\n\r\n const $stickyCartButtonLabel = $stickyCartButton.find('.jwsdw-pdp-cartButtonLabel');\r\n $stickyCartButtonLabel.text(hasSizeSelected ?\r\n $stickyCartButtonLabel.data('addToCartTitle') :\r\n $stickyCartButtonLabel.data('selectSizeTitle'));\r\n\r\n if (hasSizeSelected && !availabilityData.available && $notifyMe.length > 0) {\r\n openNotifyMePicker();\r\n }\r\n\r\n sendSwatchChangeEvent(variationData.product, availabilityData.availability.ats);\r\n })\r\n .catch((error) => {// eslint-disable-line no-unused-vars\r\n // TO-DO error handling\r\n })\r\n .finally(() => {\r\n $cartButton.removeClass('jwsdw-progressButton');\r\n $cartButton.spinner().stop();\r\n });\r\n }\r\n\r\n /**\r\n * Update all the images for the new color id\r\n * @param {Object} colorId - the color id of the new variation\r\n * @returns {void}\r\n */\r\n function handleProductImageChange(colorId) {\r\n const storedMedia = $('.product-media').data('productMedia');\r\n const currentColorMedia = storedMedia[colorId];\r\n const imagesToProcess = currentColorMedia ? currentColorMedia.images : {};\r\n const fullImages = imagesToProcess.full || [];\r\n const largeImages = imagesToProcess.large || imagesToProcess.xlarge || imagesToProcess.full || [];\r\n const xlargeImages = imagesToProcess.xlarge || imagesToProcess.full || [];\r\n const mediumImages = imagesToProcess.medium || imagesToProcess.large || imagesToProcess.xlarge || imagesToProcess.full || [];\r\n const mobileImages = imagesToProcess.small || imagesToProcess.full || [];\r\n const videoToProcess = currentColorMedia ? currentColorMedia.video : null;\r\n\r\n if (!imagesToProcess && !videoToProcess) {\r\n return;\r\n }\r\n\r\n const $mobileImagesContainer = $('.jwsdw-pdp-mobileImageGallery .swiper-wrapper');\r\n const $desktopImagesContainer = $('.jwsdw-pdp-desktopImageGallery');\r\n let index = 0;\r\n\r\n $mobileImagesContainer.html('');\r\n $desktopImagesContainer.html('');\r\n\r\n fullImages.forEach(function (image, imageIndex) {\r\n if (videoToProcess && ((videoToProcess.sortOrder && videoToProcess.sortOrder === index) || (!videoToProcess.sortOrder && index === 0))) {\r\n // Update video template\r\n if (videoToProcess.source && videoToProcess.source.toLowerCase() === 'youtube') {\r\n const $desktopYoutubeVideoContainer = $($('#desktopYoutubeVideoTemplate').html());\r\n $desktopYoutubeVideoContainer.addClass(fullImages.length === 0 ? 'jws-grid-large-column-12 jws-bgColorBone5' : 'jws-grid-large-column-6');\r\n $desktopYoutubeVideoContainer.find('.jwsdw-pdp-mediaItem').data('slideId', index);\r\n updateYoutubeVideo($desktopYoutubeVideoContainer, videoToProcess);\r\n\r\n $desktopImagesContainer.append($desktopYoutubeVideoContainer);\r\n } else {\r\n const $desktopVideoContainer = $($('#desktopVideoTemplate').html());\r\n $desktopVideoContainer.addClass(fullImages.length === 0 ? 'jws-grid-large-column-12 jws-bgColorBone5' : 'jws-grid-large-column-6');\r\n $desktopVideoContainer.find('.jwsdw-pdp-mediaItem').data('slideId', index);\r\n updateDefaultVideo($desktopVideoContainer, videoToProcess);\r\n\r\n $desktopImagesContainer.append($desktopVideoContainer);\r\n }\r\n\r\n index++;\r\n }\r\n\r\n const responsiveImagesObject = {\r\n medium: mediumImages[imageIndex],\r\n large: largeImages[imageIndex],\r\n xlarge: xlargeImages[imageIndex]\r\n };\r\n\r\n const $imageDesktopContainer = $($('#mediaDesktopImage').html());\r\n $imageDesktopContainer.addClass(fullImages.length === 1 && !videoToProcess ? 'jws-grid-large-column-12 jws-bgColorBone5' : 'jws-grid-large-column-6');\r\n $imageDesktopContainer.find('.jwsdw-pdp-mediaItem').toggleClass('jwsdw-pdp-single-mediaItem', fullImages.length === 1);\r\n\r\n processImageProps($imageDesktopContainer.find('.jwsdw-pdp-mediaItem'), image, index, responsiveImagesObject);\r\n\r\n if ($('.product-data').data('hasCobrandingFlag') && imageIndex === 0) {\r\n const $cobrandingFlag = $($('#coBrandingProductFlagTemplate').html());\r\n $imageDesktopContainer.find('.jwsdw-picture').prepend($cobrandingFlag);\r\n }\r\n\r\n $desktopImagesContainer.append($imageDesktopContainer);\r\n\r\n index++;\r\n });\r\n\r\n index = 0;\r\n\r\n mobileImages.forEach(function (image, imageIndex) {\r\n if (videoToProcess && ((videoToProcess.sortOrder && videoToProcess.sortOrder === index) || (!videoToProcess.sortOrder && index === 0))) {\r\n // Update video template\r\n if (videoToProcess.source && videoToProcess.source.toLowerCase() === 'youtube') {\r\n const $mobileYoutubeVideoContainer = $($('#mobileYoutubeVideoTemplate').html());\r\n\r\n $mobileYoutubeVideoContainer.data('slideId', index);\r\n updateYoutubeVideo($mobileYoutubeVideoContainer, videoToProcess);\r\n\r\n $mobileImagesContainer.append($mobileYoutubeVideoContainer);\r\n } else {\r\n const $mobileVideoContainer = $($('#mobileVideoTemplate').html());\r\n\r\n $mobileVideoContainer.data('slideId', index);\r\n updateDefaultVideo($mobileVideoContainer, videoToProcess);\r\n\r\n $mobileImagesContainer.append($mobileVideoContainer);\r\n }\r\n\r\n index++;\r\n }\r\n\r\n const $imageMobileContainer = $($('#mediaMobileImage').html());\r\n processImageProps($imageMobileContainer, image, index);\r\n\r\n if ($('.product-data').data('hasCobrandingFlag') && imageIndex === 0) {\r\n const $cobrandingFlag = $($('#coBrandingProductFlagTemplate').html());\r\n $imageMobileContainer.find('.jwsdw-picture').prepend($cobrandingFlag);\r\n }\r\n\r\n $mobileImagesContainer.append($imageMobileContainer);\r\n\r\n index++;\r\n });\r\n\r\n }\r\n\r\n /**\r\n * Update the image props for the new image\r\n * @param {jQuery.element} $imageContainer - the image container for which to update the props\r\n * @param {Object} image - image object\r\n * @param {number} index - the index of the image\r\n * @param {Object} responsiveImagesObject - images object for medium, large and xlarge viewports\r\n * @returns {void}\r\n */\r\n function processImageProps($imageContainer, image, index, responsiveImagesObject) {\r\n $imageContainer.data('slideId', index);\r\n if (responsiveImagesObject) {\r\n Object.entries(responsiveImagesObject).forEach(([viewport, responsiveImage]) => {\r\n const $source = $imageContainer.find(`source[data-viewport=\"${viewport}\"]`);\r\n if ($source.length > 0) {\r\n $source.attr('srcset', responsiveImage ? responsiveImage.url : image.url);\r\n }\r\n });\r\n }\r\n $imageContainer.find('img').prop('alt', image.alt).prop('src', image.url);\r\n }\r\n\r\n /**\r\n * @param {Object} size - new variant product size\r\n * @returns {void}\r\n */\r\n function updateAvailability(size) {\r\n if (!size) {\r\n return;\r\n }\r\n\r\n const $sizeContainer = $('.jwsdw-pdp-size');\r\n const $sizeTypesContainer = $sizeContainer.find('[data-size-type]');\r\n const $productData = $('.product-data');\r\n\r\n $sizeTypesContainer.each(function () {\r\n const $that = $(this);\r\n const sizeType = $(this).data('sizeType');\r\n $(this).html('');\r\n if (size.values[sizeType].length > 0) {\r\n size.values[sizeType].forEach((sizeValue) => {\r\n const $linkTag = $($('#sizeSwatch').html());\r\n const $swatchName = $linkTag.find('.swatch-name');\r\n const $swatchUnavailableIcon = $linkTag.find('.swatch-unavailable-icon');\r\n $linkTag\r\n .addClass(!sizeValue.selectable ? 'jwsdw-not-in-stock jwsdw-product-swatch-disabled' : '')\r\n .addClass(sizeValue.selected && $productData.data('selectedSize') === sizeValue.id ?\r\n 'jwsdw-product-swatch-active' :\r\n sizeValue.selectable ?\r\n 'jwsdw-product-swatch-selectable' :\r\n '')\r\n .attr({\r\n 'aria-checked': sizeValue.selected,\r\n 'aria-label': sizeValue.displayValue,\r\n 'aria-describedby': `size-${size.id}-description`,\r\n 'aria-disabled': !sizeValue.selectable\r\n })\r\n .data({\r\n selectVariation: sizeValue.url,\r\n sizeId: sizeValue.id,\r\n availabilityUrl: sizeValue.availabilityUrl,\r\n promotionsUrl: sizeValue.promotionsUrl,\r\n href: sizeValue.seoUrl\r\n });\r\n $swatchName.text(sizeValue.displayValue);\r\n $swatchUnavailableIcon.addClass(!sizeValue.selectable && $productData.data('notifyMeEnabled') ? '' : 'jws-hidden');\r\n $that.append($linkTag);\r\n });\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Update the color variations from PDP\r\n * @param {Object} color - the color variation attribute to update\r\n * @returns {void}\r\n */\r\n function updateColorVariationLinks(color) {\r\n if (!color) {\r\n return;\r\n }\r\n\r\n const $colorContainer = $('.jwsdw-pdp-color-container');\r\n $colorContainer.html('');\r\n\r\n color.values.forEach((colorValue) => {\r\n const $linkTag = $($('#colorSwatch').html());\r\n $linkTag\r\n .attr({\r\n 'aria-checked': colorValue.selected,\r\n 'aria-label': colorValue.displayValue,\r\n 'aria-describedby': `color-${color.id}-description`\r\n })\r\n .data({\r\n selectVariation: colorValue.url,\r\n colorId: colorValue.id,\r\n availabilityUrl: colorValue.availabilityUrl,\r\n promotionsUrl: colorValue.promotionsUrl,\r\n href: colorValue.seoUrl\r\n });\r\n\r\n if (colorValue.selected) {\r\n $linkTag\r\n .addClass('jwsdw-product-color-active');\r\n $('.jwsdw-pdp-selected-color').text(colorValue.displayValue);\r\n }\r\n\r\n $linkTag.css({ 'background-color': colorValue.rgb, 'border-color': colorValue.rgb });\r\n\r\n $colorContainer.append($linkTag);\r\n });\r\n }\r\n\r\n /**\r\n * Update global product data\r\n * @param {Object} product - new variant product data\r\n * @param {Object} variationAttributes - the availability information for the variation attributes\r\n * @returns {void}\r\n */\r\n function updateProductData(product, variationAttributes) {\r\n const $productData = $('.product-data');\r\n if (product) {\r\n $productData.data({\r\n productId: product.id,\r\n productName: product.productName,\r\n selectedPrice: product.price.sales.value\r\n });\r\n }\r\n\r\n if (variationAttributes) {\r\n $productData.data('productVariationAttributes', variationAttributes);\r\n variationAttributes.forEach((attr) => {\r\n if (attr.id === 'color') {\r\n const $productMedia = $('.product-media');\r\n const storedMedia = $productMedia.data('productMedia');\r\n const selectedColorId = attr.values.find((value) => value.selected).id;\r\n const storedMediaForSelectedColor = storedMedia[selectedColorId];\r\n const selectedColor = attr.values.find((value) => value.selected);\r\n\r\n $productData.data({\r\n selectedColor: selectedColor.id,\r\n selectedColorName: selectedColor.displayValue,\r\n productFirstImageUrl: storedMediaForSelectedColor ? storedMediaForSelectedColor.images.full[0].url : ''\r\n });\r\n } else if (attr.id === 'size') {\r\n const flatenSizeValues = Object.values(attr.values).map((value) => value).flat();\r\n let selectedSize = null;\r\n\r\n if ($productData.data('selectedSize')) {\r\n selectedSize = flatenSizeValues.find((value) => value.selected && value.id === $productData.data('selectedSize'));\r\n } else if (flatenSizeValues.length === 1) {\r\n selectedSize = flatenSizeValues[0];\r\n }\r\n\r\n $productData.data('selectedSize', (selectedSize && selectedSize.id) || '');\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Update wishlist button\r\n * @param {Object} product - product data\r\n * @returns {void}\r\n */\r\n function updateWishlistButton(product) {\r\n const $productData = $('.product-data');\r\n const $wishlistButton = $('.jwsdw-pdp-button-whishlist');\r\n $wishlistButton.data({\r\n isInWishlist: product.isInWishlist,\r\n selectedColor: $productData.data('selectedColor')\r\n });\r\n $wishlistButton.find('.wishlisted').toggleClass('jws-hidden', !product.isInWishlist);\r\n $wishlistButton.find('.not-wishlisted').toggleClass('jws-hidden', product.isInWishlist);\r\n $wishlistButton.attr('aria-checked', product.isInWishlist);\r\n }\r\n\r\n /**\r\n * Update price template\r\n * @param {html} renderedPrice - the rendered html of the product price\r\n * @returns {void}\r\n */\r\n function updatePrice(renderedPrice) {\r\n $('.jwsdw-product-pricing').html(renderedPrice);\r\n }\r\n\r\n /**\r\n * Update the id displayed in the product details info accordion\r\n * @param {string} productId - the new product id\r\n * @returns {void}\r\n */\r\n function updateProductDetailsInfo(productId) {\r\n $('#productDetail-description')\r\n .parent()\r\n .find('[data-product-id]')\r\n .text(`#${productId}`)\r\n .data('productId', productId);\r\n }\r\n\r\n /**\r\n * Update the flags displayed on top of product details\r\n * @param {Array} activeFlags - the active flags\r\n * @returns {void}\r\n */\r\n function updateProductFlags(activeFlags) {\r\n const $flagsContainer = $('.jwsdw-productFlags-pdp-wrapper');\r\n $flagsContainer.html('');\r\n\r\n if (!activeFlags || activeFlags.length === 0) {\r\n return;\r\n }\r\n\r\n activeFlags.forEach((activeFlag) => {\r\n const $flag = $($('#productFlag').html());\r\n $flag.addClass(`jwsdw-productFlag-${activeFlag.value}`);\r\n\r\n switch (activeFlag.type) {\r\n case 'sale':\r\n $flag.addClass('jws-bgColorRed');\r\n break;\r\n case 'promotion':\r\n $flag.addClass('jws-bgColorBlack');\r\n break;\r\n default:\r\n $flag.addClass('jws-bgColorBone1');\r\n break;\r\n }\r\n\r\n $flag.text(activeFlag.message);\r\n $flagsContainer.append($flag);\r\n });\r\n }\r\n\r\n /**\r\n * @param {Object} $videoContainer - video container\r\n * @param {Object} video - video data\r\n * @returns {void}\r\n */\r\n function updateDefaultVideo($videoContainer, video) {\r\n const sourcePath = $videoContainer.find('.jwsdw-pdp-productVideo').data('sourcePath');\r\n const params = {\r\n pid: $('.product-data').data('productId'),\r\n videoPath: video.name\r\n };\r\n\r\n const videoUrl = window.jwsdwUtil.urlUtils.appendParamsToUrl(sourcePath, params);\r\n $videoContainer.find('source').prop('src', videoUrl);\r\n }\r\n\r\n /**\r\n * @param {Object} $videoContainer - video container\r\n * @param {Object} video - video data\r\n * @returns {void}\r\n */\r\n function updateYoutubeVideo($videoContainer, video) {\r\n const $videoWrapper = $videoContainer.find('.jwsdw-youtube-player');\r\n $videoWrapper\r\n .prop('id', video.id)\r\n .data({\r\n videoId: video.id || '',\r\n videoIdM: video.idM || '',\r\n videoIdL: video.idL || '',\r\n videoAutoplay: video.playerVars.autoplay || 0,\r\n videoControls: video.playerVars.controls || 0,\r\n videoShowinfo: video.playerVars.showinfo || 0,\r\n videoModestbranding: video.playerVars.modestbranding || 0,\r\n videoLoop: video.playerVars.loop || 0,\r\n alt: video.headline || ''\r\n });\r\n }\r\n\r\n /**\r\n * Update promotions section\r\n * @param {Array} promotions - the promotions to update\r\n * @returns {void}\r\n */\r\n function updateSelectedPromotions(promotions) {\r\n const $promotionsBlock = $('#promotionsBlock');\r\n\r\n if (!promotions || promotions.length === 0) {\r\n $promotionsBlock.html('');\r\n return;\r\n }\r\n\r\n const selectedPromotion = promotions[0];\r\n\r\n if ($promotionsBlock.data('promotionId') === selectedPromotion.promotionId) {\r\n return;\r\n }\r\n\r\n if (selectedPromotion) {\r\n if (selectedPromotion.isSpecialPromotion && !selectedPromotion.isBonusPromotion) {\r\n const $promotionTemplate = $($('#specialPromotionTemplate').html());\r\n $promotionTemplate.find('img').attr('data-src', selectedPromotion.iconPath).prop('alt', selectedPromotion.promotionName);\r\n\r\n const $promotionName = $promotionTemplate.find('h3');\r\n const $calloutWrapper = $promotionTemplate.find('.jwsdw-pdp-specialPromoBanner-text-wrapper');\r\n const $promotionContentPicker = $promotionTemplate.find('.jwsdw-promotion-content-picker');\r\n\r\n if (selectedPromotion.promotionName) {\r\n $promotionName.text(selectedPromotion.promotionName);\r\n $promotionName.removeClass('jws-hidden');\r\n }\r\n\r\n if (selectedPromotion.specialCalloutMessage) {\r\n $calloutWrapper.html(selectedPromotion.specialCalloutMessage);\r\n $calloutWrapper.removeClass('jws-hidden');\r\n }\r\n\r\n if (selectedPromotion.contentId) {\r\n $promotionContentPicker.attr('data-picker-options', JSON.stringify({ cid: selectedPromotion.contentId, width: 1, level: 1 }));\r\n $promotionContentPicker.removeClass('jws-hidden');\r\n }\r\n\r\n $promotionsBlock.html($promotionTemplate);\r\n } else if (selectedPromotion.isBonusPromotion && selectedPromotion.firstBonusProductId) {\r\n const $promotionTemplate = $($('#bonusPromotionTemplate').html());\r\n $promotionTemplate\r\n .find('img')\r\n .attr('data-src', selectedPromotion.productImage)\r\n .attr('data-srcset', `${selectedPromotion.productImageRetina} 2x`)\r\n .prop('alt', selectedPromotion.defaultSelectableBonusProduct.name);\r\n\r\n const $calloutWrapper = $promotionTemplate.find('.jwsdw-pdp-bonusPromoBanner-text-wrapper');\r\n const $promotionContentPicker = $promotionTemplate.find('.jwsdw-promotion-info-picker');\r\n\r\n if (selectedPromotion.calloutMsg) {\r\n $calloutWrapper.html(selectedPromotion.calloutMsg);\r\n $calloutWrapper.removeClass('jws-hidden');\r\n }\r\n\r\n if (selectedPromotion.promoInfoPicker) {\r\n $promotionContentPicker.attr('data-picker-options', JSON.stringify({ cid: selectedPromotion.promoInfoPicker, width: 1, level: 1 }));\r\n $promotionContentPicker.removeClass('jws-hidden');\r\n }\r\n\r\n $promotionsBlock.html($promotionTemplate);\r\n } else {\r\n const $promotionTemplate = $($('#defaultPromotionTemplate').html());\r\n const $promotionName = $promotionTemplate.find('.jwsdw-default-promotion-name');\r\n const $calloutWrapper = $promotionTemplate.find('.callout-message-container');\r\n\r\n if (selectedPromotion.promotionName) {\r\n $promotionName.text(selectedPromotion.promotionName);\r\n $promotionName.removeClass('jws-hidden');\r\n }\r\n\r\n if (selectedPromotion.detailsPDP) {\r\n $calloutWrapper.html(selectedPromotion.calloutMsg);\r\n $calloutWrapper.removeClass('jws-hidden');\r\n }\r\n\r\n $promotionsBlock.html($promotionTemplate);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Send swatch change event\r\n * @param {Object} product - the product data\r\n * @param {Number} ats - available to sell param\r\n * @returns {void}\r\n */\r\n function sendSwatchChangeEvent(product, ats) {\r\n const $productData = $('.product-data');\r\n // send swatch changes to the tag manager\r\n window.jwsdwApi.tracking.fireEvent('swatchChange', {\r\n type: 'swatchChange',\r\n productname: product.productName,\r\n productid: product.id,\r\n productPriceWithoutVAT: product.price.sales.value,\r\n productStatus: 'view',\r\n productColorName: $productData.data('selectedColorName'),\r\n productSizeName: $productData.data('selectedSize'),\r\n availableProducts: ats\r\n });\r\n\r\n // publish event for storeAvailabilityPicker\r\n window.jwsdwMediator.publish('changeProductId', product.id);\r\n }\r\n\r\n /**\r\n * Open notify me picker\r\n * @returns {void}\r\n */\r\n function openNotifyMePicker() {\r\n const $productData = $('.product-data');\r\n const isOneSizeProduct = $productData.data('productVariationAttributes').find((attr) => attr.id === 'size').displayValue.toLowerCase() === 'one size';\r\n const selectedSize = isOneSizeProduct ? 'One Size' : $productData.data('selectedSize');\r\n\r\n if (!selectedSize) {\r\n $('.no-size-selected-warning').removeClass('jws-hidden');\r\n return;\r\n }\r\n\r\n const selectedColor = $productData.data('selectedColor');\r\n const productID = $productData.data('productId');\r\n const productName = $productData.data('productName');\r\n const iamgeUrl = $productData.data('productFirstImageUrl');\r\n\r\n window.jwsdwMediator.publish('openPicker', 'notifyMePicker', {\r\n width: 1,\r\n productID,\r\n productName,\r\n productSize: selectedSize,\r\n productColor: selectedColor,\r\n image: iamgeUrl,\r\n isVisible: true,\r\n level: 2\r\n });\r\n\r\n // Script Notify Me Button Click (open)\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push({\r\n 'event': 'ce.misc',\r\n 'eventCategory': 'MISC',\r\n 'eventAction': 'Notify Me',\r\n 'eventLabel': 'open',\r\n 'eventValue': undefined,\r\n 'nonInteraction': false,\r\n 'selection': undefined\r\n });\r\n }\r\n\r\n /**\r\n * Open store availability picker\r\n * @returns {void}\r\n */\r\n function openStoreAvailabilityPicker() {\r\n const $productData = $('.product-data');\r\n\r\n if (!$productData.data('selectedSize')) {\r\n $('.no-size-selected-warning').removeClass('jws-hidden');\r\n return;\r\n }\r\n\r\n window.jwsdwMediator.publish('openPicker', 'storeAvailabilityListPicker', {\r\n productId: $productData.data('productId'),\r\n // TO-DO consider replacing angular store availability picker with jQuery controlled one\r\n variants: null // this will trigger angular to fetch for the variants and filter them as necessary for the picker\r\n }, true);\r\n\r\n window.jwsdwApi.tracking.fireEvent('openAvailabilityDialog', {\r\n type: 'openAvailabilityDialog'\r\n });\r\n\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push({\r\n event: 'ce.misc',\r\n eventCategory: 'MISC',\r\n eventAction: 'Product Availability',\r\n eventLabel: 'open',\r\n eventValue: undefined,\r\n nonInteraction: false,\r\n selection: undefined\r\n });\r\n }\r\n\r\n /**\r\n * Update meta data\r\n * @param {Object} metaData - the meta data to update\r\n * @returns {void}\r\n */\r\n function updateMetaData(metaData) {\r\n if (metaData.pageTitle) {\r\n document.title = window.jwsdwUtil.uiUtils.decodeHTMLEntities(metaData.pageTitle);\r\n }\r\n\r\n let descriptionMeta = document.querySelector('meta[name=\"description\"]');\r\n if (metaData.pageDescription) {\r\n if (!descriptionMeta) {\r\n descriptionMeta = document.createElement('meta');\r\n descriptionMeta.name = 'description';\r\n document.head.appendChild(descriptionMeta);\r\n }\r\n\r\n descriptionMeta.content = window.jwsdwUtil.uiUtils.decodeHTMLEntities(metaData.pageDescription);\r\n }\r\n\r\n if (metaData.pageKeywords) {\r\n let keywordsMeta = document.querySelector('meta[name=\"keywords\"]');\r\n if (!keywordsMeta) {\r\n keywordsMeta = document.createElement('meta');\r\n keywordsMeta.name = 'keywords';\r\n document.head.appendChild(keywordsMeta);\r\n }\r\n keywordsMeta.content = window.jwsdwUtil.uiUtils.decodeHTMLEntities(metaData.pageKeywords);\r\n }\r\n }\r\n\r\n /**\r\n * Initialize the SAIZ tool listener\r\n * @returns {void}\r\n */\r\n function initSaizToolListener() {\r\n $(window).on('jw-saiz-customer', function (e) { // eslint-disable-line no-unused-vars\r\n const isSaizCustomer = localStorage.getItem('isSaizCustomer');\r\n if (isSaizCustomer && isSaizCustomer === 'true') {\r\n return;\r\n }\r\n\r\n if (e.detail && e.detail.measuredSize) {\r\n const payload = e.detail;\r\n payload[window.jwsdwSettings.csrfTokenName] = window.jwsdwSettings.csrfTokenValue;\r\n payload.sessionAttribute = 'isSaizCustomer';\r\n payload.customerAttribute = 'hasUsedSaizTool';\r\n\r\n $.ajax({\r\n url: window.jwsdwSettings.updatePromotionRelatedOptionsUrl,\r\n method: 'POST',\r\n data: payload,\r\n dataType: 'json',\r\n success: function () {\r\n localStorage.setItem('isSaizCustomer', 'true');\r\n },\r\n error: function () {\r\n localStorage.setItem('isSaizCustomer', 'false');\r\n }\r\n });\r\n }\r\n });\r\n }\r\n}(window, document, jQuery, Swiper)); // eslint-disable-line no-undef\r\n","'use strict';\r\n(function (window, $) {\r\n var $notifyMeForm = $('form.jwsdw-notifyme-form'),\r\n $submitButton = $notifyMeForm.find('.jwsdw-notifyme-submit-container button'),\r\n $formErrorMessage = $notifyMeForm.find('.jwsdw-notificationFormErrorMessage'),\r\n $submitButtonText = $submitButton.find('.jwsdw-buttonText'),\r\n $submitButtonSpinner = $submitButton.find('.jwsdw-spinner'),\r\n xhr;\r\n\r\n $.validator.setDefaults({\r\n 'rules': {\r\n 'email': {\r\n 'invalidvalue': true,\r\n 'customemail': true\r\n }\r\n }\r\n });\r\n\r\n // initialize form validation\r\n $notifyMeForm.validate();\r\n\r\n /**\r\n * Method to handle form submits\r\n * @param {Object} event the event that triggered the handler\r\n * @param {function} successCallback the callback that is triggered when the ajax call was successful\r\n * @param {function} errorCallback the callback that is triggered when the ajax call was unsuccessful\r\n * @param {function} beforeSendCallback the callback that is triggered before the ajax call is made\r\n * @param {function} completeCallback the callback that is triggered after the ajax call was made\r\n * @returns {void}\r\n */\r\n function formSubmit (event, successCallback, errorCallback, beforeSendCallback, completeCallback) {\r\n var $this = $(this),\r\n $captcha = $this.find('.g-recaptcha');\r\n\r\n var validateCaptcha = $captcha.length > 0;\r\n\r\n event.preventDefault();\r\n\r\n // only submit form if frontend validation is successful and no other call is executed\r\n if (!$this.valid() || (xhr && xhr.readyState !== 4)) {\r\n return;\r\n }\r\n\r\n if (window.jwsdwRecaptchaSettings.captchaDisabled === false && validateCaptcha === true) {\r\n if (!window.grecaptcha || window.jwsdwUtil.captcha.getResponse($captcha.attr('id')).length !== 0) {\r\n return;\r\n }\r\n window.jwsdwUtil.captcha.execute($captcha.attr('id')).then(submitFormHandler);\r\n } else {\r\n submitFormHandler();\r\n }\r\n\r\n /**\r\n * @function\r\n * @description Handler to trigger submit again when form is valid\r\n * @return {void}\r\n */\r\n function submitFormHandler() {\r\n if (window.jwsdwRecaptchaSettings.captchaDisabled === false &&\r\n validateCaptcha === true && window.jwsdwUtil.captcha.getResponse($captcha.attr('id')).length === 0) {\r\n // no response yet, check again in 200ms\r\n setTimeout(submitFormHandler, 200);\r\n return;\r\n }\r\n\r\n // XHR request to form action url with form fields as parameters\r\n xhr = $.ajax($this.attr('action'), {\r\n 'method': $this.attr('method') || 'GET',\r\n 'data': $this.serialize(),\r\n 'beforeSend': beforeSendCallback,\r\n 'success': successCallback,\r\n 'error': errorCallback,\r\n 'complete': completeCallback\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Method to execute the before send logic before the ajax call is made\r\n * @returns {void}\r\n */\r\n function notifyMeBeforeSendCallback () {\r\n $formErrorMessage.addClass('jws-hidden');\r\n $submitButton.attr('disabled', 'disabled');\r\n $submitButtonText.addClass('jwsdw-invisible');\r\n $submitButtonSpinner.removeClass('jws-hidden');\r\n }\r\n\r\n /**\r\n * Method to execute after the ajax call was made\r\n * @returns {void}\r\n */\r\n function notifyMeCompleteCallback () {\r\n var $captcha;\r\n if (window.jwsdwRecaptchaSettings.captchaDisabled === false) {\r\n $captcha = $notifyMeForm.find('.g-recaptcha');\r\n window.grecaptcha.reset(window.jwsdwRecaptcha[$captcha.attr('id')]);\r\n }\r\n }\r\n\r\n /**\r\n * Method to execute if login was handled successfully\r\n * @returns {void}\r\n */\r\n function notifyMeSuccessCallback () {\r\n $submitButton.removeAttr('disabled');\r\n $submitButtonText.removeClass('jwsdw-invisible');\r\n $submitButtonSpinner.addClass('jws-hidden');\r\n\r\n $('#jwsdw-notifyMePicker').find('.jws-initial-view').addClass('jws-hidden');\r\n $('#jwsdw-notifyMePicker').find('.jws-success-view').removeClass('jws-hidden');\r\n\r\n // Script Notify Me Button Click (success)\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push({\r\n 'event': 'ce.misc',\r\n 'eventCategory': 'MISC',\r\n 'eventAction': 'Notify Me',\r\n 'eventLabel': 'success',\r\n 'eventValue': undefined,\r\n 'nonInteraction': false,\r\n 'selection': undefined\r\n });\r\n }\r\n\r\n /**\r\n * Method to execute if login was not handled successfully\r\n * @param {object} data the response object containing the error\r\n * @returns {void}\r\n */\r\n function notifyMeErorCallback (data) {\r\n $submitButton.removeAttr('disabled');\r\n $submitButtonText.removeClass('jwsdw-invisible');\r\n $submitButtonSpinner.addClass('jws-hidden');\r\n\r\n // jquery ajax returns a wrapped result\r\n data = data.responseJSON ? data.responseJSON : {};\r\n\r\n if (data.code && data.code === 'GENERAL_ERROR') {\r\n $formErrorMessage.find('.jws-notificationMessage').text(data.details.message);\r\n $formErrorMessage.removeClass('jws-hidden');\r\n }\r\n }\r\n\r\n // notifyme form submit listener\r\n $notifyMeForm.on('submit', function (e) {\r\n formSubmit.call(this, e, notifyMeSuccessCallback, notifyMeErorCallback, notifyMeBeforeSendCallback, notifyMeCompleteCallback);\r\n });\r\n}(window, jQuery));"],"names":["widgetId","widgetLang","widgetType","lastURL","baseURL","colors","productIds","colorSelectionInterval","loadWidget","setTimeout","s","sc","url","location","href","substr","lastIndexOf","target","document","getElementById","js","innerHTML","parentElement","removeChild","s1","createElement","id","type","datastream","appendChild","async","src","join","getElementsByTagName","parentNode","insertBefore","window","jwsdwSquarelovinSettings","squarelovinId","languageCode","squarelovinType","substring","jwsdwProductDetailSettings","data","allVariations","attributes","filter","color","length","vals","map","masterID","setInterval","colorSelection","querySelector","el","addEventListener","clearInterval","angular","module","service","$window","$rootScope","Service","youtubeRegexp","timeRegexp","contains","str","indexOf","applyServiceIsReady","$apply","ready","getIdFromURL","pieces","replace","split","decodeURIComponent","getTimeFromURL","full","minutes","times","match","seconds","parseInt","YT","onYouTubeIframeAPIReady","console","log","loaded","directive","youtubeEmbedUtils","uniqId","stateNames","-1","0","1","2","3","5","eventPrefix","YTConfig","host","restrict","scope","videoId","videoUrl","player","playerVars","playerHeight","playerWidth","link","element","attrs","utils","playerId","applyBroadcast","args","Array","prototype","slice","call","arguments","$emit","apply","onPlayerStateChange","event","state","currentState","onPlayerReady","onPlayerError","loadPlayer","list","destroy","copy","start","urlStartTime","Player","height","width","events","onReady","onStateChange","onError","stopWatchingReady","$watch","$watchCollection","setSize","$on","ngTouch","makeSwipeDirective","directiveName","direction","eventName","$parse","$swipe","attr","startCoords","valid","swipeHandler","pointerTypes","isDefined","push","bind","coords","cancel","end","validSwipe","deltaY","Math","abs","y","deltaX","x","triggerHandler","$event","info","angularVersion","factory","POINTER_EVENTS","mouse","move","touch","pointer","getCoordinates","originalEvent","touches","e","changedTouches","clientX","clientY","getEvents","eventType","res","forEach","pointerType","eventHandlers","totalX","totalY","lastPos","active","on","preventDefault","checkConsent","dataLayer","some","runAutoEvent","oldLayer","dynamic_tm_data","categoryPath","eventCategory","eventAction","eventLabel","eventValue","productPriceWithVAT","nonInteraction","ecommerce","currencyCode","currency","detail","actionField","products","name","productname","productid","price","brand","productbrand","category","categoryid","variant","productColorName","dimension13","shift","dimension14","google_tag_manager","obj","$","Swiper","hash","let","i","j","text","trim","click","UNCACHED_DATA","AVAILABILITY","updateProductData","variationAttributes","updateColorVariationLinks","find","updateAvailability","PROMOTIONS","updateSelectedPromotions","promotions","slidesPerView","navigation","nextEl","prevEl","slideChange","swiper","updatePagination","activeIndex","initStickyCTAs","pdpCTAsContainer","$stickyCTAsContainer","observer","IntersectionObserver","entries","entry","isIntersecting","boundingClientRect","top","removeClass","addClass","root","rootMargin","threshold","observe","checkIfSizeSelected","$productData","selectedVariation","isOneSizeProduct","displayValue","toLowerCase","scrollIntoView","behavior","block","unobserve","addToWishlist","$wishlistButton","prop","productId","payload","jwsdwSettings","csrfTokenName","csrfTokenValue","ajax","method","dataType","success","wishlist","itemId","pid","jwsdwMediator","publish","items","error","code","showMaxGuestWishlistMessage","callback","complete","removeFromWishlist","toString","itemIndex","findIndex","product","productListId","splice","addToCart","$cartButton","spinner","isGiftcard","productToAdd","isBonusProduct","productData","level","Object","assign","addToCartSuccessful","totalItems","stop","closeImageViewer","html","initImageViewerEvents","slideId","this","slideTo","updateActiveThumbsSlide","$container","currentIndex","totalSlides","$paginationCurrent","$paginationTotal","handleProductImageChange","colorId","currentColorMedia","imagesToProcess","images","fullImages","largeImages","large","xlarge","xlargeImages","mediumImages","medium","mobileImages","small","videoToProcess","video","$mobileImagesContainer","$desktopImagesContainer","index","image","imageIndex","sortOrder","source","$desktopYoutubeVideoContainer","updateYoutubeVideo","append","$desktopVideoContainer","updateDefaultVideo","responsiveImagesObject","$imageDesktopContainer","toggleClass","processImageProps","$cobrandingFlag","prepend","$mobileYoutubeVideoContainer","$mobileVideoContainer","$imageMobileContainer","$imageContainer","viewport","responsiveImage","$source","alt","size","$sizeTypesContainer","each","$that","sizeType","values","$linkTag","$swatchName","$swatchUnavailableIcon","sizeValue","selectable","selected","aria-checked","aria-label","aria-describedby","aria-disabled","selectVariation","sizeId","availabilityUrl","promotionsUrl","seoUrl","$colorContainer","colorValue","css","background-color","rgb","border-color","productName","selectedPrice","sales","value","storedMediaForSelectedColor","selectedColor","selectedColorName","productFirstImageUrl","flatenSizeValues","flat","selectedSize","updateWishlistButton","isInWishlist","updatePrice","renderedPrice","updateProductDetailsInfo","parent","updateProductFlags","activeFlags","$flagsContainer","$flag","activeFlag","message","$videoContainer","sourcePath","params","videoPath","jwsdwUtil","urlUtils","appendParamsToUrl","videoIdM","idM","videoIdL","idL","videoAutoplay","autoplay","videoControls","controls","videoShowinfo","showinfo","videoModestbranding","modestbranding","videoLoop","loop","headline","$promotionTemplate","$promotionName","$calloutWrapper","$promotionsBlock","selectedPromotion","promotionId","isSpecialPromotion","isBonusPromotion","iconPath","promotionName","$promotionContentPicker","specialCalloutMessage","contentId","JSON","stringify","cid","firstBonusProductId","productImage","productImageRetina","defaultSelectableBonusProduct","calloutMsg","promoInfoPicker","detailsPDP","sendSwatchChangeEvent","ats","jwsdwApi","tracking","fireEvent","productPriceWithoutVAT","productStatus","productSizeName","availableProducts","openNotifyMePicker","productID","iamgeUrl","productSize","productColor","isVisible","undefined","selection","updateMetaData","metaData","pageTitle","title","uiUtils","decodeHTMLEntities","descriptionMeta","pageDescription","head","content","pageKeywords","keywordsMeta","isSaizCustomer","localStorage","getItem","measuredSize","sessionAttribute","customerAttribute","updatePromotionRelatedOptionsUrl","setItem","metaImage","ogimageurl","firstThumbnail","first","newMetaImage","replaceWith","open","hide","$imageViewContainer","$imageViewTemplate","$thumbnailContainer","$mainSliderContainer","storedMedia","colorImages","thumbnailImages","thumbGallery","$mainImage","pinch","initPinch","$thumbnail","initialSlide","init","slides","matchMedia","matches","show","pickerName","availableSizes","availableSizeArray","valuesArray","gender","jwsdwSizeGuide","customerAuthenticated","count","maxWishlistItemsForGuest","$giftcardSwatchesWrapper","$stickyCartButtonLabel","val","$customAmountFormWrapper","$customAmountForm","$customAmountInput","validate","rules","giftcardInput","required","number","min","max","messages","customAmount","$amountSwatch","trigger","$amountPickerButton","$amountEditButton","formattedPrice","formatPrice","Number","hasClass","isColorChange","$stickyCartButton","$notifyMe","siblings","$stickyNotifyMe","$selectedSwatch","parents","variationCall","promotionsCall","availabilityCall","Promise","all","then","variationData","promotionsData","availabilityData","responses","meta","history","replaceState","cobrandingFlag","hasSizeSelected","available","availability","catch","finally","variants","jQuery","xhr","$notifyMeForm","$submitButton","$formErrorMessage","$submitButtonText","$submitButtonSpinner","formSubmit","successCallback","errorCallback","beforeSendCallback","completeCallback","$this","$captcha","validateCaptcha","submitFormHandler","jwsdwRecaptchaSettings","captchaDisabled","captcha","getResponse","serialize","beforeSend","readyState","grecaptcha","execute","notifyMeBeforeSendCallback","notifyMeCompleteCallback","reset","jwsdwRecaptcha","notifyMeSuccessCallback","removeAttr","notifyMeErorCallback","responseJSON","details","validator","setDefaults","email","invalidvalue","customemail"],"mappings":"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"}