{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/scripts/index.js"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","0","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","addClickListener","addEventListener","onScroll","document","event","className","target","closest","root","classList","toggle","scrollY","add","remove","Grid","constructor","element","this","shuffle","Shuffle","itemSelector","isCentered","sizer","querySelector","filterMode","FilterMode","ALL","buffer","addShuffleEventListeners","_activeFilters","addFilterSelects","addFilterChecks","on","EventType","LAYOUT","updateCountes","visibleItems","REMOVED","console","log","to","querySelectorAll","forEach","textContent","addFilterButtons","options","filterButtons","Array","from","children","onClick","_handleFilterClick","button","evt","btn","currentTarget","isActive","contains","btnGroup","getAttribute","filterGroup","_removeActiveClassFromChildren","parentNode","ALL_ITEMS","addFilter","selectors","onChange","_handleAllFilters","select","_handleFilterSelect","e","selectGroup","checks","check","_handleFilterCheck","checkGroup","checked","removeFilter","filters","group","filter","item","parent","addSorting","buttonGroup","_handleSortChange","reverse","by","toLowerCase","sort","addSearchFilter","searchInput","_handleSearchKeyup","searchText","JSON","parse","indexOf","trim","getElementsByTagName","grid","undefined","getComputedStyle","body","mixBlendMode"],"mappings":"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","file":"js/app.526f72c9.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(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && 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\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\t0: 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[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\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([1,1]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import \"../styles/index.scss\";\n\nimport Shuffle from \"shufflejs\";\n\nfunction addClickListener() {\n window.addEventListener(\"scroll\", onScroll);\n\n document.addEventListener(\n \"click\",\n function(event) {\n if (event.target.closest(\".js-menu-toggle\")) {\n toogleHtmlClass(\"has-menu\");\n }\n },\n false,\n );\n}\n\nfunction toogleHtmlClass(className) {\n root.classList.toggle(className);\n}\n\nfunction onScroll() {\n const y = window.scrollY;\n if (y >= 800) {\n root.classList.add(\"is-scrolled\");\n } else {\n root.classList.remove(\"is-scrolled\");\n }\n}\n\nclass Grid {\n constructor(element) {\n this.element = element;\n this.shuffle = new Shuffle(element, {\n itemSelector: \".js-grid-item\",\n isCentered: false,\n sizer: element.querySelector(\".js-grid-sizer\"), // could also be a selector: '.my-sizer-element'\n filterMode: Shuffle.FilterMode.ALL,\n buffer: 1,\n });\n\n // Log events.\n this.addShuffleEventListeners();\n this._activeFilters = [];\n //this.addFilterButtons();\n this.addFilterSelects();\n this.addFilterChecks();\n //this.addSorting();\n //this.addSearchFilter();\n }\n\n /**\n * Shuffle uses the CustomEvent constructor to dispatch events. You can listen\n * for them like you normally would (with jQuery for example).\n */\n addShuffleEventListeners() {\n this.shuffle.on(Shuffle.EventType.LAYOUT, data => {\n this.updateCountes(data.shuffle.visibleItems);\n });\n this.shuffle.on(Shuffle.EventType.REMOVED, data => {\n console.log(\"removed. data:\", data);\n });\n }\n\n updateCountes(to) {\n const demoClasses = document.querySelectorAll(\".js-filter-count\");\n\n // Change the text of multiple elements with a loop\n demoClasses.forEach(element => {\n element.textContent = to;\n });\n }\n\n addFilterButtons() {\n const options = document.querySelector(\".filter-options\");\n if (!options) {\n return;\n }\n\n const filterButtons = Array.from(options.children);\n const onClick = this._handleFilterClick.bind(this);\n filterButtons.forEach(button => {\n button.addEventListener(\"click\", onClick, false);\n });\n }\n\n _handleFilterClick(evt) {\n const btn = evt.currentTarget;\n const isActive = btn.classList.contains(\"active\");\n const btnGroup = btn.getAttribute(\"data-group\");\n\n this._removeActiveClassFromChildren(btn.parentNode);\n\n let filterGroup;\n if (isActive) {\n btn.classList.remove(\"active\");\n filterGroup = Shuffle.ALL_ITEMS;\n } else {\n btn.classList.add(\"active\");\n filterGroup = btnGroup;\n }\n\n this.addFilter(filterGroup);\n }\n\n addFilterSelects() {\n const selectors = document.querySelectorAll(\".js-filter-select\");\n if (!selectors) {\n return;\n }\n\n //const onChange = this._handleFilterSelect.bind(this);\n const onChange = this._handleAllFilters.bind(this);\n selectors.forEach(select => {\n select.addEventListener(\"change\", onChange, false);\n });\n }\n\n _handleFilterSelect(e) {\n const select = e.currentTarget;\n //const isActive = btn.classList.contains(\"active\");\n\n var selectGroup = select.value;\n //this._removeActiveClassFromChildren(btn.parentNode);\n\n this.addFilter(selectGroup);\n }\n\n addFilterChecks() {\n const checks = document.querySelectorAll(\".js-filter-check\");\n if (!checks) {\n return;\n }\n\n //const onChange = this._handleFilterCheck.bind(this);\n const onChange = this._handleAllFilters.bind(this);\n\n checks.forEach(check => {\n check.addEventListener(\"change\", onChange, false);\n });\n }\n\n _handleFilterCheck(e) {\n const check = e.currentTarget;\n //const isActive = btn.classList.contains(\"active\");\n const checkGroup = check.getAttribute(\"data-group\");\n var selectGroup = check.checked;\n\n if (check.checked) {\n this.addFilter(checkGroup);\n } else {\n this.removeFilter(checkGroup);\n }\n\n //this._removeActiveClassFromChildren(btn.parentNode);\n }\n\n _handleAllFilters() {\n const filters = [];\n\n const checks = document.querySelectorAll(\".js-filter-check\");\n const selectors = document.querySelectorAll(\".js-filter-select\");\n\n checks.forEach(check => {\n if (check.checked) {\n const group = check.getAttribute(\"data-group\");\n if (group && group !== \"\") {\n filters.push(group);\n }\n }\n });\n\n selectors.forEach(select => {\n if (select.value && select.value !== \"\") {\n filters.push(select.value);\n }\n });\n\n this._activeFilters = filters;\n this.shuffle.filter(this._activeFilters);\n debugger;\n }\n\n addFilter(group) {\n this._activeFilters = [...this._activeFilters, group];\n this.shuffle.filter(this._activeFilters);\n }\n removeFilter(group) {\n this._activeFilters = this._activeFilters.filter(item => item !== group);\n this.shuffle.filter(this._activeFilters);\n }\n _removeActiveClassFromChildren(parent) {\n const { children } = parent;\n for (let i = children.length - 1; i >= 0; i--) {\n children[i].classList.remove(\"active\");\n }\n }\n\n addSorting() {\n const buttonGroup = document.querySelector(\".sort-options\");\n if (!buttonGroup) {\n return;\n }\n buttonGroup.addEventListener(\"change\", this._handleSortChange.bind(this));\n }\n\n _handleSortChange(evt) {\n // Add and remove `active` class from buttons.\n const buttons = Array.from(evt.currentTarget.children);\n buttons.forEach(button => {\n if (button.querySelector(\"input\").value === evt.target.value) {\n button.classList.add(\"active\");\n } else {\n button.classList.remove(\"active\");\n }\n });\n\n // Create the sort options to give to Shuffle.\n const { value } = evt.target;\n let options = {};\n\n function sortByDate(element) {\n return element.getAttribute(\"data-created\");\n }\n\n function sortByTitle(element) {\n return element.getAttribute(\"data-title\").toLowerCase();\n }\n\n if (value === \"date-created\") {\n options = {\n reverse: true,\n by: sortByDate,\n };\n } else if (value === \"title\") {\n options = {\n by: sortByTitle,\n };\n }\n this.shuffle.sort(options);\n }\n\n // Advanced filtering\n addSearchFilter() {\n const searchInput = document.querySelector(\".js-shuffle-search\");\n if (!searchInput) {\n return;\n }\n searchInput.addEventListener(\"keyup\", this._handleSearchKeyup.bind(this));\n }\n\n /**\n * Filter the shuffle instance by items with a title that matches the search input.\n * @param {Event} evt Event object.\n */\n _handleSearchKeyup(evt) {\n const searchText = evt.target.value.toLowerCase();\n this.shuffle.filter((element, shuffle) => {\n // If there is a current filter applied, ignore elements that don't match it.\n if (shuffle.group !== Shuffle.ALL_ITEMS) {\n // Get the item's groups.\n const groups = JSON.parse(element.getAttribute(\"data-groups\"));\n const isElementInCurrentGroup = groups.indexOf(shuffle.group) !== -1;\n // Only search elements in the current group\n if (!isElementInCurrentGroup) {\n return false;\n }\n }\n const titleElement = element.querySelector(\".picture-item__title\");\n const titleText = titleElement.textContent.toLowerCase().trim();\n return titleText.indexOf(searchText) !== -1;\n });\n }\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n var root = document.getElementsByTagName(\"html\")[0];\n window.grid = new Grid(document.querySelector(\".js-grid\"));\n if (window.getComputedStyle(document.body).mixBlendMode === undefined) {\n root.className.remove(\"supports--mixBlendMode\");\n }\n\n window.root = document.getElementsByTagName(\"html\")[0];\n window.grid = new Grid(document.querySelector(\".js-grid\"));\n addClickListener();\n});\n"],"sourceRoot":""}