{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/enquire.js/src/Util.js","webpack:///./node_modules/enquire.js/src/index.js","webpack:///./src/ts/Controllers/tabs.ts","webpack:///./src/ts/modules/tabs.ts","webpack:///./node_modules/enquire.js/src/MediaQueryDispatch.js","webpack:///./node_modules/enquire.js/src/MediaQuery.js","webpack:///./node_modules/enquire.js/src/QueryHandler.js"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","installedChunks","push","Object","prototype","hasOwnProperty","call","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","10","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","default","object","property","p","jsonpArray","window","kwsWebpackJsonp","oldJsonpFunction","slice","isFunction","target","isArray","toString","each","collection","fn","MediaQueryDispatch","KWS","Tabs","controllers","tabs","init","enquire","register","match","$","$tabParent","this","$tabList","find","activeItemText","text","remove","insertBefore","wrap","appendTo","on","e","$parent","closest","toggleClass","preventDefault","$this","removeClass","unmatch","contents","unwrap","off","$contents","children","addClass","trigger","tab","$selectedTab","filter","4","MediaQuery","Util","matchMedia","Error","queries","browserIsIncapable","matches","constructor","q","options","shouldDegrade","isUnconditional","handler","addHandler","unregister","query","removeHandler","clear","QueryHandler","handlers","mql","self","listener","currentTarget","assess","addListener","constuctor","qh","h","equals","destroy","removeListener","action","deferSetup","setup","initialised"],"mappings":"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","file":"/controllers/tabs.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t10: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"kwsWebpackJsonp\"] = window[\"kwsWebpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([23,0]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","/**\n * Helper function for iterating over a collection\n *\n * @param collection\n * @param fn\n */\nfunction each(collection, fn) {\n var i = 0,\n length = collection.length,\n cont;\n\n for(i; i < length; i++) {\n cont = fn(collection[i], i);\n if(cont === false) {\n break; //allow early exit\n }\n }\n}\n\n/**\n * Helper function for determining whether target object is an array\n *\n * @param target the object under test\n * @return {Boolean} true if array, false otherwise\n */\nfunction isArray(target) {\n return Object.prototype.toString.apply(target) === '[object Array]';\n}\n\n/**\n * Helper function for determining whether target object is a function\n *\n * @param target the object under test\n * @return {Boolean} true if function, false otherwise\n */\nfunction isFunction(target) {\n return typeof target === 'function';\n}\n\nmodule.exports = {\n isFunction : isFunction,\n isArray : isArray,\n each : each\n};\n","var MediaQueryDispatch = require('./MediaQueryDispatch');\nmodule.exports = new MediaQueryDispatch();\n","import * as Tabs from \"../modules/tabs\";\r\n\r\nnamespace KWS.controllers.tabs {\r\n\r\n export function init() {\r\n Tabs.init();\r\n }\r\n}\r\n\r\nKWS.controllers.tabs.init();","import * as enquire from 'enquire.js';\r\n\r\nfunction mobileMenuInit() {\r\n // Turn our tabs into a menu at mobile\r\n enquire.register(\"screen and (max-width:767px)\", {\r\n match: function() {\r\n $('.tab-list').each(function(){\r\n var $tabParent = $(this);\r\n var $tabList = $tabParent.find('.js-tabs');\r\n var $activeItem = $tabParent.find('.js-tab.state-selected');\r\n var activeItemText = $activeItem.text();\r\n\r\n if ($tabList.length > 1) {\r\n $tabList.slice(1).remove();\r\n }\r\n\r\n $(`${activeItemText}`)\r\n .insertBefore($tabList)\r\n .wrap(\"
\");\r\n\r\n $tabList.appendTo( $tabParent.find('.js-tabs-mobile-wrapper') );\r\n });\r\n\r\n //setup click events on mobile menu\r\n registerMobileClickEvents();\r\n },\r\n unmatch: function() {\r\n // Cleanup mobile wrapper / trigger elements\r\n $('.js-tabs-mobile-wrapper').each(function() {\r\n $(this).contents().unwrap();\r\n $(this).remove();\r\n });\r\n\r\n $('.tab-list').each(function() {\r\n let $tabList = $(this).find('.js-tabs');\r\n\r\n if ($tabList.length > 1) {\r\n $tabList.slice(1).remove();\r\n }\r\n });\r\n\r\n $('.js-tabs-mobile-trigger').remove();\r\n\r\n removeMobileClickEvents();\r\n },\r\n });\r\n}\r\n\r\nfunction registerMobileClickEvents() {\r\n $('body').on('click.mobileTabs', '.js-tabs-mobile-trigger', function(e){\r\n let $parent = $(this).closest('.tab-list__mobile-wrap');\r\n $parent.find('.js-tabs').toggleClass('state-visible');\r\n $parent.toggleClass('state-open');\r\n e.preventDefault();\r\n });\r\n\r\n $('body').on('click.mobileTabs', '.js-tab', function() {\r\n let $this = $(this);\r\n let $parent = $this.closest('.js-tabs-mobile-wrapper');\r\n $parent.removeClass('state-open');\r\n $parent.find('.js-tabs').toggleClass('state-visible');\r\n\r\n $parent.find('.js-tabs-mobile-trigger').text( $this.text() );\r\n });\r\n}\r\n\r\nfunction removeMobileClickEvents() {\r\n $('body').off('click.mobileTabs').off('click.mobileTabs');\r\n}\r\n\r\nexport function init() {\r\n mobileMenuInit();\r\n\r\n $('.js-tab').on('click', function (e) {\r\n e.preventDefault();\r\n let $this = $(this);\r\n let target = $this.data('target');\r\n let $tabList = $this.closest('.tab-list');\r\n let $contents = $tabList.find('.js-tab-contents').children();\r\n let $tabs = $tabList.find('.js-tab');\r\n\r\n $tabs.removeClass('state-selected');\r\n $this.addClass('state-selected');\r\n\r\n // Trigger a tab change event\r\n $(this).trigger('tabChange', {\r\n tab: this,\r\n target: $this.data('target') || null\r\n });\r\n\r\n // If there's no data-target for this tab, we're done\r\n if (!target) { return; }\r\n\r\n $contents.removeClass('state-active');\r\n let $selectedTab = $contents.filter(target);\r\n\r\n if ($selectedTab.length) {\r\n $selectedTab.addClass('state-active');\r\n }\r\n });\r\n}\r\n","var MediaQuery = require('./MediaQuery');\nvar Util = require('./Util');\nvar each = Util.each;\nvar isFunction = Util.isFunction;\nvar isArray = Util.isArray;\n\n/**\n * Allows for registration of query handlers.\n * Manages the query handler's state and is responsible for wiring up browser events\n *\n * @constructor\n */\nfunction MediaQueryDispatch () {\n if(!window.matchMedia) {\n throw new Error('matchMedia not present, legacy browsers require a polyfill');\n }\n\n this.queries = {};\n this.browserIsIncapable = !window.matchMedia('only all').matches;\n}\n\nMediaQueryDispatch.prototype = {\n\n constructor : MediaQueryDispatch,\n\n /**\n * Registers a handler for the given media query\n *\n * @param {string} q the media query\n * @param {object || Array || Function} options either a single query handler object, a function, or an array of query handlers\n * @param {function} options.match fired when query matched\n * @param {function} [options.unmatch] fired when a query is no longer matched\n * @param {function} [options.setup] fired when handler first triggered\n * @param {boolean} [options.deferSetup=false] whether setup should be run immediately or deferred until query is first matched\n * @param {boolean} [shouldDegrade=false] whether this particular media query should always run on incapable browsers\n */\n register : function(q, options, shouldDegrade) {\n var queries = this.queries,\n isUnconditional = shouldDegrade && this.browserIsIncapable;\n\n if(!queries[q]) {\n queries[q] = new MediaQuery(q, isUnconditional);\n }\n\n //normalise to object in an array\n if(isFunction(options)) {\n options = { match : options };\n }\n if(!isArray(options)) {\n options = [options];\n }\n each(options, function(handler) {\n if (isFunction(handler)) {\n handler = { match : handler };\n }\n queries[q].addHandler(handler);\n });\n\n return this;\n },\n\n /**\n * unregisters a query and all it's handlers, or a specific handler for a query\n *\n * @param {string} q the media query to target\n * @param {object || function} [handler] specific handler to unregister\n */\n unregister : function(q, handler) {\n var query = this.queries[q];\n\n if(query) {\n if(handler) {\n query.removeHandler(handler);\n }\n else {\n query.clear();\n delete this.queries[q];\n }\n }\n\n return this;\n }\n};\n\nmodule.exports = MediaQueryDispatch;\n","var QueryHandler = require('./QueryHandler');\nvar each = require('./Util').each;\n\n/**\n * Represents a single media query, manages it's state and registered handlers for this query\n *\n * @constructor\n * @param {string} query the media query string\n * @param {boolean} [isUnconditional=false] whether the media query should run regardless of whether the conditions are met. Primarily for helping older browsers deal with mobile-first design\n */\nfunction MediaQuery(query, isUnconditional) {\n this.query = query;\n this.isUnconditional = isUnconditional;\n this.handlers = [];\n this.mql = window.matchMedia(query);\n\n var self = this;\n this.listener = function(mql) {\n // Chrome passes an MediaQueryListEvent object, while other browsers pass MediaQueryList directly\n self.mql = mql.currentTarget || mql;\n self.assess();\n };\n this.mql.addListener(this.listener);\n}\n\nMediaQuery.prototype = {\n\n constuctor : MediaQuery,\n\n /**\n * add a handler for this query, triggering if already active\n *\n * @param {object} handler\n * @param {function} handler.match callback for when query is activated\n * @param {function} [handler.unmatch] callback for when query is deactivated\n * @param {function} [handler.setup] callback for immediate execution when a query handler is registered\n * @param {boolean} [handler.deferSetup=false] should the setup callback be deferred until the first time the handler is matched?\n */\n addHandler : function(handler) {\n var qh = new QueryHandler(handler);\n this.handlers.push(qh);\n\n this.matches() && qh.on();\n },\n\n /**\n * removes the given handler from the collection, and calls it's destroy methods\n *\n * @param {object || function} handler the handler to remove\n */\n removeHandler : function(handler) {\n var handlers = this.handlers;\n each(handlers, function(h, i) {\n if(h.equals(handler)) {\n h.destroy();\n return !handlers.splice(i,1); //remove from array and exit each early\n }\n });\n },\n\n /**\n * Determine whether the media query should be considered a match\n *\n * @return {Boolean} true if media query can be considered a match, false otherwise\n */\n matches : function() {\n return this.mql.matches || this.isUnconditional;\n },\n\n /**\n * Clears all handlers and unbinds events\n */\n clear : function() {\n each(this.handlers, function(handler) {\n handler.destroy();\n });\n this.mql.removeListener(this.listener);\n this.handlers.length = 0; //clear array\n },\n\n /*\n * Assesses the query, turning on all handlers if it matches, turning them off if it doesn't match\n */\n assess : function() {\n var action = this.matches() ? 'on' : 'off';\n\n each(this.handlers, function(handler) {\n handler[action]();\n });\n }\n};\n\nmodule.exports = MediaQuery;\n","/**\n * Delegate to handle a media query being matched and unmatched.\n *\n * @param {object} options\n * @param {function} options.match callback for when the media query is matched\n * @param {function} [options.unmatch] callback for when the media query is unmatched\n * @param {function} [options.setup] one-time callback triggered the first time a query is matched\n * @param {boolean} [options.deferSetup=false] should the setup callback be run immediately, rather than first time query is matched?\n * @constructor\n */\nfunction QueryHandler(options) {\n this.options = options;\n !options.deferSetup && this.setup();\n}\n\nQueryHandler.prototype = {\n\n constructor : QueryHandler,\n\n /**\n * coordinates setup of the handler\n *\n * @function\n */\n setup : function() {\n if(this.options.setup) {\n this.options.setup();\n }\n this.initialised = true;\n },\n\n /**\n * coordinates setup and triggering of the handler\n *\n * @function\n */\n on : function() {\n !this.initialised && this.setup();\n this.options.match && this.options.match();\n },\n\n /**\n * coordinates the unmatch event for the handler\n *\n * @function\n */\n off : function() {\n this.options.unmatch && this.options.unmatch();\n },\n\n /**\n * called when a handler is to be destroyed.\n * delegates to the destroy or unmatch callbacks, depending on availability.\n *\n * @function\n */\n destroy : function() {\n this.options.destroy ? this.options.destroy() : this.off();\n },\n\n /**\n * determines equality by reference.\n * if object is supplied compare options, if function, compare match callback\n *\n * @function\n * @param {object || function} [target] the target for comparison\n */\n equals : function(target) {\n return this.options === target || this.options.match === target;\n }\n\n};\n\nmodule.exports = QueryHandler;\n"],"sourceRoot":""}