1document.addEventListener('DOMContentLoaded', function () { 2 const setActiveMapOnLoad = (element) => { 3 const crmMapViewer = element.querySelector('.__crm-map-main-viewer'); 4 5 if (!crmMapViewer.hasAttribute('data-active-map')) return; 6 7 const activeMap = crmMapViewer.getAttribute('data-active-map'); 8 const polygons = document.querySelectorAll('._flatmap-overview-map polygon'); 9 const floorplans = crmMapViewer.querySelectorAll('._floorplan-holder'); 10 const activePolygon = crmMapViewer.querySelector(`._flatmap-overview-map polygon[data-propertymapid="${activeMap}"]`); 11 const activeFloorPlan = crmMapViewer.querySelector(`._floorplan-holder[data-mapid="${activeMap}"]`); 12 13 polygons.forEach((polygon) => { 14 polygon.classList.remove('highlight'); 15 }); 16 17 floorplans.forEach((floorplan) => { 18 floorplan.setAttribute('data-active', '0'); 19 }); 20 21 activePolygon.classList.add('highlight'); 22 activeFloorPlan.setAttribute('data-active', '1'); 23 }; 24 25 // Temporary fix: set active map on load (to overrule the weird js ) 26 setTimeout(() => { 27 document.querySelectorAll('.yoreflexi_yorecrm---vogelvlucht').forEach((element) => { 28 setActiveMapOnLoad(element); 29 }); 30 }, 500); 31 32 document.querySelectorAll('polygon')?.forEach((e) => { 33 e?.addEventListener('mouseenter', () => { 34 e?.classList?.add('hovered'); 35 }); 36 37 e?.addEventListener('mouseleave', () => { 38 e?.classList?.remove('hovered'); 39 }); 40 }); 41 42 if (typeof document.querySelectorAll('.__crm-results-row') !== 'undefined' && null !== document.querySelectorAll('.__crm-results-row')) {
43 let crmResultRow = document.querySelectorAll('.__crm-results-row'); 44 for (crmrr of crmResultRow) { 45 crmrr.addEventListener('click', function (e) { 46 let button = e.target, 47 filterBar = button.closest('.vogelvlucht-filter-bar'), 48 filterIcon = filterBar.querySelector('.__crm-filter-toggle'), 49 section = button.closest('.flexsection'); 50 51 triggerAevent(filterIcon, 'click'); /* To close the filters menu */ 52 section.scrollIntoView({ behavior: 'smooth' }, true); /* To make sure the map is visible */ 53 }); 54 } 55 } 56 57 /* Advanced filters */ 58 if (typeof document.querySelectorAll('.__crm-filter-toggle') !== 'undefined' && null !== document.querySelectorAll('.__crm-filter-toggle')) { 59 let advancedFilterTogglers = document.querySelectorAll('.__crm-filter-toggle'); 60 for (aftc = 0; aftc < advancedFilterTogglers.length; aftc++) { 61 advancedFilterTogglers[aftc].addEventListener('click', function () { 62 let toggleButton = this; 63 let filters = toggleButton.parentNode.parentNode.querySelector('.__advanced-filters'); 64 toggleButton.setAttribute('data-status', filters.getAttribute('data-status') == 'open' ? 'close' : 'open'); 65 66 toggleButton 67 .closest('._crm-birdseyes') 68 .querySelector('.__crm-map-main') 69 .setAttribute('data-filters-opened', filters.getAttribute('data-status') == 'open' ? 'close' : 'open'); 70 71 filters.setAttribute('data-status', filters.getAttribute('data-status') == 'open' ? 'close' : 'open'); 72 }); 73 } 74 } 75 76 /* Reset filters */ 77 if (typeof document.querySelectorAll('.__crm-filter-reset') !== 'undefined' && null !== document.querySelectorAll('.__crm-filter-reset')) { 78 let resetFilterTogglers = document.querySelectorAll('.__crm-filter-reset'); 79 for (rft of resetFilterTogglers) { 80 rft.addEventListener('click', function () { 81 let resetButton = this, 82 theSection = resetButton.closest('.flexsection'), 83 theFilters = resetButton.closest('.flexsection').querySelectorAll('.yrmslct-container'), 84 thePricerangeSlider = resetButton.closest('.flexsection').querySelector('.__crm-pricerange-slider'); 85 86 /* Loop trough filter options & pricerangeslider and reset them accordingly */ 87 for (slct of theFilters) { 88 let theSelect = slct.querySelector('select'); 89 90 switch (true) { 91 /* Main filter */ 92 case theSelect.classList.contains('_crm-filter-status') == true ? true : false: 93 triggerAevent(slct.querySelector('._item[value="ALL"]'), 'click'); 94 break; 95 96 /* Advanced filter */ 97 case theSelect.classList.contains('__crm-advanced-filter-livingsurfacearea') ? true : false: 98 triggerAevent(slct.querySelector('._item[value="default"]'), 'click'); 99 break; 100 101 case theSelect.classList.contains('__crm-advanced-filter-lotarea') ? true : false: 102 triggerAevent(slct.querySelector('._item[value="default"]'), 'click'); 103 break; 104 105 case theSelect.classList.contains('__crm-advanced-filter-rooms') ? true : false: 106 triggerAevent(slct.querySelector('._item[value="default"]'), 'click'); 107 break; 108 109 case theSelect.classList.contains('__crm-advanced-filter-housetypes') ? true : false: 110 triggerAevent(slct.querySelector('._item[value="default"]'), 'click'); 111 break; 112 113 case theSelect.classList.contains('__crm-advanced-filter-hometypes') ? true : false: 114 triggerAevent(slct.querySelector('._item[value="default"]'), 'click'); 115 break; 116 117 case theSelect.classList.contains('__crm-advanced-filter-pricerange') ? true : false: 118 triggerAevent(slct.querySelector('._item[value="default"]'), 'click'); 119 break; 120 } 121 } 122 123 /* Reset the pricerange slider by defaulting back to the default price */ 124 if (typeof thePricerangeSlider !== 'undefined' && null !== thePricerangeSlider) { 125 let minResetPrice = thePricerangeSlider.parentNode.querySelector('.price-min').getAttribute('data-price-reset-to'), 126 maxResetPrice = thePricerangeSlider.parentNode.querySelector('.price-max').getAttribute('data-price-reset-to'); 127 128 /* Reset the pricerange slider to the default values set by the system before filtering */ 129 thePricerangeSlider.noUiSlider.set([minResetPrice, maxResetPrice]); 130 131 yoreFlexibleValidateFilters(); 132 } 133 }); 134 } 135 } 136 137 /* Pricerange slider */ 138 if (typeof document.querySelectorAll('.__crm-pricerange-slider') !== 'undefined' && null !== document.querySelectorAll('.__crm-pricerange-slider')) { 139 let priceRanges = document.querySelectorAll('.__crm-pricerange-slider'); 140 for (prc = 0; prc < priceRanges.length; prc++) { 141 /* NOUISLIDER */ 142 let staticpriceSlider = priceRanges[prc]; 143 144 let stepSize = parseInt(staticpriceSlider.parentNode.querySelector('#price-step-amount').value); 145 let saleType = staticpriceSlider.parentNode.querySelector('#price-type').value; 146 let stepMargeSize = Number(Number(stepSize) * 5); /* default start-end margin position for toggler */ 147 let stepWidthSize = Number(Number(stepSize) * 10); /* Range margin */ 148 149 if (saleType == 'RENT') { 150 /* Project in Rent marges */ 151 stepMargeSize = 5; 152 stepWidthSize = 5; 153 } 154 155 let input0 = Number(Math.floor(Number(staticpriceSlider.parentNode.querySelector('#static-price-slider-min').value) / stepSize) * stepSize); 156 let input1 = Number(Math.ceil(Number(staticpriceSlider.parentNode.querySelector('#static-price-slider-max').value) / stepSize) * stepSize); 157 158 const inputs = [staticpriceSlider.parentNode.querySelector('#static-price-slider-min'), staticpriceSlider.parentNode.querySelector('#static-price-slider-max')]; 159 160 const from = staticpriceSlider.parentNode.querySelector('#static-price-slider-min').value; 161 const to = staticpriceSlider.parentNode.querySelector('#static-price-slider-max').value; 162 163 let slider_worth = { 164 min: input0 > stepMargeSize ? input0 - stepMargeSize : input0, 165 max: input1 + stepMargeSize, 166 }; 167 168 staticpriceSlider.parentNode.querySelector('#static-price-slider-min').value = slider_worth.min; 169 staticpriceSlider.parentNode.querySelector('#static-price-slider-max').value = slider_worth.max; 170 171 noUiSlider.create(staticpriceSlider, { 172 start: [slider_worth.min, slider_worth.max], 173 step: stepSize, 174 connect: true, 175 direction: 'ltr', 176 tooltips: false, 177 range: { 178 min: parseInt(parseInt(from) - stepWidthSize), 179 max: parseInt(parseInt(to) + stepWidthSize), 180 }, 181 format: wNumb({ 182 decimals: 0, 183 thousand: '.', 184 }), 185 }); 186 187 /* Setup default values for ths slider */ 188 if (typeof document.querySelectorAll('.__crm-filter-row[type-of-filter="pricerangeslider"]')) { 189 for (prsl of document.querySelectorAll('.__crm-filter-row[type-of-filter="pricerangeslider"]')) { 190 let min = prsl.querySelector('#static-price-slider-min'), 191 max = prsl.querySelector('#static-price-slider-max'), 192 section = prsl.closest('.flexsection'), 193 mapType = section.querySelector('.vogelvlucht-filter-bar').getAttribute('data-maptype'); 194 195 if (mapType === 'propertymap') { 196 prsl.querySelector('#static-price-slider-min').setAttribute('data-price-reset-to', min.value.replace('.', '')); 197 prsl.querySelector('#static-price-slider-max').setAttribute('data-price-reset-to', max.value.replace('.', '')); 198 } 199 } 200 } 201 202 staticpriceSlider.noUiSlider.on('update', function (values, handle) { 203 inputs[handle].value = values[handle]; 204 staticpriceSlider.parentNode.querySelector('.static-the-price-min').innerText = staticpriceSlider.parentNode.querySelector('.price-min').value; 205 staticpriceSlider.parentNode.querySelector('.static-the-price-max').innerText = staticpriceSlider.parentNode.querySelector('.price-max').value; 206 207 triggerAevent(staticpriceSlider.parentNode.querySelector('.static-the-price-min'), 'keyup'); 208 // staticpriceSlider.parentNode.querySelector('.static-the-price-min').trigger('keyup'); 209 210 /* Add site styling */ 211 if (staticpriceSlider.parentNode.querySelector('.noUi-connect').classList.contains('uk-alert-secondary') === false) { 212 staticpriceSlider.parentNode.querySelector('.noUi-connect').classList.add('uk-alert-secondary'); 213 } 214 if (staticpriceSlider.parentNode.querySelector('.noUi-handle').classList.contains('uk-border-secondary') === false) { 215 staticpriceSlider.parentNode.querySelector('.noUi-handle').classList.add('uk-border-secondary'); 216 } 217 }); 218 219 /* Pricerange slider script */ 220 function setSliderHandle(e, i) {
221 var n = [null, null]; 222 (n[e] = i), staticpriceSlider.noUiSlider.set(n); 223 } 224 inputs.forEach(function (e, i) { 225 e.addEventListener('change', function () { 226 setSliderHandle(i, this.value); 227 }), 228 e.addEventListener('keydown', function (e) { 229 var n, 230 l = staticpriceSlider.noUiSlider.get(), 231 r = Number(l[i]), 232 d = staticpriceSlider.noUiSlider.steps()[i]; 233 switch (e.which) { 234 case 13: 235 setSliderHandle(i, this.value); 236 break; 237 case 38: 238 !1 === (n = d[1]) && (n = 1), null !== n && setSliderHandle(i, r + n); 239 break; 240 case 40: 241 !1 === (n = d[0]) && (n = 1), null !== n && setSliderHandle(i, r - n); 242 } 243 }); 244 }); 245 } 246 } 247 248 /* ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ */ 249 250 /* create click listener for min-max price slider */ 251 let yrmPrcBuilder = setInterval(function () { 252 if (typeof document.querySelectorAll('.__crm-pricerange-slider:not(.done)') !== 'undefined' && null !== document.querySelectorAll('.__crm-pricerange-slider:not(.done)')) { 253 let prsliders = document.querySelectorAll('.__crm-pricerange-slider:not(.done)'); 254 for (prc2 = 0; prc2 < prsliders.length; prc2++) { 255 prsliders[prc2]?.classList.add('done'); 256 257 let theMin = prsliders[prc2].parentNode.querySelector('.static-the-price-min'); 258 let observer = new MutationObserver(yoreFlexibleValidateFilters); 259 observer.observe(theMin, { attributes: true, childList: true, subtree: true }); // Observe changes 260 } 261 } 262 }, 250); 263 264 /* ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ */ 265 266 let yrmOMPolygonClick = setInterval(function () { 267 if (typeof document.querySelectorAll('.__crm-map-main-viewer:not(.actions-activated)') !== 'undefined' && null !== document.querySelectorAll('.__crm-map-main-viewer:not(.actions-activated)')) { 268 for (mpm of document.querySelectorAll('.__crm-map-main-viewer:not(.actions-activated)')) { 269 mpm.classList.add('actions-activated'); 270 271 let mpmContainer = mpm.closest('.flexsection'), 272 mpmFilterbar = mpmContainer.querySelector('.vogelvlucht-filter-bar'), 273 mpmMapType = mpmFilterbar.getAttribute('data-maptype'); 274 275 let mfm = false, 276 om = false; 277 278 /* Settings for propertymap setup */ 279 if (mpmMapType === 'propertymap') { 280 mfm = mpm.querySelector('._propertymap-floorplan'); 281 } 282 283 /* Settings for flatmap setup */ 284 if (mpmMapType === 'floorplan') { 285 mfm = mpm.querySelector('._flatmap-floorplan'); 286 om = mpm.querySelector('._flatmap-overview-map'); 287 } 288 289 if (om !== false) { 290 /* Execute main om actions */ 291 for (omp of om.querySelectorAll('polygon')) { 292 /* Click event for overviewmaps */ 293 omp.addEventListener('click', function (e) { 294 if (e.target.getAttribute('data-active') === '1') { 295 let propertymapid = e.target.getAttribute('data-propertymapid'), 296 mapid = e.target.closest('.__crm-map-main-viewer').getAttribute('data-mapid'); 297 theFloorFilter = e.target.closest('.flexsection').querySelector('._crm-filter-floors[data-mapid="' + mapid + '"]'); 298 triggerAevent(theFloorFilter.parentNode.querySelector('._item[value="' + propertymapid + '"]'), 'click'); 299 300 /* Append legen to map */ 301 } 302 }); 303 304 omp.addEventListener('mousemove', function (e) { 305 /* Entered OMP polygon */ 306 let element = e.target, 307 section = element.closest('.flexsection'), 308 plgnData = { 309 p_id: birdseyeCheckIfFalse(element.getAttribute('id')), 310 status: birdseyeCheckIfFalse(element.getAttribute('data-status')), 311 housetypes: birdseyeCheckIfFalse(element.getAttribute('data-housetypes')), 312 selltype: birdseyeCheckIfFalse(element.getAttribute('data-selltype')), 313 colors: birdseyeCheckIfFalse(element.getAttribute('data-colors')), 314 hometypes: birdseyeCheckIfFalse(element.getAttribute('data-hometypes')), 315 rooms: birdseyeCheckIfFalse(element.getAttribute('data-rooms')), 316 lotareas: birdseyeCheckIfFalse(element.getAttribute('data-lotareas')), 317 livingareas: birdseyeCheckIfFalse(element.getAttribute('data-livingareas')), 318 buildnumbers: birdseyeCheckIfFalse(element.getAttribute('data-buildnumbers')), 319 price: birdseyeCheckIfFalse(element.getAttribute('data-price')), 320 pricerange: birdseyeCheckIfFalse(element.getAttribute('data-pricerange')), 321 x: parseInt(event.clientX) > parseInt(parseInt(window.innerWidth) / 2) ? 'right:' + (parseInt(window.innerWidth) - parseInt(event.clientX)) + 'px;' : 'left:' + (parseInt(event.clientX) + 20) + 'px;', 322 y: parseInt(event.clientY) + 20, 323 pageHalf: parseInt(window.innerWidth) / 2, 324 }; 325 if (typeof document.querySelector('.__yrm-birdseye-popover') === 'undefined' || null === document.querySelector('.__yrm-birdseye-popover') || document.querySelector('.__yrm-birdseye-popover').length > 0) { 326 let popover = document.createElement('div'); 327 popover.classList.add('__yrm-birdseye-popover'); 328 popover.innerHTML = 329 '<div class="loading">laden.. <svg class="loading-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path d="M264 24C264 10.75 274.7 0 288 0C429.4 0 544 114.6 544 256C544 302.6 531.5 346.4 509.7 384C503.1 395.5 488.4 399.4 476.9 392.8C465.5 386.2 461.5 371.5 468.2 360C485.9 329.4 496 293.9 496 255.1C496 141.1 402.9 47.1 288 47.1C274.7 47.1 264 37.25 264 23.1V24z"/></svg></div>'; 330 section.append(popover); 331 } 332 333 document.querySelector('.__yrm-birdseye-popover').setAttribute('style', plg
333nData.x + 'top:' + plgnData.y + 'px;'); 334 335 birdseyeCreateNewMapPopover(element, plgnData, section); 336 }); 337 omp.addEventListener('mouseleave', function (e) { 338 /* left OMP polygon */ 339 if (typeof document.querySelector('.__yrm-birdseye-popover') !== 'undefined' && null !== document.querySelector('.__yrm-birdseye-popover')) { 340 document.querySelector('.__yrm-birdseye-popover').remove(); 341 } 342 }); 343 } 344 } 345 346 /* POLYGONS BY BUILDNUMBERS */ 347 for (fm of mfm.querySelectorAll('._floorplan-holder')) { 348 for (fmp of fm.querySelectorAll('polygon')) { 349 /* Click event for floorplans */ 350 fmp.addEventListener('click', function (e) { 351 const target = e.target.closest('.flexsection'); 352 const rect = target.getBoundingClientRect(); 353 354 // Mouse position 355 const x = event.clientX - rect.x; 356 const y = event.clientY - rect.y; 357 358 let plgn = e.target, 359 plgnData = { 360 p_id: birdseyeCheckIfFalse(plgn.getAttribute('id')), 361 status: birdseyeCheckIfFalse(plgn.getAttribute('data-status')), 362 price: birdseyeCheckIfFalse(plgn.getAttribute('data-price')), 363 pricerange: birdseyeCheckIfFalse(plgn.getAttribute('data-pricefrom')), 364 housetype: birdseyeCheckIfFalse(plgn.getAttribute('data-housetype')), 365 hometype: birdseyeCheckIfFalse(plgn.getAttribute('data-hometype')), 366 room: birdseyeCheckIfFalse(plgn.getAttribute('data-room')), 367 lotarea: birdseyeCheckIfFalse(plgn.getAttribute('data-lotarea')), 368 livingarea: birdseyeCheckIfFalse(plgn.getAttribute('data-livingarea')), 369 buildnumber: birdseyeCheckIfFalse(plgn.getAttribute('data-buildnumber')), 370 x: x, 371 y: y, 372 }, 373 section = plgn.closest('.flexsection'); 374 if (e.target.getAttribute('data-active') === '1') { 375 /* reset active & read + execute new active */ 376 if (typeof section.querySelectorAll('.__crm-map-main-viewer') !== 'undefined' && null !== section.querySelectorAll('.__crm-map-main-viewer')) { 377 for (viewer of section.querySelectorAll('.__crm-map-main-viewer')) { 378 let floorplanContainer = false, 379 plgns = false; 380 if (mpmMapType === 'propertymap') { 381 (floorplanContainer = viewer.querySelector('._propertymap-floorplan')), (plgns = floorplanContainer.querySelectorAll('polygon')); 382 } 383 if (mpmMapType === 'floorplan') { 384 (floorplanContainer = viewer.querySelector('._flatmap-floorplan')), (plgns = floorplanContainer.querySelectorAll('polygon')); 385 } 386 for (pl of plgns) { 387 if (pl.classList.contains('highlight') === true) { 388 pl.classList.remove('highlight'); 389 } 390 } 391 } 392 } 393 394 plgn.classList.add('highlight'); 395 birdseyeCreateNewMapPopup(plgn, plgnData, section); 396 } 397 }); 398 399 /* Buildnumber hover */ 400 fmp.addEventListener('mousemove', function (e) { 401 /* Entered OMP polygon */ 402 let element = e.target, 403 section = element.closest('.flexsection'), 404 plgnData = { 405 p_id: birdseyeCheckIfFalse(element.getAttribute('id')), 406 status: birdseyeCheckIfFalse(element.getAttribute('data-status')), 407 hometype: birdseyeCheckIfFalse(element.getAttribute('data-hometype')), 408 room: birdseyeCheckIfFalse(element.getAttribute('data-room')), 409 selltype: birdseyeCheckIfFalse(element.getAttribute('data-selltype')), 410 lotarea: birdseyeCheckIfFalse(element.getAttribute('data-lotarea')), 411 livingarea: birdseyeCheckIfFalse(element.getAttribute('data-livingarea')), 412 buildnumber: birdseyeCheckIfFalse(element.getAttribute('data-buildnumber')), 413 price: birdseyeCheckIfFalse(element.getAttribute('data-price')), 414 pricefrom: birdseyeCheckIfFalse(element.getAttribute('data-pricefrom')), 415 colors: birdseyeCheckIfFalse(element.getAttribute('data-colors')), 416 type: birdseyeCheckIfFalse(element.getAttribute('data-type')), 417 title: birdseyeCheckIfFalse(element.getAttribute('data-title')), 418 x: parseInt(event.clientX) > parseInt(parseInt(window.innerWidth) / 2) ? 'right:' + (parseInt(window.innerWidth) - parseInt(event.clientX)) + 'px;' : 'left:' + (parseInt(event.clientX) + 20) + 'px;', 419 y: parseInt(event.clientY) + 20, 420 pageHalf: parseInt(window.innerWidth) / 2, 421 }; 422 if (typeof document.querySelector('.__yrm-birdseye-popover') === 'undefined' || null === document.querySelector('.__yrm-birdseye-popover') || document.querySelector('.__yrm-birdseye-popover').length > 0) { 423 let popover = document.createElement('div'); 424 popover.classList.add('__yrm-birdseye-popover'); 425 popover.innerHTML = 426 '<div class="loading">laden.. <svg class="loading-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path d="M264 24C264 10.75 274.7 0 288 0C429.4 0 544 114.6 544 256C544 302.6 531.5 346.4 509.7 384C503.1 395.5 488.4 399.4 476.9 392.8C465.5 386.2 461.5 371.5 468.2 360C485.9 329.4 496 293.9 496 255.1C496 141.1 402.9 47.1 288 47.1C274.7 47.1 264 37.25 264 23.1V24z"/></svg></div>'; 427 section.append(popover); 428 } 429 430 document.querySelector('.__yrm-birdseye-popover').classList.add('fmb'); 431 document.querySelector('.__yrm-birdseye-popover').setAttribute('style', plg
431nData.x + 'top:' + plgnData.y + 'px;'); 432 433 birdseyeCreateNewBuildPopover(element, plgnData, section); 434 }); 435 fmp.addEventListener('mouseleave', function (e) { 436 if (typeof document.querySelector('.__yrm-birdseye-popover') !== 'undefined' && null !== document.querySelector('.__yrm-birdseye-popover')) { 437 document.querySelector('.__yrm-birdseye-popover').remove(); 438 } 439 }); 440 } 441 } 442 } 443 } 444 }, 250); 445 446 /* Create click listener for all selectfields to open & close the dropdowns */ 447 setTimeout(function () { 448 if (typeof document.querySelector('.yrmslct-container') !== 'undefined' && null !== document.querySelector('.yrmslct-container')) { 449 let yrmslcts = document.querySelectorAll('.yrmslct-container'); 450 451 for (yrmslct of yrmslcts) { 452 let yrmslct_span = yrmslct.querySelector('._select-placeholder'); 453 let yrmslct_dd = yrmslct.querySelector('._dropdown'); 454 let yrmslct_dd_items = yrmslct_dd.querySelectorAll('._item'); 455 456 /* Check if dropdown has children. If so, listen to click behaviour based on the items */ 457 if (typeof yrmslct_dd_items !== 'undefined' && null !== yrmslct_dd_items) { 458 for (ddItem of yrmslct_dd_items) { 459 ddItem.addEventListener('click', function () { 460 yoreFlexibleValidateFilters(); 461 }); 462 } 463 } 464 } 465 } 466 467 triggerAevent(document.querySelector('.__crm-filter-reset'), 'click'); 468 469 yoreFlexibleValidateFilters(); 470 checkBirdseyesForDynamicWidthSettings(); 471 }, 350); 472 473 triggerAevent(document.querySelector('.__crm-filter-reset'), 'click'); 474 yoreFlexibleValidateFilters(); 475 checkBirdseyesForDynamicWidthSettings(); 476 477 window.addEventListener('resize', checkBirdseyesForDynamicWidthSettings, true); 478 479 document.addEventListener('scroll', (event) => { 480 if (typeof document.querySelectorAll('.yoreflexi_yorecrm---vogelvlucht') !== 'undefined' && null !== document.querySelectorAll('.yoreflexi_yorecrm---vogelvlucht')) { 481 let flexibleScrollElement = document.querySelectorAll('.yoreflexi_yorecrm---vogelvlucht'); 482 for (const section of flexibleScrollElement) { 483 let headerHeight = 80; 484 if (typeof document.getElementsByTagName('header') !== 'undefined' && null !== document.getElementsByTagName('header') && typeof document.getElementsByTagName('header').offsetHeight !== 'undefined' && !isNaN(document.getElementsByTagName('header').offsetHeight)) { 485 headerHeight = parseInt(document.getElementsByTagName('header').offsetHeight); 486 } 487 488 let filterBar = section.querySelector('.vogelvlucht-filter-bar'), 489 scrollHeight = parseInt(window.scrollY) + headerHeight, 490 sectionTop = parseInt(section.offsetTop), 491 sectionBottom = parseInt(sectionTop) + parseInt(section.offsetHeight); 492 topTrigger = sectionTop - window.innerHeight / 4; 493 bottomTrigger = sectionBottom - (window.innerHeight / 10) * 1; 494 495 if (topTrigger < 0) { 496 topTrigger = 0; 497 } 498 499 if (scrollHeight > topTrigger && scrollHeight < bottomTrigger) { 500 /* RESPONSIVE */ 501 if (window.innerWidth > 1112) { 502 filterBar.setAttribute('data-visible', '1'); 503 filterBar.style.top = headerHeight + 'px'; 504 filterBar.style.bottom = 'initial'; 505 } 506 if (window.innerWidth < 1113) { 507 filterBar.setAttribute('data-visible', '1'); 508 filterBar.style.top = 'initial'; 509 filterBar.style.bottom = '10px'; 510 } 511 } else { 512 if (window.innerWidth > 1112) { 513 filterBar.setAttribute('data-visible', '0'); 514 filterBar.style.top = '-30000vh'; 515 filterBar.style.bottom = 'initial'; 516 } 517 if (window.innerWidth < 1113) { 518 filterBar.setAttribute('data-visible', '0'); 519 filterBar.style.top = 'initial'; 520 filterBar.style.bottom = '-30000vh'; 521 } 522 } 523 } 524 } 525 }); 526}); 527 528/* ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ */ 529 530if (typeof calculateAspectratio === 'undefined') { 531 function calculateAspectratio(a, b) { 532 if (a > b) { 533 /* Aspect ratio ?/1 */ 534 return { l: a / b, r: 1 }; 535 } 536 if (a < b) { 537 /* Aspect ratio 1/? */ 538 return { l: 1, r: b / a }; 539 } 540 /* Aspect ratio 1/1 */ 541 return { l: 1, r: 1 }; 542 } 543} 544 545/* ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ */ 546 547if (typeof checkBirdseyesForDynamicWidthSettings === 'undefined') { 548 function checkBirdseyesForDynamicWidthSettings() { 549 let baseHeight = 1000, 550 windowContainerWidth = parseInt(window.innerWidth), 551 type = false;
552 553 switch (true) { 554 case windowContainerWidth >= 1220 /* XL width settings */ && 555 typeof document.querySelectorAll('._flatmap-overview-map.uk-width-xlarge-dynamic') !== 'undefined' && 556 null !== document.querySelectorAll('._flatmap-overview-map.uk-width-xlarge-dynamic') && 557 document.querySelectorAll('._flatmap-overview-map.uk-width-xlarge-dynamic').length > 0 558 ? true 559 : false: 560 type = 'xlarge'; 561 break; 562 case windowContainerWidth >= 960 /* XL width settings */ && 563 typeof document.querySelectorAll('._flatmap-overview-map.uk-width-large-dynamic') !== 'undefined' && 564 null !== document.querySelectorAll('._flatmap-overview-map.uk-width-large-dynamic') && 565 document.querySelectorAll('._flatmap-overview-map.uk-width-large-dynamic').length > 0 566 ? true 567 : false: 568 type = 'large'; 569 break; 570 case windowContainerWidth >= 768 /* M width settings */ && 571 typeof document.querySelectorAll('._flatmap-overview-map.uk-width-medium-dynamic') !== 'undefined' && 572 null !== document.querySelectorAll('._flatmap-overview-map.uk-width-medium-dynamic') && 573 document.querySelectorAll('._flatmap-overview-map.uk-width-medium-dynamic').length > 0 574 ? true 575 : false: 576 type = 'medium'; 577 break; 578 } 579 580 if (type !== false) { 581 for (momSize of document.querySelectorAll('._flatmap-overview-map.uk-width-' + type + '-dynamic')) { 582 let mom = momSize, 583 mom_img = mom.querySelector('.birdseye-image-view'), 584 /* Get current set height of image */ mom_img_h = mom_img.height, 585 /* Get current set height of image */ mom_img_original_h = mom_img.height, 586 /* Height percentage after setting it from default to 1000 pixels */ mom_img_percentage_h = (100 / mom_img_original_h) * baseHeight, 587 /* Get current set width of image */ mom_img_w = mom_img.width, 588 /* Get current set width of image */ mom_img_original_w = mom_img.width, 589 /* Width based on 1000 pixels height combined with aspect-ratio */ mom_img_static_w = (mom_img_original_w / 100) * mom_img_percentage_h, 590 /* aspect-ratio */ mom_ar = calculateAspectratio(mom_img_w, mom_img_h), 591 fpm = mom.closest('.__crm-map-main-viewer').querySelector('._floorplan-holder[data-active="1"]'); 592 593 if (null !== fpm) { 594 let fpm_img = fpm.querySelector('.birdseye-image-view'), 595 /* Get current set height of image */ fpm_img_h = fpm_img.height, 596 /* Get current set height of image */ fpm_img_original_h = fpm_img.height, 597 /* Height percentage after setting it from default to 1000 pixels */ fpm_img_percentage_h = (100 / fpm_img_original_h) * baseHeight, 598 /* Get current set width of image */ fpm_img_w = fpm_img.width, 599 /* Get current set width of image */ fpm_img_original_w = fpm_img.width, 600 /* Width based on 1000 pixels height combined with aspect-ratio */ fpm_img_static_w = (fpm_img_original_w / 100) * fpm_img_percentage_h, 601 /* aspect-ratio */ fpm_ar = calculateAspectratio(fpm_img_w, fpm_img_h), 602 /* Now calculate the wished width based on the container size */ 603 combinedImageWidth = mom_img_static_w + fpm_img_static_w, 604 containerPercentageWidth = (100 / windowContainerWidth) * combinedImageWidth, 605 mom_final_pixel_width = (mom_img_static_w / containerPercentageWidth) * 100, 606 mom_final_percentage_width = (100 / windowContainerWidth) * mom_final_pixel_width, 607 fpm_final_pixel_width = (fpm_img_static_w / containerPercentageWidth) * 100; 608 fpm_final_percentage_width = (100 / windowContainerWidth) * fpm_final_pixel_width; 609 610 mom.setAttribute('style', 'aspect-ratio: ' + mom_ar.l + '/' + mom_ar.r + ';width:' + mom_final_percentage_width + '%;'); 611 fpm.parentNode.setAttribute('style', 'aspect-ratio: ' + fpm_ar.l + '/' + fpm_ar.r + ';width:' + fpm_final_percentage_width + '%;'); 612 } 613 } 614 } else { 615 /* Reset aspect ratio for other sizes */ 616 for (fmom of document.querySelectorAll('._flatmap-overview-map')) { 617 let mom = fmom, 618 fpm = fmom.closest('.__crm-map-main-viewer').querySelector('._flatmap-floorplan'); 619 620 mom.removeAttribute('style'); 621 fpm.removeAttribute('style'); 622 } 623 } 624 } 625} 626 627/* Initialize the maps. Check which map should be 628 ** activated first and then loop trough the maps 629 ** & floorplan and activate the correct one. */ 630if (typeof yoreFlexibleValidateFilters === 'undefined') { 631 function yoreFlexibleValidateFilters() { 632 /* Loop trough elements and append settings per element */ 633 if (typeof document.querySelectorAll('.yoreflexi_yorecrm---vogelvlucht') !== 'undefined' && null !== document.querySelectorAll('.yoreflexi_yorecrm---vogelvlucht')) { 634 let flexibleElement = document.querySelectorAll('.yoreflexi_yorecrm---vogelvlucht'); 635 for (const section of flexibleElement) { 636 if (typeof document.getElementsByTagName('header') !== 'undefined' && null !== document.getElementsByTagName('header') && typeof document.getElementsByTagName('header').offsetHeight !== 'undefined' && !isNaN(document.getElementsByTagName('header').offsetHeight)) { 637 section.querySelector('.vogelvlucht-filter-bar').setAttribute('data-headerheight', parseInt(document.getElementsByTagName('header').offsetHeight)); 638 } else { 639 section.querySelector('.vogelvlucht-filter-bar').setAttribute('data-headerheight', 80); 640 } 641 642 /* Loop trough select settings */ 643 const filters = []; 644 if (typeof section.querySelectorAll('.yrmslct-container') !== 'undefined' && null !== section.querySelectorAll('.yrmslct-container')) { 645 let filterTriggerContainer = section.querySelectorAll('.yrmslct-container'); 646 647 for (const selectContainer of filterTriggerContainer) { 648 let theContainer = selectContainer, 649 theSelect = theContainer.querySelector('select'), 650 theName = theSelect.getAttribute('name'); 651 theValue = theSelect.value; 652 (theType = theSelect.classList), (sa1 = null), (sa2 = null), (sa3 = null), (sa4 = null), (sa5 = null); 653 654 if (theType.contains('_ycrm-elementalFilter') === true) { 655 switch (true) { 656 case theType.contains('_crm-filter-status') === true ? true : false: 657 case theType.contains('__crm-advanced-filter-status') === true ? true : false: 658 theType = 'status'; 659 break; 660 case theType.contains('_crm-filter-maps') === true ? true : false: 661 theType = 'flatmap'; 662 break; 663 case theType.contains('_crm-filter-floors') === true ? true : false: 664 theType = 'floorplan'; 665 sa1 = theSelect.getAttribute('data-mapid'); 666 break; 667 case theType.contains('__crm-advanced-filter-livingsurfacearea') === true ? true : false: 668 theType = 'livingarea'; 669 break; 670 case theType.contains('__crm-advanced-filter-lotarea') === true ? true : false: 671 theType = 'lotarea'; 672 break; 673 case theType.contains('__crm-advanced-filter-rooms') === true ? true : false: 674 theType = 'room'; 675 break; 676 case theType.contains('__crm-advanced-filter-housetypes') === true ? true : false: 677 theType = 'housetype'; 678 break; 679 case theType.contains('__crm-advanced-filter-hometypes') === true ? true : false: 680 theType = 'hometype'; 681 break; 682 case theType.contains('__crm-advanced-filter-pricerange') === true ? true : false: 683 theType = 'pricerange'; 684 break; 685 686 default: 687 theType = false;
688 } 689 690 if (theType !== false) { 691 filters.push({ 692 type: theType, 693 classes: [].slice.call(theSelect.classList), 694 key_value: theValue, 695 specialAttribute1: sa1, 696 specialAttribute2: sa2, 697 specialAttribute3: sa3, 698 specialAttribute4: sa4, 699 specialAttribute5: sa5, 700 text_value: theSelect.options[theSelect.selectedIndex].text, 701 active: theContainer.classList.contains('uk-hidden') !== true && theContainer.classList.contains('hidden') !== true ? '1' : '0', 702 name: theName, 703 }); 704 } 705 if (theType === false) { 706 console.warn('A new filter type could not be validated.\n' + '\nDetails:' + '\n- value: ' + theValue + '\n- key: ' + theName + '\n- classes: ' + theSelect.getAttribute('class')); 707 } 708 } 709 } 710 } 711 712 /* PriceRangeSlider */ 713 if (typeof section.querySelector('.__crm-pricerange-slider') !== 'undefined' && null !== section.querySelector('.__crm-pricerange-slider')) { 714 let priceRangeSlider = section.querySelector('.__crm-pricerange-slider'), 715 /* Slider steps */ priceOriginalSteps = parseInt(parseInt(priceRangeSlider.parentNode.querySelector('.step-amount').value) * 5), 716 /* Validated first min */ priceOriginalMn = priceRangeSlider.parentNode.querySelector('.price-min').getAttribute('data-price-original'), 717 /* Calculated first min with steps marge */ priceOriginalMin = parseInt(priceOriginalMn) - priceOriginalSteps, 718 /* Current min */ priceMin = priceRangeSlider.parentNode.querySelector('.price-min').value, 719 /* Validated first max */ priceOriginalMx = priceRangeSlider.parentNode.querySelector('.price-max').getAttribute('data-price-original'), 720 /* reset to min */ resetPriceMin = priceRangeSlider.parentNode.querySelector('.price-min').getAttribute('data-price-reset-to'); 721 722 /* Calculated first max with steps marge */ (priceOriginalMax = parseInt(priceOriginalMx) + priceOriginalSteps), 723 /* Current max */ (priceMax = priceRangeSlider.parentNode.querySelector('.price-max').value), 724 /* reset to max */ (resetPriceMax = priceRangeSlider.parentNode.querySelector('.price-max').getAttribute('data-price-reset-to')); 725 726 filters.push({ 727 type: 'price_min_max', 728 classes: [].slice.call(priceRangeSlider.classList), 729 key_value: { min: priceMin, max: priceMax }, 730 specialAttribute1: priceOriginalMin, 731 specialAttribute2: priceOriginalMax, 732 specialAttribute3: resetPriceMin, 733 specialAttribute4: resetPriceMax, 734 text_value: { 735 min: priceRangeSlider.parentNode.querySelector('.price-min').value, 736 max: priceRangeSlider.parentNode.querySelector('.price-max').value, 737 }, 738 active: '1', 739 name: 'priceRangeSlider', 740 }); 741 } 742 743 if (filters.length > 0) { 744 /* Element has correct filters. Check which type 745 ** of map is activated and base below actions 746 ** on it */ 747 let typeOfMap = section.querySelector('.vogelvlucht-filter-bar'); 748 yoreflexibleExecuteFilters(filters, section.getAttribute('data-section-id'), typeOfMap.getAttribute('data-maptype')); 749 } 750 } 751 } 752 } 753} 754 755/* ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ */ 756 757if (typeof hexToRgb === 'undefined') { 758 function hexToRgb(hex) { 759 var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); 760 return result 761 ? { 762 r: parseInt(result[1], 16), 763 g: parseInt(result[2], 16), 764 b: parseInt(result[3], 16), 765 } 766 : null; 767 } 768} 769 770/* ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ */ 771 772var beMoneyFormat = new Intl.NumberFormat('nl-NL', { 773 style: 'currency', 774 currency: 'EUR', 775 minimumFractionDigits: 0, 776}); 777 778/* ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ */ 779 780if (typeof triggerAevent === 'undefined') { 781 function triggerAevent(el, type) {
782 if ('createEvent' in document) { 783 // modern browsers, IE9+ 784 var e = document.createEvent('HTMLEvents'); 785 e.initEvent(type, false, true); 786 el.dispatchEvent(e); 787 } else { 788 // IE 8 789 var e = document.createEventObject(); 790 e.eventType = type; 791 el.fireEvent('on' + e.eventType, e); 792 } 793 } 794} 795 796/* ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ */ 797 798if (typeof birdseyeCheckIfFalse === 'undefined') { 799 function birdseyeCheckIfFalse(value) { 800 switch (true) { 801 case value === null ? true : false: 802 case value === false ? true : false: 803 case value === 0 ? true : false: 804 case value === '' ? true : false: 805 case value === ' ' ? true : false: 806 case value === ' ' ? true : false: 807 case value === ' ' ? true : false: 808 case typeof value === 'number' && parseInt(value) <= 0 ? true : false: 809 value = false; 810 break; 811 } 812 813 return value; 814 } 815} 816 817/* ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ */ 818 819/* Activate on click */ 820if (typeof birdseyeCreateNewMapPopup === 'undefined') { 821 function birdseyeCreateNewMapPopup(plgn, plgnData, section) { 822 if (typeof document.getElementById('birdseyeMapPopup') !== 'undefined' && null !== document.getElementById('birdseyeMapPopup')) { 823 document.getElementById('birdseyeMapPopup').remove(); 824 } 825 826 if (typeof document.querySelector('.__yrm-birdseye-popover') !== 'undefined' && null !== document.querySelector('.__yrm-birdseye-popover')) { 827 document.querySelector('.__yrm-birdseye-popover').remove(); 828 } 829 830 let thePrice = '', 831 thePopUpOverlay = document.createElement('div'), 832 thePopUp = document.createElement('div'), 833 hometype = document.createElement('span'), 834 price = document.createElement('div'), 835 mainImage = document.createElement('div'), 836 closeIcon = document.createElement('div'), 837 statusHeader = document.createElement('span'), 838 // buildnumberHeader = document.createElement('div'), 839 buildnumberName = document.createElement('div'), 840 housetypeURL = document.createElement('div'), 841 specsheet = document.createElement('div'); 842 843 /* ~ # [DOWN] Start-of pop-up container # ~ */ 844 845 thePopUp.classList.add('__yrm-birdseye-popup'); 846 thePopUp.setAttribute('id', 'birdseyeMapPopup'); 847 thePopUp.setAttribute('style', 'left:' + plgnData.x + 'px;top:' + plgnData.y + 'px;'); 848 849 thePopUpOverlay.classList.add('__yrm-birdseye-popup-overlay', 'activated'); 850 thePopUpOverlay.setAttribute('title', 'Sluiten'); 851 852 /* ~ # [DOWN] Start-of main image # ~ */ 853 854 mainImage.classList.add('_image-crm-buildnumber', 'uk-cover-background', 'uk-background-center-center'); 855 856 if (typeof plgn.getAttribute('data-image') != 'undefined' && null !== plgn.getAttribute('data-image')) { 857 let imgurl = encodeURI(atob(plgn.getAttribute('data-image'))); 858 mainImage.setAttribute('style', 'background-image: url(' + imgurl + ');'); 859 } 860 861 if (typeof plgn.getAttribute('data-title') != 'undefined' && null !== plgn.getAttribute('data-title')) { 862 mainImage.classList.add('_image-crm-buildnumber--title'); 863 mainImage.removeAttribute('style'); 864 } 865 866 /* ~ # [DOWN] Start-of close icon # ~ */ 867 868 closeIcon.classList.add('_close-crm-buildnumber-previewer'); 869 closeIcon.innerHTML += 870 '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="256" height="256" viewBox="0 0 256 256" xml:space="preserve"> <desc>Created with Fabric.js 1.7.22</desc> <defs> </defs> <g transform="translate(128 128) scale(0.72 0.72)" style=""> <g style="stroke: none; stroke-width: 0; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: none; fill-rule: nonzero; opacity: 1;" transform="translate(-175.05 -175.05000000000004) scale(3.89 3.89)"> <path d="M 6 90 c -1.536 0 -3.071 -0.586 -4.243 -1.758 c -2.343 -2.343 -2.343 -6.142 0 -8.484 l 78 -78 c 2.342 -2.343 6.143 -2.343 8.484 0 c 2.344 2.343 2.344 6.142 0 8.485 l -78 78 C 9.071 89.414 7.536 90 6 90 z" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill-rule: nonzero;
870 opacity: 1;" transform=" matrix(1 0 0 1 0 0) " stroke-linecap="round"></path> <path d="M 84 90 c -1.535 0 -3.071 -0.586 -4.242 -1.758 l -78 -78 c -2.343 -2.343 -2.343 -6.142 0 -8.485 c 2.343 -2.343 6.143 -2.343 8.485 0 l 78 78 c 2.344 2.343 2.344 6.142 0 8.484 C 87.071 89.414 85.535 90 84 90 z" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill-rule: nonzero; opacity: 1;" transform=" matrix(1 0 0 1 0 0) " stroke-linecap="round"></path> </g> </g> </svg>'; 871 closeIcon.innerHTML += 872 '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="256" height="256" viewBox="0 0 256 256" xml:space="preserve"> <desc>Created with Fabric.js 1.7.22</desc> <defs> </defs> <g transform="translate(128 128) scale(0.72 0.72)" style=""> <g style="stroke: none; stroke-width: 0; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: none; fill-rule: nonzero; opacity: 1;" transform="translate(-175.05 -175.05000000000004) scale(3.89 3.89)"> <path d="M 6 90 c -1.536 0 -3.071 -0.586 -4.243 -1.758 c -2.343 -2.343 -2.343 -6.142 0 -8.484 l 78 -78 c 2.342 -2.343 6.143 -2.343 8.484 0 c 2.344 2.343 2.344 6.142 0 8.485 l -78 78 C 9.071 89.414 7.536 90 6 90 z" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill-rule: nonzero; opacity: 1;" transform=" matrix(1 0 0 1 0 0) " stroke-linecap="round"></path> <path d="M 84 90 c -1.535 0 -3.071 -0.586 -4.242 -1.758 l -78 -78 c -2.343 -2.343 -2.343 -6.142 0 -8.485 c 2.343 -2.343 6.143 -2.343 8.485 0 l 78 78 c 2.344 2.343 2.344 6.142 0 8.484 C 87.071 89.414 85.535 90 84 90 z" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill-rule: nonzero; opacity: 1;" transform=" matrix(1 0 0 1 0 0) " stroke-linecap="round"></path> </g> </g> </svg>'; 873 874 statusHeader.classList.add('_buildnumber-status', 'exclude-from-typo'); 875 const statusHeaderSettings = { 876 name: '', 877 color: '#000000', 878 bg: plgn.getAttribute('fill'), 879 }; 880 switch (plgn.getAttribute('data-status')) { 881 case 'PRESELLING': 882 statusHeaderSettings.name = plgn.getAttribute('data-selltype') == 1 ? 'Binnenkort in verhuur' : 'Binnenkort in verkoop'; 883 statusHeaderSettings.color = '#004328'; 884 break; 885 case 'SELLING': 886 statusHeaderSettings.name = plgn.getAttribute('data-selltype') == 1 ? 'Te huur' : 'Te koop'; 887 statusHeaderSettings.color = '#004328'; 888 break; 889 case 'OPTION': 890 statusHeaderSettings.name = plgn.getAttribute('data-selltype') == 1 ? 'Gereserveerd' : 'Onder optie'; 891 statusHeaderSettings.color = '#FFFFFF'; 892 break; 893 case 'SOLD': 894 statusHeaderSettings.name = plgn.getAttribute('data-selltype') == 1 ? 'Verhuurd' : 'Verkocht'; 895 statusHeaderSettings.color = '#FFFFFF'; 896 break; 897 } 898 statusHeader.setAttribute('style', 'background-color:' + statusHeaderSettings.bg + ';'); 899 statusHeader.setAttribute('data-uk-tooltip', "{pos:'right'}"); 900 statusHeader.setAttribute('title', statusHeaderSettings.name); 901 mainImage.append(closeIcon); 902 thePopUp.append(mainImage); 903 904 hometype.classList.add('_crm-hometype', 'exclude-from-typo'); 905 let hometypeSpec = false; 906 907 if (typeof plgn.getAttribute('data-hometype') != 'undefined' && null !== plgn.getAttribute('data-hometype') && plgn.getAttribute('data-hometype') !== '') { 908 hometypeSpec = true; 909 price.classList.add('hasHometype'); 910 buildnumberName.classList.add('hasHometype'); 911 specsheet.classList.add('hasTopSheet'); 912 hometype.innerHTML = plgn.getAttribute('data-hometype'); 913 } 914 915 if (typeof plgn.getAttribute('data-housetype-name') != 'undefined' && null !== plgn.getAttribute('data-housetype-name') && plgn.getAttribute('data-housetype-name') !== '') { 916 hometypeSpec = true; 917 price.classList.add('hasHometype'); 918 buildnumberName.classList.add('hasHometype'); 919 specsheet.classList.add('hasTopSheet'); 920 hometype.innerHTML += (hometype.innerHTML != '' ? ' - ' : '') + plgn.getAttribute('data-housetype-name'); 921 } 922 923 buildnumberName.classList.add('_crm-buildnumber', 'exclude-from-typo'); 924 925 if (null == plgn.getAttribute('data-title') || false == plgn.getAttribute('data-title') || plgn.getAttribute('data-title') == 'undefined') { 926 buildnumberName.innerHTML += 'Bouwnummer ' + plgn.getAttribute('data-buildnumber'); 927 } else { 928 buildnumberName.innerHTML += plgn.getAttribute('data-title'); 929 930 if (false != plgn.getAttribute('data-content') || !plgn.getAttribute('data-content')) { 931 buildnumberName.innerHTML += `<div class="_crm-content">${plgn.getAttribute('data-content')}</div>`; 932 } 933 } 934 935 buildnumberName.append(statusHeader); 936 hometype.classList.add('hasBuildnumber'); 937 price.classList.add('hasBuildnumber'); 938 price.classList.add('_crm-price'); 939 940 if (typeof plgn.getAttribute('data-pricefrom') !== 'undefined' && null !== plgn.getAttribute('data-pricefrom')) { 941 let thePriceData = JSON.parse(atob(plgn.getAttribute('data-pricefrom'))); 942 thePrice = thePriceData.origin; 943 } 944 945 if (typeof plgn.getAttribute('data-price') !== 'undefined' && null !== plgn.getAttribute('data-price') && plgn.getAttribute('data-price') != '') { 946 thePrice = beMoneyFormat.format(plgn.getAttribute('data-price')); 947 } 948 949 if (typeof plgn.getAttribute('data-title') !== 'undefined' && null !== plgn.getAttribute('data-title') && plgn.getAttribute('data-title') != '') { 950 thePrice = ''; 951 } 952 953 if (thePrice != '') { 954 specsheet.classList.add('hasTopSheet'); 955 buildnumberName.classList.add('hasPrice'); 956 hometype.classList.add('hasPrice'); 957 price.innerHTML = thePrice; 958 } 959 960 let sheetSpec = false, 961 sheetCount = 0, 962 oneSheetDown = false;
963 specsheet.classList.add('_crm-specsheet'); 964 if (typeof plgn.getAttribute('data-lotarea') != 'undefined' && null !== plgn.getAttribute('data-lotarea') && plgn.getAttribute('data-lotarea') !== '') { 965 if (plgn.getAttribute('data-lotarea') > 0) { 966 sheetSpec = true; 967 let lotareaSpec = document.createElement('div'); 968 lotareaSpec.classList.add('_lotarea'); 969 lotareaSpec.innerHTML = ''; 970 971 lotareaSpec.innerHTML += 972 '<div class="specIcon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none" class="injected-svg" data-src="/static/assets/area.e153bc0a.svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <path fill-rule="evenodd" clip-rule="evenodd" d="M0.166748 2.00008C0.166748 0.987559 0.987559 0.166748 2.00008 0.166748C2.83924 0.166748 3.54671 0.73054 3.76438 1.5H12.2356C12.4533 0.73054 13.1608 0.166748 13.9999 0.166748C15.0124 0.166748 15.8333 0.98756 15.8333 2.00008C15.8333 2.83924 15.2695 3.54671 14.5 3.76438V12.2356C15.2695 12.4533 15.8333 13.1608 15.8333 13.9999C15.8333 15.0124 15.0124 15.8333 13.9999 15.8333C13.1608 15.8333 12.4533 15.2695 12.2356 14.5H3.76438C3.54671 15.2695 2.83924 15.8333 2.00008 15.8333C0.98756 15.8333 0.166748 15.0124 0.166748 13.9999C0.166748 13.1608 0.73054 12.4533 1.5 12.2356V3.76438C0.73054 3.54671 0.166748 2.83924 0.166748 2.00008ZM2.5 12.2356V3.76443C3.11062 3.59175 3.59175 3.11062 3.76443 2.5H12.2356C12.4082 3.11062 12.8894 3.59175 13.5 3.76443V12.2356C12.8894 12.4082 12.4082 12.8894 12.2356 13.5H3.76443C3.59175 12.8894 3.11062 12.4082 2.5 12.2356ZM2.83325 13.9833C2.82439 13.5307 2.45476 13.1666 2.00008 13.1666C1.53984 13.1666 1.16675 13.5397 1.16675 13.9999C1.16675 14.4602 1.53984 14.8333 2.00008 14.8333C2.45476 14.8333 2.82439 14.4691 2.83325 14.0165V13.9833ZM13.9999 14.8333C13.5397 14.8333 13.1666 14.4602 13.1666 13.9999C13.1666 13.5397 13.5397 13.1666 13.9999 13.1666C14.4602 13.1666 14.8333 13.5397 14.8333 13.9999C14.8333 14.4602 14.4602 14.8333 13.9999 14.8333ZM13.9833 2.83325C13.5307 2.82439 13.1666 2.45476 13.1666 2.00008C13.1666 1.53984 13.5397 1.16675 13.9999 1.16675C14.4602 1.16675 14.8333 1.53984 14.8333 2.00008C14.8333 2.45476 14.4691 2.82439 14.0165 2.83325H13.9833ZM2.00008 1.16675C2.45476 1.16675 2.82439 1.53089 2.83325 1.98345V2.01671C2.8245 2.46374 2.46374 2.8245 2.01671 2.83325H1.98345C1.53089 2.82439 1.16675 2.45476 1.16675 2.00008C1.16675 1.53984 1.53984 1.16675 2.00008 1.16675Z" fill="#9FA9AD"></path> </svg></div>'; 973 974 lotareaSpec.innerHTML += '<div class="specData"><div class="_key exclude-from-typo">Perceel</div><div class="_value exclude-from-typo">' + plgn.getAttribute('data-lotarea') + '㎡</div></div>'; 975 976 specsheet.append(lotareaSpec); 977 978 sheetCount++; 979 } 980 } 981 if (typeof plgn.getAttribute('data-livingarea') != 'undefined' && null !== plgn.getAttribute('data-livingarea') && plgn.getAttribute('data-livingarea') !== '') { 982 if (plgn.getAttribute('data-livingarea') > 0) { 983 sheetSpec = true; 984 let livingSpec = document.createElement('div'); 985 livingSpec.classList.add('_livingarea'); 986 livingSpec.innerHTML = ''; 987 988 livingSpec.innerHTML += 989 '<div class="specIcon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 48 48" fill="none" class="injected-svg" data-src="https://public-images.yorecrm.nl/hometypes/vrijstaand.svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <rect width="48" height="48" fill="white"></rect> <path d="M35.7814 44.0132H12.1659C9.31938 44.0132 7 41.6852 7 38.828V19.0926C7 17.5582 7.68527 16.0767 8.84496 15.0714L20.6527 5.23016C22.6031 3.58995 25.3969 3.58995 27.2946 5.23016L39.1023 15.1243C40.262 16.1296 40.9473 17.5582 40.9473 19.1455V38.828C41 41.6852 38.6806 44.0132 35.7814 44.0132ZM23.9736 6.12963C23.2884 6.12963 22.5504 6.39418 22.0233 6.87037L10.2155 16.7645C9.53023 17.3466 9.10853 18.1931 9.10853 19.0926V38.7751C9.10853 40.4683 10.4791 41.8439 12.1659 41.8439H35.7814C37.4682 41.8439 38.8388 40.4683 38.8388 38.7751V19.0926C38.8388 18.1931 38.4171 17.2936 37.7318 16.7116L25.9767 6.87037C25.3969 6.39418 24.7116 6.12963 23.9736 6.12963Z" fill="#333333"></path> <path fill-rule="evenodd" clip-rule="evenodd" d="M25.8374 6.31018L8.33741 21.3102L8.6628 21.6898L26.1628 6.68981L25.8374 6.31018ZM28.3355 7.81185L8.33548 25.3118L8.66473 25.6881L28.6647 8.18814L28.3355 7.81185ZM8.33637 29.3111L30.8364 9.81107L31.1638 10.1889L8.66384 29.6889L8.33637 29.3111ZM32.8352 11.8121L8.33521 33.3121L8.665 33.6879L33.165 12.1879L32.8352 11.8121ZM8.33597 37.3114L35.336 13.8114L35.6642 14.1886L8.66423 37.6886L8.33597 37.3114ZM37.8369 15.8106L8.83687 40.8106L9.16334 41.1893L38.1633 16.1893L37.8369 15.8106ZM11.8357 42.3116L39.3357 18.3116L39.6645 18.6884L12.1645 42.6884L11.8357 42.3116ZM39.3361 22.3113L16.3361 42.3113L16.6641 42.6886L39.6641 22.6886L39.3361 22.3113ZM20.8366 42.3109L39.3366 26.3109L39.6636 26.6891L21.1636 42.6891L20.8366 42.3109ZM39.334 30.3131L25.834 42.3131L26.1662 42.6868L39.6662 30.6868L39.334 30.3131ZM30.334 42.3131L39.334 34.3131L39.6662 34.6868L30.6662 42.6868L30.334 42.3131ZM40.393 36.9071L33.276 43.066L33.6031 43.4441L40.7201 37.2852L40.393 36.9071Z" fill="#333333"></path> </svg></div>'; 990 991 livingSpec.innerHTML += '<div class="specData"><div class="_key exclude-from-typo">Woonopp.</div><div class="_value exclude-from-typo">' + plgn.getAttribute('data-livingarea') + '㎡</div></div>'; 992 993 if (sheetCount > 0) { 994 oneSheetDown = true; 995 let livingAreaSeparator = document.createElement('div'); 996 livingAreaSeparator.classList.add('_separator'); 997 specsheet.append(livingAreaSeparator); 998 } 999 specsheet.append(livingSpec); 1000 1001 sheetCount++; 1002 } 1003 } 1004 if (typeof plgn.getAttribute('data-room') != 'undefined' && null !== plgn.getAttribute('data-room') && plgn.getAttribute('data-room') !== '') { 1005 if (plgn.getAttribute('data-room') > 0) { 1006 sheetSpec = true; 1007 let roomSpec = document.createElement('div'); 1008 roomSpec.classList.add('_rooms'); 1009 roomSpec.innerHTML = ''; 1010 1011 roomSpec.innerHTML += 1012 '<div class="specIcon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewB
1012ox="0 0 16 16" fill="none" class="injected-svg" data-src="/static/assets/rooms.9438ffee.svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <g clip-path="url(#clip0-104)"> <path fill-rule="evenodd" clip-rule="evenodd" d="M2.5 0C2.40355 7.08273e-06 2.30768 0.0279028 2.22475 0.0825812C2.08444 0.175103 2 0.33193 2 0.500002V12.5C2 12.7 2.1192 12.8808 2.30304 12.9596L9.30304 15.9596C9.45752 16.0258 9.63493 16.0099 9.77525 15.9174C9.91556 15.8249 10 15.6681 10 15.5V3.5C10 3.29999 9.8808 3.11922 9.69696 3.04043L4.93596 1H13V12H11.5V13H13.5C13.7761 13 14 12.7761 14 12.5V0.5C14 0.223858 13.7761 0 13.5 0H2.50005C2.50004 0 2.50002 0 2.5 0ZM3 12.1703V1.25827L9 3.8297V14.7417L3 12.1703Z" fill="#9FA9AD"></path> </g> <defs> <clipPath id="clip0-104"> <rect width="16" height="16" fill="white"></rect> </clipPath> </defs> </svg></div>'; 1013 1014 roomSpec.innerHTML += '<div class="specData"><div class="_key exclude-from-typo">Kamers</div><div class="_value exclude-from-typo">' + plgn.getAttribute('data-room') + '</div></div>'; 1015 1016 if ((sheetCount > 0 && oneSheetDown == false) || sheetCount > 1) { 1017 oneSheetDown = true; 1018 let roomSpecSeparator = document.createElement('div'); 1019 roomSpecSeparator.classList.add('_separator'); 1020 specsheet.append(roomSpecSeparator); 1021 } 1022 specsheet.append(roomSpec); 1023 1024 sheetCount++; 1025 } 1026 } 1027 1028 let hturlSpec = false; 1029 housetypeURL.classList.add('_crm-housetype-link', 'exclude-from-typo'); 1030 if (typeof plgn.getAttribute('data-url') != 'undefined' && null !== plgn.getAttribute('data-url') && plgn.getAttribute('data-url') !== '') { 1031 specsheet.classList.add('hasLink'); 1032 let hturl = atob(plgn.getAttribute('data-url')); 1033 housetypeURL.innerHTML = '<a class="_button exclude-from-typo" href="' + hturl + '">Bekijk dit bouwnummer<i class="uk-icon-chevron-right"></i></a>'; 1034 hturlSpec = true; 1035 } 1036 1037 if (typeof plgn.getAttribute('data-title') != 'undefined' && null !== plgn.getAttribute('data-title') && plgn.getAttribute('data-title') != '') { 1038 hturlSpec = false; 1039 thePrice = ''; 1040 } 1041 1042 if (hometypeSpec !== false) { 1043 thePopUp.append(hometype); 1044 } 1045 thePopUp.append(buildnumberName); 1046 if (thePrice !== '') { 1047 thePopUp.append(price); 1048 } 1049 if (sheetSpec !== false) { 1050 thePopUp.append(specsheet); 1051 } 1052 if (hturlSpec !== false) { 1053 thePopUp.append(housetypeURL); 1054 } 1055 1056 section.append(thePopUp); 1057 section.append(thePopUpOverlay); 1058 1059 /* Fix side overflowing for popup */ 1060 let CurrentLeft = thePopUp.offsetWidth + plgnData.x; 1061 let MaxLeft = window.innerWidth - thePopUp.offsetWidth - 5; /* 5 pix marge */ 1062 if (CurrentLeft > MaxLeft) { 1063 thePopUp.setAttribute('style', 'left:' + MaxLeft + 'px;top:' + plgnData.y + 'px;'); 1064 } 1065 1066 thePopUpOverlay.addEventListener('click', () => { 1067 thePopUp.remove(); 1068 thePopUpOverlay.remove(); 1069 document.querySelector('polygon.highlight').classList.remove('highlight'); 1070 }); 1071 1072 closeIcon.addEventListener('click', () => triggerAevent(thePopUpOverlay, 'click')); 1073 } 1074} 1075 1076/* ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ */ 1077 1078/* Activate on hover */ 1079if (typeof birdseyeCreateNewMapPopover === 'undefined') { 1080 function birdseyeCreateNewMapPopover(plgn, plgnData, section) { 1081 let replacementHTML = '<div class="placeholder">Bekijk plattegrond</div>'; 1082 1083 if (typeof plgnData.status !== 'undefined' && null !== plgnData.status) { 1084 let floorStatus = JSON.parse(atob(plgnData.status)); 1085 let floorColor = JSON.parse(atob(plgnData.colors)); 1086 1087 replacementHTML = '<div class="statusholder">'; 1088 1089 if (floorStatus.PRESELLING > 0) { 1090 replacementHTML += '<div class="status preselling">'; 1091 replacementHTML += '<i title="' + (plgnData.selltype == 1 ? 'Binnenkort in verhuur' : 'Binnenkort in verkoop') + '" class="exclude-from-typo preselling" style="background-color:' + floorColor.PRESELLING + ';"></i>'; 1092 replacementHTML += '<span class="exclude-from-typo">' + (plgnData.selltype == 1 ? 'Binnenkort' : floorStatus.PRESELLING) + '</span>'; 1093 replacementHTML += '</div>'; 1094 } 1095 1096 if (floorStatus.SELLING > 0 || floorStatus.PRESELLING === 0) { 1097 replacementHTML += '<div class="status selling">'; 1098 replacementHTML += '<i title="' + (plgnData.selltype == 1 ? 'Te huur' : 'Te
1098koop') + '" class="exclude-from-typo selling" style="background-color:' + floorColor.SELLING + ';"></i>'; 1099 replacementHTML += '<span class="exclude-from-typo">' + (plgnData.selltype == 1 ? 'Te huur' : floorStatus.SELLING) + '</span>'; 1100 replacementHTML += '</div>'; 1101 } 1102 1103 replacementHTML += '<div class="status option">'; 1104 replacementHTML += '<i title="' + (plgnData.selltype == 1 ? 'Gereserveerd' : 'Onder optie') + '" class="exclude-from-typo option" style="background-color:' + floorColor.OPTION + ';"></i>'; 1105 replacementHTML += '<span class="exclude-from-typo">' + (plgnData.selltype == 1 ? 'Gereserveerd' : floorStatus.OPTION) + '</span>'; 1106 replacementHTML += '</div>'; 1107 1108 replacementHTML += '<div class="status sold">'; 1109 replacementHTML += '<i title="' + (plgnData.selltype == 1 ? 'Verhuurd' : 'Verkocht') + '" class="exclude-from-typo sold" style="background-color:' + floorColor.SOLD + ';"></i>'; 1110 replacementHTML += '<span class="exclude-from-typo">' + (plgnData.selltype == 1 ? 'Verhuurd' : floorStatus.SOLD) + '</span>'; 1111 replacementHTML += '</div>'; 1112 1113 replacementHTML += '</div>'; 1114 } 1115 1116 let popup = document.querySelector('.__yrm-birdseye-popover'); 1117 /* BIND AND FILL THIS POPOVER */ 1118 popup.innerHTML = replacementHTML; 1119 } 1120} 1121 1122if (typeof birdseyeCreateNewBuildPopover === 'undefined') { 1123 function birdseyeCreateNewBuildPopover(plgn, plgnData, section) { 1124 let replacementHTML = ''; 1125 1126 if (plgnData.type != false && plgnData.type !== 'undefined' && null !== plgnData.type) { 1127 replacementHTML += '<strong class="exclude-from-typo buildnumber">' + plgnData.title + '</strong>'; 1128 } else if (plgnData.buildnumber !== 'undefined' && null !== plgnData.buildnumber) { 1129 replacementHTML += '<strong class="exclude-from-typo buildnumber">Bouwnummer ' + plgnData.buildnumber + '</strong>'; 1130 } 1131 1132 if (plgnData.pricefrom !== false && plgnData.pricefrom !== null && plgnData.pricefrom != '' && (plgnData.price == false || plgnData.price < 1 || plgnData.price === null) && plgnData.status !== 'SOLD') { 1133 let priceFrom = JSON.parse(atob(plgnData.pricefrom)); 1134 1135 if (priceFrom.origin !== null) { 1136 replacementHTML += '<span class="exclude-from-typo price">' + priceFrom.origin + '</span>'; 1137 } 1138 } 1139 if (plgnData.price !== false && plgnData.price > 0 && plgnData.price !== null && plgnData.status !== 'SOLD' && beMoneyFormat.format(plgnData.price) !== null) { 1140 replacementHTML += '<span class="exclude-from-typo price">' + beMoneyFormat.format(plgnData.price) + '</span>'; 1141 } 1142 1143 let statusName = '', 1144 statusColor = '', 1145 allStatusColors = JSON.parse(atob(plgnData.colors)); 1146 1147 switch (plgnData.status) { 1148 case 'PRESELLING': 1149 statusName = plgnData.selltype == 1 ? 'Binnenkort in verhuur' : 'Binnenkort in verkoop'; 1150 statusColor = allStatusColors.PRESELLING; 1151 break; 1152 case 'SELLING': 1153 statusName = plgnData.selltype == 1 ? 'Te huur' : 'Te koop'; 1154 statusColor = allStatusColors.SELLING; 1155 break; 1156 case 'OPTION': 1157 statusName = plgnData.selltype == 1 ? 'Gereserveerd' : 'Onder optie'; 1158 statusColor = allStatusColors.OPTION; 1159 break; 1160 case 'SOLD': 1161 statusName = plgnData.selltype == 1 ? 'Verhuurd' : 'Verkocht'; 1162 statusColor = allStatusColors.SOLD; 1163 break; 1164 } 1165 1166 if (statusName !== '' && (plgnData.type == false || plgnData.type == 'undefined' || null == plgnData.type)) { 1167 replacementHTML += '<span class="exclude-from-typo status buildnumber-status"><i class="_status" style="--status-color:' + statusColor + ';">' + statusName + '</i></span>'; 1168 } 1169 1170 if (replacementHTML === '') { 1171 replacementHTML = '<div class="placeholder">Bekijk bouwnummer</div>'; 1172 } 1173 1174 let popup = document.querySelector('.__yrm-birdseye-popover'); 1175 popup.innerHTML = replacementHTML; 1176 } 1177} 1178 1179/* ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ */ 1180 1181if (typeof yoreflexibleExecuteFilters === 'undefined') { 1182 function yoreflexibleExecuteFilters(filters, section, typeOfMap) { 1183 let theSection = document.querySelector('.yoreflexi_yorecrm---vogelvlucht[data-section-id="' + section + '"]'), 1184 theFilters = theSection.querySelectorAll('.yrmslct-container'), 1185 theFilterIcon = theSection.querySelector('.__crm-filter-toggle'), 1186 thePolygons = theSection.querySelectorAll('polygon'), 1187 mapType = theSection.querySelector('.vogelvlucht-filter-bar').getAttribute('data-maptype'), 1188 theFloorplans = false, 1189 hasBeenFiltered = false;
1190 1191 if (mapType === 'propertymap') { 1192 theFloorplans = theSection.querySelectorAll('._propertymap-floorplan'); 1193 } 1194 if (mapType === 'floorplan') { 1195 theFloorplans = theSection.querySelectorAll('._flatmap-floorplan'); 1196 } 1197 1198 /* Setup finalize version for dropdowns by replacing placeholder text */ 1199 if (typeof theFilters !== 'undefined' && null !== theFilters && theFilters.length > 0) { 1200 for (const filter of theFilters) { 1201 /* Replace span placeholders */ 1202 filter.querySelector('._select-placeholder').innerHTML = filter.querySelector('._select-placeholder').innerHTML.replace('[%]', ''); 1203 filter.querySelector('._select-placeholder').innerHTML = filter.querySelector('._select-placeholder').innerHTML.replace('[/%]', ''); 1204 /* Replace span placeholders */ 1205 if (typeof filter.querySelectorAll('._item') !== 'undefined' && null !== filter.querySelectorAll('._item')) { 1206 for (item of filter.querySelectorAll('._item')) { 1207 item.innerHTML = item.innerHTML.replace('[%]', '<sup>'); 1208 item.innerHTML = item.innerHTML.replace('[/%]', '</sup>'); 1209 } 1210 } 1211 } 1212 } 1213 1214 /* reset buildnumber/polygon state and startover with a fresh slate */ 1215 for (polygon of thePolygons) { 1216 if (polygon.classList.contains('uk-hidden')) { 1217 polygon.classList.remove('uk-hidden'); 1218 } 1219 if (polygon.classList.contains('active')) { 1220 polygon.classList.remove('active'); 1221 } 1222 polygon.setAttribute('data-active', '1'); 1223 } 1224 1225 /* Check per floorplan if it has buildnumbers. 1226 ** If no buildnumbers found, we will give the 1227 ** dropdown a striketrough and make it italic */ 1228 for (const fp of theFloorplans) { 1229 if (typeof fp.querySelectorAll('._floorplan-overview-view') !== 'undefined' && null !== fp.querySelectorAll('._floorplan-overview-view')) { 1230 for (fpsvg of fp.querySelectorAll('._floorplan-overview-view')) { 1231 if (typeof fpsvg.querySelectorAll('polygon') === 'undefined' || null === fpsvg.querySelectorAll('polygon') || fpsvg.querySelectorAll('polygon').length < 1) { 1232 /* No polygons found */ 1233 let mapid = fpsvg.closest('._floorplan-holder').getAttribute('data-mapid'); 1234 propertymapid = fpsvg.closest('.__crm-map-main-viewer').getAttribute('data-mapid'); 1235 1236 /* Give this map a striketrough in the dropdown */ 1237 if (typeof fpsvg.closest('.flexsection').querySelector('._crm-filter-floors[data-mapid="' + propertymapid + '"]') !== 'undefined' && null !== fpsvg.closest('.flexsection').querySelector('._crm-filter-floors[data-mapid="' + propertymapid + '"]')) { 1238 let mapDropdown = fpsvg.closest('.flexsection').querySelector('._crm-filter-floors[data-mapid="' + propertymapid + '"]').parentNode; 1239 1240 mapDropdown.querySelector('option[value="' + mapid + '"]').setAttribute('disabled', 'disabled'); 1241 1242 /* Give the dropdown li a 'striketrough' */ 1243 let theSelectorContainer = document.createElement('sup'); 1244 theSelectorContainer.classList = 'count _crm-floor-polygon-count'; 1245 theSelectorContainer.innerText = ' (0)'; 1246 if (null !== mapDropdown.querySelector('li[value="' + mapid + '"]')) { 1247 if (mapDropdown.querySelector('li[value="' + mapid + '"]').hasAttribute('data-status') === true) { 1248 mapDropdown 1249 .querySelector('li[value="' + mapid + '"]') 1250 .querySelector('sup.count') 1251 .remove(); 1252 } 1253 1254 mapDropdown.querySelector('li[value="' + mapid + '"]').setAttribute('data-status', 'unavailable'); 1255 mapDropdown.querySelector('li[value="' + mapid + '"]').setAttribute('title', 'Nog geen aanbod toegevoegd'); 1256 mapDropdown.querySelector('li[value="' + mapid + '"]').append(theSelectorContainer); 1257 } 1258 } 1259 } 1260 } 1261 } 1262 } 1263 1264 let propertymapsElement = theSection.querySelectorAll('._crm-birdseyes'); 1265 1266 for (pme of propertymapsElement) { 1267 let mapType = pme.closest('.flexsection').querySelector('.vogelvlucht-filter-bar').getAttribute('data-maptype'); 1268 if (mapType === 'propertymap') { 1269 if (typeof pme.querySelectorAll('.__crm-map-main-viewer') !== 'undefined' && null !== pme.querySelectorAll('.__crm-map-main-viewer') && pme.querySelectorAll('.__crm-map-main-viewer').length > 0) { 1270 if (pme.querySelectorAll('.__crm-map-main-viewer').length < 2) { 1271 pme.querySelector('.__crm-map-main-viewer').setAttribute('data-active', '1'); 1272 pme.querySelector('._floorplan-holder').setAttribute('data-active', '1'); 1273 } 1274 } 1275 } 1276 } 1277 1278 for (const filter of filters) { 1279 switch (filter.type) { 1280 case 'flatmap': 1281 /* First show the correct 'floors' filter in the menu */ 1282 let floorElements = theSection.querySelectorAll('._crm-filter-floors'); 1283 for (floor of floorElements) { 1284 if (floor.getAttribute('data-mapid') !== filter.key_value) { 1285 // floor.classList.add('uk-hidden'); 1286 floor.parentNode.classList.add('uk-hidden'); 1287 } else { 1288 if (floor.parentNode.classList.contains('uk-hidden') === true) { 1289 floor.parentNode.classList.remove('uk-hidden'); 1290 } 1291 } 1292 } 1293 1294 let flatmapElements = theSection.querySelectorAll('.__crm-map-main-viewer'); 1295 for (fmc of flatmapElements) { 1296 fmc.setAttribute('data-active', fmc.getAttribute('data-mapid') !== filter.key_value && flatmapElements.length > 1 ? '0' : '1'); 1297 if (mapType === 'propertymap') { 1298 fmc.querySelector('._floorplan-holder[data-mapid="' + fmc.getAttribute('data-mapid') + '"]').setAttribute('data-active', fmc.getAttribute('data-mapid') !== filter.key_value && flatmapElements.length > 1 ? '0' : '1'); 1299 } 1300 } 1301 break; 1302 /* ~ - ~ FLATMAP FILTER & INITIALIZE ~ - ~ */ 1303 /* ~ - ~ --------------------------- ~ - ~ */ 1304 1305 /* ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ */ 1306 1307 /* ~ - ~ ---------------- ~ - ~ */ 1308 /* ~ - ~ FLOORPLAN FILTER ~ - ~ */ 1309 case 'floorplan': 1310 let flatmapElement = theSection.querySelector('.__crm-map-main-viewer[data-mapid="' + filter.specialAttribute1 + '"]'), 1311 fpFlatmapElements = theSection.querySelectorAll('.__crm-map-main-viewer'), 1312 flatmap = flatmapElement.querySelector('._flatmap-overview-map'); 1313 floorplan = false;
1314 1315 if (mapType === 'propertymap') { 1316 floorplan = flatmapElement.querySelector('._propertymap-floorplan'); 1317 } 1318 if (mapType === 'floorplan') { 1319 floorplan = flatmapElement.querySelector('._flatmap-floorplan'); 1320 } 1321 1322 for (fpc of floorplan.querySelectorAll('._floorplan-holder')) { 1323 fpc.setAttribute('data-active', fpc.getAttribute('data-mapid') !== filter.key_value ? '0' : '1'); 1324 } 1325 1326 if (fpFlatmapElements.length > 1) { 1327 for (fpfle of fpFlatmapElements) { 1328 if (fpfle.getAttribute('data-mapid') === filter.specialAttribute1) { 1329 let overviewMapPolygons = fpfle.querySelector('._flatmap-overview-map'); 1330 for (fmp of overviewMapPolygons.querySelectorAll('polygon')) { 1331 if (fmp.getAttribute('data-propertymapid') != filter.key_value) { 1332 if (fmp.classList.contains('highlight')) { 1333 fmp.classList.remove('highlight'); 1334 } 1335 } else { 1336 fmp.classList.add('highlight'); 1337 } 1338 } 1339 } 1340 } 1341 } 1342 1343 if (fpFlatmapElements.length < 2) { 1344 flatmapElement.setAttribute('data-active', '1'); 1345 for (fmp of flatmap.querySelectorAll('polygon')) { 1346 if (fmp.getAttribute('data-propertymapid') != filter.key_value) { 1347 if (fmp.classList.contains('highlight')) { 1348 fmp.classList.remove('highlight'); 1349 } 1350 } else { 1351 fmp.classList.add('highlight'); 1352 } 1353 } 1354 } 1355 break; 1356 case 'status': 1357 let status_value = filter.key_value == 'ALL' ? 'default' : filter.key_value, 1358 statusMaps = theSection.querySelectorAll('.__crm-map-main-viewer'); 1359 1360 /* Set value to add the 'reset' button */ 1361 if (status_value != 'default') { 1362 hasBeenFiltered = true; 1363 } 1364 1365 for (om of statusMaps) { 1366 let overviewPolygons = om.querySelectorAll('._flatmap-overview-map polygon'), 1367 floorplanPolygons = false; 1368 1369 if (mapType === 'propertymap') { 1370 floorplanPolygons = om.querySelectorAll('._propertymap-floorplan polygon'); 1371 } 1372 if (mapType === 'floorplan') { 1373 floorplanPolygons = om.querySelectorAll('._flatmap-floorplan polygon'); 1374 } 1375 1376 for (op of overviewPolygons) { 1377 let statusData = JSON.parse(atob(op.getAttribute('data-status'))), 1378 proceedStatus = true; 1379 1380 switch (false) { 1381 case status_value == 'PRESELLING' && statusData.PRESELLING === 0 ? false : true: 1382 case status_value == 'SELLING' && statusData.SELLING === 0 ? false : true: 1383 case status_value == 'OPTION' && statusData.OPTION === 0 ? false : true: 1384 case status_value == 'SOLD' && statusData.SOLD === 0 ? false : true: 1385 proceedStatus = false; 1386 break; 1387 } 1388 1389 if (proceedStatus === false) { 1390 /* The filtered type has no match */ 1391 op.setAttribute('data-active', '0'); 1392 } 1393 } 1394 if (floorplanPolygons !== false) { 1395 for (fp of floorplanPolygons) { 1396 let statusData = fp.getAttribute('data-status'), 1397 proceedStatus = true; 1398 1399 switch (false) { 1400 case status_value == 'PRESELLING' && statusData != 'PRESELLING' ? false : true: 1401 case status_value == 'SELLING' && statusData != 'SELLING' ? false : true: 1402 case status_value == 'OPTION' && statusData != 'OPTION' ? false : true: 1403 case status_value == 'SOLD' && statusData != 'SOLD' ? false : true: 1404 proceedStatus = false; 1405 break; 1406 } 1407 1408 if (proceedStatus === false) { 1409 /* The filtered type has no match */ 1410 fp.setAttribute('data-active', '0'); 1411 } 1412 } 1413 } 1414 } 1415 break; 1416 case 'livingarea': 1417 let li_value = filter.key_value == 'ALL' ? 'default' : filter.key_value, 1418 livingareaMaps = theSection.querySelectorAll('.__crm-map-main-viewer'); 1419 1420 /* Set value to add the 'reset' button */ 1421 if (li_value != 'default') { 1422 hasBeenFiltered = true; 1423 } 1424 1425 for (om of livingareaMaps) { 1426 let overviewPolygons = om.querySelectorAll('._flatmap-overview-map polygon'), 1427 floorplanPolygons = false;
1428 1429 if (mapType === 'propertymap') { 1430 floorplanPolygons = om.querySelectorAll('._propertymap-floorplan polygon'); 1431 } 1432 if (mapType === 'floorplan') { 1433 floorplanPolygons = om.querySelectorAll('._flatmap-floorplan polygon'); 1434 } 1435 1436 for (op of overviewPolygons) { 1437 let livingareaData = JSON.parse(atob(op.getAttribute('data-livingareas'))), 1438 proceedStatus = true; 1439 if (li_value != 'default' && parseInt(li_value) > parseInt(livingareaData.to)) { 1440 proceedStatus = false; 1441 op.setAttribute('data-active', '0'); 1442 } 1443 } 1444 if (floorplanPolygons !== false) { 1445 for (fp of floorplanPolygons) { 1446 if (li_value != 'default' && parseInt(li_value) > parseInt(fp.getAttribute('data-livingarea'))) { 1447 proceedStatus = false; 1448 fp.setAttribute('data-active', '0'); 1449 } 1450 } 1451 } 1452 } 1453 break; 1454 case 'lotarea': 1455 let lo_value = filter.key_value == 'ALL' ? 'default' : filter.key_value, 1456 lotareaMaps = theSection.querySelectorAll('.__crm-map-main-viewer'); 1457 1458 /* Set value to add the 'reset' button */ 1459 if (lo_value != 'default') { 1460 hasBeenFiltered = true; 1461 } 1462 1463 for (om of lotareaMaps) { 1464 let overviewPolygons = om.querySelectorAll('._flatmap-overview-map polygon'), 1465 floorplanPolygons = false; 1466 1467 if (mapType === 'propertymap') { 1468 floorplanPolygons = om.querySelectorAll('._propertymap-floorplan polygon'); 1469 } 1470 if (mapType === 'floorplan') { 1471 floorplanPolygons = om.querySelectorAll('._flatmap-floorplan polygon'); 1472 } 1473 1474 for (op of overviewPolygons) { 1475 let lotareaData = JSON.parse(atob(op.getAttribute('data-lotareas'))), 1476 proceedStatus = true; 1477 if (lo_value != 'default' && parseInt(lo_value) > parseInt(lotareaData.to)) { 1478 proceedStatus = false; 1479 op.setAttribute('data-active', '0'); 1480 } 1481 } 1482 if (floorplanPolygons !== false) { 1483 for (fp of floorplanPolygons) { 1484 if (lo_value != 'default' && parseInt(lo_value) > parseInt(fp.getAttribute('data-lotarea'))) { 1485 proceedStatus = false; 1486 fp.setAttribute('data-active', '0'); 1487 } 1488 } 1489 } 1490 } 1491 break; 1492 case 'room': 1493 let room_value = filter.key_value == 'ALL' ? 'default' : filter.key_value, 1494 roomsMaps = theSection.querySelectorAll('.__crm-map-main-viewer'); 1495 1496 /* Set value to add the 'reset' button */ 1497 if (room_value != 'default') { 1498 hasBeenFiltered = true; 1499 } 1500 1501 for (om of roomsMaps) { 1502 let overviewPolygons = om.querySelectorAll('._flatmap-overview-map polygon'), 1503 floorplanPolygons = false; 1504 1505 if (mapType === 'propertymap') { 1506 floorplanPolygons = om.querySelectorAll('._propertymap-floorplan polygon'); 1507 } 1508 if (mapType === 'floorplan') { 1509 floorplanPolygons = om.querySelectorAll('._flatmap-floorplan polygon'); 1510 } 1511 1512 for (op of overviewPolygons) { 1513 let roomsData = JSON.parse(atob(op.getAttribute('data-rooms'))), 1514 proceedStatus = true; 1515 if (room_value != 'default' && parseInt(room_value) > parseInt(roomsData.to)) { 1516 proceedStatus = false; 1517 op.setAttribute('data-active', '0'); 1518 } 1519 } 1520 if (floorplanPolygons !== false) { 1521 for (fp of floorplanPolygons) { 1522 if (room_value != 'default' && parseInt(room_value) > parseInt(fp.getAttribute('data-room'))) { 1523 proceedStatus = false; 1524 fp.setAttribute('data-active', '0'); 1525 } 1526 } 1527 } 1528 } 1529 break; 1530 1531 case 'housetype': 1532 let housetype_value = filter.key_value == 'ALL' ? 'default' : filter.key_value, 1533 housetypesMaps = theSection.querySelectorAll('.__crm-map-main-viewer'); 1534 1535 /* Set value to add the 'reset' button */ 1536 if (housetype_value != 'default') { 1537 hasBeenFiltered = true; 1538 } 1539 1540 for (om of housetypesMaps) { 1541 let overviewPolygons = om.querySelectorAll('._flatmap-overview-map polygon'), 1542 floorplanPolygons = false;
1543 1544 if (mapType === 'propertymap') { 1545 floorplanPolygons = om.querySelectorAll('._propertymap-floorplan polygon'); 1546 } 1547 if (mapType === 'floorplan') { 1548 floorplanPolygons = om.querySelectorAll('._flatmap-floorplan polygon'); 1549 } 1550 1551 for (op of overviewPolygons) { 1552 let housetypesData = JSON.parse(atob(op.getAttribute('data-housetypes'))), 1553 proceedStatus = true; 1554 if (housetype_value != 'default') { 1555 let htFound = false; 1556 for (ht of housetypesData) { 1557 if (ht === housetype_value) { 1558 htFound = true; 1559 } 1560 } 1561 if (htFound === false) { 1562 proceedStatus = false; 1563 op.setAttribute('data-active', '0'); 1564 } 1565 } 1566 } 1567 if (floorplanPolygons !== false) { 1568 for (fp of floorplanPolygons) { 1569 if (housetype_value != 'default' && housetype_value != fp.getAttribute('data-housetype')) { 1570 proceedStatus = false; 1571 fp.setAttribute('data-active', '0'); 1572 } 1573 } 1574 } 1575 } 1576 break; 1577 case 'hometype': 1578 let hometype_value = filter.key_value == 'ALL' ? 'default' : filter.key_value, 1579 hometypesMaps = theSection.querySelectorAll('.__crm-map-main-viewer'); 1580 1581 /* Set value to add the 'reset' button */ 1582 if (hometype_value != 'default') { 1583 hasBeenFiltered = true; 1584 } 1585 1586 for (om of hometypesMaps) { 1587 let overviewPolygons = om.querySelectorAll('._flatmap-overview-map polygon'), 1588 floorplanPolygons = false; 1589 1590 if (mapType === 'propertymap') { 1591 floorplanPolygons = om.querySelectorAll('._propertymap-floorplan polygon'); 1592 } 1593 if (mapType === 'floorplan') { 1594 floorplanPolygons = om.querySelectorAll('._flatmap-floorplan polygon'); 1595 } 1596 1597 for (op of overviewPolygons) { 1598 let hometypesData = JSON.parse(atob(op.getAttribute('data-hometypes'))), 1599 proceedStatus = true; 1600 if (hometype_value != 'default') { 1601 let htFound = false; 1602 for (ht of hometypesData) { 1603 if (ht === hometype_value) { 1604 htFound = true; 1605 } 1606 } 1607 if (htFound === false) { 1608 proceedStatus = false; 1609 op.setAttribute('data-active', '0'); 1610 } 1611 } 1612 } 1613 if (floorplanPolygons !== false) { 1614 for (fp of floorplanPolygons) { 1615 if (hometype_value != 'default' && hometype_value != fp.getAttribute('data-hometype')) { 1616 proceedStatus = false; 1617 fp.setAttribute('data-active', '0'); 1618 } 1619 } 1620 } 1621 } 1622 break; 1623 case 'pricerange': 1624 let pricerange_value = filter.key_value == 'ALL' ? 'default' : filter.key_value, 1625 pricerangesMaps = theSection.querySelectorAll('.__crm-map-main-viewer'); 1626 1627 if (pricerange_value != 'default') { 1628 hasBeenFiltered = true; 1629 } 1630 1631 for (om of pricerangesMaps) { 1632 let overviewPolygons = om.querySelectorAll('._flatmap-overview-map polygon'), 1633 floorplanPolygons = false; 1634 1635 if (mapType === 'propertymap') { 1636 floorplanPolygons = om.querySelectorAll('._propertymap-floorplan polygon'); 1637 } 1638 if (mapType === 'floorplan') { 1639 floorplanPolygons = om.querySelectorAll('._flatmap-floorplan polygon'); 1640 } 1641 1642 for (op of overviewPolygons) { 1643 let priceRangeComponent = op.getAttribute('data-pricerange'), 1644 pricerangesData = priceRangeComponent != null && priceRangeComponent != '' ? JSON.parse(atob(priceRangeComponent)) : false, 1645 proceedStatus = true; 1646 if (pricerange_value != 'default' && pricerangesData !== false) { 1647 let prFound = false;
1648 if (pricerangesData.pr_start >= pricerange_value) { 1649 prFound = true; 1650 } 1651 if (prFound === false) { 1652 proceedStatus = false; 1653 op.setAttribute('data-active', '0'); 1654 } 1655 } 1656 } 1657 if (floorplanPolygons !== false) { 1658 for (fp of floorplanPolygons) { 1659 let priceRangeBNRComponent = fp.getAttribute('data-pricefrom'), 1660 pricerangesData = priceRangeBNRComponent != null && priceRangeBNRComponent != '' ? JSON.parse(atob(priceRangeBNRComponent)) : false; 1661 1662 if (pricerange_value != 'default' && parseInt(pricerange_value) > parseInt(pricerangesData.pr_start) && pricerangesData.pr_start != '' && parseInt(pricerangesData.pr_start) > 0) { 1663 proceedStatus = false; 1664 fp.setAttribute('data-active', '0'); 1665 } 1666 } 1667 } 1668 } 1669 break; 1670 case 'price_min_max': 1671 let pricerangeSlider_values = { min: filter.key_value.min, max: filter.key_value.max }, 1672 pricerangeSliderMaps = theSection.querySelectorAll('.__crm-map-main-viewer'); 1673 let minus = parseFloat(pricerangeSlider_values.min.replace(/\./g, '')); 1674 let maxus = parseFloat(pricerangeSlider_values.max.replace(/\./g, '')); 1675 1676 /* Set value to add the 'reset' button */ 1677 if (minus != filter.specialAttribute3 || maxus != filter.specialAttribute4) { 1678 hasBeenFiltered = true; 1679 } 1680 1681 for (om of pricerangeSliderMaps) { 1682 let overviewPolygons = om.querySelectorAll('._flatmap-overview-map polygon'), 1683 floorplanPolygons = false; 1684 1685 if (mapType === 'propertymap') { 1686 floorplanPolygons = om.querySelectorAll('._propertymap-floorplan polygon'); 1687 } 1688 if (mapType === 'floorplan') { 1689 floorplanPolygons = om.querySelectorAll('._flatmap-floorplan polygon'); 1690 } 1691 1692 for (op of overviewPolygons) { 1693 let priceRangeSliderComponent = op.getAttribute('data-price'), 1694 pricerangeSlidersData = priceRangeSliderComponent != null && priceRangeSliderComponent != '' ? JSON.parse(atob(priceRangeSliderComponent)) : false, 1695 proceedStatus = true; 1696 if (pricerangeSlidersData !== false) { 1697 let priFound = false; 1698 for (op_p_price of pricerangeSlidersData) { 1699 if (op_p_price >= minus && op_p_price <= maxus) { 1700 priFound = true; 1701 } 1702 } 1703 if (priFound === false) { 1704 proceedStatus = false; 1705 op.setAttribute('data-active', '0'); 1706 } 1707 } 1708 } 1709 if (floorplanPolygons !== false) { 1710 for (fp of floorplanPolygons) { 1711 let priceBNRComponent = parseFloat(fp.getAttribute('data-price')); 1712 if (priceBNRComponent != '' && priceBNRComponent != null && priceBNRComponent > 0 && (priceBNRComponent < minus || priceBNRComponent > maxus)) { 1713 proceedStatus = false; 1714 fp.setAttribute('data-active', '0'); 1715 } 1716 } 1717 } 1718 } 1719 break; 1720 } 1721 } 1722 1723 if (typeof theSection.querySelector('.__crm-preloader') !== 'undefined' && null !== theSection.querySelector('.__crm-preloader')) { 1724 theSection.querySelector('.__crm-preloader').remove(); 1725 } 1726 1727 /* Trigger scroll once */ 1728 triggerAevent(document, 'scroll'); 1729 1730 if (typeof theFilterIcon !== 'undefined' && null !== theFilterIcon) { 1731 if (hasBeenFiltered === true) { 1732 theFilterIcon.classList.add('has-been-filtered'); 1733 if (theFilterIcon.classList.contains('with-reset')) { 1734 theFilterIcon.parentNode.querySelector('.__crm-filter-reset').classList.add('has-been-filtered'); 1735 } 1736 } 1737 if (hasBeenFiltered === false && theFilterIcon.classList.contains('has-been-filtered')) { 1738 theFilterIcon.classList.remove('has-been-filtered'); 1739 if (theFilterIcon.classList.contains('with-reset')) { 1740 theFilterIcon.parentNode.querySelector('.__crm-filter-reset').classList.remove('has-been-filtered'); 1741 } 1742 } 1743 } 1744 1745 /* Floorplan aspectratio calculator based on sizes */ 1746 checkBirdseyesForDynamicWidthSettings(); 1747 } 1748}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.