{"version":3,"sources":["block-slider.min.js","block-slider.js"],"names":["BlockSlider","collection","_ref","testTiming","timing","console","warn","lgStart","cache","slider","wrap","undefined","items","duration","sliderName","id","className","msg2","querySelector","wrapClass","Error","itemsClass","slice","call","children","e","message","calcTransiton","setAttribute","sliders","push","slidePosition","itemsPerSlide","itemWidth","wrapWidth","sliderWidth","slide","forEach","s","str","style","webkitTransform","msTransform","transform","hasReachedEnd","calcAndSetWidths","removeInlineWidths","opacity","removeProperty","item","i","arr","setWidths","width","length","offsetWidth","calcItemWidth","calcItemsPerSlide","Math","round","setTimeout","safariFixDelay","_ref$sInterval","sInterval","_ref$sTransition","sTransition","_ref$wrapClass","_ref$itemsClass","test","window","HTMLElement","resizeTimer","addEventListener","clearTimeout","setInterval","requestAnimationFrame","jQuery","$","fn","opts","this"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACNA,YAAA,SAASA,aAAYC,EAAYC,GAY7B,QAASC,GAAWC,GAChB,MAAsB,gBAAXA,IACPC,QAAQC,KAAQC,EAAO,qBAAqBH,EAAM,wBAC3C,IAEJ,EAsBX,QAASI,GAAMC,GACX,GAAIC,GAAIC,OACJC,EAAKD,OACLE,EAAQF,OACRG,EAAaL,EAAOM,GAAK,IAAMN,EAAOM,GAAK,IAAMN,EAAOO,UACxDC,EAAO,gDACX,KAEI,GADAP,EAAOD,EAAOS,cAAcC,IACvBT,EACD,KAAM,IAAIU,OAASb,EAAO,IAAIY,EAAS,IAAIF,EAAI,IAAIH,EAAU,KAI7D,IADAF,EAAQF,EAAKQ,cAAcG,IACtBT,EACD,KAAM,IAAIQ,OAASb,EAAO,IAAIc,EAAU,IAAIJ,EAAI,IAAIE,EAAS,KAG7DP,MAAWU,MAAMC,KAAKX,EAAMY,SAAU,GAIlD,MAAMC,GAEF,MADApB,SAAQC,KAAKmB,EAAEC,UACR,EAEXb,EAAWc,IACXlB,EAAOmB,aAAa,QAAS,gCAC7BlB,EAAKkB,aAAa,QAAO,yCAA2Cf,EAAQ,2BAA2BA,EAAQ,MAC/GgB,EAAQC,MACJrB,OAAAA,EACAC,KAAAA,EACAE,MAAAA,EACAmB,cAAe,EACfC,cAAe,EACfC,UAAW,EACXC,UAAW,EACXC,YAAa,IAWrB,QAASC,KACLP,EAAQQ,QAAQ,SAAAC,GACZ,GAAM5B,GAAO4B,EAAE5B,KACX6B,EAAG,eAAkBD,EAAEP,cAAa,WACxCrB,GAAK8B,MAAMC,gBAAkBF,EAC7B7B,EAAK8B,MAAME,YAAcH,EACzB7B,EAAK8B,MAAMG,UAAYJ,EACvBD,EAAEP,eAAiBO,EAAEL,UACjBW,EAAcN,KACdA,EAAEP,cAAgB,KAK9B,QAASc,KACL,QAASC,GAAmBR,GAExBA,EAAE7B,OAAO+B,MAAMO,QAAU,EAEzBT,EAAE5B,KAAK8B,MAAMQ,eAAe,SAC5BV,EAAE1B,MAAMyB,QAAQ,SAACY,EAAMC,EAAGC,GACtBF,EAAKT,MAAMQ,eAAe,WAQlC,QAASI,GAAUd,GAGfA,EAAE1B,MAAMyB,QAAQ,SAACY,GACbA,EAAKT,MAAMa,MAAQf,EAAEL,UAAY,OAGrCK,EAAEJ,UAAYI,EAAEL,UAAYK,EAAE1B,MAAM0C,OACpChB,EAAE5B,KAAK8B,MAAMa,MAAQf,EAAEJ,UAAY,KACnCI,EAAEH,YAAcG,EAAE7B,OAAO8C,YAb7B,GAAMC,GAAgB,SAAAlB,GAMlB,MANuBA,GAAE1B,MAAM,GAAG2C,aAEhCE,EAAoB,SAAAnB,GAQtB,MAR2BoB,MAAKC,MAAMrB,EAAEH,YAAcG,EAAEL,WAc5DJ,GAAQQ,QAAQ,SAAAC,GACZQ,EAAmBR,GAEnBsB,WAAW,WAEPtB,EAAEL,UAAYuB,EAAclB,GAC5Bc,EAAUd,GACVA,EAAEN,cAAgByB,EAAkBnB,GACpCA,EAAEP,cAAgB,EAClB6B,WAAW,WAEPtB,EAAE7B,OAAO+B,MAAMO,QAAU,EACzBX,KACDyB,IACJA,KAzIX,GAAIC,GAJyB5D,EAC7B6D,UAAAA,EAASpD,SAAAmD,EAAG,IAAIA,EAKZE,EANyB9D,EAE7B+D,YAAAA,EAAWtD,SAAAqD,EAAG,IAAGA,EAMbE,EARyBhE,EAG7BiB,UAAAA,EAASR,SAAAuD,EAAG,yBAAwBA,EAOhCC,EAVyBjE,EAI7BmB,WAAAA,EAAUV,SAAAwD,EAAG,0BAAyBA,EAGhCN,EAAiB,eAAeO,KAAKC,OAAOC,aAAe,IAAM,EACnEzC,KACAtB,EAAU,iBACVgE,EAAW5D,MASTR,GAAW4D,KACbA,EAAY,KAEV5D,EAAW8D,KACbA,EAAc,IAGlB,KAEI,IAAKhE,IAAeA,EAAWqD,SAAWrD,EAAWiB,cACjD,KAAM,IAAIE,OAASb,EAAO,0CAGlC,MAAMkB,GAEF,WADApB,SAAQC,KAAKmB,EAAEC,SAInB,GAAMC,GAAgB,WAKlB,MALwBsC,GAAc,IAyCtChE,GAAWqD,UACRjB,QAAQd,KAAKtB,EAAYO,GAE5BA,EAAMP,EAGV,IAAM2C,GAAgB,SAAAN,GAIlB,QAJyBA,EAAEP,cAAgB,GAAKO,EAAEJ,UAAYI,EAAEH,YA6DpEU,KAEAwB,OAAOG,iBAAiB,SAAU,WAE9BC,aAAaF,GACbA,EAAcX,WAAWf,EAAkB,OAG/C6B,YAAY,WACJC,sBACAA,sBAAsB,WAClBvC,EAAMP,KAGVO,EAAMP,IAEXkC,GAIHM,OAAOO,SACP,SAAEC,GACEA,EAAEC,GAAG9E,YAAc,SAAS+E,GAExB,MADA/E,aAAYgF,KAAMD,GACXC,OAEZX,OAAOO","file":"block-slider.min.js","sourcesContent":[null,"function BlockSlider(collection, {\n    sInterval = 2000,\n    sTransition = 400,\n    wrapClass = '.js-block-slider__wrap',\n    itemsClass = '.js-block-slider__items'\n}) {\n    'use strict';\n    const safariFixDelay = /constructor/i.test(window.HTMLElement) ? 500 : 0,\n        sliders = [],\n        lgStart = 'Block Slider: ';\n    let resizeTimer;\n\n    function testTiming(timing) {\n        if (typeof timing !== 'number') {\n            console.warn(`${lgStart}Supplied timing: '${timing}' is not an integer`);\n            return false;\n        }\n        return true;\n    }\n    if (! testTiming(sInterval)) {\n        sInterval = 2000;\n    }\n    if (! testTiming(sTransition)) {\n        sTransition = 400;\n    }\n    \n    try {\n        // can collection be found ?\n        if (!collection || !collection.length && !collection.querySelector) {\n            throw new Error(`${lgStart}Supplied slider(s) could not be found.`);\n        }\n    }\n    catch(e) {\n        console.warn(e.message);\n        return;\n    }\n\n    const calcTransiton = () => sTransition / 1000;\n\n    function cache(slider) {\n        let wrap,\n            items,\n            duration,\n            sliderName = slider.id ? '#' + slider.id : '.' + slider.className,\n            msg2 = ' could not be found as a direct descendant of ';\n        try {\n            wrap = slider.querySelector(wrapClass);\n            if (!wrap) {\n                throw new Error(`${lgStart}'${wrapClass}'${msg2}'${sliderName}.'`);\n            } \n            else {\n                items = wrap.querySelector(itemsClass);\n                if (!items) {\n                    throw new Error(`${lgStart}'${itemsClass}'${msg2}'${wrapClass}.'`);\n                } \n                else {\n                    items = [].slice.call(items.children, 0);                    \n                }\n            }\n        } \n        catch(e) {\n            console.warn(e.message);\n            return false;\n        }\n        duration = calcTransiton();\n        slider.setAttribute('style', 'overflow: hidden; opacity: 0');\n        wrap.setAttribute('style', `-webkit-transition: -webkit-transform ${duration}s;transition: transform ${duration}s;`);\n        sliders.push({\n            slider,\n            wrap,\n            items,\n            slidePosition: 0,\n            itemsPerSlide: 0,\n            itemWidth: 0,\n            wrapWidth: 0,\n            sliderWidth: 0\n        });\n    }\n    if (collection.length) {\n        [].forEach.call(collection, cache);\n    } else {\n        cache(collection);\n    }\n\n    const hasReachedEnd = s => -(s.slidePosition + 1) > s.wrapWidth - s.sliderWidth;\n\n    function slide() {\n        sliders.forEach(s => {\n            const wrap = s.wrap,\n                str = `translate3d(${s.slidePosition}px, 0, 0)`;\n            wrap.style.webkitTransform = str;\n            wrap.style.msTransform = str;\n            wrap.style.transform = str;\n            s.slidePosition -= s.itemWidth;\n            if (hasReachedEnd(s)) {\n                s.slidePosition = 0;\n            }\n        });\n    }\n\n    function calcAndSetWidths() {\n        function removeInlineWidths(s) {\n            // Temporarily hide the slider\n            s.slider.style.opacity = 0;\n            // Remove widths for wrap and all items.\n            s.wrap.style.removeProperty('width');\n            s.items.forEach((item, i, arr) => {\n                item.style.removeProperty('width');\n            });\n        }\n\n        const calcItemWidth = s => s.items[0].offsetWidth;\n\n        const calcItemsPerSlide = s => Math.round(s.sliderWidth / s.itemWidth);\n\n        function setWidths(s) {\n            // loop through all items and set their width in pixels\n            // to the calculated width.\n            s.items.forEach((item) => {\n                item.style.width = s.itemWidth + 'px';\n            });\n            // Set wrap width equal to total width of items.\n            s.wrapWidth = s.itemWidth * s.items.length;\n            s.wrap.style.width = s.wrapWidth + 'px';\n            s.sliderWidth = s.slider.offsetWidth;\n        }\n\n        sliders.forEach(s => {\n            removeInlineWidths(s);\n            // create a slight delay for Safari being rubbishly slow at layout calcs.\n            setTimeout(() => {\n                // get the default CSS item width in pixels.\n                s.itemWidth = calcItemWidth(s);\n                setWidths(s);\n                s.itemsPerSlide = calcItemsPerSlide(s);\n                s.slidePosition = 0;\n                setTimeout(() => {\n                    // fade slider back in.\n                    s.slider.style.opacity = 1;\n                    slide();\n                }, safariFixDelay);\n            }, safariFixDelay);\n        });\n    }\n\n    calcAndSetWidths();\n\n    window.addEventListener('resize', () => {\n        // call setWidths once the screen has finished resizing.\n        clearTimeout(resizeTimer);\n        resizeTimer = setTimeout(calcAndSetWidths, 250);\n    });\n\n    setInterval(() => {\n        if (requestAnimationFrame) {\n            requestAnimationFrame(() => {\n                slide(sliders);\n            });            \n        } else {\n            slide(sliders); \n        }\n    }, sInterval);\n}\n\n// if jQuery is present, create a plugin.\nif (window.jQuery) {\n    (($) => {\n        $.fn.BlockSlider = function(opts) {\n            BlockSlider(this, opts);\n            return this;\n        };\n    })(window.jQuery);\n}\n"],"sourceRoot":"/source/"}