{"version":3,"sources":["jsdelivr-header.js","/npm/knighton-estate-agents@1.3.9/init.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACyEA,SAAS,sBAAsB,EAAS,EAAM,GAC1C,EAAQ,MAAK,CAAC,EAAO,MACjB,EAAU,EAAE,IACJ,GAAG,SAAS,KAChB,EAAK,EAAI,GACX,GAEV,CAGA,SAAS,iBAAiB,EAAQ,GAC9B,MACM,EADa,EAAO,SAAS,IACA,EAAO,cACpC,EAAc,EAAE,gBAChB,EAAkB,EAAE,oBAE1B,IAAI,EAAe,EACf,GAAU,EACV,GAAY,EAEhB,EAAY,GAAG,SAAS,KACpB,GA0CA,EAAgB,IAAI,CAAE,QAAS,OAC/B,EAAE,QAAQ,IAAI,WAAY,WAE1B,YAAW,KACP,EAAgB,IAAI,CAAE,QAAS,QAAS,GACzC,OAdH,EAAgB,IAAI,CAAE,QAAS,SAC/B,EAAE,QAAQ,IAAI,WAAY,UAE1B,YAAW,KACP,EAAgB,IAAI,CAAE,QAAS,QAAS,GACzC,IApCH,GAAa,CAAS,IAG1B,EAAE,UAAU,GAAG,UAAU,KACrB,EAAe,EAAE,QAAQ,YAEpB,IACD,OAAO,uBAAsB,MASrC,SAAsB,GACd,EAAe,GACX,EAAO,SAAS,UAChB,EAAE,QAAQ,IAAI,CAAE,aAAc,GAAG,EAAO,oBAE5C,EAAO,SAAS,KAEZ,EAAO,SAAS,UAChB,EAAE,QAAQ,IAAI,CAAE,aAAc,MAElC,EAAO,YAAY,GAE3B,CApBY,CAAa,GACb,GAAU,CAAK,IAGnB,GAAU,EACd,GAkCR,CAEA,SAAS,iBAAiB,GAEtB,MAAM,EAAc,IAAI,IAAI,OAAO,SAAS,MAAM,aAG7B,SAAjB,GAAyB,EAAY,OAAO,UAAW,YACtC,QAAjB,GAAwB,EAAY,OAAO,UAAW,YAG1D,MAAM,EAAiB,EAAY,WAGnC,IAAI,EAAS,OAAO,SAAS,OAE7B,OAAO,SAAS,KAAO,GAAG,iBAAsB,GACpD,CAEA,SAAS,+BAA+B,GACpC,MAAM,EAAkB,OAAO,YAC/B,IAAI,EAAe,EACf,GAAU,EAEd,EAAE,UAAU,GAAG,UAAU,KACrB,EAAe,EAAE,QAAQ,YAEpB,IACD,OAAO,uBAAsB,MASrC,SAAsB,GACd,EAAe,GACf,EAAiB,IAAI,UAAW,SAEhC,YAAW,KACP,EAAiB,IAAI,UAAW,OAAO,GACxC,OAEH,EAAiB,IAAI,UAAW,MAEhC,YAAW,KACP,EAAiB,IAAI,UAAW,OAAO,GACxC,KAEX,CAtBY,CAAa,GACb,GAAU,CAAK,IAGnB,GAAU,EACd,GAkBR,CAEA,SAAS,iBAAiB,GAqBtB,SAAS,EAAY,EAAO,GACxB,EAAM,IAAI,CACN,YAAa,SACb,UAAW,yBAEf,EAAM,IAAI,YAAa,wBAC3B,CA1BA,EAAE,QAAQ,GAAG,QAAQ,KACjB,EAAO,MAAK,CAAC,EAAO,KAEhB,MAAM,GADN,EAAQ,EAAE,IACU,SAAS,+BAEzB,EAAM,MAAM,OAAS,GACrB,EAAY,EAAO,GAGvB,EAAM,GAAG,WAAW,KAChB,EAAY,EAAO,EAAM,IAG7B,EAAM,GAAG,YAAY,KACb,EAAM,MAAM,OAAS,GAcrC,SAAmB,EAAO,GACtB,EAAM,IAAI,CAAE,YAAa,OAAQ,UAAW,qBAC5C,EAAM,IAAI,YAAa,mBAC3B,CAhBY,CAAU,EAAO,EAAM,GACzB,GACJ,GAeV,CAEA,SAAS,eAAe,GA2CpB,SAAS,IACL,EAAc,MAAK,CAAC,EAAO,KAGvB,MAGM,GALN,EAAqB,EAAE,IAGlB,SAAS,wBACT,QAC4C,SAC3C,EAAmB,EAAE,QAAQ,QAAU,IAAM,GAAK,GAExD,EAAmB,IACf,SACA,GAAG,EAA0B,MAChC,GAET,CApDA,EAAE,QAAQ,GAAG,OAAQ,GACrB,EAAE,QAAQ,GAAG,SAAU,GAEvB,EAAc,MAAK,CAAC,EAAO,KAGvB,MAAM,GAFN,EAAqB,EAAE,IAGlB,SAAS,wBACT,QACC,EAAmB,EACpB,SAAS,wBACT,QACC,EAA0B,EAAiB,SAC3C,EAA0B,EAAiB,SAC3C,EAAmB,EAAE,QAAQ,QAAU,IAAM,GAAK,GAExD,EAAiB,GAAG,SAAS,KACrB,EAAiB,SAAS,kBAC1B,EAAmB,IAAI,CACnB,OAAQ,GAAG,EAA0B,QAEzC,YAAW,KACP,EAAiB,YAAY,gBAAgB,GAC9C,OAEH,EAAmB,IAAI,CACnB,OAAQ,GACJ,EACA,EAAmB,cACnB,QAGR,EAAiB,SAAS,iBAC9B,GACF,GAmBV,CAzSA,MACI,QAAQ,IAAI,0CAEZ,MAAM,EAAW,EAAE,6BACf,EAAU,EAAE,4BACZ,EAAY,EAAE,8BACd,EAAS,EAAE,WACX,EAAmB,EAAE,qBACrB,EAAS,EAAE,+BACX,EAAqB,EAAE,uBACvB,EAAkB,EAAE,oBACpB,EAAY,EAAE,0BAoClB,GAjCA,EAAU,OAAS,EACb,eAAe,GACf,QAAQ,MAAM,uBAGpB,EAAO,OAAS,EACV,iBAAiB,EAAQ,gBACzB,QAAQ,MAAM,uBAGpB,EAAU,OAAS,EACb,sBAAsB,EAAW,iBAAkB,SACnD,QAAQ,MAAM,8BAEpB,EAAS,OAAS,EACZ,sBAAsB,EAAU,iBAAkB,QAClD,QAAQ,MAAM,sBAEpB,EAAQ,OAAS,EACX,sBAAsB,EAAS,iBAAkB,OACjD,QAAQ,MAAM,qBAGpB,EAAiB,OAAS,EACpB,+BAA+B,GAC/B,QAAQ,MAAM,8BAGpB,EAAO,OAAS,EACV,iBAAiB,GACjB,QAAQ,MAAM,mCAGhB,EAAmB,OAAS,EAAG,CACX,IAAI,OAAO,sBAAuB,CAClD,UAAW,aACX,OAAQ,OACR,MAAM,EACN,SAAU,CACN,SAAS,GAEb,cAAe,EACf,aAAc,GACd,WAAY,CACR,OAAQ,2BACR,OAAQ,6BAGpB,MACI,QAAQ,MAAM,iCAGlB,GAAI,EAAgB,OAAS,EAAG,CACX,IAAI,OAAO,mBAAoB,CAC5C,UAAW,aACX,OAAQ,OACR,cAAe,EACf,aAAc,IAEtB,MACI,QAAQ,MAAM,6BAErB,EA5ED","file":"/npm/knighton-estate-agents@1.3.9/init.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/knighton-estate-agents@1.3.9/init.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","(() => {\n    console.log('Package running... | Martin Digital :)');\n\n    const rent_btn = $('[md-form-data=\"rent-btn\"]'),\n        buy_btn = $('[md-form-data=\"buy-btn\"]'),\n        fixed_btn = $('[md-form-data=\"fixed-btn\"]'),\n        navbar = $('#navbar'),\n        fixed_search_bar = $('#fixed-search-bar'),\n        inputs = $('input[md-form-data=\"input\"]'),\n        testimonial_swiper = $('.testimonial-swiper'),\n        property_swiper = $('.property-swiper'),\n        dropdowns = $('[dropdown=\"container\"]');\n\n    //dropdowns\n    dropdowns.length > 0\n        ? handleDropdown(dropdowns)\n        : console.error('Dropdowns not found');\n\n    //navbar functionality\n    navbar.length > 0\n        ? handleWebsiteNav(navbar, 'floating-nav')\n        : console.error('navbar not found :(');\n\n    //form property searches\n    fixed_btn.length > 0\n        ? addFormEventListeners(fixed_btn, handleFormSubmit, 'fixed')\n        : console.error('fixed-search-btn not found');\n\n    rent_btn.length > 0\n        ? addFormEventListeners(rent_btn, handleFormSubmit, 'rent')\n        : console.error('rent-btn not found');\n\n    buy_btn.length > 0\n        ? addFormEventListeners(buy_btn, handleFormSubmit, 'buy')\n        : console.error('buy-btn not found');\n\n    //fixed search bar visibility\n    fixed_search_bar.length > 0\n        ? handleFixedSearchBarVisibility(fixed_search_bar)\n        : console.error('fixed-search-bar not found');\n\n    //Input styles\n    inputs.length > 0\n        ? handleSearchBars(inputs)\n        : console.error('md-form-data=input(s) not found');\n\n    //Swipers\n    if (testimonial_swiper.length > 0) {\n        const tetsimonial = new Swiper('.testimonial-swiper', {\n            direction: 'horizontal',\n            effect: 'fade',\n            loop: true,\n            keyboard: {\n                enabled: false,\n            },\n            slidesPerView: 1,\n            spaceBetween: 16,\n            navigation: {\n                nextEl: '.testimonial-slider-next',\n                prevEl: '.testimonial-slider-prev',\n            },\n        });\n    } else {\n        console.error('.testimonial-swiper not found');\n    }\n\n    if (property_swiper.length > 0) {\n        const property = new Swiper('.property-swiper', {\n            direction: 'horizontal',\n            effect: 'fade',\n            slidesPerView: 1,\n            spaceBetween: 16,\n        });\n    } else {\n        console.error('.property-swiper not found');\n    }\n})();\n\n//Utility functions\nfunction addFormEventListeners(element, func, arg) {\n    element.each((index, element) => {\n        element = $(element);\n        element.on('click', () => {\n            func(arg);\n        });\n    });\n}\n\n//Main functions\nfunction handleWebsiteNav(navbar, navbar_class) {\n    const navbar_top = navbar.offset().top;\n    const navbar_bottom = navbar_top + navbar.outerHeight();\n    const mobile_menu = $('#mobile-menu');\n    const mobile_dropdown = $('#mobile-dropdown');\n\n    let viewport_top = 0;\n    let ticking = false;\n    let menu_open = false;\n\n    mobile_menu.on('click', () => {\n        menu_open ? handleMobileMenuClose() : handleMobileMenuOpen();\n\n        menu_open = !menu_open;\n    });\n\n    $(document).on('scroll', () => {\n        viewport_top = $(window).scrollTop();\n\n        if (!ticking) {\n            window.requestAnimationFrame(() => {\n                handleScroll(viewport_top);\n                ticking = false;\n            });\n\n            ticking = true;\n        }\n    });\n\n    function handleScroll(viewport_top) {\n        if (viewport_top > navbar_bottom) {\n            if (navbar.hasClass('white')) {\n                $('body').css({ 'margin-top': `${navbar.outerHeight()}px` });\n            }\n            navbar.addClass(navbar_class);\n        } else {\n            if (navbar.hasClass('white')) {\n                $('body').css({ 'margin-top': '0' });\n            }\n            navbar.removeClass(navbar_class);\n        }\n    }\n\n    function handleMobileMenuOpen() {\n        mobile_dropdown.css({ display: 'flex' });\n        $('body').css('overflow', 'hidden');\n\n        setTimeout(() => {\n            mobile_dropdown.css({ opacity: '100%' });\n        }, 1);\n    }\n\n    function handleMobileMenuClose() {\n        mobile_dropdown.css({ opacity: '0%' });\n        $('body').css('overflow', 'visible');\n\n        setTimeout(() => {\n            mobile_dropdown.css({ display: 'none' });\n        }, 250);\n    }\n}\n\nfunction handleFormSubmit(listing_type) {\n    //get current query params\n    const queryParams = new URL(window.location.href).searchParams; //URLSearchParams Object\n\n    //append relevant string\n    if (listing_type === 'rent') queryParams.append('listing', 'For rent');\n    if (listing_type === 'buy') queryParams.append('listing', 'For sale');\n\n    //convert to string\n    const newQueryParams = queryParams.toString();\n\n    //route to properties page\n    let domain = window.location.origin;\n\n    window.location.href = `${domain}/properties/?${newQueryParams}`;\n}\n\nfunction handleFixedSearchBarVisibility(fixed_search_bar) {\n    const viewport_height = window.innerHeight;\n    let viewport_top = 0;\n    let ticking = false;\n\n    $(document).on('scroll', () => {\n        viewport_top = $(window).scrollTop();\n\n        if (!ticking) {\n            window.requestAnimationFrame(() => {\n                handleScroll(viewport_top);\n                ticking = false;\n            });\n\n            ticking = true;\n        }\n    });\n\n    function handleScroll(viewport_top) {\n        if (viewport_top > viewport_height) {\n            fixed_search_bar.css('display', 'block');\n\n            setTimeout(() => {\n                fixed_search_bar.css('opacity', '100%');\n            }, 250);\n        } else {\n            fixed_search_bar.css('opacity', '0%');\n\n            setTimeout(() => {\n                fixed_search_bar.css('display', 'none');\n            }, 250);\n        }\n    }\n}\n\nfunction handleSearchBars(inputs) {\n    $(window).on('load', () => {\n        inputs.each((index, input) => {\n            input = $(input);\n            const label = input.siblings('label[md-form-data=\"label\"]');\n\n            if (input.val().length > 0) {\n                shrinkInput(input, label);\n            }\n\n            input.on('focusin', () => {\n                shrinkInput(input, label);\n            });\n\n            input.on('focusout', () => {\n                if (input.val().length > 0) return;\n                growInput(input, label);\n            });\n        });\n    });\n\n    function shrinkInput(input, label) {\n        label.css({\n            'font-size': '0.5rem',\n            transform: 'translateY(-1.25rem)',\n        });\n        input.css('transform', 'translateY(0.3125rem)');\n    }\n\n    function growInput(input, label) {\n        label.css({ 'font-size': '1rem', transform: 'translateY(0rem)' });\n        input.css('transform', 'translateY(0rem)');\n    }\n}\n\nfunction handleDropdown(dropdown_list) {\n    //loop through each dropdown container\n    //Get child nodes: dropdown=question\n    //add click event to question\n    //add dropdown-open classes to both elements on click\n\n    $(window).on('load', setInitialHeight);\n    $(window).on('resize', setInitialHeight);\n\n    dropdown_list.each((index, dropdown_container) => {\n        dropdown_container = $(dropdown_container);\n\n        const dropdown_heading = dropdown_container\n            .children('[dropdown=\"heading\"]')\n            .first();\n        const dropdown_content = dropdown_container\n            .children('[dropdown=\"content\"]')\n            .first();\n        const dropdown_heading_height = dropdown_heading.height();\n        const dropdown_content_height = dropdown_content.height();\n        const dropdown_padding = $(window).width() > 478 ? 64 : 48;\n\n        dropdown_heading.on('click', () => {\n            if (dropdown_heading.hasClass('dropdown-open')) {\n                dropdown_container.css({\n                    height: `${dropdown_heading_height + dropdown_padding}px`,\n                });\n                setTimeout(() => {\n                    dropdown_heading.removeClass('dropdown-open');\n                }, 250);\n            } else {\n                dropdown_container.css({\n                    height: `${\n                        dropdown_content_height +\n                        dropdown_container.outerHeight() +\n                        dropdown_padding\n                    }px`,\n                });\n                dropdown_heading.addClass('dropdown-open');\n            }\n        });\n    });\n\n    function setInitialHeight() {\n        dropdown_list.each((index, dropdown_container) => {\n            dropdown_container = $(dropdown_container);\n\n            const dropdown_heading = dropdown_container\n                .children('[dropdown=\"heading\"]')\n                .first();\n            const dropdown_heading_height = dropdown_heading.height();\n            const dropdown_padding = $(window).width() > 478 ? 64 : 48;\n\n            dropdown_container.css(\n                'height',\n                `${dropdown_heading_height + dropdown_padding}px`\n            );\n        });\n    }\n}\n"]}