{"version":3,"file":"../../javascript/downlight-selector.js","names":["DownlightSelector","$selector","step","steps","data","validData","setStep","pushUrl","updateUrl","$","removeClass","getImagesForStep","attr","addClass","ajax","url","method","param","done","undefined","payload","redirect","$step","skipStep","setSkipped","incStep","each","options","key","option","$option","find","html","image","parent","toggleClass","valid","window","location","assign","then","parseInt","name","getPreviousStep","$currentStep","$previousStep","prev","setData","value","previousChoiceParams","Object","$choice","length","JSON","stringify","trimData","validParams","parse","Loop","object","i","removeData","params","history","pushState","pathname","load","init","appendTo","getParams","on","this","closest","pair","split","popup","$overlay","$popup","show","hide","remove","addEventListener","e"],"sources":["downlight-selector.js"],"mappings":"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","ignoreList":[],"sourceRoot":"../../../../resources/javascript","sourcesContent":["var DownlightSelector = {\n    $selector: false,\n    step: 1,\n    steps: 0,\n    data: {},\n    validData: {},\n\n    setStep: function (step, pushUrl) {\n        DownlightSelector.step = step;\n        DownlightSelector.data.step = step;\n\n        if (pushUrl) {\n            DownlightSelector.updateUrl();\n        }\n\n        $('.js-downlight-step').removeClass('downlight-step--active');\n\n        if (DownlightSelector.step != 1 && DownlightSelector.step != DownlightSelector.steps) {\n            DownlightSelector.getImagesForStep();\n        } else {\n            DownlightSelector.$selector.attr('data-current-step', step);\n            var $step = $('.js-downlight-step[data-step=\"' + DownlightSelector.step + '\"]');\n            $step.addClass('downlight-step--active');\n        }\n    },\n\n    getImagesForStep: function () {\n        $('.loadable-overlay').addClass('loadable-overlay--loading');\n        $.ajax({\n            url: '/downlight-selector/images',\n            method: \"get\",\n            data: $.param(DownlightSelector.data)\n        }).done(function (data) {\n            if (data.payload.redirect !== undefined) {\n                window.location.assign(data.payload.redirect);\n                return;\n            }\n\n            var $step = $('.js-downlight-step[data-step=\"' + DownlightSelector.step + '\"]');\n\n            if (data.payload.skipStep !== undefined) {\n                DownlightSelector.setSkipped($step.data('name'));\n                DownlightSelector.incStep();\n            } else {\n                $.each(data.payload.options, function (key, option) {\n                    var $option = $step.find('.js-downlight-choice[data-' + key + '] figure');\n                    $option\n                        .html(option.image);\n\n                    $option.parent('.downlight-choice').toggleClass('downlight-choice--disabled', !option.valid);\n                });\n\n                DownlightSelector.$selector.attr('data-current-step', DownlightSelector.step);\n                $step.addClass('downlight-step--active');\n            }\n        }).then(function (data) {\n            $('.loadable-overlay').removeClass('loadable-overlay--loading');\n        });\n    },\n\n    incStep: function () {\n        DownlightSelector.setStep(parseInt(DownlightSelector.step) + 1, true);\n    },\n\n    setSkipped: function (name) {\n        DownlightSelector.data[name] = 'skip';\n    },\n\n    getPreviousStep: function ($currentStep) {\n        $previousStep = $currentStep.prev();\n        var name = $previousStep.data('name');\n        if (DownlightSelector.data[name] === 'skip') {\n            $previousStep = DownlightSelector.getPreviousStep($previousStep);\n        }\n        return $previousStep;\n    },\n\n    setData: function (name, value) {\n        var label = '';\n        var previousChoiceParams = '';\n        if (value === undefined) {\n            value = '';\n            delete(DownlightSelector.data[name]);\n        } else {\n            previousChoiceParams = Object.assign({}, DownlightSelector.data);\n            if (previousChoiceParams[name] !== undefined) {\n                delete previousChoiceParams[name];\n            }\n\n            DownlightSelector.data[name] = value;\n            $choice = $('.js-downlight-choice[data-choice=\"' + name + '=' + value + '\"]');\n            label = $choice.data('label');\n        }\n\n        // var $nav = $('.js-downlight-nav[data-choice=\"' + name + '\"]');\n        // if ($nav.length > 0) {\n        //     $nav.data('previousChoices', JSON.stringify(previousChoiceParams));\n        //     $nav.find('span').html('<a href=\"#\" class=\"downlight-crumb__link\">' + label + '</a>');\n        // }\n\n        var $step = $('.js-downlight-step[data-name=\"' + name + '\"]');\n        if ($step.length > 0) {\n            $step.data('previousChoices', JSON.stringify(previousChoiceParams));\n        }\n    },\n\n    trimData: function (validParams) {\n        var validParams = JSON.parse(validParams);\n        DownlightSelector.validData = validParams;\n        var loop = new Loop();\n        loop.object(DownlightSelector.data, function (key, i) {\n            if (DownlightSelector.validData[key[i]] === undefined) {\n                delete DownlightSelector.data[key[i]];\n                // var $nav = $('.js-downlight-nav[data-choice=\"' + key[i] + '\"]');\n                // if ($nav.length > 0) {\n                //     $nav.removeData('previousChoices');\n                //     $nav.find('span').html('');\n                // }\n                var $step = $('.js-downlight-step[data-name=\"' + key[i] + '\"]');\n                if ($step.length > 0) {\n                    $step.removeData('previousChoices');\n                }\n            }\n        });\n    },\n\n    updateUrl: function () {\n        if (DownlightSelector.step < DownlightSelector.steps) {\n            var params = $.param(DownlightSelector.data);\n            history.pushState(DownlightSelector.data, '', window.location.pathname + '?' + params);\n        } else {\n            if (DownlightSelector.data[\"installation\"] == 'yes') {\n                delete DownlightSelector.data[\"installation\"];\n            }\n\n            var loop = new Loop();\n            loop.object(DownlightSelector.data, function (key, i) {\n                if (DownlightSelector.data[key[i]] === 'any') {\n                    delete DownlightSelector.data[key[i]];\n                }\n            });\n            params = $.param(DownlightSelector.data);\n\n            window.location.assign('/downlight-selector/results?' + params);\n        }\n    },\n\n    load: function (params) {\n        if (params === null) {\n            params = {};\n        }\n\n        if (params.step === undefined) {\n            params.step = 1;\n        }\n\n        for (var param in DownlightSelector.data) {\n            if (!params[param]) {\n                DownlightSelector.setData(param, undefined);\n            }\n        }\n\n        for (var param in params) {\n            DownlightSelector.setData(param, params[param]);\n        }\n\n        if (DownlightSelector.data.step >= DownlightSelector.steps) {\n            DownlightSelector.data.step--;\n        }\n\n        DownlightSelector.setStep(DownlightSelector.data.step);\n    },\n\n    init: function () {\n        DownlightSelector.$selector = $('#js-downlight-selector');\n        DownlightSelector.steps = parseInt(DownlightSelector.$selector.attr('data-max-steps'));\n\n        $('.js-downlight-popup').appendTo('body');\n\n        // reload state from query string\n        var params = $.getParams();\n        DownlightSelector.load(params);\n    },\n}\n\n$(function () {\n    DownlightSelector.init();\n\n    // $('.js-downlight-nav').on('click', 'span a', function () {\n    //     var $nav = $(this).closest('.js-downlight-nav');\n    //     var step = $nav.data('step');\n    //     DownlightSelector.trimData($nav.data('previousChoices'))\n    //     DownlightSelector.setStep(step, true);\n    // });\n\n    $('.js-downlight-previous').on('click', function () {\n        var $currentStep = $(this).closest('.js-downlight-step');\n        var $previousStep = DownlightSelector.getPreviousStep($currentStep);\n        DownlightSelector.trimData($previousStep.data('previousChoices'))\n        DownlightSelector.setStep($previousStep.data('step'), true);\n    });\n\n    $('.js-downlight-choice a').on('click', function () {\n        var $choice = $(this).closest('.js-downlight-choice');\n        var choice = $choice.data('choice');\n\n        var pair = choice.split('=');\n\n        DownlightSelector.setData(pair[0], pair[1]);\n\n        var popup = $choice.data('popup');\n        if (popup !== undefined) {\n            var $overlay = $('<div class=\"downlight-overlay\"></div>').appendTo('body');\n\n            var $popup = $(popup);\n            $popup.show();\n\n            $popup.on('click', '.js-downlight-choice a', function () {\n                $popup.hide();\n                $overlay.remove();\n            });\n        } else {\n            DownlightSelector.incStep();\n        }\n    });\n});\n\nwindow.addEventListener('popstate', function (e) {\n    var params = $.getParams();\n    DownlightSelector.load(params);\n});\n"]}