{"version":3,"file":"342.b9ceff81086b0e11f4e8.js","mappings":"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","sources":["webpack://wildwoodtrust/./wwwroot/app/src/js/height-match.js"],"sourcesContent":["import { ResizeObserver as Polyfill } from '@juggle/resize-observer';\r\nconst ResizeObserver = window.ResizeObserver || Polyfill;\r\n\r\n// HEIGHT MATCHING\r\n// data-hm-group = wrapper for all the items to have their sections height-matched\r\n// data-hm-item = the items to have their sections height-matched. We match based on the y-position of this element.\r\n// data-hm-section = part(s) of the item to be height-matched, eg. data-hm-section=\"title\"\r\n\r\nclass HeightMatchGroup {\r\n\r\n constructor(el) {\r\n // store wrapper\r\n this.el = el;\r\n this.width = 0;\r\n this.resizeRequested = false;\r\n this.resizeTimeout = null;\r\n // store items\r\n this.storeItems();\r\n // add mutation observer to add any dynamically created content\r\n this.mo = new MutationObserver(mutationsList => {\r\n let updateNeeded = false;\r\n for(const mutation of mutationsList) {\r\n if (mutation.type === 'childList') {\r\n updateNeeded = true;\r\n }\r\n }\r\n if(updateNeeded) {\r\n this.storeItems();\r\n this.requestResize();\r\n }\r\n });\r\n // add resize observer\r\n this.ro = new ResizeObserver(entries => {\r\n for (let entry of entries) {\r\n const cr = entry.contentRect;\r\n if(cr.width != this.width) {\r\n this.width = cr.width;\r\n if(!this.resizeRequested) {\r\n this.requestResize();\r\n }\r\n }\r\n }\r\n });\r\n this.mo.observe(this.el, { attributes: false, childList: true, subtree: true });\r\n this.ro.observe(this.el); // Watch dimension changes wrapping element\r\n // add bootstrap collapse listener\r\n let findCollapses = [...el.querySelectorAll('.collapse')];\r\n findCollapses.forEach(c => {\r\n c.addEventListener('hidden.bs.collapse', () => {\r\n if(!this.resizeRequested) {\r\n this.requestResize();\r\n }\r\n });\r\n c.addEventListener('shown.bs.collapse', () => {\r\n if(!this.resizeRequested) {\r\n this.requestResize();\r\n }\r\n });\r\n });\r\n }\r\n\r\n storeItems() {\r\n this.setLabels = [];\r\n this.allSections = [];\r\n this.items = [];\r\n let findItems = this.el.querySelectorAll('*[data-hm-item]');\r\n if(findItems != null) {\r\n // loop through items adding all sections\r\n for(let x = 0, l = findItems.length; x < l; x++) {\r\n // store item\r\n this.items[x] = {\r\n obj : findItems[x],\r\n sections : []\r\n };\r\n // find sections\r\n let findSections = findItems[x].querySelectorAll('*[data-hm-section]');\r\n if(findSections != null) {\r\n findSections.forEach(s => {\r\n let setLabel = (s.dataset.hmSection + '').toLowerCase();\r\n // find set or create it\r\n let setIndex = this.setLabels.indexOf(setLabel);\r\n if (setIndex < 0) {\r\n this.setLabels.push(setLabel); // store label\r\n setIndex = this.setLabels.length - 1;\r\n }\r\n // store section element in item array\r\n this.items[x].sections[setIndex] = s; // create new set array to store element\r\n // also store in allSections array (for fast clearing)\r\n this.allSections.push(s);\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n clearSections() {\r\n for(let x = 0, l = this.allSections.length; x < l; x++) {\r\n this.allSections[x].style.minHeight = 'unset';\r\n }\r\n }\r\n\r\n update() {\r\n let ranges = [],\r\n y = 0,\r\n startIndex = 0,\r\n endIndex = 0,\r\n arrayFinalIndex = this.items.length - 1;\r\n for(let x = 0; x <= arrayFinalIndex; x++) {\r\n // get offsset top of item\r\n let rect = this.items[x].obj.getBoundingClientRect(),\r\n t = Math.floor(rect.top);\r\n // compare y\r\n if(x > 0) {\r\n if(Math.abs(t - y) > 2) { // t is not within 2 pixels of y\r\n // finish this row\r\n endIndex = x - 1;\r\n ranges.push({\r\n start : startIndex,\r\n end : endIndex\r\n });\r\n startIndex = x;\r\n }\r\n }\r\n // update y value for new row\r\n y = t;\r\n }\r\n // check for last set of items that have not been updated\r\n if(startIndex < arrayFinalIndex) ranges.push({\r\n start : startIndex,\r\n end : arrayFinalIndex\r\n });\r\n // do all updates in ranges\r\n this.updateItems(ranges);\r\n // reset resizeRequested\r\n this.resizeRequested = false;\r\n }\r\n\r\n updateItems(ranges) {\r\n // loop through ranges\r\n for(let r = 0; r < ranges.length; r++) {\r\n // loop through sectionLabels array\r\n for(let i = 0; i < this.setLabels.length; i++) {\r\n let h = [];\r\n // loop through range of sections\r\n for(let x = ranges[r].start; x <= ranges[r].end; x++) {\r\n // store native section height\r\n h.push(this.items[x].sections[i].offsetHeight);\r\n }\r\n // get largest height value\r\n let result = Math.ceil(Math.max(...h));\r\n // set all to min-height = largest height\r\n for(let x = ranges[r].start; x <= ranges[r].end; x++) {\r\n this.items[x].sections[i].style.minHeight = result + 'px';\r\n }\r\n }\r\n }\r\n }\r\n\r\n requestResize() {\r\n clearTimeout(this.resizeTimeout);\r\n this.resizeRequested = true;\r\n this.resizeTimeout = setTimeout(() => {\r\n this.resize();\r\n }, 200);\r\n }\r\n\r\n resize() {\r\n this.clearSections();\r\n this.update();\r\n }\r\n\r\n}\r\n\r\n// export the default function to create\r\nexport function createFrom(wrappers) {\r\n wrappers.forEach((node) => {\r\n // if node is an element\r\n if (node.nodeType === 1) {\r\n new HeightMatchGroup(node);\r\n }\r\n });\r\n}"],"names":["ResizeObserver","window","Polyfill","HeightMatchGroup","constructor","el","this","width","resizeRequested","resizeTimeout","storeItems","mo","MutationObserver","mutationsList","updateNeeded","mutation","type","requestResize","ro","entries","entry","cr","contentRect","observe","attributes","childList","subtree","querySelectorAll","forEach","c","addEventListener","setLabels","allSections","items","findItems","x","l","length","obj","sections","findSections","s","setLabel","dataset","hmSection","toLowerCase","setIndex","indexOf","push","clearSections","style","minHeight","update","ranges","y","startIndex","endIndex","arrayFinalIndex","rect","getBoundingClientRect","t","Math","floor","top","abs","start","end","updateItems","r","i","h","offsetHeight","result","ceil","max","clearTimeout","setTimeout","resize","createFrom","wrappers","node","nodeType"],"sourceRoot":""}