{"version":3,"sources":["webpack:///scripts/module.product-detail--02211f50dbde85fd86ab.js","webpack:///./client/src/core/lib/strings.js","webpack:///./client/src/scripts/module.product-detail.js","webpack:///./node_modules/debug/node_modules/ms/index.js","webpack:///./node_modules/debug/src/browser.js","webpack:///./node_modules/debug/src/common.js","webpack:///./node_modules/process/browser.js"],"names":["webpackJsonp","/opt/atlassian/pipelines/agent/build/node_modules/babel-loader/lib/index.js??ref--23-0!/opt/atlassian/pipelines/agent/build/node_modules/eslint-loader/index.js!/opt/atlassian/pipelines/agent/build/client/src/core/lib/strings.js","module","exports","__webpack_require__","toCamelCase","str","replace","match","p1","p2","toUpperCase","toLowerCase","tmpl","context","result","log","Object","keys","forEach","item","reallySimpleMustacheRenderer","left","right","$","each","key","value","RegExp","$tmpl","element","$target","templateString","attr","text","mustache","template","self","parent","invert","get","ctx","path","pop","split","shift","i","render","output","Array","isArray","length","inverted","childCode","depth","assign","code","y","z","close","name","raw","comment","isRaw","partial","Option","innerHTML","test","call","defineProperty","_typeof","Symbol","iterator","obj","constructor","prototype","_debug2","__esModule","default","_debug","/opt/atlassian/pipelines/agent/build/node_modules/babel-loader/lib/index.js??ref--23-0!/opt/atlassian/pipelines/agent/build/node_modules/eslint-loader/index.js!/opt/atlassian/pipelines/agent/build/client/src/scripts/module.product-detail.js","getSliderOptions","$element","UA_IS_SAFARI","options","watchCSS","GetGalleryElement","Promise","resolve","reject","InitGallery","then","flickity","data","activate","GetGallery","DestroyGallery","$gallery","destroy","BindGalleryEvents","gallery","on","UpdatePaginationStatus","SelectGalleryThumbnail","selectedIndex","total","current","ONE","SelectGallerySlide","slideIndex","select","thumbnail","$thumbnail","siblings","removeClass","addClass","ResizeGallery","reposition","resize","OnFlickityMainImageClick","Foundation","MediaQuery","atLeast","foundation","ZERO","OnFlickityThumbnailClick","index","this","jQueryBridget","Flickity","window","userAgentContains","navigator","userAgent","indexOf","UA_HAS_SAFARI","UA_HAS_CHROME","document","ready","one","$modal","topPad","height","css","modalTargets","selector","Vue","component","/opt/atlassian/pipelines/agent/build/node_modules/babel-loader/lib/index.js??ref--23-0!/opt/atlassian/pipelines/agent/build/node_modules/eslint-loader/index.js!/opt/atlassian/pipelines/agent/build/node_modules/debug/node_modules/ms/index.js","parse","String","exec","n","parseFloat","w","d","h","m","s","fmtShort","ms","msAbs","Math","abs","round","fmtLong","plural","isPlural","val","type","isFinite","long","Error","JSON","stringify","/opt/atlassian/pipelines/agent/build/node_modules/babel-loader/lib/index.js??ref--23-0!/opt/atlassian/pipelines/agent/build/node_modules/eslint-loader/index.js!/opt/atlassian/pipelines/agent/build/node_modules/debug/src/browser.js","useColors","process","__nwjs","documentElement","style","WebkitAppearance","console","firebug","exception","table","parseInt","$1","formatArgs","args","namespace","humanize","diff","c","color","splice","lastC","_console","apply","arguments","save","namespaces","storage","setItem","removeItem","error","load","r","getItem","env","DEBUG","_typeof2","localStorage","colors","require","formatters","j","v","message","/opt/atlassian/pipelines/agent/build/node_modules/babel-loader/lib/index.js??ref--23-0!/opt/atlassian/pipelines/agent/build/node_modules/eslint-loader/index.js!/opt/atlassian/pipelines/agent/build/node_modules/debug/src/common.js","setup","selectColor","hash","charCodeAt","createDebug","debug","enabled","_len","_key","curr","Number","Date","prevTime","prev","coerce","unshift","format","formatter","extend","init","instances","push","delimiter","enable","names","skips","len","substr","instance","disable","stack","/opt/atlassian/pipelines/agent/build/node_modules/babel-loader/lib/index.js??ref--23-0!/opt/atlassian/pipelines/agent/build/node_modules/eslint-loader/index.js!/opt/atlassian/pipelines/agent/build/node_modules/process/browser.js","defaultSetTimout","defaultClearTimeout","runTimeout","fun","cachedSetTimeout","setTimeout","e","runClearTimeout","marker","cachedClearTimeout","clearTimeout","cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","timeout","run","Item","array","noop","nextTick","title","browser","argv","version","versions","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","dir","umask","multi /opt/atlassian/pipelines/agent/build/client/src/scripts/module.product-detail.js"],"mappings":"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","file":"scripts/module.product-detail--02211f50dbde85fd86ab.js","sourcesContent":["webpackJsonp([\"module.product-detail\"],{\n\n/***/ \"/opt/atlassian/pipelines/agent/build/node_modules/babel-loader/lib/index.js??ref--23-0!/opt/atlassian/pipelines/agent/build/node_modules/eslint-loader/index.js!/opt/atlassian/pipelines/agent/build/client/src/core/lib/strings.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; /* global Loader:true $:true */\n\nexports.toCamelCase = toCamelCase;\nexports.tmpl = tmpl;\nexports.$tmpl = $tmpl;\nexports.mustache = mustache;\n\nvar _debug = __webpack_require__(\"/opt/atlassian/pipelines/agent/build/node_modules/babel-loader/lib/index.js??ref--23-0!/opt/atlassian/pipelines/agent/build/node_modules/eslint-loader/index.js!/opt/atlassian/pipelines/agent/build/node_modules/debug/src/browser.js\");\n\nvar _debug2 = _interopRequireDefault(_debug);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar MODULE_NAME = 'app.core/lib/strings';\nvar log = (0, _debug2.default)(MODULE_NAME);\n\nfunction toCamelCase(str) {\n return str.replace(/^([A-Z])|[\\s-_](\\w)/g, function (match, p1, p2) {\n if (p2) {\n return p2.toUpperCase();\n }\n\n return p1.toLowerCase();\n });\n}\n\nfunction tmpl(str, context) {\n var result = str;\n\n log('templating ' + result + ' with context: ', context);\n\n if (result) {\n\n Object.keys(context).forEach(function (item) {\n result = result.replace('{{' + item + '}}', context[item]);\n });\n\n log('templated ' + result);\n }\n\n return result;\n}\n\nfunction reallySimpleMustacheRenderer(left, right) {\n return function (str, context) {\n var result = str;\n\n if (result) {\n $.each(context, function (key, value) {\n result = result.replace(new RegExp(left + key + right, 'g'), value);\n });\n }\n\n return result;\n };\n}\nexports.tmpl = reallySimpleMustacheRenderer('{{', '}}');\nexports.reallySimpleMustacheRenderer = reallySimpleMustacheRenderer;\n\nfunction $tmpl(element, context) {\n var $target = $(element);\n var templateString = $target.attr('data-text-template');\n\n log('templating [' + templateString + '] with context: ', context);\n var result = tmpl(templateString, context);\n\n $target.text(result);\n}\n\n/**\n * https://github.com/aishikaty/tiny-mustache\n * https://mustache.github.io/\n * @param {String} template [description]\n * @param {[type]} self [description]\n * @param {[type]} parent [description]\n * @param {[type]} invert [description]\n * @return {[type]} [description]\n */\nfunction mustache(template, self, parent, invert) {\n var render = mustache;\n var output = \"\";\n var i;\n\n function get(ctx, path) {\n path = path.pop ? path : path.split(\".\");\n ctx = ctx[path.shift()] || \"\";\n return 0 in path ? get(ctx, path) : ctx;\n }\n\n self = Array.isArray(self) ? self : self ? [self] : [];\n self = invert ? 0 in self ? [] : [1] : self;\n\n for (i = 0; i < self.length; i++) {\n var childCode = '';\n var depth = 0;\n var inverted;\n var ctx = _typeof(self[i]) == \"object\" ? self[i] : {};\n ctx = Object.assign({}, parent, ctx);\n ctx[\"\"] = { \"\": self[i] };\n\n template.replace(/([\\s\\S]*?)({{((\\/)|(\\^)|#)(.*?)}}|$)/g, function (match, code, y, z, close, invert, name) {\n if (!depth) {\n output += code.replace(/{{{(.*?)}}}|{{(!?)(&?)(>?)(.*?)}}/g, function (match, raw, comment, isRaw, partial, name) {\n return raw ? get(ctx, raw) : isRaw ? get(ctx, name) : partial ? render(get(ctx, name), ctx) : !comment ? new Option(get(ctx, name)).innerHTML : \"\";\n });\n inverted = invert;\n } else {\n childCode += depth && !close || depth > 1 ? match : code;\n }\n if (close) {\n if (! --depth) {\n name = get(ctx, name);\n if (/^f/.test(typeof name === 'undefined' ? 'undefined' : _typeof(name))) {\n output += name.call(ctx, childCode, function (template) {\n return render(template, ctx);\n });\n } else {\n output += render(childCode, name, ctx, inverted);\n }\n childCode = \"\";\n }\n } else {\n ++depth;\n }\n });\n }\n return output;\n}\n\n/***/ }),\n\n/***/ \"/opt/atlassian/pipelines/agent/build/node_modules/babel-loader/lib/index.js??ref--23-0!/opt/atlassian/pipelines/agent/build/node_modules/eslint-loader/index.js!/opt/atlassian/pipelines/agent/build/client/src/scripts/module.product-detail.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _strings = __webpack_require__(\"/opt/atlassian/pipelines/agent/build/node_modules/babel-loader/lib/index.js??ref--23-0!/opt/atlassian/pipelines/agent/build/node_modules/eslint-loader/index.js!/opt/atlassian/pipelines/agent/build/client/src/core/lib/strings.js\");\n\nvar _debug = __webpack_require__(\"/opt/atlassian/pipelines/agent/build/node_modules/babel-loader/lib/index.js??ref--23-0!/opt/atlassian/pipelines/agent/build/node_modules/eslint-loader/index.js!/opt/atlassian/pipelines/agent/build/node_modules/debug/src/browser.js\");\n\nvar _debug2 = _interopRequireDefault(_debug);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/* global Loader:true $:true Foundation:true Flickity:true */\n// import 'babel-polyfill';\njQueryBridget('flickity', Flickity, $);\n\nwindow.Symbol = Symbol;\nvar ONE = 1;\nvar ZERO = 0;\nvar MODULE_NAME = 'module/product-detail';\nvar log = (0, _debug2.default)(MODULE_NAME);\nvar userAgentContains = function userAgentContains(str) {\n return navigator.userAgent.toLowerCase().indexOf(str.toLowerCase()) > -1;\n};\nvar UA_HAS_SAFARI = userAgentContains(\"Safari\");\nvar UA_HAS_CHROME = userAgentContains(\"Chrome\");\nvar UA_HAS_OPERA = userAgentContains(\"op\");\nvar UA_IS_SAFARI = UA_HAS_SAFARI && !UA_HAS_CHROME;\nvar UA_IS_CHROME = UA_HAS_CHROME && !UA_HAS_OPERA;\n\nfunction getSliderOptions($element) {\n var galleryOptionsAttr = 'data-flickity';\n if (UA_IS_SAFARI) {\n options.watchCSS = false;\n }\n return $element.attr(galleryOptionsAttr);\n}\n\nfunction GetGalleryElement() {\n return new Promise(function (resolve, reject) {\n var gallerySelector = '#modal-gallery .modal-gallery';\n var $element = $(gallerySelector);\n\n log('$element', $element);\n\n resolve($element);\n });\n}\n\nfunction InitGallery() {\n return new Promise(function (resolve, reject) {\n GetGalleryElement().then(function ($element) {\n var flickity = $element.data('flickity');\n if (!flickity) {\n var _options = getSliderOptions($element);\n flickity = $element.flickity(_options);\n }\n if (UA_IS_SAFARI) {\n flickity.activate();\n }\n resolve(flickity);\n });\n });\n}\n\nfunction GetGallery() {\n return new Promise(function (resolve, reject) {\n GetGalleryElement().then(InitGallery).then(function (flickity) {\n log('resolved gallery', flickity);\n resolve(flickity);\n });\n });\n}\n\nfunction DestroyGallery() {\n GetGalleryElement().then(function ($element) {\n var $gallery = $element.data('flickity');\n if ($gallery) {\n $gallery.destroy();\n }\n });\n}\n\n// Flickity not initialised until carousel elements are visible\nfunction BindGalleryEvents(gallery) {\n return new Promise(function (resolve, reject) {\n log('binding gallery events');\n\n gallery.on('select', function () {\n log('[initGalleryCarousel] flickity.select');\n UpdatePaginationStatus(gallery);\n SelectGalleryThumbnail(gallery.selectedIndex);\n });\n\n gallery.on('settle', function () {\n log('[initGalleryCarousel] flickity.settle');\n UpdatePaginationStatus(gallery);\n SelectGalleryThumbnail(gallery.selectedIndex);\n });\n\n resolve();\n });\n}\n\nfunction UpdatePaginationStatus(gallery) {\n return new Promise(function (resolve, reject) {\n var total = $('.modal-gallery__thumbnail').length;\n var current = gallery.selectedIndex + ONE;\n\n log('UpdatePaginationStatus', gallery, total, current);\n\n (0, _strings.$tmpl)('.modal-gallery__pagination-status', {\n total: total,\n current: current\n });\n });\n}\n\nfunction SelectGallerySlide(slideIndex) {\n return GetGallery().then(function ($gallery) {\n $gallery.select(slideIndex, false, true);\n return Promise.resolve($gallery);\n });\n}\n\nfunction SelectGalleryThumbnail(slideIndex) {\n var thumbnail = $('.modal-gallery__thumbnail').get(slideIndex);\n var $thumbnail = $(thumbnail);\n\n log('selecting slide [' + slideIndex + ']', thumbnail);\n\n $thumbnail.siblings().removeClass('is-selected');\n\n $thumbnail.addClass('is-selected');\n}\n\nfunction ResizeGallery(gallery) {\n return new Promise(function (resolve, reject) {\n log('repositioning gallery', gallery);\n gallery.reposition();\n log('resizing gallery', gallery);\n gallery.resize();\n resolve(gallery);\n });\n}\n\nfunction OnFlickityMainImageClick() {\n\n if (Foundation.MediaQuery.atLeast('medium')) {\n log('Setting up modal gallery');\n\n log('.product-detail-image-gallery__main-image:click');\n\n GetGallery().then(function (gallery) {\n $('#modal-gallery').foundation('open');\n return gallery;\n }).then(function (gallery) {\n SelectGallerySlide(ZERO);\n });\n } else {\n DestroyGallery();\n }\n}\n\nfunction OnFlickityThumbnailClick() {\n if (Foundation.MediaQuery.atLeast('medium')) {\n var index = $(this).index();\n log('.modal-gallery__thumbnail:click');\n GetGallery().then(function (gallery) {\n $('#modal-gallery').foundation('open');\n return gallery;\n }).then(function (gallery) {\n SelectGallerySlide(index);\n });\n } else {\n DestroyGallery();\n }\n}\n\n$(document).ready(function () {\n\n // Initialise flickity only when revealed\n\n $('#modal-gallery').one('open.zf.reveal', function () {\n var $modal = $('#modal-gallery');\n log('revealing modal gallery');\n GetGallery().then(ResizeGallery).then(function (gallery) {\n var topPad = $(window).height() / 2 - $modal.height() / 2;\n $modal.css('top', topPad > 0 ? topPad : 0);\n });\n });\n\n /**\n * Removes foundation reveal modals.\n * see: https://jira.fusion.com.au/browse/DET001-105\n * > Mobile no modal appears only slider of main image sized images.\n */\n if (Foundation.MediaQuery.current === 'small') {\n log('removing product image gallery modal.');\n\n var modalTargets = {};\n\n $('.product-detail-image-gallery [data-open]').each(function GetModalTarget() {\n modalTargets[$(this).attr('data-open')] = true;\n });\n\n Object.keys(modalTargets).forEach(function (selector) {\n $('#' + selector).foundation('destroy');\n });\n }\n\n if (Foundation.MediaQuery.atLeast('medium')) {\n log('Setting up modal gallery');\n\n $('.product-detail-image-gallery__main-image').on('click', OnFlickityMainImageClick);\n\n $('.modal-gallery__thumbnail, .product-detail-image-gallery__thumbnail-item').on('click', OnFlickityThumbnailClick);\n\n GetGallery().then(BindGalleryEvents);\n }\n});\n\nVue.component('pagination-test', {\n\n template: '
A Test
',\n\n ready: function ready() {\n log('ready');\n }\n});\n\n/***/ }),\n\n/***/ \"/opt/atlassian/pipelines/agent/build/node_modules/babel-loader/lib/index.js??ref--23-0!/opt/atlassian/pipelines/agent/build/node_modules/eslint-loader/index.js!/opt/atlassian/pipelines/agent/build/node_modules/debug/node_modules/ms/index.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n options = options || {};\n var type = typeof val === 'undefined' ? 'undefined' : _typeof(val);\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error('val is not a non-empty string or a valid number. val=' + JSON.stringify(val));\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(str);\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n\n/***/ }),\n\n/***/ \"/opt/atlassian/pipelines/agent/build/node_modules/babel-loader/lib/index.js??ref--23-0!/opt/atlassian/pipelines/agent/build/node_modules/eslint-loader/index.js!/opt/atlassian/pipelines/agent/build/node_modules/debug/src/browser.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(process) {\n\nvar _typeof2 = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction _typeof(obj) {\n if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj === \"undefined\" ? \"undefined\" : _typeof2(obj);\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj === \"undefined\" ? \"undefined\" : _typeof2(obj);\n };\n }return _typeof(obj);\n}\n\n/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\n/**\n * Colors.\n */\n\nexports.colors = ['#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC', '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF', '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC', '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF', '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC', '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033', '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366', '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933', '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC', '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF', '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33'];\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n// eslint-disable-next-line complexity\n\nfunction useColors() {\n // NB: In an Electron preload script, document will be defined but not fully\n // initialized. Since we know we're in Chrome, we'll just detect this case\n // explicitly\n if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n return true;\n } // Internet Explorer and Edge do not support colors.\n\n\n if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n return false;\n } // Is webkit? http://stackoverflow.com/a/16459606/376773\n // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\n\n return typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance || // Is firebug? http://stackoverflow.com/a/398120/376773\n typeof window !== 'undefined' && window.console && (window.console.firebug || window.console.exception && window.console.table) || // Is firefox >= v31?\n // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31 || // Double check webkit in userAgent just in case we are in a worker\n typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/);\n}\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n args[0] = (this.useColors ? '%c' : '') + this.namespace + (this.useColors ? ' %c' : ' ') + args[0] + (this.useColors ? '%c ' : ' ') + '+' + module.exports.humanize(this.diff);\n\n if (!this.useColors) {\n return;\n }\n\n var c = 'color: ' + this.color;\n args.splice(1, 0, c, 'color: inherit'); // The final \"%c\" is somewhat tricky, because there could be other\n // arguments passed either before or after the %c, so we need to\n // figure out the correct index to insert the CSS into\n\n var index = 0;\n var lastC = 0;\n args[0].replace(/%[a-zA-Z%]/g, function (match) {\n if (match === '%%') {\n return;\n }\n\n index++;\n\n if (match === '%c') {\n // We only are interested in the *last* %c\n // (the user may have provided their own)\n lastC = index;\n }\n });\n args.splice(lastC, 0, c);\n}\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\nfunction log() {\n var _console;\n\n // This hackery is required for IE8/9, where\n // the `console.log` function doesn't have 'apply'\n return (typeof console === \"undefined\" ? \"undefined\" : _typeof(console)) === 'object' && console.log && (_console = console).log.apply(_console, arguments);\n}\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n try {\n if (namespaces) {\n exports.storage.setItem('debug', namespaces);\n } else {\n exports.storage.removeItem('debug');\n }\n } catch (error) {// Swallow\n // XXX (@Qix-) should we be logging these?\n }\n}\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n var r;\n\n try {\n r = exports.storage.getItem('debug');\n } catch (error) {} // Swallow\n // XXX (@Qix-) should we be logging these?\n // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\n\n if (!r && typeof process !== 'undefined' && 'env' in process) {\n r = process.env.DEBUG;\n }\n\n return r;\n}\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n try {\n // TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n // The Browser also has localStorage in the global context.\n return localStorage;\n } catch (error) {// Swallow\n // XXX (@Qix-) should we be logging these?\n }\n}\n\nmodule.exports = __webpack_require__(\"/opt/atlassian/pipelines/agent/build/node_modules/babel-loader/lib/index.js??ref--23-0!/opt/atlassian/pipelines/agent/build/node_modules/eslint-loader/index.js!/opt/atlassian/pipelines/agent/build/node_modules/debug/src/common.js\")(exports);\nvar formatters = module.exports.formatters;\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n try {\n return JSON.stringify(v);\n } catch (error) {\n return '[UnexpectedJSONParseError]: ' + error.message;\n }\n};\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"/opt/atlassian/pipelines/agent/build/node_modules/babel-loader/lib/index.js??ref--23-0!/opt/atlassian/pipelines/agent/build/node_modules/eslint-loader/index.js!/opt/atlassian/pipelines/agent/build/node_modules/process/browser.js\")))\n\n/***/ }),\n\n/***/ \"/opt/atlassian/pipelines/agent/build/node_modules/babel-loader/lib/index.js??ref--23-0!/opt/atlassian/pipelines/agent/build/node_modules/eslint-loader/index.js!/opt/atlassian/pipelines/agent/build/node_modules/debug/src/common.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n createDebug.debug = createDebug;\n createDebug.default = createDebug;\n createDebug.coerce = coerce;\n createDebug.disable = disable;\n createDebug.enable = enable;\n createDebug.enabled = enabled;\n createDebug.humanize = __webpack_require__(\"/opt/atlassian/pipelines/agent/build/node_modules/babel-loader/lib/index.js??ref--23-0!/opt/atlassian/pipelines/agent/build/node_modules/eslint-loader/index.js!/opt/atlassian/pipelines/agent/build/node_modules/debug/node_modules/ms/index.js\");\n Object.keys(env).forEach(function (key) {\n createDebug[key] = env[key];\n });\n /**\n * Active `debug` instances.\n */\n\n createDebug.instances = [];\n /**\n * The currently active debug mode names, and names to skip.\n */\n\n createDebug.names = [];\n createDebug.skips = [];\n /**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n */\n\n createDebug.formatters = {};\n /**\n * Selects a color for a debug namespace\n * @param {String} namespace The namespace string for the for the debug instance to be colored\n * @return {Number|String} An ANSI color code for the given namespace\n * @api private\n */\n\n function selectColor(namespace) {\n var hash = 0;\n\n for (var i = 0; i < namespace.length; i++) {\n hash = (hash << 5) - hash + namespace.charCodeAt(i);\n hash |= 0; // Convert to 32bit integer\n }\n\n return createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n }\n\n createDebug.selectColor = selectColor;\n /**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\n function createDebug(namespace) {\n var prevTime;\n\n function debug() {\n // Disabled?\n if (!debug.enabled) {\n return;\n }\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var self = debug; // Set `diff` timestamp\n\n var curr = Number(new Date());\n var ms = curr - (prevTime || curr);\n self.diff = ms;\n self.prev = prevTime;\n self.curr = curr;\n prevTime = curr;\n args[0] = createDebug.coerce(args[0]);\n\n if (typeof args[0] !== 'string') {\n // Anything else let's inspect with %O\n args.unshift('%O');\n } // Apply any `formatters` transformations\n\n\n var index = 0;\n args[0] = args[0].replace(/%([a-zA-Z%])/g, function (match, format) {\n // If we encounter an escaped % then don't increase the array index\n if (match === '%%') {\n return match;\n }\n\n index++;\n var formatter = createDebug.formatters[format];\n\n if (typeof formatter === 'function') {\n var val = args[index];\n match = formatter.call(self, val); // Now we need to remove `args[index]` since it's inlined in the `format`\n\n args.splice(index, 1);\n index--;\n }\n\n return match;\n }); // Apply env-specific formatting (colors, etc.)\n\n createDebug.formatArgs.call(self, args);\n var logFn = self.log || createDebug.log;\n logFn.apply(self, args);\n }\n\n debug.namespace = namespace;\n debug.enabled = createDebug.enabled(namespace);\n debug.useColors = createDebug.useColors();\n debug.color = selectColor(namespace);\n debug.destroy = destroy;\n debug.extend = extend; // Debug.formatArgs = formatArgs;\n // debug.rawLog = rawLog;\n // env-specific initialization logic for debug instances\n\n if (typeof createDebug.init === 'function') {\n createDebug.init(debug);\n }\n\n createDebug.instances.push(debug);\n return debug;\n }\n\n function destroy() {\n var index = createDebug.instances.indexOf(this);\n\n if (index !== -1) {\n createDebug.instances.splice(index, 1);\n return true;\n }\n\n return false;\n }\n\n function extend(namespace, delimiter) {\n return createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n }\n /**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\n function enable(namespaces) {\n createDebug.save(namespaces);\n createDebug.names = [];\n createDebug.skips = [];\n var i;\n var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n var len = split.length;\n\n for (i = 0; i < len; i++) {\n if (!split[i]) {\n // ignore empty strings\n continue;\n }\n\n namespaces = split[i].replace(/\\*/g, '.*?');\n\n if (namespaces[0] === '-') {\n createDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n } else {\n createDebug.names.push(new RegExp('^' + namespaces + '$'));\n }\n }\n\n for (i = 0; i < createDebug.instances.length; i++) {\n var instance = createDebug.instances[i];\n instance.enabled = createDebug.enabled(instance.namespace);\n }\n }\n /**\n * Disable debug output.\n *\n * @api public\n */\n\n function disable() {\n createDebug.enable('');\n }\n /**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\n function enabled(name) {\n if (name[name.length - 1] === '*') {\n return true;\n }\n\n var i;\n var len;\n\n for (i = 0, len = createDebug.skips.length; i < len; i++) {\n if (createDebug.skips[i].test(name)) {\n return false;\n }\n }\n\n for (i = 0, len = createDebug.names.length; i < len; i++) {\n if (createDebug.names[i].test(name)) {\n return true;\n }\n }\n\n return false;\n }\n /**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\n function coerce(val) {\n if (val instanceof Error) {\n return val.stack || val.message;\n }\n\n return val;\n }\n\n createDebug.enable(createDebug.load());\n return createDebug;\n}\n\nmodule.exports = setup;\n\n/***/ }),\n\n/***/ \"/opt/atlassian/pipelines/agent/build/node_modules/babel-loader/lib/index.js??ref--23-0!/opt/atlassian/pipelines/agent/build/node_modules/eslint-loader/index.js!/opt/atlassian/pipelines/agent/build/node_modules/process/browser.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout() {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n})();\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch (e) {\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch (e) {\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e) {\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e) {\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while (len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) {\n return [];\n};\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () {\n return '/';\n};\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function () {\n return 0;\n};\n\n/***/ }),\n\n/***/ \"multi /opt/atlassian/pipelines/agent/build/client/src/scripts/module.product-detail.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(\"/opt/atlassian/pipelines/agent/build/node_modules/babel-loader/lib/index.js??ref--23-0!/opt/atlassian/pipelines/agent/build/node_modules/eslint-loader/index.js!/opt/atlassian/pipelines/agent/build/client/src/scripts/module.product-detail.js\");\n\n\n/***/ })\n\n},[\"multi /opt/atlassian/pipelines/agent/build/client/src/scripts/module.product-detail.js\"]);\n\n\n// WEBPACK FOOTER //\n// scripts/module.product-detail--02211f50dbde85fd86ab.js","/* global Loader:true $:true */\n\nimport debug from \"debug\";\n\nconst MODULE_NAME = 'app.core/lib/strings';\nconst log = debug(MODULE_NAME);\n\n\nexport function toCamelCase (str) {\n\treturn str.replace(/^([A-Z])|[\\s-_](\\w)/g, (match, p1, p2) => {\n\t\tif (p2) {\n\t\t\treturn p2.toUpperCase();\n\t\t}\n\n\t\treturn p1.toLowerCase();\n\t});\n}\n\nexport function tmpl (str, context) {\n\tlet result = str;\n\n\tlog(`templating ${result} with context: `, context);\n\n\tif (result) {\n\n\t\tObject.keys(context)\n\t\t\t.forEach((item) => {\n\t\t\t\tresult = result.replace(`{{${item}}}`, context[item]);\n\t\t\t});\n\n\t\tlog(`templated ${result}`);\n\t}\n\n\treturn result;\n}\n\nfunction reallySimpleMustacheRenderer (left, right) {\nreturn function (str, context) {\n var result = str;\n\n if (result) {\n $.each(context, function (key, value) {\n result = result.replace(new RegExp(left + key + right, 'g'), value);\n });\n }\n\n return result;\n};\n}\nexports.tmpl = reallySimpleMustacheRenderer('{{', '}}');\nexports.reallySimpleMustacheRenderer = reallySimpleMustacheRenderer;\n\nexport function $tmpl (element, context) {\n const $target = $(element);\n const templateString = $target.attr('data-text-template');\n\n log(`templating [${templateString}] with context: `, context);\n const result = tmpl(templateString, context);\n\n $target.text(result);\n}\n\n/**\n * https://github.com/aishikaty/tiny-mustache\n * https://mustache.github.io/\n * @param {String} template [description]\n * @param {[type]} self [description]\n * @param {[type]} parent [description]\n * @param {[type]} invert [description]\n * @return {[type]} [description]\n */\nexport function mustache(template, self, parent, invert) {\n var render = mustache;\n var output = \"\";\n var i;\n\n function get (ctx, path) {\n path = path.pop ? path : path.split(\".\");\n ctx = ctx[path.shift()] || \"\";\n return (0 in path) ? get(ctx, path) : ctx;\n }\n\n self = Array.isArray(self) ? self : (self ? [self] : []);\n self = invert ? (0 in self) ? [] : [1] : self;\n\n for (i = 0; i < self.length; i++) {\n var childCode = '';\n var depth = 0;\n var inverted;\n var ctx = (typeof self[i] == \"object\") ? self[i] : {};\n ctx = Object.assign({}, parent, ctx);\n ctx[\"\"] = {\"\": self[i]};\n\n template.replace(/([\\s\\S]*?)({{((\\/)|(\\^)|#)(.*?)}}|$)/g,\n function(match, code, y, z, close, invert, name) {\n if (!depth) {\n output += code.replace(/{{{(.*?)}}}|{{(!?)(&?)(>?)(.*?)}}/g,\n function(match, raw, comment, isRaw, partial, name) {\n return raw ? get(ctx, raw)\n : isRaw ? get(ctx, name)\n : partial ? render(get(ctx, name), ctx)\n : !comment ? new Option(get(ctx, name)).innerHTML\n : \"\";\n }\n );\n inverted = invert;\n } else {\n childCode += depth && !close || depth > 1 ? match : code;\n }\n if (close) {\n if (!--depth) {\n name = get(ctx, name);\n if (/^f/.test(typeof name)) {\n output += name.call(ctx, childCode, function (template) {\n return render(template, ctx);\n });\n } else {\n output += render(childCode, name, ctx, inverted);\n }\n childCode = \"\";\n }\n } else {\n ++depth;\n }\n }\n );\n }\n return output;\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/core/lib/strings.js","/* global Loader:true $:true Foundation:true Flickity:true */\n// import 'babel-polyfill';\nimport {$tmpl, tmpl} from '@core/lib/strings';\n\nimport debug from \"debug\";\n\n\njQueryBridget( 'flickity', Flickity, $ );\n\nwindow.Symbol = Symbol;\nconst ONE = 1;\nconst ZERO = 0;\nconst MODULE_NAME = 'module/product-detail';\nconst log = debug(MODULE_NAME);\nconst userAgentContains = (str) => navigator.userAgent.toLowerCase().indexOf(str.toLowerCase()) > -1;\nconst UA_HAS_SAFARI = userAgentContains(\"Safari\");\nconst UA_HAS_CHROME = userAgentContains(\"Chrome\");\nconst UA_HAS_OPERA = userAgentContains(\"op\");\nconst UA_IS_SAFARI = UA_HAS_SAFARI && !UA_HAS_CHROME;\nconst UA_IS_CHROME = UA_HAS_CHROME && !UA_HAS_OPERA;\n\n\n\nfunction getSliderOptions ($element) {\n const galleryOptionsAttr = 'data-flickity';\n if (UA_IS_SAFARI) {\n options.watchCSS = false;\n }\n return $element.attr(galleryOptionsAttr);\n}\n\nfunction GetGalleryElement () {\n return new Promise( (resolve, reject) => {\n const gallerySelector = '#modal-gallery .modal-gallery';\n const $element = $(gallerySelector);\n\n log('$element',$element);\n\n resolve($element);\n });\n}\n\nfunction InitGallery () {\n return new Promise( (resolve, reject) => {\n GetGalleryElement()\n .then(($element) => {\n let flickity = $element.data('flickity');\n if (!flickity) {\n const options = getSliderOptions($element);\n flickity = $element.flickity(options);\n }\n if (UA_IS_SAFARI) {\n flickity.activate();\n }\n resolve(flickity);\n });\n });\n}\n\n\nfunction GetGallery () {\n return new Promise( (resolve, reject) => {\n GetGalleryElement()\n .then(InitGallery)\n .then((flickity) => {\n log('resolved gallery', flickity);\n resolve(flickity);\n });\n });\n}\n\nfunction DestroyGallery () {\n GetGalleryElement()\n .then(($element) => {\n const $gallery = $element.data('flickity');\n if ($gallery) {\n $gallery.destroy();\n }\n });\n}\n\n// Flickity not initialised until carousel elements are visible\nfunction BindGalleryEvents (gallery) {\n return new Promise( (resolve, reject) => {\n log('binding gallery events');\n\n gallery.on('select', () => {\n log('[initGalleryCarousel] flickity.select');\n UpdatePaginationStatus(gallery);\n SelectGalleryThumbnail(gallery.selectedIndex);\n });\n\n gallery.on('settle', () => {\n log('[initGalleryCarousel] flickity.settle');\n UpdatePaginationStatus(gallery);\n SelectGalleryThumbnail(gallery.selectedIndex);\n });\n\n resolve();\n });\n}\n\nfunction UpdatePaginationStatus (gallery) {\n return new Promise((resolve, reject) => {\n const total = $('.modal-gallery__thumbnail').length;\n const current = gallery.selectedIndex + ONE;\n\n log('UpdatePaginationStatus', gallery, total, current);\n\n $tmpl('.modal-gallery__pagination-status', {\n total: total,\n current: current\n });\n });\n}\n\nfunction SelectGallerySlide (slideIndex) {\n return GetGallery()\n .then( ($gallery) => {\n $gallery.select(slideIndex, false, true);\n return Promise.resolve($gallery);\n });\n}\n\nfunction SelectGalleryThumbnail (slideIndex) {\n const thumbnail = $('.modal-gallery__thumbnail').get(slideIndex);\n const $thumbnail = $(thumbnail);\n\n log(`selecting slide [${slideIndex}]`, thumbnail);\n\n $thumbnail\n .siblings()\n .removeClass('is-selected');\n\n $thumbnail\n .addClass('is-selected');\n\n}\n\n\nfunction ResizeGallery (gallery) {\n return new Promise((resolve, reject) => {\n log('repositioning gallery', gallery);\n gallery.reposition();\n log('resizing gallery', gallery);\n gallery.resize();\n resolve(gallery);\n });\n}\n\nfunction OnFlickityMainImageClick () {\n\n if (Foundation.MediaQuery.atLeast('medium')) {\n log('Setting up modal gallery');\n\n log('.product-detail-image-gallery__main-image:click');\n\n GetGallery()\n .then((gallery) => {\n $('#modal-gallery').foundation('open');\n return gallery;\n })\n .then((gallery) => {\n SelectGallerySlide(ZERO);\n });\n } else {\n DestroyGallery();\n }\n}\n\nfunction OnFlickityThumbnailClick () {\n if (Foundation.MediaQuery.atLeast('medium')) {\n const index = $(this).index();\n log('.modal-gallery__thumbnail:click');\n GetGallery()\n .then((gallery) => {\n $('#modal-gallery').foundation('open');\n return gallery;\n })\n .then((gallery) => {\n SelectGallerySlide(index);\n });\n } else {\n DestroyGallery();\n }\n}\n\n$(document).ready(() => {\n\n // Initialise flickity only when revealed\n\n $('#modal-gallery').one('open.zf.reveal', () => {\n const $modal = $('#modal-gallery');\n log('revealing modal gallery');\n GetGallery()\n .then(ResizeGallery)\n .then((gallery) => {\n const topPad = $(window).height() / 2 - $modal.height() / 2;\n $modal.css('top', topPad > 0 ? topPad : 0);\n });\n\n });\n\n\n /**\n * Removes foundation reveal modals.\n * see: https://jira.fusion.com.au/browse/DET001-105\n * > Mobile no modal appears only slider of main image sized images.\n */\n if (Foundation.MediaQuery.current === 'small') {\n log('removing product image gallery modal.');\n\n const modalTargets = {};\n\n $('.product-detail-image-gallery [data-open]')\n .each(function GetModalTarget () {\n modalTargets[$(this).attr('data-open')] = true;\n });\n\n Object.keys(modalTargets).forEach((selector) => {\n $(`#${selector}`).foundation('destroy');\n });\n\n }\n\n if (Foundation.MediaQuery.atLeast('medium')) {\n log('Setting up modal gallery');\n\n $(`.product-detail-image-gallery__main-image`)\n .on('click', OnFlickityMainImageClick);\n\n $(`.modal-gallery__thumbnail, .product-detail-image-gallery__thumbnail-item`)\n .on('click', OnFlickityThumbnailClick);\n\n GetGallery()\n .then(BindGalleryEvents);\n }\n\n});\n\nVue.component('pagination-test', {\n\n template: `
A Test
`,\n\n ready () {\n log('ready');\n }\n\n});\n\n\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/scripts/module.product-detail.js","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/debug/node_modules/ms/index.js","\"use strict\";\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\n/**\n * Colors.\n */\n\nexports.colors = ['#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC', '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF', '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC', '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF', '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC', '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033', '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366', '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933', '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC', '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF', '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33'];\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n// eslint-disable-next-line complexity\n\nfunction useColors() {\n // NB: In an Electron preload script, document will be defined but not fully\n // initialized. Since we know we're in Chrome, we'll just detect this case\n // explicitly\n if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n return true;\n } // Internet Explorer and Edge do not support colors.\n\n\n if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n return false;\n } // Is webkit? http://stackoverflow.com/a/16459606/376773\n // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\n\n return typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance || // Is firebug? http://stackoverflow.com/a/398120/376773\n typeof window !== 'undefined' && window.console && (window.console.firebug || window.console.exception && window.console.table) || // Is firefox >= v31?\n // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31 || // Double check webkit in userAgent just in case we are in a worker\n typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/);\n}\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\n\nfunction formatArgs(args) {\n args[0] = (this.useColors ? '%c' : '') + this.namespace + (this.useColors ? ' %c' : ' ') + args[0] + (this.useColors ? '%c ' : ' ') + '+' + module.exports.humanize(this.diff);\n\n if (!this.useColors) {\n return;\n }\n\n var c = 'color: ' + this.color;\n args.splice(1, 0, c, 'color: inherit'); // The final \"%c\" is somewhat tricky, because there could be other\n // arguments passed either before or after the %c, so we need to\n // figure out the correct index to insert the CSS into\n\n var index = 0;\n var lastC = 0;\n args[0].replace(/%[a-zA-Z%]/g, function (match) {\n if (match === '%%') {\n return;\n }\n\n index++;\n\n if (match === '%c') {\n // We only are interested in the *last* %c\n // (the user may have provided their own)\n lastC = index;\n }\n });\n args.splice(lastC, 0, c);\n}\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\n\nfunction log() {\n var _console;\n\n // This hackery is required for IE8/9, where\n // the `console.log` function doesn't have 'apply'\n return (typeof console === \"undefined\" ? \"undefined\" : _typeof(console)) === 'object' && console.log && (_console = console).log.apply(_console, arguments);\n}\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\n\nfunction save(namespaces) {\n try {\n if (namespaces) {\n exports.storage.setItem('debug', namespaces);\n } else {\n exports.storage.removeItem('debug');\n }\n } catch (error) {// Swallow\n // XXX (@Qix-) should we be logging these?\n }\n}\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\n\nfunction load() {\n var r;\n\n try {\n r = exports.storage.getItem('debug');\n } catch (error) {} // Swallow\n // XXX (@Qix-) should we be logging these?\n // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\n\n if (!r && typeof process !== 'undefined' && 'env' in process) {\n r = process.env.DEBUG;\n }\n\n return r;\n}\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\n\nfunction localstorage() {\n try {\n // TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n // The Browser also has localStorage in the global context.\n return localStorage;\n } catch (error) {// Swallow\n // XXX (@Qix-) should we be logging these?\n }\n}\n\nmodule.exports = require('./common')(exports);\nvar formatters = module.exports.formatters;\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n try {\n return JSON.stringify(v);\n } catch (error) {\n return '[UnexpectedJSONParseError]: ' + error.message;\n }\n};\n\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/debug/src/browser.js","\"use strict\";\n\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\nfunction setup(env) {\n createDebug.debug = createDebug;\n createDebug.default = createDebug;\n createDebug.coerce = coerce;\n createDebug.disable = disable;\n createDebug.enable = enable;\n createDebug.enabled = enabled;\n createDebug.humanize = require('ms');\n Object.keys(env).forEach(function (key) {\n createDebug[key] = env[key];\n });\n /**\n * Active `debug` instances.\n */\n\n createDebug.instances = [];\n /**\n * The currently active debug mode names, and names to skip.\n */\n\n createDebug.names = [];\n createDebug.skips = [];\n /**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n */\n\n createDebug.formatters = {};\n /**\n * Selects a color for a debug namespace\n * @param {String} namespace The namespace string for the for the debug instance to be colored\n * @return {Number|String} An ANSI color code for the given namespace\n * @api private\n */\n\n function selectColor(namespace) {\n var hash = 0;\n\n for (var i = 0; i < namespace.length; i++) {\n hash = (hash << 5) - hash + namespace.charCodeAt(i);\n hash |= 0; // Convert to 32bit integer\n }\n\n return createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n }\n\n createDebug.selectColor = selectColor;\n /**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\n function createDebug(namespace) {\n var prevTime;\n\n function debug() {\n // Disabled?\n if (!debug.enabled) {\n return;\n }\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var self = debug; // Set `diff` timestamp\n\n var curr = Number(new Date());\n var ms = curr - (prevTime || curr);\n self.diff = ms;\n self.prev = prevTime;\n self.curr = curr;\n prevTime = curr;\n args[0] = createDebug.coerce(args[0]);\n\n if (typeof args[0] !== 'string') {\n // Anything else let's inspect with %O\n args.unshift('%O');\n } // Apply any `formatters` transformations\n\n\n var index = 0;\n args[0] = args[0].replace(/%([a-zA-Z%])/g, function (match, format) {\n // If we encounter an escaped % then don't increase the array index\n if (match === '%%') {\n return match;\n }\n\n index++;\n var formatter = createDebug.formatters[format];\n\n if (typeof formatter === 'function') {\n var val = args[index];\n match = formatter.call(self, val); // Now we need to remove `args[index]` since it's inlined in the `format`\n\n args.splice(index, 1);\n index--;\n }\n\n return match;\n }); // Apply env-specific formatting (colors, etc.)\n\n createDebug.formatArgs.call(self, args);\n var logFn = self.log || createDebug.log;\n logFn.apply(self, args);\n }\n\n debug.namespace = namespace;\n debug.enabled = createDebug.enabled(namespace);\n debug.useColors = createDebug.useColors();\n debug.color = selectColor(namespace);\n debug.destroy = destroy;\n debug.extend = extend; // Debug.formatArgs = formatArgs;\n // debug.rawLog = rawLog;\n // env-specific initialization logic for debug instances\n\n if (typeof createDebug.init === 'function') {\n createDebug.init(debug);\n }\n\n createDebug.instances.push(debug);\n return debug;\n }\n\n function destroy() {\n var index = createDebug.instances.indexOf(this);\n\n if (index !== -1) {\n createDebug.instances.splice(index, 1);\n return true;\n }\n\n return false;\n }\n\n function extend(namespace, delimiter) {\n return createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n }\n /**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\n\n function enable(namespaces) {\n createDebug.save(namespaces);\n createDebug.names = [];\n createDebug.skips = [];\n var i;\n var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n var len = split.length;\n\n for (i = 0; i < len; i++) {\n if (!split[i]) {\n // ignore empty strings\n continue;\n }\n\n namespaces = split[i].replace(/\\*/g, '.*?');\n\n if (namespaces[0] === '-') {\n createDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n } else {\n createDebug.names.push(new RegExp('^' + namespaces + '$'));\n }\n }\n\n for (i = 0; i < createDebug.instances.length; i++) {\n var instance = createDebug.instances[i];\n instance.enabled = createDebug.enabled(instance.namespace);\n }\n }\n /**\n * Disable debug output.\n *\n * @api public\n */\n\n\n function disable() {\n createDebug.enable('');\n }\n /**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\n\n function enabled(name) {\n if (name[name.length - 1] === '*') {\n return true;\n }\n\n var i;\n var len;\n\n for (i = 0, len = createDebug.skips.length; i < len; i++) {\n if (createDebug.skips[i].test(name)) {\n return false;\n }\n }\n\n for (i = 0, len = createDebug.names.length; i < len; i++) {\n if (createDebug.names[i].test(name)) {\n return true;\n }\n }\n\n return false;\n }\n /**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\n\n function coerce(val) {\n if (val instanceof Error) {\n return val.stack || val.message;\n }\n\n return val;\n }\n\n createDebug.enable(createDebug.load());\n return createDebug;\n}\n\nmodule.exports = setup;\n\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/debug/src/common.js","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/process/browser.js"],"sourceRoot":""}