{"version":3,"file":"js/application-6adb3aeb8191cc3b5320.js","mappings":"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","sources":["webpack://vesta/./app/javascript/channels/ sync _channel\\.js$","webpack://vesta/./app/javascript/controllers/ sync \\.js$","webpack://vesta/./app/javascript/channels/consumer.js","webpack://vesta/./app/javascript/channels/flatsy_chats_channel.js","webpack://vesta/./app/javascript/channels/index.js","webpack://vesta/./app/javascript/channels/visits_calendar_channel.js","webpack://vesta/./app/javascript/controllers/admin/cities_map/mapbox_options.js","webpack://vesta/./app/javascript/controllers/admin/cities_map/module_controller.js","webpack://vesta/./app/javascript/controllers/admin/communications_controller.js","webpack://vesta/./app/javascript/controllers/admin/decrease_price_email_generator_controller.js","webpack://vesta/./app/javascript/controllers/admin/duplicate_leads_controller.js","webpack://vesta/./app/javascript/controllers/admin/flatsy_controller.js","webpack://vesta/./app/javascript/controllers/admin/input_format_controller.js","webpack://vesta/./app/javascript/controllers/admin/mapbox_map_controller.js","webpack://vesta/./app/javascript/controllers/admin/sales_health_controller.js","webpack://vesta/./app/javascript/controllers/admin/sortable_controller.js","webpack://vesta/./app/javascript/controllers/admin/spinner_controller.js","webpack://vesta/./app/javascript/controllers/admin/statistics_controller.js","webpack://vesta/./app/javascript/controllers/admin/tabs_controller.js","webpack://vesta/./app/javascript/controllers/admin/timeline_controller.js","webpack://vesta/./app/javascript/controllers/admin/users_solicitations_controller.js","webpack://vesta/./app/javascript/controllers/admin/visibility_controller.js","webpack://vesta/./app/javascript/controllers/api/buyerAlerts.js","webpack://vesta/./app/javascript/controllers/api/partials.js","webpack://vesta/./app/javascript/controllers/api/properties.js","webpack://vesta/./app/javascript/controllers/application/accent_check_controller.js","webpack://vesta/./app/javascript/controllers/application/accordion_controller.js","webpack://vesta/./app/javascript/controllers/application/active_buyers_controller.js","webpack://vesta/./app/javascript/controllers/application/advert_generator_controller.js","webpack://vesta/./app/javascript/controllers/application/adverts_controller.js","webpack://vesta/./app/javascript/controllers/application/article_progression_bar_controller.js","webpack://vesta/./app/javascript/controllers/application/blog_controller.js","webpack://vesta/./app/javascript/controllers/application/booking_controller.js","webpack://vesta/./app/javascript/controllers/application/burger_menu_controller.js","webpack://vesta/./app/javascript/controllers/application/buyer_alert_form_controller.js","webpack://vesta/./app/javascript/controllers/application/buyer_alert_match/module_controller.js","webpack://vesta/./app/javascript/controllers/application/buyer_alert_success_controller.js","webpack://vesta/./app/javascript/controllers/application/buyers_filters_controller.js","webpack://vesta/./app/javascript/controllers/application/cleavejs_controller.js","webpack://vesta/./app/javascript/controllers/application/clipboard_controller.js","webpack://vesta/./app/javascript/controllers/application/crossfade_image_controller.js","webpack://vesta/./app/javascript/controllers/application/custom_menu_controller.js","webpack://vesta/./app/javascript/controllers/application/data_layer_controller.js","webpack://vesta/./app/javascript/controllers/application/dropdown_controller.js","webpack://vesta/./app/javascript/controllers/application/dual_slider_controller.js","webpack://vesta/./app/javascript/controllers/application/dynamic_content_controller.js","webpack://vesta/./app/javascript/controllers/application/dynamic_wording_controller.js","webpack://vesta/./app/javascript/controllers/application/expert_edit_modal_controller.js","webpack://vesta/./app/javascript/controllers/application/fade_animation_controller.js","webpack://vesta/./app/javascript/controllers/application/fame_reason_controller.js","webpack://vesta/./app/javascript/controllers/application/fetch_signatories_controller.js","webpack://vesta/./app/javascript/controllers/application/file_input_controller.js","webpack://vesta/./app/javascript/controllers/application/financing_simulator_controller.js","webpack://vesta/./app/javascript/controllers/application/fixed_btn_controller.js","webpack://vesta/./app/javascript/controllers/application/fixed_cta_controller.js","webpack://vesta/./app/javascript/controllers/application/google_maps_autocomplete_controller.js","webpack://vesta/./app/javascript/controllers/application/google_places_input_controller.js","webpack://vesta/./app/javascript/controllers/application/henriette/functions/mapEvents.js","webpack://vesta/./app/javascript/controllers/application/henriette/functions/partials.js","webpack://vesta/./app/javascript/controllers/application/henriette/functions/pushVirtualPageView.js","webpack://vesta/./app/javascript/controllers/application/henriette/functions/updateLayers.js","webpack://vesta/./app/javascript/controllers/application/henriette/geo_datas_controller.js","webpack://vesta/./app/javascript/controllers/application/henriette/mapbox_options.js","webpack://vesta/./app/javascript/controllers/application/input_field_controller.js","webpack://vesta/./app/javascript/controllers/application/input_password_controller.js","webpack://vesta/./app/javascript/controllers/application/isotope_controller.js","webpack://vesta/./app/javascript/controllers/application/lazy_reviews_controller.js","webpack://vesta/./app/javascript/controllers/application/linked_portals_controller.js","webpack://vesta/./app/javascript/controllers/application/mandate_amendment_controller.js","webpack://vesta/./app/javascript/controllers/application/mandate_price_controller.js","webpack://vesta/./app/javascript/controllers/application/map_zones_controller.js","webpack://vesta/./app/javascript/controllers/application/mapbox_controller.js","webpack://vesta/./app/javascript/controllers/application/marquee_controller.js","webpack://vesta/./app/javascript/controllers/application/mobile_adverts_controller.js","webpack://vesta/./app/javascript/controllers/application/modal_controller.js","webpack://vesta/./app/javascript/controllers/application/navbar_controller.js","webpack://vesta/./app/javascript/controllers/application/notaries_controller.js","webpack://vesta/./app/javascript/controllers/application/number_animation_controller.js","webpack://vesta/./app/javascript/controllers/application/obfuscated_link_span_controller.js","webpack://vesta/./app/javascript/controllers/application/obfuscation_link_controller.js","webpack://vesta/./app/javascript/controllers/application/offer_reasons_controller.js","webpack://vesta/./app/javascript/controllers/application/online_offer_controller.js","webpack://vesta/./app/javascript/controllers/application/pack_max_form_controller.js","webpack://vesta/./app/javascript/controllers/application/pagination_controller.js","webpack://vesta/./app/javascript/controllers/application/password_controller.js","webpack://vesta/./app/javascript/controllers/application/past_visits_controller.js","webpack://vesta/./app/javascript/controllers/application/phone_country_code_input_style_controller.js","webpack://vesta/./app/javascript/controllers/application/preview_image_controller.js","webpack://vesta/./app/javascript/controllers/application/property_kind_controller.js","webpack://vesta/./app/javascript/controllers/application/property_leads_controller.js","webpack://vesta/./app/javascript/controllers/application/redirect_controller.js","webpack://vesta/./app/javascript/controllers/application/reviews_controller.js","webpack://vesta/./app/javascript/controllers/application/sale_diffusion_controller.js","webpack://vesta/./app/javascript/controllers/application/sales_carousel_controller.js","webpack://vesta/./app/javascript/controllers/application/sales_sector/functions/updateLayers.js","webpack://vesta/./app/javascript/controllers/application/sales_sector/module_controller.js","webpack://vesta/./app/javascript/controllers/application/sales_user_fields_controller.js","webpack://vesta/./app/javascript/controllers/application/sales_user_select_controller.js","webpack://vesta/./app/javascript/controllers/application/select2_design_controller.js","webpack://vesta/./app/javascript/controllers/application/select_placeholder_controller.js","webpack://vesta/./app/javascript/controllers/application/slim_select_controller.js","webpack://vesta/./app/javascript/controllers/application/swiper_ad_carousel_controller.js","webpack://vesta/./app/javascript/controllers/application/swiper_available_slots_controller.js","webpack://vesta/./app/javascript/controllers/application/swiper_estimate_steps_controller.js","webpack://vesta/./app/javascript/controllers/application/swiper_last_sale_carousel_photos_controller.js","webpack://vesta/./app/javascript/controllers/application/swiper_premium_reviews_controller.js","webpack://vesta/./app/javascript/controllers/application/swiper_product_highlight_controller.js","webpack://vesta/./app/javascript/controllers/application/swiper_property_card_panel_controller.js","webpack://vesta/./app/javascript/controllers/application/swiper_simple_carousel_controller.js","webpack://vesta/./app/javascript/controllers/application/switch_client_role_controller.js","webpack://vesta/./app/javascript/controllers/application/switch_tarifs_controller.js","webpack://vesta/./app/javascript/controllers/application/tarifs_module_controller.js","webpack://vesta/./app/javascript/controllers/application/team_members_controller.js","webpack://vesta/./app/javascript/controllers/application/timeline_controller.js","webpack://vesta/./app/javascript/controllers/application/toggle_div_controller.js","webpack://vesta/./app/javascript/controllers/application/toggle_fields_controller.js","webpack://vesta/./app/javascript/controllers/application/toggle_hidden_controller.js","webpack://vesta/./app/javascript/controllers/application/tooltip_controller.js","webpack://vesta/./app/javascript/controllers/application/visibility_controller.js","webpack://vesta/./app/javascript/controllers/application/visit_controller.js","webpack://vesta/./app/javascript/controllers/application/visitor_controller.js","webpack://vesta/./app/javascript/controllers/application/visitor_reached_controller.js","webpack://vesta/./app/javascript/controllers/config/mapbox/setLayers.js","webpack://vesta/./app/javascript/controllers/config/mapbox/setMap.js","webpack://vesta/./app/javascript/controllers/config/mapbox/setMarkers.js","webpack://vesta/./app/javascript/controllers/config/mapbox/setPopup.js","webpack://vesta/./app/javascript/controllers/index.js","webpack://vesta/./app/javascript/packs/application.js","webpack://vesta/./app/javascript/packs/main/application/autotyper.min.js","webpack://vesta/./app/javascript/packs/main/application/buyer_alert.js","webpack://vesta/./app/javascript/packs/main/application/cities_search.js","webpack://vesta/./app/javascript/packs/main/application/experts_carousel.js","webpack://vesta/./app/javascript/packs/main/application/handleStopPropagation.js","webpack://vesta/./app/javascript/packs/main/application/init_attachinary.js","webpack://vesta/./app/javascript/packs/main/application/last_sales_carousel.js","webpack://vesta/./app/javascript/packs/main/application/localStorageHandler.js","webpack://vesta/./app/javascript/packs/main/application/select2.js","webpack://vesta/./app/javascript/packs/main/application/select2DropDownPosition.js","webpack://vesta/./app/javascript/packs/main/application/slide_down.js","webpack://vesta/./app/javascript/packs/main/application/slide_up.js","webpack://vesta/./app/javascript/packs/main/application/swiper.js","webpack://vesta/./app/javascript/packs/main/application/typing_effect.js","webpack://vesta/./app/javascript/shared/helpers/agencyFeesHelper.js","webpack://vesta/./app/javascript/shared/utils/priceFormatting.js"],"sourcesContent":["var map = {\n\t\"./flatsy_chats_channel.js\": 12811,\n\t\"./visits_calendar_channel.js\": 85549,\n\t\"channels/flatsy_chats_channel.js\": 12811,\n\t\"channels/visits_calendar_channel.js\": 85549\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 56463;","var map = {\n\t\"./admin/cities_map/mapbox_options.js\": 40618,\n\t\"./admin/cities_map/module_controller.js\": 51996,\n\t\"./admin/communications_controller.js\": 72803,\n\t\"./admin/decrease_price_email_generator_controller.js\": 78993,\n\t\"./admin/duplicate_leads_controller.js\": 39327,\n\t\"./admin/flatsy_controller.js\": 94897,\n\t\"./admin/input_format_controller.js\": 88979,\n\t\"./admin/mapbox_map_controller.js\": 25449,\n\t\"./admin/sales_health_controller.js\": 17182,\n\t\"./admin/sortable_controller.js\": 90338,\n\t\"./admin/spinner_controller.js\": 55929,\n\t\"./admin/statistics_controller.js\": 15259,\n\t\"./admin/tabs_controller.js\": 83020,\n\t\"./admin/timeline_controller.js\": 31214,\n\t\"./admin/users_solicitations_controller.js\": 60720,\n\t\"./admin/visibility_controller.js\": 23955,\n\t\"./api/buyerAlerts.js\": 81779,\n\t\"./api/partials.js\": 81004,\n\t\"./api/properties.js\": 25757,\n\t\"./application/accent_check_controller.js\": 16761,\n\t\"./application/accordion_controller.js\": 52982,\n\t\"./application/active_buyers_controller.js\": 6697,\n\t\"./application/advert_generator_controller.js\": 67018,\n\t\"./application/adverts_controller.js\": 70821,\n\t\"./application/article_progression_bar_controller.js\": 66013,\n\t\"./application/blog_controller.js\": 38131,\n\t\"./application/booking_controller.js\": 1870,\n\t\"./application/burger_menu_controller.js\": 45662,\n\t\"./application/buyer_alert_form_controller.js\": 74561,\n\t\"./application/buyer_alert_match/module_controller.js\": 27690,\n\t\"./application/buyer_alert_success_controller.js\": 32672,\n\t\"./application/buyers_filters_controller.js\": 73204,\n\t\"./application/cleavejs_controller.js\": 18720,\n\t\"./application/clipboard_controller.js\": 39391,\n\t\"./application/crossfade_image_controller.js\": 56788,\n\t\"./application/custom_menu_controller.js\": 27735,\n\t\"./application/data_layer_controller.js\": 18160,\n\t\"./application/dropdown_controller.js\": 24741,\n\t\"./application/dual_slider_controller.js\": 2444,\n\t\"./application/dynamic_content_controller.js\": 54372,\n\t\"./application/dynamic_wording_controller.js\": 4353,\n\t\"./application/expert_edit_modal_controller.js\": 96853,\n\t\"./application/fade_animation_controller.js\": 91006,\n\t\"./application/fame_reason_controller.js\": 89753,\n\t\"./application/fetch_signatories_controller.js\": 62775,\n\t\"./application/file_input_controller.js\": 15502,\n\t\"./application/financing_simulator_controller.js\": 64858,\n\t\"./application/fixed_btn_controller.js\": 84505,\n\t\"./application/fixed_cta_controller.js\": 59262,\n\t\"./application/google_maps_autocomplete_controller.js\": 3347,\n\t\"./application/google_places_input_controller.js\": 44719,\n\t\"./application/henriette/functions/mapEvents.js\": 33047,\n\t\"./application/henriette/functions/partials.js\": 59555,\n\t\"./application/henriette/functions/pushVirtualPageView.js\": 33435,\n\t\"./application/henriette/functions/updateLayers.js\": 85838,\n\t\"./application/henriette/geo_datas_controller.js\": 70514,\n\t\"./application/henriette/mapbox_options.js\": 81215,\n\t\"./application/input_field_controller.js\": 66621,\n\t\"./application/input_password_controller.js\": 1051,\n\t\"./application/isotope_controller.js\": 44510,\n\t\"./application/lazy_reviews_controller.js\": 20516,\n\t\"./application/linked_portals_controller.js\": 82579,\n\t\"./application/mandate_amendment_controller.js\": 13593,\n\t\"./application/mandate_price_controller.js\": 28379,\n\t\"./application/map_zones_controller.js\": 83561,\n\t\"./application/mapbox_controller.js\": 58761,\n\t\"./application/marquee_controller.js\": 18038,\n\t\"./application/mobile_adverts_controller.js\": 54231,\n\t\"./application/modal_controller.js\": 8955,\n\t\"./application/navbar_controller.js\": 80037,\n\t\"./application/notaries_controller.js\": 66879,\n\t\"./application/number_animation_controller.js\": 56950,\n\t\"./application/obfuscated_link_span_controller.js\": 34749,\n\t\"./application/obfuscation_link_controller.js\": 22194,\n\t\"./application/offer_reasons_controller.js\": 60578,\n\t\"./application/online_offer_controller.js\": 43664,\n\t\"./application/pack_max_form_controller.js\": 39246,\n\t\"./application/pagination_controller.js\": 67320,\n\t\"./application/password_controller.js\": 79674,\n\t\"./application/past_visits_controller.js\": 72903,\n\t\"./application/phone_country_code_input_style_controller.js\": 72552,\n\t\"./application/preview_image_controller.js\": 95375,\n\t\"./application/property_kind_controller.js\": 23082,\n\t\"./application/property_leads_controller.js\": 82021,\n\t\"./application/redirect_controller.js\": 12471,\n\t\"./application/reviews_controller.js\": 70793,\n\t\"./application/sale_diffusion_controller.js\": 7845,\n\t\"./application/sales_carousel_controller.js\": 65008,\n\t\"./application/sales_sector/functions/updateLayers.js\": 96156,\n\t\"./application/sales_sector/module_controller.js\": 58959,\n\t\"./application/sales_user_fields_controller.js\": 61176,\n\t\"./application/sales_user_select_controller.js\": 67237,\n\t\"./application/select2_design_controller.js\": 60260,\n\t\"./application/select_placeholder_controller.js\": 23901,\n\t\"./application/slim_select_controller.js\": 8174,\n\t\"./application/swiper_ad_carousel_controller.js\": 46587,\n\t\"./application/swiper_available_slots_controller.js\": 5232,\n\t\"./application/swiper_estimate_steps_controller.js\": 72400,\n\t\"./application/swiper_last_sale_carousel_photos_controller.js\": 24110,\n\t\"./application/swiper_premium_reviews_controller.js\": 12504,\n\t\"./application/swiper_product_highlight_controller.js\": 49047,\n\t\"./application/swiper_property_card_panel_controller.js\": 40384,\n\t\"./application/swiper_simple_carousel_controller.js\": 27779,\n\t\"./application/switch_client_role_controller.js\": 64042,\n\t\"./application/switch_tarifs_controller.js\": 45587,\n\t\"./application/tarifs_module_controller.js\": 74549,\n\t\"./application/team_members_controller.js\": 58724,\n\t\"./application/timeline_controller.js\": 77425,\n\t\"./application/toggle_div_controller.js\": 29920,\n\t\"./application/toggle_fields_controller.js\": 12249,\n\t\"./application/toggle_hidden_controller.js\": 95055,\n\t\"./application/tooltip_controller.js\": 43751,\n\t\"./application/visibility_controller.js\": 14942,\n\t\"./application/visit_controller.js\": 26012,\n\t\"./application/visitor_controller.js\": 672,\n\t\"./application/visitor_reached_controller.js\": 84103,\n\t\"./config/mapbox/setLayers.js\": 4641,\n\t\"./config/mapbox/setMap.js\": 49600,\n\t\"./config/mapbox/setMarkers.js\": 83375,\n\t\"./config/mapbox/setPopup.js\": 10751,\n\t\"./index.js\": 55552,\n\t\"controllers/admin/cities_map/mapbox_options.js\": 40618,\n\t\"controllers/admin/cities_map/module_controller.js\": 51996,\n\t\"controllers/admin/communications_controller.js\": 72803,\n\t\"controllers/admin/decrease_price_email_generator_controller.js\": 78993,\n\t\"controllers/admin/duplicate_leads_controller.js\": 39327,\n\t\"controllers/admin/flatsy_controller.js\": 94897,\n\t\"controllers/admin/input_format_controller.js\": 88979,\n\t\"controllers/admin/mapbox_map_controller.js\": 25449,\n\t\"controllers/admin/sales_health_controller.js\": 17182,\n\t\"controllers/admin/sortable_controller.js\": 90338,\n\t\"controllers/admin/spinner_controller.js\": 55929,\n\t\"controllers/admin/statistics_controller.js\": 15259,\n\t\"controllers/admin/tabs_controller.js\": 83020,\n\t\"controllers/admin/timeline_controller.js\": 31214,\n\t\"controllers/admin/users_solicitations_controller.js\": 60720,\n\t\"controllers/admin/visibility_controller.js\": 23955,\n\t\"controllers/api/buyerAlerts.js\": 81779,\n\t\"controllers/api/partials.js\": 81004,\n\t\"controllers/api/properties.js\": 25757,\n\t\"controllers/application/accent_check_controller.js\": 16761,\n\t\"controllers/application/accordion_controller.js\": 52982,\n\t\"controllers/application/active_buyers_controller.js\": 6697,\n\t\"controllers/application/advert_generator_controller.js\": 67018,\n\t\"controllers/application/adverts_controller.js\": 70821,\n\t\"controllers/application/article_progression_bar_controller.js\": 66013,\n\t\"controllers/application/blog_controller.js\": 38131,\n\t\"controllers/application/booking_controller.js\": 1870,\n\t\"controllers/application/burger_menu_controller.js\": 45662,\n\t\"controllers/application/buyer_alert_form_controller.js\": 74561,\n\t\"controllers/application/buyer_alert_match/module_controller.js\": 27690,\n\t\"controllers/application/buyer_alert_success_controller.js\": 32672,\n\t\"controllers/application/buyers_filters_controller.js\": 73204,\n\t\"controllers/application/cleavejs_controller.js\": 18720,\n\t\"controllers/application/clipboard_controller.js\": 39391,\n\t\"controllers/application/crossfade_image_controller.js\": 56788,\n\t\"controllers/application/custom_menu_controller.js\": 27735,\n\t\"controllers/application/data_layer_controller.js\": 18160,\n\t\"controllers/application/dropdown_controller.js\": 24741,\n\t\"controllers/application/dual_slider_controller.js\": 2444,\n\t\"controllers/application/dynamic_content_controller.js\": 54372,\n\t\"controllers/application/dynamic_wording_controller.js\": 4353,\n\t\"controllers/application/expert_edit_modal_controller.js\": 96853,\n\t\"controllers/application/fade_animation_controller.js\": 91006,\n\t\"controllers/application/fame_reason_controller.js\": 89753,\n\t\"controllers/application/fetch_signatories_controller.js\": 62775,\n\t\"controllers/application/file_input_controller.js\": 15502,\n\t\"controllers/application/financing_simulator_controller.js\": 64858,\n\t\"controllers/application/fixed_btn_controller.js\": 84505,\n\t\"controllers/application/fixed_cta_controller.js\": 59262,\n\t\"controllers/application/google_maps_autocomplete_controller.js\": 3347,\n\t\"controllers/application/google_places_input_controller.js\": 44719,\n\t\"controllers/application/henriette/functions/mapEvents.js\": 33047,\n\t\"controllers/application/henriette/functions/partials.js\": 59555,\n\t\"controllers/application/henriette/functions/pushVirtualPageView.js\": 33435,\n\t\"controllers/application/henriette/functions/updateLayers.js\": 85838,\n\t\"controllers/application/henriette/geo_datas_controller.js\": 70514,\n\t\"controllers/application/henriette/mapbox_options.js\": 81215,\n\t\"controllers/application/input_field_controller.js\": 66621,\n\t\"controllers/application/input_password_controller.js\": 1051,\n\t\"controllers/application/isotope_controller.js\": 44510,\n\t\"controllers/application/lazy_reviews_controller.js\": 20516,\n\t\"controllers/application/linked_portals_controller.js\": 82579,\n\t\"controllers/application/mandate_amendment_controller.js\": 13593,\n\t\"controllers/application/mandate_price_controller.js\": 28379,\n\t\"controllers/application/map_zones_controller.js\": 83561,\n\t\"controllers/application/mapbox_controller.js\": 58761,\n\t\"controllers/application/marquee_controller.js\": 18038,\n\t\"controllers/application/mobile_adverts_controller.js\": 54231,\n\t\"controllers/application/modal_controller.js\": 8955,\n\t\"controllers/application/navbar_controller.js\": 80037,\n\t\"controllers/application/notaries_controller.js\": 66879,\n\t\"controllers/application/number_animation_controller.js\": 56950,\n\t\"controllers/application/obfuscated_link_span_controller.js\": 34749,\n\t\"controllers/application/obfuscation_link_controller.js\": 22194,\n\t\"controllers/application/offer_reasons_controller.js\": 60578,\n\t\"controllers/application/online_offer_controller.js\": 43664,\n\t\"controllers/application/pack_max_form_controller.js\": 39246,\n\t\"controllers/application/pagination_controller.js\": 67320,\n\t\"controllers/application/password_controller.js\": 79674,\n\t\"controllers/application/past_visits_controller.js\": 72903,\n\t\"controllers/application/phone_country_code_input_style_controller.js\": 72552,\n\t\"controllers/application/preview_image_controller.js\": 95375,\n\t\"controllers/application/property_kind_controller.js\": 23082,\n\t\"controllers/application/property_leads_controller.js\": 82021,\n\t\"controllers/application/redirect_controller.js\": 12471,\n\t\"controllers/application/reviews_controller.js\": 70793,\n\t\"controllers/application/sale_diffusion_controller.js\": 7845,\n\t\"controllers/application/sales_carousel_controller.js\": 65008,\n\t\"controllers/application/sales_sector/functions/updateLayers.js\": 96156,\n\t\"controllers/application/sales_sector/module_controller.js\": 58959,\n\t\"controllers/application/sales_user_fields_controller.js\": 61176,\n\t\"controllers/application/sales_user_select_controller.js\": 67237,\n\t\"controllers/application/select2_design_controller.js\": 60260,\n\t\"controllers/application/select_placeholder_controller.js\": 23901,\n\t\"controllers/application/slim_select_controller.js\": 8174,\n\t\"controllers/application/swiper_ad_carousel_controller.js\": 46587,\n\t\"controllers/application/swiper_available_slots_controller.js\": 5232,\n\t\"controllers/application/swiper_estimate_steps_controller.js\": 72400,\n\t\"controllers/application/swiper_last_sale_carousel_photos_controller.js\": 24110,\n\t\"controllers/application/swiper_premium_reviews_controller.js\": 12504,\n\t\"controllers/application/swiper_product_highlight_controller.js\": 49047,\n\t\"controllers/application/swiper_property_card_panel_controller.js\": 40384,\n\t\"controllers/application/swiper_simple_carousel_controller.js\": 27779,\n\t\"controllers/application/switch_client_role_controller.js\": 64042,\n\t\"controllers/application/switch_tarifs_controller.js\": 45587,\n\t\"controllers/application/tarifs_module_controller.js\": 74549,\n\t\"controllers/application/team_members_controller.js\": 58724,\n\t\"controllers/application/timeline_controller.js\": 77425,\n\t\"controllers/application/toggle_div_controller.js\": 29920,\n\t\"controllers/application/toggle_fields_controller.js\": 12249,\n\t\"controllers/application/toggle_hidden_controller.js\": 95055,\n\t\"controllers/application/tooltip_controller.js\": 43751,\n\t\"controllers/application/visibility_controller.js\": 14942,\n\t\"controllers/application/visit_controller.js\": 26012,\n\t\"controllers/application/visitor_controller.js\": 672,\n\t\"controllers/application/visitor_reached_controller.js\": 84103,\n\t\"controllers/config/mapbox/setLayers.js\": 4641,\n\t\"controllers/config/mapbox/setMap.js\": 49600,\n\t\"controllers/config/mapbox/setMarkers.js\": 83375,\n\t\"controllers/config/mapbox/setPopup.js\": 10751,\n\t\"controllers/index.js\": 55552\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 13857;","// Action Cable provides the framework to deal with WebSockets in Rails.\n// You can generate new channels where WebSocket features live using the `bin/rails generate channel` command.\n\nimport { createConsumer } from \"@rails/actioncable/src\"\n\nexport default createConsumer()\n","import consumer from \"./consumer\"\nconst flatsyChatContainer = document.querySelector('#vesta-flatsy-chat');\n\nif(flatsyChatContainer) {\n consumer.subscriptions.create({\n channel: 'FlatsyChatsChannel',\n sale_id: flatsyChatContainer.dataset.saleid\n }, {\n received(data) {\n // Called when there's incoming data on the websocket for this channel\n const trigger = document.getElementById('flatsy-chat-channel-trigger');\n const chatBox = document.querySelector('#vesta-flatsy-chat');\n if (!trigger) return null;\n\n if (trigger.dataset.controller == 'admin/sales/flatsy' && trigger.dataset.action == 'show' ) {\n const message = `\n
\n
${data.created_at}
\n
${data.message}
\n ${data.not_sent ? \"
Non envoyé. Vérifier que le bien existe sur Flatsy
\" : ''}\n
\n `\n chatBox.insertAdjacentHTML('beforeend', message);\n chatBox.scrollTop = chatBox.scrollHeight;\n }\n }\n });\n}\n","// Load all the channels within this directory and all subdirectories.\n// Channel files must be named *_channel.js.\n\nconst channels = require.context('.', true, /_channel\\.js$/)\nchannels.keys().forEach(channels)\n","import consumer from \"./consumer\";\n\nconst visitContainer = document.querySelector('.visit-container');\nif (visitContainer) {\n consumer.subscriptions.create({\n channel: 'VisitsCalendarChannel',\n property_id: visitContainer.dataset.propertyid\n },\n {\n received(data) {\n // Called when there's incoming data on the websocket for this channel\n const trigger = document.getElementById('visit-calendar-channel-trigger')\n if (!trigger) return null;\n\n if (trigger.dataset.controller == 'admin/properties/visits' && trigger.dataset.action == 'index' ) {\n alertMessage(`${data.message}`, `${data.type}`)\n }\n }\n });\n}\n","const FILL_LAYER_ID = 'zone-region'\nconst LINE_LAYER_ID = 'zone-region-outline'\nconst SOURCE_ID = 'zone-region'\n\nconst filterZone = (zoneType) => {\n return ['all', ['match', ['get', 'hosman_class'], ['', `${zoneType.charAt(0).toUpperCase()}${zoneType.slice(1)}`], true, false]]\n}\n\n\nconst LAYER_COLOR = [\n 'match',\n ['get', 'zone_category_id'],\n ['1'],\n 'hsl(235, 100%, 37%)',\n ['2'],\n 'hsl(0, 100%, 37%)',\n ['3'],\n 'hsl(115, 100%, 34%)',\n ['4'],\n 'hsl(56, 100%, 42%)',\n ['5'],\n 'hsl(29, 100%, 57%)',\n '#000000'\n]\n\nconst FILL_LAYER_OPACITY = [\n 'match',\n ['get', 'zone_category_id'],\n ['1', '2', '3', '4', '5', '0'],\n 0.2,\n 0\n]\n\nconst FILL_LAYER_PAINT = {\n 'fill-color': LAYER_COLOR,\n 'fill-opacity': FILL_LAYER_OPACITY\n}\n\nconst LINE_LAYER_PAINT = {\n 'line-color': LAYER_COLOR,\n 'line-width': 1\n}\n\nexport { FILL_LAYER_ID, LINE_LAYER_ID, SOURCE_ID, filterZone, FILL_LAYER_PAINT, LINE_LAYER_PAINT }\n","import { Controller } from '@hotwired/stimulus';\nimport SET_MAP from '../../config/mapbox/setMap';\nimport SET_LAYERS from '../../config/mapbox/setLayers';\nimport { FILL_LAYER_ID, LINE_LAYER_ID, SOURCE_ID, filterZone, FILL_LAYER_PAINT, LINE_LAYER_PAINT } from './mapbox_options'\n\nexport default class extends Controller {\n static targets = ['geocoder', 'inZoneAlert', 'zoneResult', 'cityCard']\n\n static values = {\n publicKey: String,\n style: String,\n regionLat: String,\n regionLng: String,\n zoom: Number,\n tilesetId: String\n }\n\n connect() {\n this.handleMapSettings()\n this.handleLayers()\n this.handleGeocoder()\n this.handleMapEvent()\n }\n\n handleMapSettings() {\n this.adminZoneMap = SET_MAP.initMap(this.publicKeyValue, [this.regionLngValue, this.regionLatValue], 9, this.styleValue, 'admin-map-cities')\n this.geocoder = SET_MAP.initGeocoder()\n this.adminZoneMap.addControl(this.geocoder);\n }\n\n handleLayers() {\n this.adminZoneMap.on('load', () => {\n SET_MAP.initSource(this.adminZoneMap, FILL_LAYER_ID, this.tilesetIdValue)\n\n SET_LAYERS.withOptions({\n map: this.adminZoneMap,\n layerId: FILL_LAYER_ID,\n type: 'fill',\n sourceId: SOURCE_ID,\n filter: filterZone('quarter'),\n paint: FILL_LAYER_PAINT\n })\n\n SET_LAYERS.withOptions({\n map: this.adminZoneMap,\n layerId: LINE_LAYER_ID,\n type: 'line',\n sourceId: SOURCE_ID,\n filter: filterZone('city'),\n paint: LINE_LAYER_PAINT\n })\n })\n }\n\n handleGeocoder() {\n // On geocoder result check addresse's zone and display it to user\n this.geocoder.on('result', (e) => {\n // Map has to be recentered to fix the reference point for queryRenderedFeatures() method\n this.adminZoneMap.flyTo({ center: [this.regionLngValue, this.regionLatValue] });\n\n this.zoneResultTarget.textContent = \"\";\n const geocoder_point = this.adminZoneMap.project([e.result.center[0], e.result.center[1]]);\n const query = this.adminZoneMap.queryRenderedFeatures(geocoder_point, { layers: ['zone-region'] });\n this.adminZoneMap.flyTo({ center: e.result.center });\n // Display result to user\n this.inZoneAlertTarget.classList.remove('vesta-bg-red-20');\n this.inZoneAlertTarget.classList.remove('vesta-bg-green-20');\n\n if (query[0]) {\n // Insert layer result to cities search field\n this.geocoderTarget.value = query[0].properties.insee_code\n this.filterCities();\n this.inZoneAlertTarget.classList.add('vesta-bg-green-20');\n this.zoneResultTarget.textContent = `Ce bien se trouve dans la zone de catégorie ${query[0].properties.zone_category_id}`;\n } else {\n this.inZoneAlertTarget.classList.add('vesta-bg-red-20');\n this.zoneResultTarget.textContent = \"Ce bien est hors zone\"\n }\n });\n }\n\n handleMapEvent() {\n // City search functions\n if (this.hasGeocoderTarget) {\n // Filter list on map click\n this.adminZoneMap.on('click', 'zone-region', (e) => {\n if (e.features.length > 0) {\n this.geocoderTarget.value = e.features[0].properties.insee_code\n this.filterCities();\n }\n });\n\n // Filter list on input change\n this.geocoderTarget.onkeyup = () => this.filterCities();\n }\n }\n\n filterCities = () => {\n // City filtering function\n const filter = this.geocoderTarget.value.toLowerCase();\n\n this.cityCardTargets.forEach(cityCard => {\n const name = cityCard.dataset.name;\n const inseeCode = cityCard.dataset.inseeCode;\n\n if ((name.toLowerCase().indexOf(filter) > -1) || (inseeCode.indexOf(filter) > -1)) {\n cityCard.style.display = \"\";\n } else cityCard.style.display = \"none\";\n });\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = ['content']\n\n toggle = () => {\n this.contentTargets.forEach(content => {\n content.classList.toggle('vesta-display-none');\n });\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = ['price', 'email', 'copyBtn', 'generateBtn', 'loadingLayer', 'emailDiv'];\n static values = { url: String, uniqueHash: String };\n\n generate() {\n this.loadingLayerTarget.classList.remove('hidden')\n this.generateBtnTarget.disabled = true\n this.handleGa4Event()\n this.populateEmail()\n }\n\n populateEmail = () => {\n fetch(this.urlValue, {\n method: 'POST',\n headers: {\n 'X-CSRF-Token': document.getElementsByName('csrf-token')[0].getAttribute('content'),\n 'X-Requested-With': 'XMLHttpRequest',\n 'Content-Type': 'application/json',\n 'Accept': 'application/json'\n },\n body: JSON.stringify({sale: {price: this.priceTarget.value}}),\n credentials: 'same-origin',\n }).then((response) => {\n if (response.status == 200) {\n response.json().then(data => {\n this.loadingLayerTarget.classList.add('hidden')\n this.emailTarget.innerHTML = `${data.content.replace(/\\n/g, '
').replace(/\\*\\*(.*?)\\*\\*/g, \"$1\")}`\n this.emailDivTarget.classList.remove('vesta-display-none')\n this.copyBtnTarget.classList.remove('hidden')\n })\n } else {\n response.json().then(data => {\n if (document.getElementsByClassName('iziToast-capsule').length < 1) alertMessage(data['error'], 'error');\n this.generateBtnTarget.disabled = false\n this.loadingLayerTarget.classList.add('hidden')\n });\n }\n }\n )\n }\n\n enableGenerateBtn() {\n if (this.priceTarget.value.length > 0) {\n this.generateBtnTarget.disabled = false \n } else {\n this.generateBtnTarget.disabled = true\n }\n }\n\n copy () {\n try {\n const fontStyle = \"font-family: Poppins, Verdana, sans-serif; font-size: 14px\"\n const emailContent = this.emailTarget.innerHTML.replace(/(.*?)<\\/span>/g, '$1');\n const styledHtmlText = `${emailContent}`\n \n const blob = new Blob([styledHtmlText], { type: 'text/html' });\n const data = [new ClipboardItem({ 'text/html': blob })];\n \n let success = navigator.clipboard.write(data);\n let message = success ? 'Vous avez copié le texte ✅' : \"Le texte n'a pas été copié ❌\";\n if (document.getElementsByClassName('iziToast-capsule').length < 1) alertMessage(message, 'success')\n } catch (error) {\n if (document.getElementsByClassName('iziToast-capsule').length < 1) alertMessage(error.message, 'error')\n }\n }\n \n handleGa4Event = () => {\n window.dataLayer = window.dataLayer || []\n window.dataLayer.push({\n 'event': 'priceDecreaseEmailGenerated',\n 'unique_hash': this.uniqueHashValue\n })\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = ['modal']\n\n connect() {\n const urlParams = new URLSearchParams(window.location.search);\n const duplicateLead = urlParams.get('duplicate_lead_slug');\n\n if (duplicateLead !== null) $('#duplicate-leads-warning').modal('show');\n }\n\n hideModal() {\n $('#duplicate-leads-warning').modal('hide')\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = ['submitButton', 'keyInput']\n\n connect() {\n this.enable()\n }\n\n enableSubmit() {\n this.enable()\n }\n\n enable() {\n if (this.keyInputTarget.value) {\n this.submitButtonTarget.disabled = false\n } else {\n this.submitButtonTarget.disabled = true\n }\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n parametized(event) {\n event.target.value = event.target.value\n .replace(/[^a-zA-Z0-9 \\-]/g, \"\")\n .replace(/\\s+/g, \"-\")\n }\n}\n","import { Controller } from '@hotwired/stimulus';\nimport SET_MAP from '../config/mapbox/setMap';\nimport SET_MARKERS from '../config/mapbox/setMarkers';\n\nexport default class extends Controller {\n static values = {\n publicKey: String,\n style: String,\n propertyLat: String,\n propertyLng: String,\n zoom: Number,\n }\n\n connect() {\n this.initMap();\n\n SET_MARKERS.main(this.mapboxMap, [this.propertyLngValue, this.propertyLatValue])\n\n if (window.matchMedia(\"(max-width: 430px)\").matches) this.handleMapWithSmallScreen()\n\n this.mapboxMap.addControl(new mapboxgl.NavigationControl());\n\n $('a[data-toggle=\"tab\"]').on('shown.bs.tab', e => this.mapboxMap.resize())\n\n const ficheCsCta = document.querySelector('a[data-target-title=\"fiche_cs\"]')\n if (ficheCsCta) ficheCsCta.addEventListener('click', () => this.mapboxMap.resize())\n }\n\n initMap = () => {\n const center = [this.propertyLngValue, this.propertyLatValue]\n this.mapboxMap = SET_MAP.initMap(this.publicKeyValue,\n center,\n this.zoomValue,\n this.styleValue,\n 'mapbox-map');\n }\n\n handleMapWithSmallScreen = () => {\n this.mapboxMap.scrollZoom.disable();\n this.mapboxMap.dragPan.disable();\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = ['pap', 'agency', 'sellState', 'sellProbability', 'comment', 'submitButton', 'tooltip']\n\n connect() {\n if (this.hasPapTarget) this.changeColor(this.papTarget)\n if (this.hasAgencyTarget) this.changeColor(this.agencyTarget)\n if (this.hasSellStateTarget) this.changeColor(this.sellStateTarget)\n if (this.hasSellProbabilityTarget) this.changeColor(this.sellProbabilityTarget)\n if (this.hasCommentTatget) this.checkFiftyChars(this.commentTarget)\n }\n\n select(event) {\n this.changeColor(event.target)\n }\n\n input(event) {\n this.checkFiftyChars(event.target)\n }\n\n changeColor(target) {\n let colors = JSON.parse(target.dataset.color);\n let color = colors.find(pair => pair[0] === target.value);\n\n target.className = '';\n target.classList.add('competition-input');\n if (color === undefined) return;\n\n target.classList.add('vesta-' + color[1] + '-100');\n }\n\n\n checkFiftyChars(target) {\n if (target.value.trim().length < 20) {\n this.submitButtonTarget.disabled = true\n this.tooltipTarget.dataset.originalTitle = this.tooltipTarget.dataset.warning\n } else {\n this.submitButtonTarget.disabled = false\n this.tooltipTarget.dataset.originalTitle = ''\n }\n }\n}\n","import { Controller } from '@hotwired/stimulus'\nimport Sortable from 'sortablejs';\nexport default class extends Controller {\n static values = { group: String }\n\n connect() {\n Sortable.create(this.element, {\n onEnd: this.onEnd.bind(this),\n group: this.groupValue,\n })\n }\n\n onEnd(event) {\n const sortableUpdateUrl = event.item.dataset.sortableUpdateUrl\n fetch(sortableUpdateUrl, {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json',\n 'X-CSRF-Token': document.querySelector('meta[name=\"csrf-token\"]').content\n },\n body: JSON.stringify({ row_order_position: event.newIndex })\n })\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = ['loadingLayerSizedAbsolute']\n\n spinIt = (event) => {\n if (event.target.classList.contains('trigger-flatsy-state-spinner')) {\n this.loadingLayerSizedAbsoluteTarget.style.display = ''\n }\n }\n}\n","import { Controller } from '@hotwired/stimulus';\nimport priceFormatting from '../../shared/utils/priceFormatting'\nexport default class extends Controller {\n static targets = [\n 'averageSellingPrice',\n 'estimationVisits',\n 'currentlyAwaitingOfferSales',\n 'acceptedOffers',\n 'sellRate',\n 'sellTime',\n 'averageDeltaBetweenOaAndMandatePrice'\n ]\n\n static values = {\n inseeCode: String\n }\n\n connect() {\n this.fetch_stats()\n }\n\n fetch_stats() {\n const url = `/admin/statistics?insee_code=${this.inseeCodeValue}`\n fetch(url).then(r => r.json().then((stats) => {\n this.displayStatistics(stats)\n }))\n }\n\n displayStatistics(stats) {\n const averageSellingPriceMeter = this.average_selling_price_per_meter(stats)\n this.averageSellingPriceTarget.innerText = isNaN(Number(averageSellingPriceMeter)) ? 'N/A' : `${priceFormatting(averageSellingPriceMeter)}/m²`\n this.currentlyAwaitingOfferSalesTarget.innerText = this.currently_awaiting_offer_sales(stats)\n this.acceptedOffersTarget.innerText = this.accepted_offers(stats)\n this.sellTimeTarget.innerText = Number.isNaN(this.sell_time(stats)) ? 'N/A' : `${this.sell_time(stats)}j`\n }\n\n average_selling_price_per_meter(stats) {\n try {\n const all_prices = stats.reduce((accumulator, currentValue) => {\n return accumulator + ((currentValue.average_selling_price_per_meter*currentValue.accepted_offers) || 0);\n }, 0);\n return Math.round(all_prices / this.accepted_offers(stats))\n } catch (error) {\n console.error(error)\n }\n }\n\n currently_awaiting_offer_sales(stats) {\n return stats.reduce((prev, curr) => {\n return prev + curr.currently_awaiting_offer_sales;\n }, 0)\n }\n\n accepted_offers(stats) {\n return stats.reduce((prev, curr) => {\n return prev + curr.accepted_offers;\n }, 0)\n }\n\n sell_time(stats) {\n const all_sell_times = stats.reduce((prev, curr) => {\n return prev + ((curr.sell_time*curr.accepted_offers) || 0);\n }, 0)\n return Math.round(all_sell_times / this.accepted_offers(stats))\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = ['tabTitle']\n\n triggerTab = (e) => {\n const activeBtnTab = document.querySelector('.vesta-button-tab--active')\n activeBtnTab.classList.remove('vesta-button-tab--active')\n activeBtnTab.classList.add('vesta-button-tab')\n e.currentTarget.classList.add('vesta-button-tab--active')\n e.currentTarget.classList.remove('vesta-button-tab')\n\n const tabContentTarget = document.getElementById(e.currentTarget.dataset.targetTitle)\n if(tabContentTarget.classList.contains('vesta-tab-active')) return\n\n const activeTab = document.querySelector('.vesta-tab-active')\n activeTab.classList.remove('vesta-tab-active')\n tabContentTarget.classList.add('vesta-tab-active')\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = ['scrollContainer']\n\n connect = () => {\n this.scrollMax = this.scrollContainerTarget.clientWidth;\n this.scrollAmount = 0;\n this.scrollMin = 0;\n this.scrollStep = 500;\n // Auto scroll to the timeline end\n this.scrollContainerTarget.scrollLeft = this.scrollContainerTarget.scrollWidth\n }\n\n scroll = (e) => {\n this.scrollAmount = e.target.scrollLeft;\n }\n}\n","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n process(event) {\n let success = navigator.clipboard.writeText(event.target.dataset.buyerphone);\n let message = 'Numéro de téléphone copié ✅';\n let msg_kind = 'success';\n\n if (success) {\n this.solicitate(event.target.dataset.buyerid);\n } else {\n let message = 'Erreur lors de la copie du numéro de téléphone ❌';\n let msg_kind = 'error';\n }\n\n if (document.getElementsByClassName('iziToast-capsule').length < 1) alertMessage(message, msg_kind);\n }\n\n solicitate = async (buyerId) => {\n const response = await fetch('/admin/users_solicitations', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-CSRF-Token': document.querySelector('meta[name=\"csrf-token\"]').content\n },\n body: JSON.stringify({ users_solicitation: { user_id: buyerId } })\n })\n\n if (response.status == 200) {\n const data = await response.json();\n document.getElementById(`solicited_by_${buyerId}`).innerHTML = data.success_text;\n } else {\n if (document.getElementsByClassName('iziToast-capsule').length < 1) alertMessage(response.message, 'error');\n }\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = ['elementToToggle'];\n\n toggle = () => {\n this.elementToToggleTarget.classList.toggle('vesta-display-none');\n }\n}\n","async function buyerAlertsMatch(saleUniqueHash, price) {\n const response = await fetch(`/api/v1/sales/${saleUniqueHash}/buyer_alerts?price=${price}`, {\n credentials: 'same-origin',\n headers: { 'Content-Type': 'application/json', Accept: 'application/json' }\n });\n\n return await response.json()\n}\n\nexport { buyerAlertsMatch };\n","async function fetchContent(url, body) {\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n Accept: 'text/html',\n 'Content-Type': 'application/json'\n },\n body\n });\n\n return await response.text();\n}\n\nexport { fetchContent };\n","async function fetchProperties(hosmanId) {\n const params = {\n q: { sale_state_eq_any: ['awaiting_offer', 'sold'],\n sale_quarter_id_eq: hosmanId,\n parking_or_garage_eq: false }\n };\n\n const response = await fetch(`/api/v1/properties/coordinates?${querifyObject(params)}`, {\n credentials: 'same-origin',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json'\n }\n });\n const data = await response.json();\n return data;\n}\n\nasync function fetchProperty(propertyId) {\n const response = await fetch(`/api/v1/properties/${propertyId}`, {\n credentials: 'same-origin',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json'\n }\n });\n\n const data = await response.json();\n return data;\n}\n\nexport { fetchProperties, fetchProperty };\n\nfunction querifyObject(object, parent = null) {\n return Object.keys(object)\n .map((key) => {\n const value = object[key];\n const full_key = fullKey(key, parent);\n\n if (Array.isArray(value)) return value.map((v) => toQuery(full_key + '[]', v)).join('&');\n else if (typeof value === 'object') return querifyObject(value, full_key);\n else return toQuery(full_key, value);\n })\n .join('&');\n}\n\nfunction toQuery(key, value) {\n return encodeURIComponent(key) + '=' + encodeURIComponent(value);\n}\n\nfunction fullKey(key, parent) {\n if (parent) return parent + '[' + key + ']';\n else return key;\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = ['submit', 'emailInput', 'warning']\n\n connect() {\n $(this.emailInputTarget).select2({\n placeholder: 'jean@dupont.com, marie@dupont.fr, ...',\n tags: true,\n tokenSeparators: [',', ' '],\n }).on('change', () => {\n this.checkAccents();\n });\n }\n\n checkAccents() {\n const emails = $(this.emailInputTarget).val() || [];\n const hasAccents = emails.some(email => !/^[\\x00-\\x7F]*$/.test(email));\n if (hasAccents) {\n this.warningTarget.classList.remove('vesta-display-none');\n this.submitTarget.disabled = true;\n } else {\n this.warningTarget.classList.add('vesta-display-none');\n this.submitTarget.disabled = false;\n }\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = [ 'accordion' ]\n\n connect = () => {\n const defaultActiveDropdowns = document.querySelectorAll('.dropdown-container.active');\n\n if (defaultActiveDropdowns) {\n [...defaultActiveDropdowns].forEach((activeDropdown) => {\n const icon = activeDropdown.querySelector('.fa-chevron-right');\n if (icon) {\n icon.className = icon.className.replace('right', 'up');\n const panel = activeDropdown.nextElementSibling;\n panel.style.maxHeight = panel.scrollHeight + 'px';\n }\n });\n }\n }\n\n toggle = (e) => {\n const activeAccordion = document.querySelector('.dropdown-container.active');\n const panel = e.currentTarget.nextElementSibling;\n e.currentTarget.classList.toggle('active');\n const icon = document.querySelector('.fa-chevron-up');\n if (icon) icon.className = icon.className.replace('up', 'right');\n // To handle toggle if the current active accordion is the one clicked again (close the accordion in this case)\n if (activeAccordion && activeAccordion !== e.currentTarget) {\n activeAccordion.classList.remove('active');\n activeAccordion.nextElementSibling.style.maxHeight = null;\n }\n if (panel.style.maxHeight) {\n panel.style.maxHeight = null;\n } else {\n const icon = e.currentTarget.querySelector('.fa-chevron-right');\n if (icon) icon.className = icon.className.replace('right', 'up');\n panel.style.maxHeight = panel.scrollHeight + 'px';\n }\n }\n\n toggleAccordion = (e) => {\n const panel = e.currentTarget.nextElementSibling;\n e.currentTarget.classList.toggle('active');\n const icon = e.currentTarget.querySelector('.fa-chevron-up');\n if (icon) icon.className = icon.className.replace('up', 'right');\n if (panel.style.maxHeight) {\n panel.style.maxHeight = null;\n } else {\n const icon = e.currentTarget.querySelector('.fa-chevron-right');\n if (icon) icon.className = icon.className.replace('right', 'up');\n panel.style.maxHeight = panel.scrollHeight + 'px';\n }\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = [\n 'value',\n 'result',\n 'active',\n ]\n\n static values = {\n sale: Number,\n total: Number,\n }\n\n connect = () => {\n this.updateCount()\n }\n\n updateCount = () => {\n const value = this.valueTarget.value || this.valueTarget.innerHTML\n\n if (!value) {\n this.resultTarget.innerHTML = '-'\n return\n }\n\n fetch(\n `/admin/ventes/${this.saleValue}/active_buyers/count?value=${value}`,\n { credentials: 'same-origin' }\n ).then((response) => {\n response.json().then((result) => {\n this.resultTarget.innerHTML = result.count || '-'\n if (this.hasActiveTarget && result.active !== undefined) {\n this.activeTarget.innerHTML = result.active\n }\n });\n });\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = ['loadingLayer', 'generateButton', 'advertContent', 'advertTitle']\n\n static values = {\n url: String\n }\n\n generateAdvert = () => {\n this.loadingLayerTarget.classList.remove('hidden')\n this.generateButtonTarget.disabled = true\n this.populateAdvert()\n }\n\n populateAdvert = () => {\n fetch(this.urlValue, {\n method: 'POST',\n headers: {\n 'X-CSRF-Token': document.getElementsByName('csrf-token')[0].getAttribute('content'),\n 'X-Requested-With': 'XMLHttpRequest',\n 'Content-Type': 'application/json',\n 'Accept': 'application/json'\n },\n credentials: 'same-origin'\n }).then((response) => {\n if (response.status == 200) {\n response.json().then(data => {\n this.advertTitleTarget.value = data.title;\n this.advertContentTarget.value = data.content;\n this.loadingLayerTarget.classList.add('hidden')\n })\n } else {\n response.json().then(data => {\n if (document.getElementsByClassName('iziToast-capsule').length < 1) alertMessage(data['error'], 'error');\n this.generateButtonTarget.disabled = false\n this.loadingLayerTarget.classList.add('hidden')\n });\n }\n }\n )\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static values = {\n uniqueHash: String\n }\n\n connect() {\n if(this.hasUniqueHashValue) {\n this.pushDataLayer('view_advert_page')\n }\n }\n\n viewLocation() {\n this.pushDataLayer('view_location')\n }\n\n viewVirtualVisit() {\n this.pushDataLayer('view_virtual_visit')\n }\n\n viewPlan() {\n this.pushDataLayer('view_plan')\n }\n\n viewStreetView() {\n this.pushDataLayer('view_street_view')\n }\n\n pushDataLayer(event) {\n // new GA4 tracking plan\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push({\n 'event': event,\n 'unique_hash': this.uniqueHashValue\n })\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = [ 'progressionBar' ]\n\n update = () => {\n const winScroll = document.body.scrollTop || document.documentElement.scrollTop;\n const height = document.documentElement.scrollHeight - document.documentElement.clientHeight;\n const scrolled = (winScroll / height) * 100;\n this.progressionBarTarget.style.width = scrolled + \"%\";\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = [ 'inlineCta', 'articleBody' ]\n\n connect() {\n let ctaLinks = [...this.inlineCtaTargets].map((ctaSpan) => ctaSpan.closest('a'));\n\n let articlesLinks = this.articleBodyTarget.getElementsByTagName('a');\n\n [...articlesLinks].map((link) => {\n link.setAttribute('target', '_blank');\n // add style to non CTA links beacuse Trix removes it\n if (![...ctaLinks].includes(link)) {\n if (link.text.includes('→')) {\n link.classList.add('vesta-green-link');\n } else if (!link.classList.contains('vesta-button--primary')) {\n link.classList.add('vesta-blue-link');\n } \n link.classList.add('vesta-text-deco-none');\n }\n });\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = [\n 'btnSlot',\n 'nextLink',\n 'nextLinkMobile',\n 'nextBtn',\n 'nextBtnMobile',\n 'selectedDateSlot',\n 'mobileSlides',\n 'deskSlides',\n 'chevronNextWeek',\n 'chevronPrevWeek',\n 'contactForm',\n 'confirmationPage',\n 'bottomContainer',\n 'moreSlotsCta',\n 'stickyContainer',\n 'form',\n 'email',\n 'password',\n 'modalIdentifier',\n 'passwordConfirmationContainer',\n 'forgotPasswordLink',\n 'passwordLabel',\n 'passwordLengthLabelContainer',\n 'closeModalRedirection',\n 'subtitle',\n 'loader',\n 'content',\n 'submit'\n ];\n\n static values = {\n uniqueHash: String,\n slotsCount: Number,\n visit: Object,\n user: Object,\n currentUser: Boolean,\n currentUserIsHosmanian: Boolean\n }\n\n connect() {\n this.handleGa4Tracking();\n }\n\n initialize() {\n if (this.hasNextLinkTarget) {\n this.originalNextUrl = atob(this.nextLinkTarget.dataset.encode);\n }\n this.btnSlotTargets.forEach((btn) => {\n btn.setAttribute('data-action', 'click->application--booking#handleBtnSlot');\n });\n }\n // pass slot to next url in btn\n handleBtnSlot = (e) => {\n const btn = e.currentTarget;\n // deactivate all slots\n [...this.btnSlotTargets].forEach((btn) => {\n btn.classList.remove('active');\n });\n // activate chosen slot\n btn.classList.add('active');\n // check if admin url or not to handle first url param with & or ? (because using wizard in admin and not public)\n const adminUrl = this.originalNextUrl.includes('admin')\n // add chosen slot datetime to next page url\n this.nextLinkTarget.href = `${this.originalNextUrl}${adminUrl ? '&' : '?'}slot=${encodeURIComponent(btn.dataset.slot)}&slot_type=${btn.dataset.type}&source=${this.nextLinkTarget.dataset.source}&shared_by_user=${this.nextLinkTarget.dataset.sharedByUser}&lead_id=${this.nextLinkTarget.dataset.lead}`;\n // enable or display button to next page (according to device)\n if (this.hasStickyContainerTarget) {\n this.stickyContainerTarget.classList.remove('vesta-display-none');\n setTimeout(() => {\n this.stickyContainerTarget.classList.remove('vesta-opacity-0');\n this.stickyContainerTarget.classList.add('vesta-opacity-1');\n }, 100);\n } else {\n this.nextLinkTarget.classList.remove('vesta-button-disabled');\n }\n\n this.selectedDateSlotTargets.forEach((dateSlot) => (dateSlot.innerText = this.localDateTime(Date.parse(btn.dataset.slot))));\n\n // Update day slots style if time slots selected in other day column\n let activeDaySlot = document.querySelector('.vesta-booking-day-slot.active');\n // return if in admin view\n if (!activeDaySlot) return;\n // Day slot value from time slot\n const daySlotValue = e.currentTarget.dataset.day;\n\n if (activeDaySlot.dataset.current_date === daySlotValue) return;\n\n activeDaySlot.classList.remove('active');\n const daySlot = document.querySelector(`[data-current_date=\"${daySlotValue}\"].vesta-booking-day-slot`);\n daySlot.classList.add('active');\n };\n\n showMoreSlots = () => {\n const hiddenSlots = document.querySelectorAll('.vesta-booking-time-container.vesta-display-none');\n hiddenSlots.forEach((slot) => {\n slot.classList.remove('vesta-display-none');\n setTimeout(() => {\n slot.classList.add('vesta-opacity-1');\n }, 100);\n });\n\n if (this.hasBottomContainerTarget) {\n this.bottomContainerTarget.classList.add('vesta-sticky-container');\n this.bottomContainerTarget.classList.remove('vesta-position-relative');\n }\n\n if (this.hasMoreSlotsCtaTarget) {\n this.moreSlotsCtaTarget.classList.add('vesta-display-none');\n }\n }\n\n localDateTime(timeInt) {\n let event = new Date(timeInt);\n let options = {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric'\n };\n\n let strResult = event.toLocaleDateString('fr-FR', options);\n\n return strResult.charAt(0).toUpperCase() + strResult.slice(1);\n }\n\n manageSlots = (e) => {\n [...this.mobileSlidesTargets].forEach((slide) => {\n slide.classList.add('hidden');\n [...document.querySelectorAll('li')].forEach((li_element) => {\n if (li_element.dataset.current_date == e.currentTarget.dataset.date) {\n [...li_element.getElementsByClassName('hidden')].forEach((hidden_el) => {\n hidden_el.classList.remove('hidden');\n });\n }\n });\n });\n };\n\n managePrevWeek = () => {\n this.deskSlidesTargets.slice(0, 7).forEach((day) => {\n day.classList.remove('hidden-desk');\n });\n this.deskSlidesTargets.slice(7).forEach((day) => {\n day.classList.add('hidden-desk');\n });\n this.chevronPrevWeekTarget.classList.add('hidden');\n this.chevronNextWeekTarget.classList.remove('hidden');\n };\n\n manageNextWeek = () => {\n this.deskSlidesTargets.slice(0, 7).forEach((day) => {\n day.classList.add('hidden-desk');\n });\n this.deskSlidesTargets.slice(7).forEach((day) => {\n day.classList.remove('hidden-desk');\n });\n this.chevronPrevWeekTarget.classList.remove('hidden');\n this.chevronNextWeekTarget.classList.add('hidden');\n };\n\n submitVisit(event) {\n event.preventDefault();\n this.modalController = this.application.getControllerForElementAndIdentifier(this.modalIdentifierTarget, 'application--modal');\n if (this.modalController) this.modalController.show();\n const formData = new FormData(this.formTarget);\n this.createVisit(formData);\n }\n\n createVisit = async (formData) => {\n try {\n const response = await fetch(this.formTarget.action, {\n method: this.formTarget.method,\n headers: {\n 'X-CSRF-Token': document.getElementsByName('csrf-token')[0].getAttribute('content'),\n 'Content-Type': 'application/json',\n 'Accept': 'application/json'\n },\n credentials: 'same-origin',\n body: JSON.stringify(this.formatVisitCreationParams(formData))\n });\n\n const data = await response.json();\n\n if (data.error) {\n this.handleError(data.error);\n return;\n }\n\n if (this.currentUserIsHosmanianValue) this.redirectForHosmanians();\n else if (this.currentUserValue) this.redirectToDashboard();\n else if (this.modalIdentifierTarget && !this.currentUserValue) this.updateModalWithFormData(data);\n } catch (error) {\n this.handleError(error);\n }\n }\n\n handleError = (error) => {\n if (this.modalController) this.modalController.hide();\n if (document.getElementsByClassName('iziToast-capsule').length < 1) alertMessage(error, 'error');\n this.submitTarget.disabled = false;\n }\n\n updateModalWithFormData(data) {\n if (this.hasLoaderTarget && this.hasContentTarget) {\n this.loaderTarget.classList.add('vesta-fade-out');\n // Wait for fade out to complete before hiding loader and showing content\n setTimeout(() => {\n this.loaderTarget.classList.add('vesta-display-none');\n this.loaderTarget.classList.remove('vesta-flex');\n this.loaderTarget.classList.remove('vesta-fade-out');\n\n // Display content but keep it invisible\n this.contentTarget.classList.remove('vesta-display-none');\n this.contentTarget.style.opacity = '0';\n this.closeModalRedirectionTarget.classList.remove('vesta-display-none');\n\n // and add fade in to show content\n setTimeout(() => {\n this.contentTarget.classList.add('vesta-fade-in');\n this.contentTarget.style.opacity = '';\n }, 50);\n }, 300);\n\n if (this.hasEmailTarget && data.user.email) this.emailTarget.value = data.user.email;\n if (this.hasPasswordConfirmationContainerTarget && !data.user.last_sign_in_at) this.passwordConfirmationContainerTarget.classList.remove('vesta-display-none');\n if (this.hasForgotPasswordLinkTarget && data.user.last_sign_in_at) this.forgotPasswordLinkTarget.classList.remove('vesta-display-none');\n if (this.hasPasswordLabelTarget && data.user.last_sign_in_at) this.passwordLabelTarget.innerText = 'Mot de passe';\n if (this.hasPasswordLengthLabelContainerTarget && data.user.last_sign_in_at) this.passwordLengthLabelContainerTarget.classList.add('vesta-display-none');\n if (this.hasCloseModalRedirectionTarget) this.closeModalRedirectionTarget.href = data.success_redirection_url || '';\n if (this.hasSubtitleTarget && data.user.last_sign_in_at) this.subtitleTarget.innerText = `${data.user.civility == 'mr' ? 'Monsieur' : 'Madame'} ${data.user.last_name}, on se connaît déjà ! Connectez-vous à votre espace Hosman pour suivre votre projet d'achat.`;\n }\n }\n\n submitSession(event) {\n event.preventDefault();\n const email = this.emailTarget.value;\n const password = this.passwordTarget.value;\n this.createSession(email, password);\n }\n\n createSession = async (email, password) => {\n try {\n const response = await fetch(`${window.location.origin}/api/v1/sessions`, {\n method: 'POST',\n headers: {\n 'X-CSRF-Token': document.getElementsByName('csrf-token')[0].getAttribute('content'),\n 'Content-Type': 'application/json'\n },\n credentials: 'same-origin',\n body: JSON.stringify({ user: { email, password } })\n });\n\n const data = await response.json();\n\n if (data.sign_in) this.redirectToDashboard();\n else {\n this.passwordTarget.value = '';\n this.handleError(data.error);\n }\n } catch (error) {\n this.handleError(error);\n }\n }\n\n formatVisitCreationParams = (formData) => {\n const object = Object.fromEntries(formData.entries());\n\n return {\n user: {\n civility: object['user[civility]'],\n first_name: object['user[first_name]'],\n last_name: object['user[last_name]'],\n email: object['user[email]'],\n phone_number: object['user[phone_number]'],\n phone_country_code: object['user[phone_country_code]'],\n situation: object['user[situation]'],\n project_state: object['user[project_state]'],\n visits_attributes: {\n '0': {\n start_time: object['user[visits_attributes][0][start_time]'],\n slot_type: object['user[visits_attributes][0][slot_type]'],\n fame_reason: object['user[visits_attributes][0][fame_reason]'],\n source: object['user[visits_attributes][0][source]'],\n alert_opt_in: object['user[visits_attributes][0][alert_opt_in]'] === 'on',\n shared_by_user: object['user[visits_attributes][0][shared_by_user]'],\n }\n }\n }\n }\n }\n\n redirectToDashboard = () => {\n const protocol = window.location.protocol;\n window.location.href = `${protocol}//app.${window.location.host.replace('www.', '')}/ea`;\n }\n\n redirectForHosmanians = () => {\n alertMessage('La visite à bien été prise', 'success')\n setTimeout(() => {\n window.location.href = `${window.location.origin}/admin/customer-services/buyers`;\n }, 2000);\n }\n\n ga4Event = () => {\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push({\n 'event': 'click_guest_visit',\n })\n }\n\n handleGa4Tracking = () => {\n if(this.slotsCountValue) {\n // new GA4 tracking plan\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push({\n 'event': 'view_visit_slots',\n 'slotsCount': this.slotsCountValue,\n 'unique_hash': this.uniqueHashValue\n })\n }\n\n if (this.hasContactFormTarget) {\n // new GA4 tracking plan\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push({\n 'event': 'view_visit_contact',\n 'unique_hash': this.uniqueHashValue\n })\n }\n\n if (this.hasConfirmationPageTarget) {\n // new GA4 tracking plan\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push({\n 'event': 'book_visit',\n 'visit_date': this.visitValue.start_time,\n 'slot_type': this.visitValue.slot_type,\n 'user_id': this.visitValue.user_id,\n 'user_email': this.userValue.email,\n 'user_phone': this.userValue.phone_number,\n 'user_first_name': this.userValue.first_name,\n 'user_last_name': this.userValue.last_name,\n 'unique_hash': this.uniqueHashValue\n })\n }\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = ['burgerMenu', 'navbarContainer'];\n\n toggle = () => {\n const elementHiddenForNav = document.querySelectorAll('.vesta-hide-for-nav');\n if (elementHiddenForNav.length > 0) {\n elementHiddenForNav.forEach(el => {\n el.classList.remove('vesta-display-none');\n el.classList.remove('vesta-hide-for-nav');\n })\n } else {\n const fixedCTA = document.querySelector('.vesta-fixed-cta')\n if (fixedCTA) fixedCTA.remove()\n // Get next element after navbar that should be the main page's container scoped with id\n const nextEl = this.navbarContainerTarget.nextElementSibling;\n const footer = document.querySelector('#myFooter');\n if (nextEl.hasAttribute('id')) {\n nextEl.classList.add('vesta-display-none');\n nextEl.classList.add('vesta-hide-for-nav');\n }\n if (footer) {\n footer.classList.add('vesta-display-none');\n footer.classList.add('vesta-hide-for-nav');\n }\n }\n $('html, body').animate({ scrollTop: 0 }, 500);\n\n this.burgerMenuTarget.classList.toggle('vesta-mobile-menu-container--active');\n };\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = [\n 'banners',\n 'text',\n 'errorBanner',\n 'userInfoForm',\n 'criteriasForm',\n 'userInfoIllu',\n 'criteriasIllu',\n 'loadingLayerSizedAbsolute',\n 'formContainer'\n ]\n\n\n connect() {\n // new GA4 tracking plan\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push({\n 'event': 'view_buyer_alert_step_1'\n })\n\n //Disable render in the first part ot the form after render with an error.\n if (!window.location.pathname.includes('new')) {\n this.showStep2();\n }\n }\n\n handleToggle = () => {\n $('html, body').animate({ scrollTop: 0 }, 500);\n\n this.userInfoFormTarget.classList.toggle('vesta-invisible');\n this.userInfoIlluTarget.classList.toggle('vesta-invisible');\n\n this.criteriasFormTarget.classList.toggle('vesta-invisible');\n this.criteriasIlluTarget.classList.toggle('vesta-invisible');\n }\n\n showStep1() {\n // new GA4 tracking plan\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push({\n 'event': 'view_buyer_alert_step_1'\n })\n\n this.handleToggle();\n this.bannersTarget.classList.add('vesta-display-none');\n }\n\n spin = () => {\n this.loadingLayerSizedAbsoluteTarget.style.display = '';\n }\n\n showStep2() {\n // new GA4 tracking plan\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push({\n 'event': 'view_buyer_alert_step_2',\n })\n\n this.handleToggle();\n }\n\n showErrors() {\n if (this.errorBannerTarget.classList.contains('vesta-visible')) {\n this.errorBannerTarget.classList.remove('vesta-visible');\n this.errorBannerTarget.classList.add('vesta-invisible');\n }\n }\n\n fetchSimilarSales = async () => {\n let form = this.formContainerTarget;\n const formData = new FormData(form);\n\n // form data retun array of string with value ['0'] at first. And then when user select kind\n // the array will have another value '1' and will be the second child in the array.\n let apartment = formData.getAll('user[buyer_alerts_attributes][0][apartment]')[1] || '0';\n let house = formData.getAll('user[buyer_alerts_attributes][0][house]')[1] || '0';\n let minBudget = formData.get('user[buyer_alerts_attributes][0][min_budget]');\n let maxBudget = formData.get('user[buyer_alerts_attributes][0][max_budget]');\n let minArea = formData.get('user[buyer_alerts_attributes][0][min_area]');\n let floor = formData.get('user[buyer_alerts_attributes][0][floor]');\n let minFloorForElevator = formData.get('user[buyer_alerts_attributes][0][min_floor_for_elevator]');\n let renovation = formData.get('user[buyer_alerts_attributes][0][renovation]');\n let outDoorSpace = formData.get('user[buyer_alerts_attributes][0][outdoor_space]');\n let minRoomNumber = formData.get('user[buyer_alerts_attributes][0][min_room_number]');\n let minBedroomNumber = formData.get('user[buyer_alerts_attributes][0][min_bedroom_number]');\n // First element of the array is always empty string.\n let zonesUnfiltered = formData.getAll('user[buyer_alerts_attributes][0][zone][]');\n let zonesFiltered = zonesUnfiltered.filter((zone) => {\n return zone != '';\n });\n\n let buyerAlertField = [\n { 'name': 'Budget Maximum', 'value': maxBudget },\n { 'name': 'Étage du bien', 'value': floor },\n { 'name': 'Surface minimum', 'value': minArea },\n { 'name': 'Ascenseur', 'value': minFloorForElevator },\n { 'name': 'Nombre de pièce(s) minimum', 'value': minRoomNumber },\n { 'name': 'Nombre de chambre(s) minimum', 'value': minBedroomNumber },\n { 'name': 'Où recherchez vous ?', 'value': zonesFiltered },\n ]\n\n let infoMessage = '';\n let counterErrors = 0;\n for (let entry of buyerAlertField) {\n if (entry.value === null || entry.value === '') {\n infoMessage += entry.name + ', ';\n counterErrors+= counterErrors + 1;\n }\n\n if (entry.name === 'Où recherchez vous ?' && entry.value.length === 0) {\n infoMessage += entry.name + ', ';\n counterErrors += counterErrors + 1;\n }\n }\n\n if (apartment === '0' && house === '0') {\n if (infoMessage === '') {\n infoMessage = 'Merci de choisir maison et/ou appartement';\n } else {\n infoMessage = infoMessage + 'Choix maison et/ou appartement';\n }\n counterErrors += counterErrors + 1;\n }\n\n if (infoMessage !== '') {\n $('html, body').animate({ scrollTop: 0 }, 500);\n this.errorBannerTarget.classList.remove('vesta-invisible');\n this.errorBannerTarget.classList.add('vesta-visible');\n this.errorBannerTarget.textContent = '';\n let textVariable = '';\n let uselessCaracter = infoMessage.lastIndexOf(',');\n if (uselessCaracter && uselessCaracter >= 0) infoMessage = infoMessage.slice(0, uselessCaracter);\n if (counterErrors > 1) {\n textVariable = 'Les champs suivants sont obligatoires';\n }\n else {\n textVariable = 'Le champ suivant est obligatoire';\n }\n this.errorBannerTarget.insertAdjacentHTML('beforeend', `

${textVariable} : ${infoMessage}

`);\n } else {\n const params = {\n zone: zonesFiltered,\n min_budget: minBudget,\n max_budget: maxBudget,\n min_area: minArea,\n outdoor_space: outDoorSpace,\n floor: floor,\n min_floor_for_elevator: minFloorForElevator,\n apartment: apartment,\n house: house,\n min_room_number: minRoomNumber,\n min_bedroom_number: minBedroomNumber,\n renovation: renovation\n };\n\n this.showErrors();\n\n const url = '/api/v1/buyer_alerts/properties';\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'X-CSRF-Token': document.getElementsByName('csrf-token')[0].getAttribute('content'),\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({ buyer_alert_params: params }),\n credentials: 'same-origin'\n });\n\n this.showStep2();\n\n const exitBtn = document.querySelector('.buyer-alert-exit')\n exitBtn.classList.add('step-2')\n\n const data = await response.json();\n let text = '';\n this.bannersTarget.classList.remove('vesta-display-none');\n if (this.hasTextTarget) this.textTarget.remove();\n if (data.total > 0) {\n text = `Avec ces critères, vous recevrez en moyenne ${ data.total } bien${ data.total > 1 ? 's' : '' } par semaine`;\n }\n else {\n text = 'Vous recevrez les annonces directement dans votre boîte mail';\n }\n this.bannersTarget.innerHTML = '';\n this.bannersTarget.insertAdjacentHTML('beforeend',\n `\n
\n check\n\n
${text}\n bell\n
\n
\n\n
\n

\n Encore quelques informations pour finaliser votre alerte achat !\n smiling eyes\n

\n
\n `\n );\n }\n }\n}\n","import { Controller } from '@hotwired/stimulus';\nimport { buyerAlertsMatch } from '../../api/buyerAlerts';\n\nexport default class extends Controller {\n static targets = ['container', 'leadsEllipsesContainer', 'leadsCount', 'modal', 'modall', 'cardsContainer', 'leadsCountMinusDisplayed']\n\n static values = {\n saleUniqueHash: String,\n salePrice: String,\n zoneCategoryId: String,\n regionNamePretty: String,\n activeZone: Boolean\n }\n\n connect = async () => {\n const { buyer_alerts, count } = await buyerAlertsMatch(this.saleUniqueHashValue, this.salePriceValue)\n this.checkConditionDisplay(count)\n if(!this.requestedConditionDisplay) return\n\n const response = await fetch('https://randomuser.me/api/?inc=picture&results=4')\n const users = await response.json()\n this.containerTarget.classList.remove('vesta-display-none')\n\n await buyer_alerts.forEach((buyer_alert, index) => {\n this.leadsEllipsesContainerTarget.insertAdjacentHTML('beforeEnd', this.profilePictureHTML(users.results[index].picture.thumbnail))\n\n let buyerAlertMatchCard = `\n
\n
\n
${buyer_alert.user_first_name} ${buyer_alert.user_last_name_initial}.
\n
\n\n
\n
Budget
\n\n
${this.numberToCurrency(buyer_alert.min_budget)} - ${this.numberToCurrency(buyer_alert.max_budget)}
\n\n
À la recherche de
\n\n
\n ${buyer_alert.apartment ? \"
Appartement
\" : ''}\n ${buyer_alert.house ? \"
Maison
\" : ''}\n
\n\n
Surface
\n\n
> à ${(Math.floor(buyer_alert.min_area))}m2 / ${buyer_alert.min_room_number == 0 || buyer_alert.min_room_number == 1 ? `Studio et +` : `${buyer_alert.min_room_number} pièces et +`}
\n
\n
\n `\n\n this.cardsContainerTarget.insertAdjacentHTML('beforeEnd', buyerAlertMatchCard)\n });\n this.leadsEllipsesContainerTarget.insertAdjacentHTML('beforeEnd', this.ellipseHTML(`+${count - 4}`))\n this.leadsCountTargets.forEach(leadCount => leadCount.innerHTML = count)\n this.leadsCountMinusDisplayedTarget.innerHTML = count - 4\n }\n\n checkConditionDisplay = (count) => {\n const ParisZone1AboveThreeHundred = count > 300 && this.zoneCategoryIdValue == 1 && this.regionNamePrettyValue == 'Région Parisienne'\n const ParisOtherZonesAboveTwoHundred = count > 200 && this.zoneCategoryIdValue != 1 && this.regionNamePrettyValue == 'Région Parisienne'\n const RegionAboveOneHundred = (count > 100 && this.regionNamePrettyValue != 'Région Parisienne')\n this.requestedConditionDisplay = this.activeZoneValue === true && ( ParisZone1AboveThreeHundred || ParisOtherZonesAboveTwoHundred || RegionAboveOneHundred)\n }\n\n ellipseHTML = (value) => {\n return `\n
\n ${value}\n
\n `\n }\n\n profilePictureHTML = (value) => {\n return `\n profile-picture\n `\n }\n\n numberToCurrency = (number) => {\n return number.toLocaleString('fr-FR', { style: 'currency', currency: 'EUR', minimumFractionDigits: 0, maximumFractionDigits: 0 });\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static values = {\n buyerAlert: Object,\n zones: Array,\n user: Object\n }\n\n connect() {\n const buyer_alert = this.buyerAlertValue\n const zones = this.zonesValue\n const user = this.userValue\n\n const property_kind = []\n if(buyer_alert.apartment) { property_kind.push('apartment') }\n if(buyer_alert.house) { property_kind.push('house') }\n\n // new GA4 tracking plan\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push({\n 'event': 'complete_buyer_alert',\n 'property_kind': property_kind,\n 'search_zones': zones.map(zone => zone.replace(/_/g, ' ')),\n 'min_budget': buyer_alert.min_budget,\n 'max_budget': buyer_alert.max_budget,\n 'min_area': buyer_alert.min_area,\n 'min_bedroom': buyer_alert.min_bedroom_number,\n 'min_room': buyer_alert.min_room_number,\n 'floor': buyer_alert.floor,\n 'lift': buyer_alert.min_floor_for_elevator,\n 'potential_work': buyer_alert.renovation,\n 'outdoor_area': buyer_alert.outdoor_space,\n 'purchase_type': buyer_alert.purchase_type,\n 'situation': user.situation,\n 'project_state': user.project_state,\n 'user_id': user.id,\n 'user_email': user.email,\n 'user_phone': user.phone_number,\n 'user_first_name': user.first_name,\n 'user_last_name': user.last_names\n })\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = ['filters', 'arrow']\n\n toggleFiltersDisplay() {\n this.filtersTarget.classList.toggle('vesta-display-none')\n this.arrowTarget.classList.toggle('fa-angle-down')\n this.arrowTarget.classList.toggle('fa-angle-up')\n }\n}\n","import Cleave from 'cleave.js';\nimport 'cleave.js/dist/addons/cleave-phone.i18n.js';\nimport { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = ['cleaveMoneyInput'];\n\n connect() {\n // format input when DOM is loaded\n for (let field of this.cleaveMoneyInputTargets) {\n this.initFormatMoneyInput(field);\n }\n }\n\n formatMoneyInput = (dataActionEvent) => {\n this.initFormatMoneyInput(dataActionEvent.target);\n };\n\n initFormatMoneyInput = (field) => {\n new Cleave(field, {\n numeral: true,\n numeralThousandsGroupStyle: 'thousand',\n delimiter: ' ',\n numeralDecimalScale: 0,\n onValueChanged: (inputEvent) => {\n if (field) {\n field.nextElementSibling.value = inputEvent.target.rawValue;\n }\n }\n });\n };\n\n formatDateInput = (e) => {\n new Cleave(e.target, {\n date: true,\n delimiter: '/',\n datePattern: ['d', 'm', 'Y']\n });\n };\n\n formatPhoneNumberInput = (e) => {\n new Cleave(e.target, {\n numeral: true,\n phone: true,\n phoneRegionCode: document.querySelector('.vesta-cleave-phone-code select').value || 'FR',\n delimiter: ' '\n });\n };\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static values = {\n link: String\n }\n\n copyText(e) {\n e.preventDefault();\n this.text = e.currentTarget.dataset.value;\n this.alertUser();\n }\n\n copyInput(e) {\n e.preventDefault();\n this.text = e.currentTarget.querySelector('input').value;\n this.alertUser();\n }\n\n copy() {\n this.text = this.linkValue;\n this.alertUser();\n }\n\n alertUser() {\n try {\n let success = navigator.clipboard.writeText(this.text);\n let message = success ? 'Vous avez copié le texte ✅' : \"Le texte n'a pas été copié ❌\";\n if (document.getElementsByClassName('iziToast-capsule').length < 1) alertMessage(message, 'success')\n } catch (error) {\n if (document.getElementsByClassName('iziToast-capsule').length < 1) alertMessage(error.message, 'error')\n }\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = ['image']\n\n connect() {\n // Set height of parent element to height of images element\n const childElement = this.imageTargets[0]\n const childHeight = childElement.offsetHeight;\n const parentElement = document.querySelector('.vesta-header-container')\n parentElement.style.height = childHeight + 'px';\n\n this.crossFadeImages = this.imageTargets\n this.randomize(this.crossFadeImages.length);\n const activeImage = this.setImageOnLoad(this.randomNumber);\n this.setNextImage(activeImage);\n }\n\n randomize = (arrayLength) => {\n this.randomNumber = Math.floor(arrayLength * Math.random());\n }\n\n setImageOnLoad = (path) => {\n this.crossFadeImages[path].classList.add(\n 'crossfade-image--active'\n );\n const active = document.querySelector('.crossfade-image--active');\n return active;\n }\n\n setNextImage = (activeImage) => {\n setTimeout(() => {\n activeImage.classList.remove('crossfade-image--active');\n\n if (activeImage.nextElementSibling !== null) this.nextImage = activeImage.nextElementSibling;\n else this.nextImage = document.querySelector('.crossfade-image');\n\n this.nextImage.classList.add('crossfade-image--active');\n setTimeout(() => {\n this.setNextImage(this.nextImage);\n }, 2000);\n }, 5000);\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = [ 'hosmanOverlayMenu' ]\n\n toggle = (e) => {\n this.hosmanOverlayMenuTarget.classList.toggle('active');\n e.currentTarget.classList.toggle('active');\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = [ 'layerDiv' ];\n\n push = () => {\n const eventName = this.layerDivTarget.dataset.eventName;\n\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push({\n 'event': eventName\n })\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = ['content'];\n\n show = () => {\n const target = this.contentTargets[0];\n if (target.classList.contains('active')) {\n target.classList.remove('active');\n }\n else {\n target.classList.add('active');\n }\n }\n}\n","import { Controller } from '@hotwired/stimulus';\nimport noUiSlider from 'nouislider';\n\nexport default class extends Controller {\n static targets = [\n 'budgetSlider',\n 'budgetLow',\n 'budgetHigh',\n 'budgetLowValue',\n 'budgetHighValue',\n 'surfaceSlider',\n 'surfaceLow',\n 'surfaceHigh',\n 'surfaceLowValue',\n 'surfaceHighValue'\n ];\n\n static values = {\n budgetLow: Number,\n budgetHigh: Number,\n surfaceLow: Number,\n surfaceHigh: Number\n }\n\n connect() {\n this.createSliders();\n }\n\n createSliders = () => {\n setTimeout(() => {\n const btnSlider = document.querySelector('.noUi-handle-lower');\n btnSlider && btnSlider.setAttribute('aria-label', 'button slider');\n }, 100);\n\n if(this.hasBudgetSliderTarget) {\n noUiSlider.create(this.budgetSliderTarget, {\n start: [(this.budgetLowValue || 0), (this.budgetHighValue || 3000000)],\n step: 10_000,\n connect: true,\n range: {\n min: 0,\n max: 3_000_000,\n },\n });\n\n this.budgetSliderTarget.noUiSlider.on('update', (values, _) => {\n this.budgetLowTarget.value = Math.floor(values[0]).toString()\n this.budgetLowValueTarget.innerHTML = numberWithSpaces(Math.floor(values[0]).toString())\n this.budgetHighTarget.value = Math.floor(values[1]).toString()\n this.budgetHighValueTarget.innerHTML = numberWithSpaces(Math.floor(values[1]).toString())\n })\n };\n \n if(this.hasSurfaceSliderTarget) {\n noUiSlider.create(this.surfaceSliderTarget, {\n start: [(this.surfaceLowValue || 0), (this.surfaceHighValue || 300)],\n step: 1,\n connect: true,\n range: {\n min: 0,\n max: 300,\n },\n });\n\n this.surfaceSliderTarget.noUiSlider.on('update', (values, _) => {\n this.surfaceLowTarget.value = Math.floor(values[0])\n this.surfaceLowValueTarget.innerHTML = Math.floor(values[0])\n this.surfaceHighTarget.value = Math.floor(values[1])\n this.surfaceHighValueTarget.innerHTML = Math.floor(values[1])\n });\n }\n };\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = ['dynamicContent']\n\n connect() {\n this.currentIndex = 0\n this.startRotation()\n }\n\n disconnect() {\n if (this.interval) clearInterval(this.interval)\n }\n\n startRotation() {\n this.interval = setInterval(() => {\n this.rotate()\n }, 4000)\n }\n\n rotate() {\n this.dynamicContentTargets[this.currentIndex].classList.remove('visible')\n this.currentIndex = (this.currentIndex + 1) % this.dynamicContentTargets.length\n this.dynamicContentTargets[this.currentIndex].classList.add('visible')\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static values = {\n words: {\n type: Array,\n default: ['Efficace.', 'Humaine.', 'Digitalisée.']\n }\n }\n\n connect() {\n this.currentIndex = 0\n this.element.style.transition = 'opacity 0.5s ease-in-out'\n this.startRotation()\n }\n\n disconnect() {\n if (this.interval) clearInterval(this.interval)\n }\n\n startRotation() {\n this.interval = setInterval(() => {\n this.rotate()\n }, 4000)\n }\n\n rotate() {\n this.element.style.opacity = 0\n\n setTimeout(() => {\n this.currentIndex = (this.currentIndex + 1) % this.wordsValue.length\n this.element.textContent = this.wordsValue[this.currentIndex]\n this.element.style.opacity = 1\n }, 500)\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = [ 'replacementExpertFields', 'endReplacement' ]\n\n displayReplacementExpertFields(e) {\n const replacementExpertFields = this.replacementExpertFieldsTarget;\n const endReplacement = this.endReplacementTarget;\n\n if (e.target.checked == true) {\n replacementExpertFields.classList.remove('hidden');\n } else {\n // remove selected replacement expert\n document.getElementById('sale_replacement_expert_id').selectedIndex = null;\n // fetch all inputs composing the date\n const dateFields = endReplacement.querySelectorAll('select');\n // remove data from day, month and year\n dateFields.forEach(function(dateField) {\n dateField.selectedIndex = null;\n });\n // hide the fields\n replacementExpertFields.classList.add('hidden');\n }\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = ['element'];\n static values = { translateY: String };\n\n connect() {\n const observer = new IntersectionObserver(entries => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n this.fadeIn(entry.target);\n } else {\n this.fadeOut(entry.target);\n }\n });\n }, { threshold: 0.2 });\n\n this.elementTargets.forEach(element => {\n observer.observe(element);\n element.style.opacity = '0';\n if (this.hasTranslateYValue) element.style.transform = `translateY(${this.translateYValue})`;\n });\n }\n\n fadeIn(element) {\n element.style.transition = 'all 0.5s ease-in-out';\n element.style.opacity = '1';\n element.style.transform = 'translateY(0px)';\n }\n\n fadeOut(element) {\n element.style.opacity = '0';\n element.style.transform = 'translateY(20px)';\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = [ 'selectFameReason', 'saleUniqueH', 'userEmail', 'email', 'userId', 'btsOrigin' ]\n\n\n connect() {\n this.openForms()\n\n this.selectFameReasonTarget.onchange = () => {\n this.closeForms()\n this.openForms()\n }\n }\n\n openForms() {\n const value = this.selectFameReasonTarget.selectedOptions[0].dataset.slug\n switch(value) {\n case 'sponsor_client':\n case 'reco_client':\n this.saleUniqueHTarget.classList.remove('vesta-display-none');\n this.userEmailTarget.classList.remove('vesta-display-none');\n return\n case 'sponsor_no_client':\n this.emailTarget.classList.remove('vesta-display-none');\n return\n case 'perso_prospect':\n this.userIdTarget.classList.remove('vesta-display-none');\n return\n case 'buyer_to_seller':\n this.btsOriginTarget.classList.remove('vesta-display-none');\n return\n }\n }\n\n closeForms() {\n ['saleUniqueHTarget', 'userEmailTarget', 'userIdTarget', 'emailTarget', 'btsOriginTarget'].forEach((form) => {\n this[form].classList.add('vesta-display-none');\n [...this[form].getElementsByTagName('input')].forEach(input => input.value = null);\n [...this[form].getElementsByTagName('select')].forEach(input => input.value = '' )\n })\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = [ 'infoSpan' ]\n\n connect() {\n const headers = {\n 'X-CSRF-Token': document.getElementsByName('csrf-token')[0].getAttribute('content'),\n 'X-Requested-With': 'XMLHttpRequest',\n 'Accept': 'text/html'\n }\n\n try {\n fetch(\n this.infoSpanTarget.dataset.action, {\n method: 'GET',\n headers: headers,\n credentials: 'same-origin'\n }\n ).then((response) => {\n response.text().then((content) => {\n document.getElementById('mandate-signatories').innerHTML = content;\n });\n });\n } catch (error) {\n alertMessage(error, 'error');\n }\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = [ 'submit' ];\n\n validation = (e) => {\n this.submitTarget.disabled = !(e.target.files.length > 0);\n }\n}\n","import { Controller } from '@hotwired/stimulus';\nimport priceFormatting from '../../shared/utils/priceFormatting'\nexport default class extends Controller {\n static targets = ['monthlyPayments', 'apport', 'loanDuration', 'apportSlider', 'loanDurationSlider', 'interestRate']\n static values = {\n price: Number,\n interestRatesTen: Number,\n interestRatesFifteen: Number,\n interestRatesTwenty: Number,\n interestRatesTwentyFive: Number\n }\n\n interestRates = {\n 10: this.interestRatesTenValue,\n 15: this.interestRatesFifteenValue,\n 20: this.interestRatesTwentyValue,\n 25: this.interestRatesTwentyFiveValue\n }\n\n connect() {\n this.loanDurationTarget.innerText = 20\n this.loanDurationSliderTarget.value = 20\n\n this.interestRateTarget.innerText = this.interestRates[20]\n\n const apportValue = 0.1 * (1.075 * this.priceValue)\n this.apportTarget.innerText = priceFormatting(apportValue)\n this.apportSliderTarget.value = apportValue\n\n this.monthlyPaymentsTarget.innerText = priceFormatting(this.computeMonthlyPayments())\n }\n\n changeLoanDuration(e) {\n this.loanDurationTarget.innerText = e.currentTarget.value\n this.interestRateTarget.innerText = this.interestRates[e.currentTarget.value]\n this.monthlyPaymentsTarget.innerText = priceFormatting(this.computeMonthlyPayments())\n }\n\n changeApport(e) {\n this.apportTarget.innerText = priceFormatting(e.currentTarget.value)\n this.monthlyPaymentsTarget.innerText = priceFormatting(this.computeMonthlyPayments())\n }\n\n computeMonthlyPayments() {\n const loanDurationInMonths = this.loanDurationSliderTarget.value * 12;\n const monthlyInterestRate = (this.interestRates[this.loanDurationSliderTarget.value]/ 100) / 12;\n const borrowedCapital = this.priceValue + 0.075 * this.priceValue - this.apportSliderTarget.value\n const monthlyPayments = (borrowedCapital * monthlyInterestRate) / (1 - Math.pow(1 + monthlyInterestRate, - loanDurationInMonths))\n\n return monthlyPayments < 0 ? 0 : monthlyPayments;\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = ['btn'];\n static values = { buyerLink: String, sellerLink: String }\n\n connect() {\n const targetElement = document.querySelector('#header-intersection');\n const observerOptions = {\n root: null,\n rootMargin: '0px',\n threshold: 0\n };\n\n const observer = new IntersectionObserver(this.intersectionObserverCallback, observerOptions);\n if(targetElement) observer.observe(targetElement);\n }\n\n intersectionObserverCallback = (entries) => {\n this.fixedCTA = document.querySelector('.vesta-fixed-cta')\n const target = entries[0];\n const burgerMenu = document.querySelector('.vesta-mobile-menu-container--active')\n\n if (!target.isIntersecting && this.fixedCTA == null && burgerMenu == null) {\n this.handleIntersection()\n } else {\n this.handleRevertIntersection()\n }\n };\n\n handleIntersection = () => {\n const buyerPageFocus = document.querySelector('.vesta-buyer-page-focus') !== null\n const ctaWording = buyerPageFocus ? 'Découvrir nos biens à vendre' : 'Estimer mon bien'\n const ctaElement = `\n \n ${ctaWording}\n \n \n `\n this.btnTarget.insertAdjacentHTML('afterbegin', ctaElement);\n document.querySelector('.vesta-fixed-cta-container').classList.add('vesta-padding-container')\n // Use Timeout to ensure the element is rendered in the DOM before applying opacity change\n setTimeout(() => {\n document.querySelector('.vesta-fixed-cta').classList.remove('vesta-opacity-0');\n document.querySelector('.vesta-fixed-cta').classList.add('vesta-opacity-1');\n }, 200);\n }\n\n handleRevertIntersection = () => {\n this.btnTarget.innerHTML = ''\n document.querySelector('.vesta-fixed-cta-container').classList.remove('vesta-padding-container')\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = ['containerFixedBtn', 'fixedCta'];\n\n connect() {\n this.initializeIntersectionObserver();\n }\n\n initializeIntersectionObserver = () => {\n const options = {\n root: null,\n rootMargin: '0px',\n threshold: 0,\n };\n\n const observer = new IntersectionObserver(this.handleObserver, options);\n if (this.containerFixedBtnTarget) {\n observer.observe(this.containerFixedBtnTarget);\n }\n }\n\n handleObserver = (entities) => {\n const target = entities[0];\n if (target.isIntersecting) {\n this.fixedCtaTarget.classList.add('vesta-show-button');\n }\n else {\n this.fixedCtaTarget.classList.remove('vesta-show-button');\n }\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = [ 'landingZoneCity',\n 'landingZoneZipCode',\n 'landingZoneLat',\n 'landingZoneLng',\n 'geoFullAddress',\n 'geoStreetName',\n 'geoStreetNumber',\n 'geoZipCode',\n 'geoCity',\n 'geoCountryCode',\n 'geoLat',\n 'geoLng',\n 'displayButton',\n 'explainDisplayFields' ]\n\n connect = () => {\n if (this.hasLandingZoneCityTarget) {\n var placesOptions = { types: ['geocode'], componentRestrictions: { country: 'fr' } };\n this.set_up_autocomplete(this.landingZoneCityTarget, this.populateZoneAddress, placesOptions);\n } else {\n var restriction = this.data.get('country-restriction');\n if (restriction !== null && restriction != undefined) {\n var placesOptions = { types: ['geocode'], componentRestrictions: { country: restriction } };\n } else {\n var placesOptions = { types: ['geocode'] };\n }\n this.set_up_autocomplete(this.geoFullAddressTarget, this.populateAddress, placesOptions)\n }\n\n [this.geoStreetNameTarget, this.geoStreetNumberTarget, this.geoZipCodeTarget, this.geoCityTarget, this.geoCountryCodeTarget].forEach((target) => {\n target.parentNode.classList.add('hidden')\n })\n }\n\n set_up_autocomplete = (target, populateAddress, placesOptions) => {\n // restrict API calls to selected countries\n this.autocomplete = new google.maps.places.Autocomplete(target, placesOptions);\n // restrict API calls to useful components\n this.autocomplete.setFields(['address_components', 'formatted_address', 'geometry.location']);\n this.autocomplete.addListener('place_changed', populateAddress);\n // google.maps.event.addListener(autocomplete, 'place_changed', populateZoneAddress);\n // Do not submit the form on Enter.\n google.maps.event.addDomListener(target, 'keydown', function (e) {\n if (e.key === \"Enter\") { e.preventDefault(); }\n });\n }\n\n // populate detailed address fields\n populateAddress = () => {\n // remove fast the previous flash message if any to allow potential new message\n if (document.getElementsByClassName('iziToast-capsule').length > 0) {\n let toast = document.querySelector('.iziToast'); // Selector of your toast\n iziToast.hide({}, toast);\n }\n\n // const geoInputs = document.getElementById('geo-inputs');\n const place = this.autocomplete.getPlace();\n const components = this.getAddressComponents(place);\n\n // start formating full address field\n this.geoFullAddressTarget.blur();\n\n this.geoFullAddressTarget.value = '';\n if (components.address) { this.geoFullAddressTarget.value = components.address.split(', ')[0] }\n\n if (components.zip_code) {\n if (this.geoFullAddressTarget.value === '') {\n this.geoFullAddressTarget.value = components.zip_code\n } else {\n this.geoFullAddressTarget.value = this.geoFullAddressTarget.value + ', ' + components.zip_code\n }\n }\n\n if (components.city) {\n if (this.geoFullAddressTarget.value === '') {\n this.geoFullAddressTarget.value = components.city\n } else {\n this.geoFullAddressTarget.value = this.geoFullAddressTarget.value + ', ' + components.city\n }\n }\n\n if (!place.address_components.some(component => component.types.includes('locality')) ||\n !place.address_components.some(component => component.types.includes('route'))) {\n this.geoFullAddressTarget.value = place.formatted_address;\n }\n // end formating full address field\n\n this.geoStreetNumberTarget.value = components.street_number;\n this.geoStreetNameTarget.value = components.street_name;\n this.geoZipCodeTarget.value = components.zip_code;\n this.geoCityTarget.value = components.city;\n this.geoCountryCodeTarget.value = components.country_code;\n this.geoLatTarget.value = components.lat;\n this.geoLngTarget.value = components.lng;\n }\n\n populateZoneAddress = () => {\n const place = this.autocomplete.getPlace();\n const components = this.getAddressComponents(place);\n\n this.landingZoneCityTarget.value = components.city;\n this.landingZoneZipCodeTarget.value = components.zip_code;\n this.landingZoneLatTarget.value = components.lat;\n this.landingZoneLngTarget.value = components.lng;\n }\n\n // fetch detailed address fields\n getAddressComponents = (place) => {\n let street_number = null;\n let route = null;\n let zip_code = null;\n let city = null;\n let country_code = null;\n let country_full = null;\n\n place.address_components.forEach((component) => {\n component.types.forEach((type) => {\n if (type === 'street_number') {\n street_number = component.long_name;\n } else if (type === 'route') {\n route = component.long_name;\n } else if (type === 'postal_code') {\n zip_code = component.long_name;\n } else if (type === 'locality') {\n city = component.long_name;\n } else if (type === 'postal_town' && city === null) {\n city = component.long_name;\n } else if (type === 'country') {\n country_code = component.short_name;\n country_full = component.long_name;\n }\n })\n })\n\n if (route === null) {\n if (place.address_components.some(component => component.types.includes('sublocality'))) {\n route = ''\n place.address_components.forEach((component) => {\n component.types.forEach((type) => {\n if (type === 'sublocality') {\n route += `${component.long_name} `\n }\n })\n })\n }\n }\n\n if (city === null) {\n if (place.address_components.some(component => component.types.includes('administrative_area_level_1'))) {\n city = ''\n place.address_components.forEach((component) => {\n component.types.forEach((type) => {\n if (type === 'administrative_area_level_1') {\n city = component.long_name\n }\n })\n })\n }\n }\n\n return {\n address: street_number === null ? route : ((street_number || '') + ' ' + route + ', ' + city + ', ' + (country_full || '')),\n zip_code: zip_code,\n city: city,\n country_code: country_code,\n street_number: street_number,\n street_name: route,\n lat: place.geometry.location.lat(),\n lng: place.geometry.location.lng()\n };\n }\n\n displayFields = (e) => {\n const targets = [this.geoStreetNameTarget, this.geoStreetNumberTarget, this.geoZipCodeTarget, this.geoCityTarget, this.geoCountryCodeTarget]\n targets.forEach((target) => {\n target.parentNode.classList.toggle('hidden');\n });\n\n e.currentTarget.innerText =\n e.currentTarget.innerText === 'Afficher les champs détaillés'\n ? 'Cacher les champs détaillés'\n : 'Afficher les champs détaillés';\n\n this.explainDisplayFieldsTarget.classList.toggle('hidden');\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = [ 'input', 'pacContainer' ]\n static values = { buyPage: Boolean, hosmanian: Boolean, ga4EventName: String }\n\n connect() {\n this.estimationKind = this.buyPageValue === true ? 'buy' : 'online';\n this.inputTarget.placeholder = this.estimationKind === 'buy' ? 'Entrez une ville, un arrondissement...' : 'Adresse du bien à estimer...';\n\n const placesOptions = {\n types: ['geocode'],\n componentRestrictions: { country: 'fr' },\n fields: ['address_components','formatted_address','geometry.location']\n };\n this.autocomplete = new google.maps.places.Autocomplete(this.inputTarget, placesOptions);\n this.autocomplete.addListener('place_changed', () => this.onPlaceChanged());\n this.waitForPacContainer();\n }\n\n waitForPacContainer() {\n const observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n mutation.addedNodes.forEach((node) => {\n if (node.classList && node.classList.contains('pac-container')) {\n const pacContainers = document.querySelectorAll('.pac-container');\n // If multiple input don't move the container (in mutation observer no way to make diffence between multiple pac-container added in the DOM)\n if (pacContainers.length === 1) this.moveAutocompleteContainer(node);\n observer.disconnect();\n }\n });\n });\n });\n\n observer.observe(document.body, {\n childList: true,\n subtree: true\n });\n }\n\n moveAutocompleteContainer(node) {\n node.classList.add('vesta-pac-container');\n\n if (node && this.hasPacContainerTarget) this.pacContainerTarget.insertAdjacentElement('afterend', node);\n }\n\n onPlaceChanged = () => {\n this.place = this.autocomplete.getPlace();\n this.handlePlaceAsCookie();\n this.redirectTo();\n }\n\n handlePlaceAsCookie = () => {\n if (this.validePlaceData()) this.saveAsCookie(this.place, 'googlePlaceData');\n }\n\n redirectTo = () => {\n if (this.buyPageValue === true) this.listingAdsUrl()\n else this.funnelUrl()\n }\n\n saveAsCookie = (data, cookieName) => {\n if (typeof data === 'object') data = JSON.stringify(data);\n document.cookie = `${cookieName}=${data}; Domain=.lvh.me; path=/`;\n }\n\n validePlaceData = () => {\n return this.place?.geometry?.location && this.place?.formatted_address && this.place?.address_components\n }\n\n listingAdsUrl = () => {\n if (this.place?.address_components) {\n const addressComponents = this.place.address_components;\n const postalCodeComponent = addressComponents.filter(addressComponent => addressComponent.types.includes('postal_code'))[0]\n const cityComponent = addressComponents.filter(addressComponent => addressComponent.types.includes('locality'))[0]\n const postalCode = postalCodeComponent.short_name;\n const city = cityComponent.short_name;\n window.location = `/annonces?zip_code=${postalCode}&city=${city}`;\n } else window.location = `/annonces`\n }\n\n funnelUrl = () => {\n let fullPath;\n\n if (this.ga4EventNameValue) this.handleGa4Event(this.ga4EventNameValue)\n\n if (this.hosmanianValue) {\n fullPath = window.location.origin.replace(window.location.host, `admin.${window.location.host.replace('www.', '')}/nouveau-lead`)\n } else {\n fullPath = window.location.origin.replace(window.location.host, `app.${window.location.host.replace('www.', '')}/estimation`)\n }\n\n if (this.validePlaceData()) {\n this.dataToParams()\n window.location = `${fullPath}?${this.params}`;\n } else window.location = `${fullPath}`;\n }\n\n handleGa4Event = (ga4EventName) => {\n window.dataLayer = window.dataLayer || []\n window.dataLayer.push({\n 'event': ga4EventName\n })\n }\n\n dataToParams = () => {\n this.params = new URLSearchParams();\n this.params.append('formatted_address', this.place.formatted_address);\n this.params.append('lat', this.place.geometry.location.lat());\n this.params.append('lng', this.place.geometry.location.lng());\n for(let key in this.place.address_components) {\n const addressComponent = this.place.address_components[key];\n if (addressComponent.types.includes('street_number')) this.params.append('street_number', addressComponent['long_name'])\n else if (addressComponent.types.includes('route')) this.params.append('street_name', addressComponent['long_name'])\n else if (addressComponent.types.includes('postal_code')) this.params.append('zip_code', addressComponent['long_name'])\n else if (addressComponent.types.includes('locality')) this.params.append('city', addressComponent['long_name'])\n else if (addressComponent.types.includes('country')) this.params.append('country_code', addressComponent['short_name'])\n }\n }\n}\n","import { fetchProperties, fetchProperty } from '../../../api/properties'\n\nimport priceFormatting from '../../../../shared/utils/priceFormatting';\n\nconst MAP_EVENTS = {\n flyToClickedZone(zoom, center) {\n this.geoDataMap.flyTo({ center, zoom });\n },\n\n async propertiesMarkers(map, hosmanId, markers) {\n const properties = await fetchProperties(hosmanId);\n\n if (markers.length > 0) {\n markers.forEach((marker) => marker.remove());\n }\n\n if (properties.length > 0) {\n properties.forEach((property) => {\n initMarker(map, property, markers);\n });\n }\n },\n};\n\nexport default MAP_EVENTS;\n\nasync function initMarker(map, propertyPin, markers) {\n // create the marker\n const divEl = document.createElement('div');\n divEl.id = `vesta-marker-${propertyPin.state.replace(/_/g, '-')}`;\n\n const marker = new mapboxgl.Marker(divEl)\n .setLngLat({ lat: propertyPin.lat, lng: propertyPin.lng })\n .addTo(map);\n\n // Handle transform scale property via js because mapbox already use transform property as inline css\n const marketEl = marker.getElement()\n marketEl.addEventListener('mouseenter', function() {\n marketEl.style.transform = `${marketEl.style.transform} scale(1.3)`;\n marketEl.style.zIndex = '1';\n });\n\n marketEl.addEventListener('click', async function() {\n const property = await fetchProperty(propertyPin.id);\n initPopup(map, property);\n });\n\n marketEl.addEventListener('mouseleave', function() {\n marketEl.style.transform = `${marketEl.style.transform.split(\"scale(1.3)\").join('').trim()}`;\n marketEl.style.zIndex = '0';\n });\n\n markers.push(marker);\n};\n\nfunction initPopup(map, property) {\n let picture_url = property.pictures[0]\n if (window.innerWidth <= 991 && picture_url.includes('c_fill')) picture_url = picture_url.replace('c_fill', 'c_scale')\n\n const propertyPopup = document.getElementById('property-popup')\n\n propertyPopup.innerHTML =\n `\n \n
\n\n \n ${`\n \n `}\n
\n\n
\n
${property.advert_title}
\n
${property.street_name || 'Adresse non précisée'}
\n\n
\n ${Math.round(property.kind === 'house' ? property.area : property.carrez_area)}m²\n ${property.room_number}p\n ${displayFloor(property)}\n ${property.bedroom_number}c\n
\n\n
\n
\n
${priceFormatting(property.sale.price)}
\n
${priceFormatting(Math.round(property.sale.price / Number(property.area)))}/m2
\n
\n \n
\n
\n
\n \n \n \n `\n\n handlePopupEvents()\n}\n\nconst displayFloor = (property) => {\n const kind = property.kind\n const floor = kind === 'apartment' ? property.floor : property.total_floor\n if (!floor) return '';\n\n switch (floor) {\n case 0:\n return kind === 'house' ? 'Plain pied' : 'Rdc';\n case 1:\n return (\n `\n 1${kind === 'house' ? 'étage' : `erétage`}\n `\n );\n default:\n return (\n `\n ${floor}\n ${kind === 'house' ? 'étages' : `eét`}\n `\n );\n }\n};\n\nconst handlePopupEvents = () => {\n const popupElement = document.getElementById('property-popup')\n popupElement.addEventListener('click', function(e) {\n e.stopPropagation();\n });\n\n document.getElementById('quit-popup').addEventListener('click', function() {\n popupElement.innerHTML = ''\n });\n\n document.addEventListener('click', function() {\n popupElement.innerHTML = ''\n });\n}\n","import Swiper from 'swiper/bundle';\nimport { fetchContent } from '../../../api/partials'\n\nconst PARTIALS = {\n async updatePageData({ mapOnly, baseUrl, step_type, record_id, record_type, property_kind = null }) {\n if (step_type === 'france') {\n window.location.href = 'prix-immobilier-m2';\n return;\n }\n\n // UPDATE RIGHT BLOCK\n const dynamicContent = document.getElementById('vesta-dynamic-content-ref');\n // UPDATE TITLE\n const dynamicTitleH1 = document.getElementById('vesta-dynamic-title-h1');\n const dynamicTitleH2 = document.getElementById('vesta-dynamic-title-h2');\n // UPDATE LAST PROPERTY SOLD\n const dynamicSoldProperties = document.getElementById('vesta-dynamic-last-property-sold');\n // UPDATE OTHER PRICING ZONES\n const dynamicPricingZones = document.getElementById('vesta-dynamic-pricing-zones');\n const pricingTopCities = document.getElementById('vesta-pricing-top-cities');\n const pricingQuarters = document.getElementById('vesta-pricing-quarters');\n // Remove specials city faq partials as content is not replaced if on other step (uniq display for city step)\n pricingTopCities.innerHTML = '';\n pricingQuarters.innerHTML = '';\n // UPDATE FAQS\n const dynamicFaqs = document.getElementById('vesta-dynamic-faqs');\n // REMOVE SEO ZONES LINKS\n const seoZonesLinks = document.getElementById('seo-zones-links');\n\n handleFetchData({\n url: document.location.origin + `${baseUrl}/render_zone_partial`,\n body: JSON.stringify({ step_type, record_id, record_type, property_kind }),\n anchorContent: dynamicContent\n });\n\n handleFetchData({\n url: document.location.origin + `${baseUrl}/render_title_h1_partial`,\n body: JSON.stringify({ step_type, record_id, record_type, path: window.location.pathname }),\n anchorContent: dynamicTitleH1\n });\n\n if (mapOnly) return;\n\n handleFetchData({\n url: document.location.origin + `${baseUrl}/render_title_h2_partial`,\n body: JSON.stringify({ step_type, record_id, record_type, path: window.location.pathname }),\n anchorContent: dynamicTitleH2\n });\n\n handleFetchData({\n url: document.location.origin + `${baseUrl}/render_last_property_sold_partial`,\n body: JSON.stringify({ step_type, record_id, record_type }),\n anchorContent: dynamicSoldProperties\n })\n\n handleFetchData({\n url: document.location.origin + `${baseUrl}/render_pricing_zones_partial`,\n body: JSON.stringify({ step_type, record_id, record_type }),\n anchorContent: dynamicPricingZones\n })\n\n if (step_type === 'city') {\n handleFetchData({\n url: document.location.origin + `${baseUrl}/render_pricing_top_cities_partial`,\n body: JSON.stringify({ step_type, record_id, record_type }),\n anchorContent: pricingTopCities\n })\n\n handleFetchData({\n url: document.location.origin + `${baseUrl}/render_pricing_quarters_partial`,\n body: JSON.stringify({ step_type, record_id, record_type }),\n anchorContent: pricingQuarters\n })\n }\n\n handleFetchData({\n url: document.location.origin + `${baseUrl}/render_faqs_partial`,\n body: JSON.stringify({ step_type, record_id, record_type }),\n anchorContent: dynamicFaqs\n })\n\n seoZonesLinks.classList.add('hidden')\n },\n};\n\nexport default PARTIALS;\n\nasync function handleFetchData({ url, body, anchorContent}) {\n anchorContent.classList.add('blurred');\n const data = await fetchContent(url, body);\n anchorContent.innerHTML = data\n\n setTimeout(() => {\n anchorContent.classList.remove('blurred');\n }, '200')\n\n // Refresh swiper to handle new value of @last_properties_sold\n refreshSwiper();\n};\n\nfunction refreshSwiper() {\n new Swiper('.last-sales-carousel', {\n slidesPerView: 1,\n spaceBetween: 40,\n centeredSlides: false,\n navigation: {\n nextEl: '.next-sale',\n prevEl: '.prev-sale'\n },\n breakpoints: {\n 640: {\n centeredSlides: false,\n slidesPerView: 2,\n spaceBetween: 5\n },\n 1024: {\n centeredSlides: false,\n slidesPerView: 3,\n spaceBetween: 100\n },\n 1550: {\n centeredSlides: false,\n slidesPerView: 4,\n spaceBetween: 100\n }\n }\n });\n};\n","export const pushVirtualPageView = () => {\n window.dataLayer = window.dataLayer || [];\n\n const path = window.location.pathname\n const [region, city, quarter] = path.split('/').filter(el => Boolean(el) && el !== 'prix-immobilier-m2')\n\n window.dataLayer.push({\n 'event': 'VirtualPageview',\n 'virtualPageURL': window.location.pathname,\n 'virtualPageTitle': `Page ${region || \"d'Acceuil\"}${city ? ` - ${city}` : ''}${quarter ? ` - ${quarter}` : ''}`\n });\n}\n","import SET_LAYERS from '../../../config/mapbox/setLayers';\nimport MAP_EVENTS from './mapEvents';\nimport PARTIALS from './partials';\n\nimport { generateLayerId, filterZone, fillPaint, linePaint, SOURCE_ID } from '../mapbox_options'\n\nconst UPDATE_LAYERS = {\n handleLayerStylingForFranceAndAbove() {\n if (this.geoDataMap.getLayer('geo-datas-fill-quarter') !== undefined) this.geoDataMap.removeLayer('geo-datas-fill-quarter')\n if (this.geoDataMap.getLayer('geo-datas-line-quarter') !== undefined) this.geoDataMap.removeLayer('geo-datas-line-quarter')\n this.geoDataMap.setPaintProperty('geo-datas-line-city', 'line-color', 'transparent');\n this.geoDataMap.setPaintProperty('geo-datas-fill-city', 'fill-color', this.COLORS['blue-100']);\n\n // if zoom out initialize url\n if (this.ZOOM_OUT) {\n history.pushState({}, '', `${this.BASE_URL}`);\n document.title = 'Prix immobilier'\n }\n\n if (this.ZOOM_OUT && this.STEP_ZOOM !== 'france') {\n this.STEP_ZOOM = 'france'\n PARTIALS.updatePageData({ baseUrl: this.BASE_URL, step_type: this.STEP_ZOOM });\n // Reinitialize\n this.LAST_CLICKED_ZONES = {}\n }\n\n if (this.CURRENT_MARKERS.length > 0) this.CURRENT_MARKERS.forEach((marker) => marker.remove());\n },\n\n handleLayerStylingBetweenFranceAndRegion() {\n if (this.geoDataMap.getLayer('geo-datas-fill-quarter') !== undefined) this.geoDataMap.removeLayer('geo-datas-fill-quarter')\n if (this.geoDataMap.getLayer('geo-datas-line-quarter') !== undefined) this.geoDataMap.removeLayer('geo-datas-line-quarter')\n this.geoDataMap.setPaintProperty('geo-datas-line-city', 'line-color', this.COLORS['blue-100']);\n this.geoDataMap.setPaintProperty('geo-datas-fill-city', 'fill-color', this.COLORS['blue-100']);\n this.geoDataMap.setPaintProperty('geo-datas-line-city', 'line-width', 1);\n if (this.ZOOM_OUT && this.STEP_ZOOM !== 'region') {\n this.STEP_ZOOM = 'region'\n if (this.LAST_CLICKED_ZONES.region != undefined) PARTIALS.updatePageData({ baseUrl: this.BASE_URL, step_type: this.STEP_ZOOM, record_id: this.LAST_CLICKED_ZONES.region, record_type: 'Region' });\n else if (this.LAST_CLICKED_ZONES.city != undefined) PARTIALS.updatePageData({ baseUrl: this.BASE_URL, step_type: this.STEP_ZOOM, record_id: this.LAST_CLICKED_ZONES.city, record_type: 'City' });\n }\n if (this.CURRENT_MARKERS.length > 0) this.CURRENT_MARKERS.forEach((marker) => marker.remove());\n },\n\n handleLayoutStylingBetweenRegionAndCity() {\n this.geoDataMap.setPaintProperty('geo-datas-line-city', 'line-color', this.COLORS['blue-100']);\n this.geoDataMap.setPaintProperty('geo-datas-fill-city', 'fill-color', this.COLORS['blue-100']);\n this.geoDataMap.setPaintProperty('geo-datas-line-city', 'line-width', 1);\n if (this.CURRENT_MARKERS.length > 0) this.CURRENT_MARKERS.forEach((marker) => marker.remove());\n // Add quarter layer to allow hover and click\n if (this.geoDataMap.getLayer('geo-datas-line-quarter') !== undefined) this.geoDataMap.removeLayer('geo-datas-line-quarter');\n // Add targeted city style\n this.geoDataMap.setPaintProperty('geo-datas-fill-city', 'fill-color', ['match', ['get', 'hosman_id'], this.LAST_CLICKED_ZONES.city, this.COLORS['blue-100'], this.COLORS['neutral-40']]);\n this.geoDataMap.setPaintProperty('geo-datas-line-city', 'line-color', ['match', ['get', 'hosman_id'], this.LAST_CLICKED_ZONES.city, this.COLORS['blue-100'], this.COLORS['neutral-40']]);\n this.geoDataMap.setPaintProperty('geo-datas-line-city', 'line-width', ['match', ['get', 'hosman_id'], this.LAST_CLICKED_ZONES.city, 3, 1]);\n\n if (this.ZOOM_OUT && this.STEP_ZOOM !== 'city') {\n if (this.geoDataMap.getLayer('geo-datas-fill-quarter') !== undefined) this.geoDataMap.removeLayer('geo-datas-fill-quarter');\n this.STEP_ZOOM = 'city';\n if (this.LAST_CLICKED_ZONES.city != undefined) PARTIALS.updatePageData({ baseUrl: this.BASE_URL, step_type: this.STEP_ZOOM, record_id: this.LAST_CLICKED_ZONES.city, record_type: 'City' });\n }\n },\n\n handleLayoutStylingBetweenCityAndQuarter() {\n if (this.geoDataMap.getLayer('geo-datas-fill-quarter') === undefined) {\n SET_LAYERS.withOptions({\n map: this.geoDataMap,\n layerId: generateLayerId('fill', 'quarter'),\n sourceId: SOURCE_ID,\n type: 'fill',\n filter: filterZone('quarter'),\n paint: fillPaint(this.COLORS['purple-100'], this.COLORS['neutral-40'])\n });\n }\n\n if (this.geoDataMap.getLayer('geo-datas-line-quarter') === undefined) {\n SET_LAYERS.withOptions({\n map: this.geoDataMap,\n layerId: generateLayerId('line', 'quarter'),\n sourceId: SOURCE_ID,\n type: 'line',\n filter: filterZone('quarter'),\n paint: linePaint()\n });\n }\n // Add targeted quarter style\n this.geoDataMap.setPaintProperty('geo-datas-fill-city', 'fill-color', ['match', ['get', 'hosman_id'], this.LAST_CLICKED_ZONES.city, this.COLORS['blue-100'], this.COLORS['neutral-40']]);\n this.geoDataMap.setPaintProperty('geo-datas-line-city', 'line-color', ['match', ['get', 'hosman_id'], this.LAST_CLICKED_ZONES.city, this.COLORS['blue-100'], this.COLORS['neutral-40']]);\n this.geoDataMap.setPaintProperty('geo-datas-line-city', 'line-width', ['match', ['get', 'hosman_id'], this.LAST_CLICKED_ZONES.city, 3, 1]);\n\n this.geoDataMap.setPaintProperty('geo-datas-fill-quarter', 'fill-color', ['match', ['get', 'hosman_id'], this.LAST_CLICKED_ZONES.quarter, this.COLORS['blue-100'], this.COLORS['neutral-40']]);\n this.geoDataMap.setPaintProperty('geo-datas-line-quarter', 'line-color', ['match', ['get', 'hosman_id'], this.LAST_CLICKED_ZONES.quarter, this.COLORS['blue-100'], this.COLORS['blue-100']]);\n this.geoDataMap.setPaintProperty('geo-datas-line-quarter', 'line-width', ['match', ['get', 'hosman_id'], this.LAST_CLICKED_ZONES.quarter, 3, 1]);\n // If zoom in and quarter id present add properties markers\n if (this.ZOOM_IN && this.LAST_CLICKED_ZONES.quarter !== undefined) MAP_EVENTS.propertiesMarkers(this.geoDataMap, this.LAST_CLICKED_ZONES.quarter, this.CURRENT_MARKERS);\n // If zoom out we want to remove quarter layer to be able to click new city\n if (this.ZOOM_OUT && this.STEP_ZOOM !== 'quarter' && this.geoDataMap.getLayer('geo-datas-fill-quarter') !== undefined) this.geoDataMap.removeLayer('geo-datas-fill-quarter');\n this.STEP_ZOOM = 'quarter';\n },\n};\n\nexport default UPDATE_LAYERS;\n","import { Controller } from '@hotwired/stimulus';\nimport { gunzipSync } from 'zlib';\nconst Buffer = require('buffer/').Buffer;\n\nimport SET_MAP from '../../config/mapbox/setMap';\nimport SET_LAYERS from '../../config/mapbox/setLayers';\n\nimport { generateLayerId, filterZone, fillPaint, linePaint, SOURCE_ID } from './mapbox_options'\n\nimport UPDATE_LAYERS from './functions/updateLayers';\nimport MAP_EVENTS from './functions/mapEvents';\nimport PARTIALS from './functions/partials';\nimport { pushVirtualPageView } from './functions/pushVirtualPageView';\n\nexport default class extends Controller {\n REGION_NAME = { paris: 'region-parisienne',nantes: 'region-nantaise', bordeaux: 'region-bordelaise', lyon: 'region-lyonnaise' };\n COLORS = { 'blue-100': '#5076F6', 'purple-100': '#21175A', 'neutral-30': '#4B485F', 'neutral-40': '#BCBAC3', transparent: 'transparent' };\n STATE_ZOOM = {\n france: 5,\n region: 9,\n city: 11,\n quarter: 13\n };\n STEP_ZOOM = 'france';\n INITIAL_CENTER = [1.7191, 46.7];\n CURRENT_MARKERS = [];\n LAST_CLICKED_ZONES = {};\n LAST_UPDATED_ZONES = {};\n PREVIOUS_ZOOM = this.STATE_ZOOM.france;\n CURRENT_ZOOM = this.STATE_ZOOM.france;\n ZOOM_OUT = false;\n ZOOM_IN = false;\n HOVERED_STATE_ID = null;\n BASE_URL = '/prix-immobilier-m2';\n PREVIOUS_URL = '';\n FEATURES = [];\n MAP_RENDERED = false;\n\n static targets = [\n 'propertyKind',\n 'propertyKindRadio',\n 'title',\n 'url',\n 'mobileGeocoder',\n 'apartmentInput',\n 'houseInput',\n 'houseContentCard',\n 'apartmentContentCard',\n 'propertyKindTitle',\n 'modal',\n 'firstPanel'\n ];\n // lat, lng and hosmanId are used only for first load to get record info to set up map and content\n static values = {\n publicKey: String,\n style: String,\n tilesetId: String,\n stepState: String,\n cityId: String,\n recordType: String,\n lat: String,\n lng: String,\n hosmanId: Number\n };\n\n connect = () => {\n this.changeTitle()\n this.handleScrollActions();\n\n this.geoDataMap = SET_MAP.initMap(this.publicKeyValue, this.INITIAL_CENTER, this.STATE_ZOOM.france, this.styleValue, 'geo-datas');\n\n this.geoDataMap.on('load', async () => {\n SET_MAP.initSource(this.geoDataMap, 'geo-datas', this.tilesetIdValue);\n\n SET_LAYERS.withOptions({\n map: this.geoDataMap,\n layerId: generateLayerId('fill', 'city'),\n sourceId: SOURCE_ID,\n type: 'fill',\n filter: filterZone('city'),\n paint: fillPaint(this.COLORS['purple-100'], this.COLORS['blue-100'])\n });\n\n SET_LAYERS.withOptions({\n map: this.geoDataMap,\n layerId: generateLayerId('line', 'city'),\n sourceId: SOURCE_ID,\n type: 'line',\n filter: filterZone('city'),\n paint: linePaint()\n });\n\n if (this.geoDataMap.getZoom() >= this.STATE_ZOOM.quarter) {\n MAP_EVENTS.propertiesMarkers(this.geoDataMap, this.hosmanIdValue, this.CURRENT_MARKERS);\n }\n\n this.geoDataMap.on('idle', async () => {\n if (this.MAP_RENDERED) return;\n\n this.initMapControl();\n this.initMapEvent();\n\n if (this.hosmanIdValue) {\n this.geoDataMap.setPaintProperty('geo-datas-fill-city', 'fill-color', ['match', ['get', 'hosman_id'], this.hosmanIdValue, this.COLORS['blue-100'], this.COLORS['neutral-40']]);\n this.geoDataMap.setPaintProperty('geo-datas-line-city', 'line-color', ['match', ['get', 'hosman_id'], this.hosmanIdValue, this.COLORS['blue-100'], this.COLORS['neutral-40']]);\n this.geoDataMap.setPaintProperty('geo-datas-line-city', 'line-width', ['match', ['get', 'hosman_id'], this.hosmanIdValue, 3, 1]);\n MAP_EVENTS.flyToClickedZone.call(this, this.STATE_ZOOM[this.recordTypeValue.toLowerCase()], { lng: Number(this.lngValue), lat: Number(this.latValue) });\n // If url is initialy set for quarter get city id as last clicked zone to retrieve it if zoom out\n if (this.hasCityIdValue) this.LAST_CLICKED_ZONES.city = parseInt(this.cityIdValue);\n // Retrieve current zone and save it as last clicked zone\n this.LAST_CLICKED_ZONES[this.recordTypeValue.toLowerCase()] = parseInt(this.hosmanIdValue);\n }\n\n this.MAP_RENDERED = true;\n this.LAST_UPDATED_ZONES = this.LAST_CLICKED_ZONES\n });\n });\n };\n\n initMapControl = async () => {\n // Retrieve dataset features to feed geocoder data search by our own data (geojson.gp needed for performance)\n const response = await fetch('https://res.cloudinary.com/vesta-home/raw/upload/v1677602714/assets/city_geojson/features.geojson.gz')\n const buffer = await response.arrayBuffer()\n const uncompressed = gunzipSync(Buffer.from(buffer));\n const result = uncompressed.toString('utf-8');\n const data = await JSON.parse(result)\n this.FEATURES = await data.features;\n\n // Geocoder for desktop (inside the map)\n this.geocoder = SET_MAP.initLocalGeocoder(this.FEATURES);\n // Geocoder for mobile (outside the map)\n if (this.hasMobileGeocoderTarget && window.innerWidth < 991) {\n this.geocoder_mobile = SET_MAP.initLocalGeocoder(this.FEATURES);\n this.mobileGeocoderTarget.appendChild(this.geocoder_mobile.onAdd(this.geoDataMap));\n }\n const nav = new mapboxgl.NavigationControl();\n this.geoDataMap.addControl(this.geocoder);\n this.geoDataMap.addControl(nav, 'top-left');\n\n if (this.hasMobileGeocoderTarget && window.innerWidth < 991) {\n this.geocoder_mobile.on('result', (e) => {\n this.handleGeocoderSearch(e);\n });\n } else {\n this.geocoder.on('result', (e) => {\n this.handleGeocoderSearch(e);\n });\n }\n };\n\n handleGeocoderSearch = (e) => {\n const { hosman_id, hosman_class, center, region, slug, city_slug } = e.result.properties;\n\n MAP_EVENTS.flyToClickedZone.call(this, this.STATE_ZOOM[hosman_class.toLowerCase()], center);\n PARTIALS.updatePageData({ mapOnly: true, baseUrl: this.BASE_URL, step_type: hosman_class.toLowerCase(), record_id: hosman_id, record_type: hosman_class });\n MAP_EVENTS.propertiesMarkers(this.geoDataMap, hosman_id, this.CURRENT_MARKERS);\n const aggregSlug = `${this.BASE_URL}/${this.REGION_NAME[region.toLowerCase()]}${city_slug !== undefined ? `/${city_slug}/` : '/'}${slug}`\n history.pushState({}, '', aggregSlug);\n this.changeTitle()\n this.LAST_CLICKED_ZONES[hosman_class.toLowerCase()] = hosman_id;\n };\n\n // ******** Map events start ******** //\n initMapEvent = () => {\n // As there is no region data via mapbox layer we can't add event as for city and quarter layers. Workaround is made in city layer click event\n // Handle city layer click (wich handle both region and city)\n this.geoDataMap.on('click', 'geo-datas-fill-city', (e) => {\n const currentZoom = this.geoDataMap.getZoom();\n const { hosman_id, hosman_class, center } = e.features[0].properties;\n // Prevent map to reload if click on a marker\n if (e.originalEvent.target.classList.contains('mapboxgl-marker')) return;\n\n // If zoom position between France and region and click, city layer and fly at zoom region level (because mapbox layer doesn't have region data)\n if (this.LAST_CLICKED_ZONES.city === undefined && currentZoom < this.STATE_ZOOM.region) {\n // Fly to clicked zone at region state zoom level\n MAP_EVENTS.flyToClickedZone.call(this, this.STATE_ZOOM.region, JSON.parse(center));\n // Update right block content specifying step_type to manage partial rendering in geo_data_controller\n PARTIALS.updatePageData({ mapOnly: true, baseUrl: this.BASE_URL, step_type: 'region', record_id: hosman_id, record_type: hosman_class });\n this.LAST_CLICKED_ZONES = { city: hosman_id }\n // If zoom position gretter or equal to zoom region, zoom to city level\n } else if (this.LAST_CLICKED_ZONES.city === undefined && currentZoom >= this.STATE_ZOOM.region) {\n MAP_EVENTS.flyToClickedZone.call(this, this.STATE_ZOOM.city, JSON.parse(center));\n PARTIALS.updatePageData({ mapOnly: true, baseUrl: this.BASE_URL, step_type: 'city', record_id: hosman_id, record_type: hosman_class });\n this.LAST_CLICKED_ZONES = { city: hosman_id }\n // If last click zone city not undefined AND there is no quarter layer, zoom to city level\n // We check if no quarter layer because otherwise function (like updatePageData) are called twice: once in city layer / once in quarter layer\n // We can't remove quarter layer for hover and click purpose when on a city step\n } else if (this.LAST_CLICKED_ZONES.city !== undefined && this.geoDataMap.queryRenderedFeatures(e.point, { layers: ['geo-datas-fill-quarter'] }).length <= 0) {\n MAP_EVENTS.flyToClickedZone.call(this, this.STATE_ZOOM.city, JSON.parse(center));\n PARTIALS.updatePageData({ mapOnly: true, baseUrl: this.BASE_URL, step_type: 'city', record_id: hosman_id, record_type: hosman_class });\n this.LAST_CLICKED_ZONES = { city: hosman_id }\n }\n });\n\n // Handle quarter layer click\n this.geoDataMap.on('click', 'geo-datas-fill-quarter', async (e) => {\n if (e.originalEvent.target.classList.contains('mapboxgl-marker')) return;\n\n const { hosman_id, hosman_class, center } = e.features[0].properties;\n MAP_EVENTS.propertiesMarkers(this.geoDataMap, hosman_id, this.CURRENT_MARKERS);\n MAP_EVENTS.flyToClickedZone.call(this, this.STATE_ZOOM.quarter, JSON.parse(center));\n PARTIALS.updatePageData({ mapOnly: true, baseUrl: this.BASE_URL, step_type: 'quarter', record_id: hosman_id, record_type: hosman_class });\n\n const quarterCityId = this.geoDataMap.queryRenderedFeatures(e.point, { layers: ['geo-datas-fill-city'] })[0].properties.hosman_id\n this.LAST_CLICKED_ZONES = { city: parseInt(quarterCityId), quarter: hosman_id }\n });\n\n // This general event click on the map is used to handle dynamic url changes\n this.geoDataMap.on('click', (e) => {\n // Reset input value field\n const geocoderInput = document.querySelector('.mapboxgl-ctrl-geocoder input');\n geocoderInput.value = '';\n // Check layer precense to handle url nomenclature by layer data\n const [quarter] = this.geoDataMap.queryRenderedFeatures(e.point, { layers: ['geo-datas-fill-quarter'] });\n const [city] = this.geoDataMap.queryRenderedFeatures(e.point, { layers: ['geo-datas-fill-city'] });\n\n if (quarter !== undefined) {\n // To update city focus if quarter from other city is clicked\n if (Number(this.LAST_CLICKED_ZONES.city) !== city.properties.hosman_id) this.LAST_CLICKED_ZONES.city = city.properties.hosman_id;\n if (Number(this.LAST_CLICKED_ZONES.quarter) !== quarter.properties.hosman_id) this.LAST_CLICKED_ZONES.quarter = quarter.properties.hosman_id;\n\n const aggregSlug = `${city.properties.slug}/${quarter.properties.slug}`;\n history.pushState({}, '', `${this.BASE_URL}/${this.REGION_NAME[city.properties.region.toLowerCase()]}/${aggregSlug}`);\n } else if (city !== undefined && this.geoDataMap.getZoom() > this.STATE_ZOOM.france) {\n history.pushState({}, '', `${this.BASE_URL}/${this.REGION_NAME[city.properties.region.toLowerCase()]}/${city.properties.slug}`);\n } else if (city !== undefined) {\n history.pushState({}, '', `${this.BASE_URL}/${this.REGION_NAME[city.properties.region.toLowerCase()]}`);\n }\n this.changeTitle()\n });\n\n this.geoDataMap.on('zoomstart', () => {\n this.PREVIOUS_ZOOM = this.geoDataMap.getZoom();\n });\n\n this.geoDataMap.on('zoomend', () => {\n this.CURRENT_ZOOM = this.geoDataMap.getZoom();\n this.ZOOM_OUT = this.CURRENT_ZOOM < this.PREVIOUS_ZOOM;\n this.ZOOM_IN = this.CURRENT_ZOOM > this.PREVIOUS_ZOOM;\n switch (true) {\n case this.CURRENT_ZOOM <= this.STATE_ZOOM.france:\n UPDATE_LAYERS.handleLayerStylingForFranceAndAbove.apply(this);\n break;\n case this.CURRENT_ZOOM > this.STATE_ZOOM.france && this.CURRENT_ZOOM <= this.STATE_ZOOM.region:\n UPDATE_LAYERS.handleLayerStylingBetweenFranceAndRegion.apply(this);\n break;\n case this.CURRENT_ZOOM > this.STATE_ZOOM.region && this.CURRENT_ZOOM < this.STATE_ZOOM.city:\n UPDATE_LAYERS.handleLayoutStylingBetweenRegionAndCity.apply(this);\n break;\n case this.CURRENT_ZOOM >= this.STATE_ZOOM.city && this.CURRENT_ZOOM <= this.STATE_ZOOM.quarter:\n UPDATE_LAYERS.handleLayoutStylingBetweenCityAndQuarter.apply(this);\n break;\n default:\n SET_LAYERS.withOptions({\n map: this.geoDataMap,\n layerId: generateLayerId('fill', 'city'),\n sourceId: SOURCE_ID,\n type: 'fill',\n filter: filterZone('city'),\n paint: fillPaint(this.COLORS['purple-100'], this.COLORS['blue-100'])\n });\n break;\n }\n pushVirtualPageView()\n });\n\n this.handleMouseEvent('mousemove', 'geo-datas-fill-city');\n this.handleMouseEvent('mouseleave', 'geo-datas-fill-city');\n this.handleMouseEvent('mousemove', 'geo-datas-fill-quarter');\n this.handleMouseEvent('mouseleave', 'geo-datas-fill-quarter');\n };\n\n handleMouseEvent = (eventType, layerId) => {\n this.geoDataMap.on(eventType, layerId, (event) => {\n // If HOVERED_STATE_ID not null reset the hovered features id to false to refresh hover state at each event\n if (this.HOVERED_STATE_ID !== null) this.geoDataMap.setFeatureState({ source: 'geo-datas', sourceLayer: 'Hosman', id: this.HOVERED_STATE_ID }, { hover: false });\n // On mousemove event apply hover on featured overed and save its id in HOVERED_STATE_ID for hover state purpose\n if (eventType === 'mousemove') {\n this.HOVERED_STATE_ID = event.features[0].id;\n this.geoDataMap.setFeatureState({ source: 'geo-datas', sourceLayer: 'Hosman', id: this.HOVERED_STATE_ID }, { hover: true });\n // Handle hovered + last clicked quarter style\n if (layerId == 'geo-datas-fill-quarter') {\n this.HOVERED_STATE_QUARTER_ID = event.features[0].properties.hosman_id;\n this.geoDataMap.setPaintProperty('geo-datas-fill-quarter', 'fill-color', [\n 'match',\n ['get', 'hosman_id'],\n this.HOVERED_STATE_QUARTER_ID,\n this.COLORS['purple-100'],\n this.LAST_CLICKED_ZONES.quarter,\n this.COLORS['blue-100'],\n 'transparent'\n ]);\n this.geoDataMap.setPaintProperty('geo-datas-fill-quarter', 'fill-opacity', ['match', ['get', 'hosman_id'], this.HOVERED_STATE_QUARTER_ID, 0.2, this.LAST_CLICKED_ZONES.quarter, 0.5, 0]);\n\n if (this.CURRENT_ZOOM > this.STATE_ZOOM.quarter) {\n this.geoDataMap.setPaintProperty('geo-datas-line-quarter', 'line-color', [\n 'match',\n ['get', 'hosman_id'],\n this.HOVERED_STATE_QUARTER_ID,\n this.COLORS['purple-100'],\n this.LAST_CLICKED_ZONES.quarter,\n this.COLORS['blue-100'],\n 'transparent'\n ]);\n\n this.geoDataMap.setPaintProperty('geo-datas-line-quarter', 'line-width', ['match', ['get', 'hosman_id'], this.HOVERED_STATE_QUARTER_ID, 1, this.LAST_CLICKED_ZONES.quarter, 3, 1]);\n }\n }\n } else {\n this.geoDataMap.setFeatureState({ source: 'geo-datas', sourceLayer: 'Hosman', id: this.HOVERED_STATE_ID }, { hover: false });\n this.HOVERED_STATE_ID = null\n };\n });\n };\n\n handleScrollActions = () => {\n const dynamicTitleH2 = document.getElementById('vesta-dynamic-title-h2');\n document.onscroll = () => {\n if (isInViewport(dynamicTitleH2)) {\n if (!this.LAST_CLICKED_ZONES.city) return;\n\n if (!this.LAST_CLICKED_ZONES.quarter && this.LAST_CLICKED_ZONES.city !== this.LAST_UPDATED_ZONES.city) {\n PARTIALS.updatePageData({ mapOnly: false, baseUrl: this.BASE_URL, step_type: 'city', record_id: this.LAST_CLICKED_ZONES.city, record_type: 'City' });\n this.LAST_UPDATED_ZONES.city = this.LAST_CLICKED_ZONES.city;\n }\n\n if (this.LAST_CLICKED_ZONES.quarter && this.LAST_CLICKED_ZONES.quarter !== this.LAST_UPDATED_ZONES.quarter && this.CURRENT_ZOOM <= this.STATE_ZOOM.quarter) {\n PARTIALS.updatePageData({ mapOnly: false, baseUrl: this.BASE_URL, step_type: 'quarter', record_id: this.LAST_CLICKED_ZONES.quarter, record_type: 'Quarter' });\n this.LAST_UPDATED_ZONES.quarter = parseInt(this.LAST_CLICKED_ZONES.quarter);\n }\n }\n };\n }\n\n // ******** Map events end ******** //\n\n // ******** Actions start ******** //\n selectZone = async (e) => {\n const { recordId, recordType, stepType, center, propertyKind, recordSlug, recordRegion } = e.currentTarget.dataset;\n MAP_EVENTS.propertiesMarkers(this.geoDataMap, recordId, this.CURRENT_MARKERS);\n MAP_EVENTS.flyToClickedZone.call(this, this.STATE_ZOOM[stepType], JSON.parse(center));\n PARTIALS.updatePageData({ mapOnly: false, baseUrl: this.BASE_URL, step_type: stepType, record_id: recordId, record_type: recordType, property_kind: propertyKind });\n this.LAST_CLICKED_ZONES[recordType.toLowerCase()] = Number(recordId);\n if (stepType === 'region') {\n history.pushState({}, '', `${this.BASE_URL}/${this.REGION_NAME[recordRegion.toLowerCase()]}`);\n this.changeTitle()\n }\n\n if (stepType === 'city') {\n history.pushState({}, '', `${this.BASE_URL}/${this.REGION_NAME[recordRegion.toLowerCase()]}/${recordSlug}`);\n this.changeTitle()\n }\n };\n\n selectPropertyKind = () => {\n setTimeout(() => {\n if (this.apartmentInputTarget.checked && !this.houseInputTarget.checked) {\n this.houseContentCardTargets.forEach((target) => target.classList.add('vesta-display-none'));\n this.apartmentContentCardTargets.forEach((target) => target.classList.remove('vesta-display-none'));\n this.propertyKindTitleTarget.innerHTML = 'appartement';\n } else if (!this.apartmentInputTarget.checked && this.houseInputTarget.checked) {\n this.apartmentContentCardTargets.forEach((target) => target.classList.add('vesta-display-none'));\n this.houseContentCardTargets.forEach((target) => target.classList.remove('vesta-display-none'));\n this.propertyKindTitleTarget.innerHTML = 'maison';\n }\n }, 100);\n };\n\n togglePropertyKind = (e) => {\n const inputEl = document.getElementById(e.currentTarget.dataset.label);\n if (inputEl.checked) return;\n\n this.propertyKindRadioTargets.forEach((target) => {\n target.classList.toggle('vesta-display-none');\n });\n };\n\n backToFranceStep = () => {\n this.STEP_ZOOM = 'region';\n MAP_EVENTS.flyToClickedZone.call(this, this.STATE_ZOOM.france, this.INITIAL_CENTER);\n history.pushState({}, '', `${this.BASE_URL}`);\n this.changeTitle()\n };\n\n backToRegionStep = (e) => {\n this.STEP_ZOOM = 'city';\n const { recordId, path, recordLat, recordLng } = e.currentTarget.dataset;\n this.LAST_CLICKED_ZONES.region = Number(recordId);\n MAP_EVENTS.flyToClickedZone.call(this, this.STATE_ZOOM.region, { lng: Number(recordLng), lat: Number(recordLat) });\n history.pushState({}, '', `${this.BASE_URL}/${path}`);\n this.changeTitle()\n };\n\n backToCityStep = (e) => {\n this.STEP_ZOOM = 'quarter';\n const { recordId, path, recordLat, recordLng } = e.currentTarget.dataset;\n this.LAST_CLICKED_ZONES.city = Number(recordId);\n MAP_EVENTS.flyToClickedZone.call(this, this.STATE_ZOOM.city - 1, { lng: Number(recordLng), lat: Number(recordLat) });\n history.pushState({}, '', `${this.BASE_URL}/${path}`);\n this.changeTitle()\n };\n\n toggleModal = () => {\n this.modalTargets.forEach((modal) => modal.classList.toggle('vesta-display-none'));\n const modalAnchor = document.getElementById('vesta-modal-anchor');\n const uspAnchor = document.getElementById('vesta-usp-anchor');\n if (modalAnchor) modalAnchor.scrollIntoView();\n else uspAnchor.scrollIntoView();\n // Because modal open after first DOM scan, need to handle first opening panel (accrodion_controller evaluate scrollHeight at 0)\n setTimeout(() => {\n this.firstPanelTarget.style = 'max-height: 100%;';\n }, 500);\n };\n\n changeTitle() {\n const [region, city, quarter] = window.location.pathname.split('/').filter(el => Boolean(el) && el !== 'prix-immobilier-m2')\n document.title = `Prix immobilier ${region ? `Région ${capitalize(region.split('-')[1])}` : ''}${city ? ` - ${capitalize(city.replace(/-/g, ' '))}` : ''}${quarter ? ` - ${capitalize(quarter.replace(/-/, ' '))}` : ''}`\n }\n // ******** Actions END ******** //\n}\n\nfunction isInViewport(element) {\n const rect = element.getBoundingClientRect();\n return (\n rect.top >= 0 &&\n rect.left >= 0 &&\n rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n rect.right <= (window.innerWidth || document.documentElement.clientWidth)\n );\n}\n\nfunction capitalize(string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\n","const generateLayerId = (kind, zone) => {\n return `geo-datas-${kind}-${zone}`\n}\n\nconst filterZone = (zoneType) => {\n return ['all', ['==', 'active', true], ['==', 'hosman_class', `${zoneType.charAt(0).toUpperCase()}${zoneType.slice(1)}`]]\n}\n\nconst fillPaint = (hoveredColor, color) => {\n return {\n 'fill-color': ['case', ['boolean', ['feature-state', 'hover'], false], hoveredColor, color],\n 'fill-opacity': ['case', ['boolean', ['feature-state', 'hover'], false], 0.6, 0.3]\n }\n}\n\nconst linePaint = () => {\n return {\n 'line-color': 'transparent',\n 'line-width': 0\n }\n}\n\nconst SOURCE_ID = 'geo-datas'\n\nexport { generateLayerId, filterZone, fillPaint, linePaint, SOURCE_ID }\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = [ 'inputField', 'window' ];\n\n connect = () => {\n this.scrollDown()\n }\n\n sendMessage = async(e) => {\n e.preventDefault()\n\n const chatBox = document.querySelector('#vesta-flatsy-chat');\n // Save input message before deleting it for front purpose\n const message = this.inputFieldTarget.value;\n this.inputFieldTarget.value = ''\n // Insert Message in chatbox for UX purpose (even if not sent)\n const messageHTML = `\n
\n
\n
${message}
\n
\n `\n chatBox.insertAdjacentHTML('beforeend', messageHTML);\n this.scrollDown();\n\n const response = await fetch(`/admin/ventes/${this.windowTarget.dataset.saleid}/flatsy/messages`, {\n method: \"POST\",\n headers: {\n 'X-CSRF-Token': document.getElementsByName('csrf-token')[0].getAttribute('content'),\n 'Content-Type': 'application/json'},\n credentials: 'same-origin',\n body: JSON.stringify({ message: message, sale_id: this.windowTarget.dataset.saleid})\n })\n\n const status = await response.status\n const lastMessage = chatBox.lastElementChild;\n\n if(status === 500) {\n if (document.getElementsByClassName('iziToast-capsule').length < 1) alertMessage(\"Échec de l'envoi du message. Vérifiez que le bien est sur Flatsy\", 'error')\n // Add error notif if message not sent\n const errorNotif = `\n
\n Non envoyé. Vérifier que le bien existe sur Flatsy
\n `\n lastMessage.insertAdjacentHTML('beforeend', errorNotif)\n } else {\n // Add created at date if message sent\n const data = await response.json();\n const dateNotif = `
${data.created_at}
`\n lastMessage.insertAdjacentHTML('afterbegin', dateNotif)\n }\n const spinnerEl = document.querySelector('.spinner-loader-centered');\n spinnerEl.remove();\n }\n\n scrollDown = () => {\n this.windowTarget.scrollTop = this.windowTarget.scrollHeight;\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = ['input', 'inputConfirmation', 'label', 'email', 'confirmationLabel', 'submitButton'];\n\n connect() {\n // Sometimes and because of different browser, config, passord manager etc.. the new password input field is autocompleted even with [autocomplete: 'new-password'] mentionned in the input.\n // This is a workaround to force the new password input field to be empty (only on first page load). setTimeout is used to wait for password manager autocomplete on input to be done.\n setTimeout(() => {\n this.inputTargets.forEach((input) => {\n if (input.value !== '') input.value = ''\n })\n }, 300)\n }\n\n validatePassword() {\n const password = this.inputTarget.value;\n const minLength = 8;\n if (password.length >= minLength) {\n this.labelTarget.classList.remove('vesta-label--purple-20');\n this.labelTarget.classList.add('vesta-label--green-20');\n const passwordConfirmationContainer = document.getElementById('passwordConfirmationContainer');\n const passwordConfirmationNotDisplay = passwordConfirmationContainer && passwordConfirmationContainer.classList.contains('vesta-display-none');\n if (!this.hasInputConfirmationTarget || passwordConfirmationNotDisplay) this.submitButtonTarget.disabled = false;\n else this.validatePasswordConfirmation();\n } else {\n this.labelTarget.classList.remove('vesta-label--green-20');\n this.labelTarget.classList.add('vesta-label--purple-20');\n if (!this.hasInputConfirmationTarget) this.submitButtonTarget.disabled = true;\n }\n }\n\n validatePasswordConfirmation() {\n const password = this.inputTarget.value;\n const confirmation = this.inputConfirmationTarget.value;\n // Only fire the label error if confirmation meet the password length and the passwords are not the same\n const errorThreshold = password.length <= confirmation.length;\n const inputsFilled = password.length >= 8 && errorThreshold;\n const passwordsMatch = password === confirmation;\n\n if (inputsFilled) {\n this.confirmationLabelTarget.classList.toggle('vesta-display-none', passwordsMatch);\n this.confirmationLabelTarget.classList.toggle('vesta-label', !passwordsMatch);\n this.submitButtonTarget.disabled = !passwordsMatch;\n } else {\n this.confirmationLabelTarget.classList.add('vesta-display-none');\n this.confirmationLabelTarget.classList.remove('vesta-label');\n this.submitButtonTarget.disabled = true;\n }\n }\n\n toggleVisibility(e) {\n const input = e.currentTarget.dataset.input;\n const type = this[input].getAttribute('type') === 'password' ? 'text' : 'password';\n this[input].setAttribute('type', type);\n e.currentTarget.classList.toggle('fa-eye-slash')\n e.currentTarget.classList.toggle('fa-eye')\n }\n}\n","import Isotope from 'isotope-layout';\nimport { Controller } from '@hotwired/stimulus';\n\n// X-selling\nexport default class extends Controller {\n static targets = [ 'filterContainer', 'filterCategory' ]\n\n connect() {\n this.isotope = new Isotope( this.filterContainerTarget, {\n // options\n itemSelector: '.item',\n layoutMode: 'fitRows',\n transitionDuration: 900\n });\n this.isotope.arrange({\n filter: '*'\n })\n }\n\n filter = (e) => {\n const filterValue = e.target.dataset.filter;\n const selector = document.getElementsByClassName('vesta-filter-category');\n const target = e.target;\n if (selector) {\n for (var element of selector) {\n if (element.classList.contains('active')) {\n element.classList.remove('active');\n }\n }\n }\n target.classList.add('active');\n this.isotope.arrange({\n filter: filterValue\n });\n window.location.hash = `${filterValue}`;\n }\n\n selectFilter = (e) => {\n const selectedOption = e.target.options[e.target.options.selectedIndex].value;\n this.isotope.arrange({\n filter: selectedOption\n });\n };\n}\n","import { Controller } from '@hotwired/stimulus';\nimport Swiper from 'swiper/bundle';\n\nexport default class extends Controller {\n static targets = ['output']\n static values = { background: Boolean, url: String }\n\n connect() {\n this.fetchReviews();\n }\n\n fetchReviews = async () => {\n const request = new Request(this.urlValue);\n try {\n const response = await fetch(request)\n // get content from response\n const content = await response.text();\n // fill partial with content\n this.outputTarget.innerHTML = await content;\n // then trigger carousel\n await new Swiper('.trustpilot-reviews', {\n slidesPerView: 1,\n spaceBetween: 10,\n navigation: {\n nextEl: '.vesta-next-review',\n prevEl: '.vesta-prev-review'\n },\n breakpoints: {\n 1660: {\n slidesPerView: 4,\n spaceBetween: 20,\n navigation: {\n nextEl: '.vesta-next-review',\n prevEl: '.vesta-prev-review'\n }\n },\n 910: {\n slidesPerView: 3,\n spaceBetween: 20,\n navigation: {\n nextEl: '.vesta-next-review',\n prevEl: '.vesta-prev-review'\n }\n }\n }\n });\n } catch (error) {\n console.log(error);\n }\n }\n}\n","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static values = {\n gdcEnabled: Boolean\n }\n\n connect() {\n this.disableGdcOption();\n }\n\n disableGdcOption() { \n if (this.gdcEnabledValue) return;\n \n const gdcOption = this.element.querySelector(`input[value='GENSDECONFIANCE_ANCIEN']`)\n gdcOption.disabled = true\n }\n\n handleCheckbox(event) {\n const portalPairs = {\n 'BELLES_DEMEURES': 'LUX_RESIDENCE',\n 'LUX_RESIDENCE': 'BELLES_DEMEURES',\n 'SELOGER': 'LOGIC_IMMO',\n 'LOGIC_IMMO': 'SELOGER'\n }\n\n const checkbox = event.target\n const linkedPortal = portalPairs[checkbox.value]\n\n if (linkedPortal) {\n const linkedCheckbox = this.element.querySelector(`input[value=\"${linkedPortal}\"]`)\n if (linkedCheckbox) linkedCheckbox.checked = checkbox.checked\n }\n }\n}\n","import { Controller } from '@hotwired/stimulus';\nimport { agencyFees } from '../../shared/helpers/agencyFeesHelper';\n\nexport default class extends Controller {\n static targets = ['feesForm', 'price', 'newFees', 'newFeesValue', 'newFeesInput']\n static values = {\n parisRegion: Boolean,\n parkingKind: Boolean,\n noExclusivity: Boolean,\n currentFees: Number,\n currentPrice: Number\n }\n\n connect() {\n this.displayFees()\n }\n\n checkChangePrice() {\n if (this.currentPriceValue != this.priceTarget.value) this.displayFees();\n }\n\n displayFees() {\n const newFees = this.parkingKindValue ? 2500 : agencyFees(this.parisRegionValue, parseInt(this.priceTarget.value.replaceAll(' ', '')), this.noExclusivityValue)\n\n if (newFees !== this.currentFeesValue && this.priceTarget.value) {\n this.feesFormTarget.classList.remove('vesta-display-none')\n this.newFeesValueTarget.value = newFees\n this.newFeesInputTarget.value = newFees.toLocaleString('fr-FR')\n this.newFeesTarget.innerText = newFees.toLocaleString('fr-FR', { style: \"currency\", currency: \"EUR\", maximumFractionDigits: 0 })\n } else {\n this.newFeesValueTarget.value = newFees\n this.newFeesInputTarget.value = newFees.toLocaleString('fr-FR')\n this.feesFormTarget.classList.add('vesta-display-none')\n }\n }\n}\n","import { Controller } from '@hotwired/stimulus';\nimport { agencyFees } from '../../shared/helpers/agencyFeesHelper';\n\nexport default class extends Controller {\n static targets = ['mandatePrice', 'warning', 'noWarning', 'sendMandate', 'premiumPack', 'agencyFees', 'exclusivity', 'buyerFees', 'mandateFeesPercentage']\n static values = {\n parisRegion: Boolean,\n parkingKind: Boolean,\n agencyFees: Number,\n liquidSale: Boolean,\n leadAgent: Boolean,\n estimationHigh: Number\n }\n\n connect() {\n this.displayWarning();\n\n if (!this.leadAgentValue) this.buyerFeesTarget.onclick = (e) => { e.preventDefault(); }\n this.premiumPackTarget.checked ? this.disallowPremium() : this.checkPremium();\n this.computeFees();\n }\n\n displayWarning() {\n const mandatePrice = parseInt(this.mandatePriceTarget.value.replace(/\\s+/g, ''))\n const delta = (mandatePrice - this.estimationHighValue) / this.estimationHighValue * 100\n\n if(!this.leadAgentValue && !this.parkingKindValue) {\n if (isNaN(delta)) {\n this.noWarningTarget.classList.add('hidden')\n this.warningTarget.classList.add('hidden')\n this.sendMandateTarget.disabled = true\n } else if (delta < 5 || this.liquidSaleValue) {\n this.noWarningTarget.classList.remove('hidden')\n this.warningTarget.classList.add('hidden')\n this.sendMandateTarget.disabled = false\n } else if (delta >= 5) {\n this.warningTarget.classList.remove('hidden')\n this.noWarningTarget.classList.add('hidden')\n this.sendMandateTarget.disabled = true\n }\n }\n }\n\n computeFees() {\n this.checkPremium();\n\n const mandatePrice = parseInt(this.mandatePriceTarget.value.replace(/\\s+/g, '')) || 0;\n const noExclusivity = this.exclusivityTargets.filter(target => target.value == 'false')[0];\n\n let newFees = this.parkingKindValue ? '2 500' : agencyFees(\n this.parisRegionValue,\n mandatePrice,\n noExclusivity.checked\n ).toLocaleString('fr-FR');\n\n this.agencyFeesTarget.value = newFees;\n this.agencyFeesTarget.nextElementSibling.value = parseInt(newFees.replace(/\\s+/g, ''));\n\n this.computeFeesPercentage()\n }\n\n computeFeesPercentage() {\n const mandatePrice = parseInt(this.mandatePriceTarget.value.replace(/\\s+/g, '')) || 0;\n const fees = parseInt(this.agencyFeesTarget.value.replace(/\\s+/g, ''))\n const percentage = (fees/mandatePrice)*100\n\n if (typeof percentage === 'number' && isFinite(percentage)) {\n this.mandateFeesPercentageTarget.innerText = `${Math.round(percentage*100)/100}%`\n } else {\n this.mandateFeesPercentageTarget.innerText = ''\n }\n }\n\n checkPremium() {\n const mandatePrice = parseInt(this.mandatePriceTarget.value.replace(/\\s+/g, ''));\n\n if ((!this.parisRegionValue && mandatePrice > process.env.PREMIUM_START_VALUE_REGIONS) || mandatePrice > process.env.PREMIUM_START_VALUE_PARIS) {\n this.premiumPackTarget.checked = true\n this.disallowPremium();\n } else {\n this.premiumPackTarget.checked = false\n this.allowPremium();\n }\n }\n\n disallowPremium() {\n if (!this.leadAgentValue) {\n this.premiumPackTarget.classList.add('not-allowed-cursor');\n this.premiumPackTarget.onclick = (e) => { e.preventDefault(); }\n }\n }\n\n allowPremium() {\n if (!this.leadAgentValue) {\n this.premiumPackTarget.classList.remove('not-allowed-cursor');\n this.premiumPackTarget.onclick = null;\n }\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nimport SET_MAP from '../config/mapbox/setMap'\nimport SET_MARKERS from '../config/mapbox/setMarkers'\nimport SET_POPUP from '../config/mapbox/setPopup';\n\nexport default class extends Controller {\n static values = { url: String,\n zones: Array,\n cta: String,\n publicKey: String,\n style: String };\n\n connect() {\n this.map = null;\n this.initMapbox();\n this.searchZone();\n }\n\n initMapbox() {\n this.map = SET_MAP.initMap(this.publicKeyValue, [1.7191, 47.7833], 4.5, this.styleValue, 'mapbox-zones')\n\n this.map.on('load', () => {\n this.map.setLayoutProperty('country-label', 'text-field', ['get', 'name_fr']);\n this.map.setLayoutProperty('state-label', 'text-field', ['get', 'name_fr']);\n this.map.setLayoutProperty('settlement-subdivision-label', 'text-field', ['get', 'name_fr']);\n });\n\n this.map.doubleClickZoom.disable();\n\n this.zonesValue.forEach((zoneInfos) => {\n const popup = this.createPopup(zoneInfos[2]);\n SET_MARKERS.main(this.map, [zoneInfos[1], zoneInfos[0]], popup)\n });\n }\n\n searchZone() {\n if ($('#search-zone')) {\n $('#search-zone').on('select2:select', (e) => {\n const closePopup = document.querySelector('.mapboxgl-popup-close-button');\n const zoneName = e.params.data.text;\n const coordinates = e.params.data.id.split('&');\n\n this.lat = coordinates[0].split('=')[1];\n this.lng = coordinates[1].split('=')[1];\n\n if (closePopup) closePopup.click();\n\n this.map.flyTo({ center: [this.lng, this.lat], zoom: 12 });\n\n if (zoneName) {\n this.createPopup(zoneName).setLngLat([this.lng, this.lat]).addTo(this.map);\n }\n });\n }\n }\n\n createPopup = (zoneName) => {\n // TODO LATER => handle responsive with popupOffsets, poputip (arrow) and vesta-tooltip\n // https://docs.mapbox.com/mapbox-gl-js/api/markers/#popup-example\n const popupOffsets = {\n top: [0, 0],\n 'top-left': [0, 0],\n 'top-right': [0, 0],\n bottom: [0, 0],\n 'bottom-left': [0, 0],\n 'bottom-right': [0, 0],\n left: [0, 0],\n right: [0, 0]\n };\n\n const HTMLContent =\n `\n \n
\n
\n \"tooltip\"
\n
\n

${zoneName}

\n
${this.ctaValue}
\n
\n
\n
\n `\n\n return SET_POPUP.init(popupOffsets, HTMLContent)\n };\n}\n","import { Controller } from '@hotwired/stimulus';\nimport SET_MAP from '../config/mapbox/setMap';\nimport SET_MARKERS from '../config/mapbox/setMarkers';\n\nexport default class extends Controller {\n static values = {\n propertyLat: String,\n propertyLng: String,\n style: String,\n publicKey: String,\n approximateLocation: Boolean,\n zoom: Number\n };\n\n connect() {\n this.handleCenter()\n this.initZoom()\n this.handleMap();\n this.handleMarker();\n this.handleZoom()\n }\n\n handleMap = () => {\n this.map = SET_MAP.initMap(this.publicKeyValue, this.center, this.zoom, this.styleValue, 'vesta-mapbox')\n this.map.addControl(new mapboxgl.NavigationControl());\n };\n\n handleMarker = () => {\n if (this.approximateLocationValue === true) {\n this.marker = SET_MARKERS.main(this.map, [this.propertyLngValue, this.propertyLatValue], '','hosman-marker--approx-location')\n } else {\n SET_MARKERS.main(this.map, [this.propertyLngValue, this.propertyLatValue])\n }\n };\n\n handleCenter() {\n if (this.hasApproximateLocationValue && this.approximateLocationValue) this.center = [Math.floor(this.propertyLngValue * 1000 + 2) / 1000, Math.floor(this.propertyLatValue * 1000 + 2)]\n this.center = [this.propertyLngValue, this.propertyLatValue]\n }\n\n initZoom() {\n if (this.hasZoomValue) this.zoom = this.zoomValue\n else if (this.hasApproximateLocationValue && this.approximateLocationValue) this.zoom = 12\n else this.zoom = 11\n }\n\n handleZoom() {\n if(this.marker === undefined) return\n\n this.map.on('zoom', () => {\n const zoom = this.map.getZoom();\n const baseMarkerSize = 600;\n const scalingFactor = 0.5;\n\n const scaledMarkerSize = baseMarkerSize * Math.pow(scalingFactor, this.zoomValue - zoom);\n if (scaledMarkerSize < 30) return\n\n this.marker.getElement().style.width = scaledMarkerSize + 'px';\n this.marker.getElement().style.height = scaledMarkerSize + 'px';\n });\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = [ 'marqueeContent', 'marqueeItem' ];\n\n connect() {\n this.marqueeItemTargets.forEach(item => {\n const clone = item.cloneNode(true);\n this.marqueeContentTarget.appendChild(clone);\n });\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = ['containerNavAdvert', 'advertNav'];\n\n connect() {\n this.handleScroll();\n }\n\n handleScroll = () => {\n let lastScrollChange = 0;\n\n window.onscroll = () => {\n const currentScroll = window.scrollY;\n\n if (currentScroll > lastScrollChange) {\n this.advertNavTarget.classList.add('vesta-flex-important-mobile');\n lastScrollChange = currentScroll\n }\n\n if (currentScroll === 0 || currentScroll < lastScrollChange - 100) {\n this.advertNavTarget.classList.remove('vesta-flex-important-mobile');\n lastScrollChange = currentScroll\n }\n };\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = ['modal', 'backdrop', 'modalContainer'];\n\n show() {\n this.modalTarget.classList.add('is-active');\n this.backdropTarget.classList.add('is-active');\n this.modalContainerTarget.classList.add('is-active');\n setTimeout(() => {\n this.modalTarget.classList.add('show');\n this.backdropTarget.classList.add('show');\n }, 10);\n }\n\n hide() {\n this.modalTarget.classList.remove('show');\n this.backdropTarget.classList.remove('show');\n this.modalTarget.classList.remove('is-active');\n this.backdropTarget.classList.remove('is-active');\n this.modalContainerTarget.classList.remove('is-active');\n }\n}\n","import { Controller } from '@hotwired/stimulus';\nexport default class extends Controller {\n static targets = ['default', 'scrolled']\n static values = {\n dropdownType: String,\n scrollInactive: String\n }\n\n connect() {\n this.prevScrollPosition = window.pageYOffset;\n }\n\n scroll = () => {\n // Doesn't apply nav changes for admin\n if ((this.hasScrollInactiveValue && this.scrollInactiveValue === 'true') || !this.hasDefaultTarget) return\n\n const currentScrollPosition = window.pageYOffset;\n if (this.prevScrollPosition > currentScrollPosition && currentScrollPosition > 400) {\n this.defaultTarget.classList.remove('vesta-display-none--custom');\n this.scrolledTarget.classList.add('vesta-display-none--custom');\n } else if (this.prevScrollPosition < currentScrollPosition && currentScrollPosition > 400) {\n this.defaultTarget.classList.add('vesta-display-none--custom');\n this.scrolledTarget.classList.remove('vesta-display-none--custom');\n }\n\n this.prevScrollPosition = currentScrollPosition;\n }\n\n openDropdown = () => {\n const chevronEl = document.querySelector(`i[data-chevron-target=\"${this.dropdownTypeValue}\"]`);\n this.dropdownEl = document.querySelector(`div[data-dropdown-target=\"${this.dropdownTypeValue}\"]`);\n if (this.dropdownEl) {\n this.dropdownEl.classList.add('active');\n if (chevronEl) chevronEl.className = chevronEl.className.replace('down', 'up');\n }\n }\n\n closeDropdown = () => {\n this.dropdownOpen = document.querySelector('.dropdown-menu-container.active');\n const chevronUp = document.querySelector('.fas.fa-chevron-up.menu');\n if (chevronUp) chevronUp.className = chevronUp.className.replace('up', 'down');\n if (this.dropdownOpen) this.dropdownOpen.classList.remove('active');\n }\n\n closeDropdownOnDocument = (e) => {\n if (e.target.classList.contains('fa-user') || e.target.classList.contains('vesta-user-initials') || e.target.dataset.chevronTarget === 'avatar-mobile') return;\n this.closeDropdown();\n }\n\n toggleDropdownMobile = () => {\n this.dropdownOpen = document.querySelector('.dropdown-menu-container.active');\n if(this.dropdownOpen) {\n this.closeDropdown();\n } else {\n this.openDropdown();\n }\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = [\n 'saleNewNotary',\n 'saleNewNotaryClerc',\n 'saleEditNotary',\n 'offerNewNotary',\n 'offerNewNotaryClerc',\n 'offerEditNotary',\n ]\n\n displayForm(event) {\n const formClicked = this.targets.find(event.currentTarget.dataset.form)\n this.constructor.targets.filter(target => {\n const notCurrent = target !== event.currentTarget.dataset.form;\n const isForm = target.match(/NewNotary|EditNotary/);\n return (notCurrent && isForm);\n }).forEach((target) => {\n const form = this.targets.find(target)\n if (form) {\n form.classList.add('vesta-display-none')\n }\n });\n\n formClicked.classList.toggle('vesta-display-none')\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = ['containerNumbers', 'numberKeys'];\n\n connect() {\n this.initializeIntersectionObserver();\n }\n\n initializeIntersectionObserver = () => {\n const options = {\n root: null,\n rootMargin: '200px',\n threshold: 0.5\n };\n\n const observer = new IntersectionObserver(this.handleObserver, options);\n if (this.containerNumbersTarget) {\n observer.observe(this.containerNumbersTarget);\n }\n };\n\n handleObserver = (entities) => {\n const target = entities[0];\n if (target.isIntersecting) {\n this.animateNumber();\n }\n };\n\n animateNumber = () => {\n const speed = 200;\n this.numberKeysTargets.forEach((block) => {\n const animate = () => {\n const value = +block.getAttribute('number');\n const data = +block.innerText;\n const time = value / speed;\n\n if (data < value) {\n block.innerText = Math.ceil(data + time);\n setTimeout(animate, 1);\n } else {\n block.innerText = value;\n }\n };\n animate();\n });\n };\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n // action bound to left click \"click\"\n // whereTo must be a base64 encoded string\n goto(e) {\n if (e.ctrlKey || e.target.dataset.howTo === 'blank') {\n // open in new tab or new window\n window.open(atob(e.target.dataset.whereTo), '_blank').focus();\n } else {\n // go to new location in same tab\n document.location.href = atob(e.target.dataset.whereTo);\n }\n }\n\n // action bound to right click \"contextmenu\"\n nope(e) {\n e.preventDefault();\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n // static targets = ['link'];\n\n connect() {\n // Change trix CTA pointing to lead (related to seller/buyer guide)\n this.guideCardBlockV1 = document.getElementsByTagName(\"guide_card_block_v1\");\n if(this.guideCardBlockV1[0] && this.guideCardBlockV1[0].innerText.toLowerCase().includes('commencer mon estimation')) {\n this.getLastChildrenNodes();\n this.createSpanEl();\n\n this.lastChildrenNode = this.getLastChildrenNodes();\n if(this.lastChildrenNode.innerText.toLowerCase().includes('commencer mon estimation')) {\n this.changeLastChildrenNode();\n }\n }\n }\n\n getLastChildrenNodes = () => {\n return this.guideCardBlockV1[0].children[this.guideCardBlockV1[0].children.length - 1]\n }\n\n createSpanEl = () => {\n this.spanEl = document.createElement('span');\n this.spanEl.className = 'btn';\n this.spanEl.classList.add('btn-primary', 'btn-lg', 'link-obfuscation');\n this.spanEl.innerHTML = \"Commencer l'estimation\";\n this.spanEl.dataset.action = 'click->application--obfuscation-link#decodeUrlLinks'\n this.spanEl.dataset.encode = btoa('https://app.hosman.co/estimation');\n this.spanEl.dataset.blank = 'true';\n }\n\n changeLastChildrenNode = () => {\n this.lastChildrenNode.remove();\n this.lastChildrenNode = this.getLastChildrenNodes();\n this.lastChildrenNode.parentNode.insertBefore(this.spanEl, this.lastChildrenNode.nextSibling);\n }\n\n decodeUrlLinks = (e) => {\n let EncodedUrl = e.currentTarget.dataset.encode;\n let DecodedUrl = atob(EncodedUrl);\n window.open(DecodedUrl, e.currentTarget.dataset.blank === 'true' ? '_blank' : '_self');\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = ['tooltip'];\n\n changeSelection(event) {\n const reasonType = event.currentTarget.id;\n const selectedReason = event.currentTarget.value;\n let selectedTooltip = document.getElementById(reasonType + \"_\" + selectedReason)\n\n this.tooltipTargets.forEach(tooltip => tooltip.style.display = 'none');\n\n if (selectedTooltip)\n selectedTooltip.style.display = 'block';\n }\n}\n","import { Controller } from '@hotwired/stimulus';\nimport slideUp from '../../packs/main/application/slide_up.js'\nimport slideDown from '../../packs/main/application/slide_down.js'\nexport default class extends Controller {\n static targets = ['repeatLoanCondition',\n 'loanConditionInfo',\n 'apportInfo',\n 'offerSubmitFinancials',\n 'submitPromiseOfFinancing',\n 'financePromiseDocDiv',\n 'financePromiseIconSuccess',\n 'docToUpload',\n 'docUploaded',\n 'prettoCardInfo',\n 'openPrettoSection',\n 'loadingLayerSizedAbsolute']\n\n // -------------------- Offer conditions --------------------\n active = (e) => {\n const radioBtnValue = e.currentTarget.value\n if(radioBtnValue === 'true') {\n this.repeatLoanConditionTarget.classList.remove('hidden')\n } else {\n this.repeatLoanConditionTarget.classList.add('hidden');\n }\n }\n\n toggleLoanConditionInfo = () => {\n this.loanConditionInfoTarget.classList.toggle('hidden');\n }\n\n toggleApportInfo = () => {\n this.apportInfoTarget.classList.toggle('hidden');\n }\n\n // -------------------- Offer financials --------------------\n toggleLoanPartner = (e) => {\n if (!this.hasOfferSubmitFinancialsTarget) {\n this.offerSubmitFinancialsTarget = this.submitPromiseOfFinancingTarget;\n }\n if (this.hasOfferSubmitFinancialsTarget) {\n if (e.currentTarget.checked === true) {\n this.offerSubmitFinancialsTarget.disabled = false;\n } else {\n this.offerSubmitFinancialsTarget.disabled = true;\n }\n }\n }\n\n openPrettoSection = (e) => {\n if (this.prettoCardInfoTarget.style.display == 'block') {\n e.currentTarget.childNodes[1].classList.remove('selected-card')\n slideUp(this.prettoCardInfoTarget, 200);\n // TODO replace with pure JS\n $(\"html, body\").animate({ scrollTop: 0 }, \"slow\");\n } else {\n e.currentTarget.childNodes[1].classList.add('selected-card')\n slideDown(this.prettoCardInfoTarget, 200);\n // TODO replace with pure JS\n $(\"html, body\").animate({ scrollTop: document.body.scrollHeight }, \"slow\");\n }\n }\n\n redirectToUpload = (e) => {\n slideUp(this.prettoCardInfoTarget, 200);\n this.openPrettoSectionTarget.childNodes[1].classList.remove('selected-card')\n e.target.classList.add('selected-card');\n this.loadingLayerSizedAbsoluteTarget.style.display = 'flex';\n }\n\n // -------------------- Offer promise of financing --------------------\n fileInput = (event) => {\n setTimeout(() => {\n if (event.target.value !== '') {\n this.submitPromiseOfFinancingTarget.disabled = false;\n this.submitPromiseOfFinancingTarget.removeAttribute(\"id\")\n this.financePromiseIconSuccessTarget.classList.remove('hidden');\n this.financePromiseDocDivTarget.classList.add('saledoc-card--success')\n this.docToUploadTarget.classList.add('hidden');\n this.docUploadedTarget.classList.remove('hidden');\n }\n }, 1000);\n }\n}\n","import { Controller } from '@hotwired/stimulus';;\n\nexport default class extends Controller {\n static targets = ['submitButton']\n\n activate() {\n this.submitButtonTarget.disabled = false;\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = ['item', 'totalPages', 'currentPage', 'previousPageButton', 'nextPageButton', 'buttons']\n\n connect() {\n this.perPage = 5\n this.showPage(1)\n }\n\n showPage(page) {\n this.disabledValue = false\n const start = (page - 1) * this.perPage\n const end = start + this.perPage\n this.itemTargets.forEach((item, index) => item.style.display = index >= start && index < end ? \"\" : \"none\")\n this.currentPageTarget.innerText = page\n this.totalPagesTarget.innerText = this.pageCount\n this.handleDisabledButtons(page === 1, this.previousPageButtonTarget)\n this.handleDisabledButtons(page >= this.pageCount, this.nextPageButtonTarget)\n }\n\n nextPage() {\n const currentPage = this.currentPage\n if (currentPage < this.pageCount) {\n this.showPage(currentPage + 1)\n }\n }\n\n previousPage() {\n const currentPage = this.currentPage\n if (currentPage > 1) {\n this.showPage(currentPage - 1)\n }\n }\n\n handleDisabledButtons(reachedPageLimit, button) {\n if (reachedPageLimit) button.disabled = true\n else button.disabled = false\n }\n\n get currentPage() {\n return Math.ceil(Array.from(this.itemTargets).findIndex(item => item.style.display !== \"none\") / this.perPage + 1)\n }\n\n get pageCount() {\n return Math.ceil(this.itemTargets.length / this.perPage)\n }\n\n search(event) {\n if (event.target.value.length === 0) {\n this.showPage(1)\n this.buttonsTarget.style.display = \"\"\n return\n }\n\n this.buttonsTarget.style.display = 'none'\n\n const searchTerm = event.target.value.trim().toLowerCase()\n\n this.filteredItems = this.itemTargets.filter(item => {\n const email = item.dataset.email.toLowerCase()\n return email.includes(searchTerm)\n })\n\n this.renderFilteredItems()\n this.currentPageTarget.innerText = this.currentPage\n }\n\n renderFilteredItems() {\n this.itemTargets.forEach(item => {\n item.style.display = this.filteredItems.includes(item) ? \"\" : \"none\"\n })\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = [ 'input' ];\n\n toggleVisibility(e) {\n const type = this.inputTarget.getAttribute('type') === 'password' ? 'text' : 'password';\n this.inputTarget.setAttribute('type', type);\n e.currentTarget.classList.toggle('fa-eye-slash')\n e.currentTarget.classList.toggle('fa-eye')\n }\n}\n","import { Controller } from '@hotwired/stimulus';\nimport SlimSelect from 'slim-select'\n\nexport default class extends Controller {\n static targets = [ 'clientFields', 'userSelect', 'classicVisitFields' ];\n\n initialize() {\n new SlimSelect({\n select: this.userSelectTarget,\n events: {\n search: (search) => {\n return new Promise((resolve) => {\n \n fetch(`/admin/clients?q[first_name_unaccent_or_last_name_unaccent_or_email_cont]=${search}`, {\n method: 'GET',\n headers: {'Content-Type': 'application/json'},\n }).then((response) => response.json())\n .then((data) => {\n const options = data.map(item => {\n const full_name = (item.first_name || item.last_name) ? [item.first_name, item.last_name].join(' ') : null\n const text = [full_name, item.email].filter(n => n).join(' - ')\n return { \"value\": item.id, \"text\": text }\n });\n resolve(options)\n })\n })\n }\n }\n })\n }\n\n showClientFields() {\n this.clientFieldsTarget.classList.toggle('vesta-display-none');\n }\n\n showClassicVisitFields(e) {\n if (e.target.value === 'classic') {\n this.classicVisitFieldsTargets.forEach(el => {\n el.classList.remove('vesta-display-none');\n })\n } else {\n this.classicVisitFieldsTargets.forEach(el => {\n el.classList.add('vesta-display-none');\n })\n }\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n connect = () => {\n setTimeout(() => {\n const selectionRendered = document.querySelector('.custom-phone-select2');\n if (selectionRendered) {\n if (selectionRendered.nextElementSibling) {\n const selected = selectionRendered.nextElementSibling.querySelector('.select2-selection__rendered');\n selected.textContent = selected.textContent.split(' ')[0];\n }\n }\n }, 100);\n }\n}\n","import { Controller } from \"@hotwired/stimulus\";\n\nexport default class extends Controller {\n static targets = [\"canvas\", \"source\"];\n\n show() {\n const reader = new FileReader();\n\n reader.onload = function () {\n this.canvasTarget.removeAttribute(\"hidden\");\n\n this.canvasTarget.src = reader.result;\n }.bind(this)\n\n reader.readAsDataURL(this.sourceTarget.files[0]);\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = [\n 'apartmentProperty',\n 'selectedHouseKind',\n 'selectedApartmentKind'\n ]\n\n checks = (e) => {\n\n let houseKind = this.selectedHouseKindTarget;\n let apartmentKind = this.selectedApartmentKindTarget;\n\n let select_min_floor = document.getElementById('user_buyer_alerts_attributes_0_min_floor_for_elevator');\n let select_floor = document.getElementById('user_buyer_alerts_attributes_0_floor');\n\n e.currentTarget.classList.toggle('selected');\n if (houseKind.classList.contains('selected') && apartmentKind.classList.contains('selected')) {\n if(this.apartmentPropertyTarget.classList.contains('vesta-invisible')) {\n this.apartmentPropertyTarget.classList.toggle('vesta-invisible');\n }\n }\n else if (houseKind.classList.contains('selected')) {\n select_min_floor.selectedIndex = 0;\n select_floor.selectedIndex = 0;\n this.apartmentPropertyTarget.classList.toggle('vesta-invisible');\n }\n else {\n if (this.apartmentPropertyTarget.classList.contains('vesta-invisible')) {\n this.apartmentPropertyTarget.classList.toggle('vesta-invisible');\n }\n }\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = [ 'selectStatusForm' ];\n\n changeColor(e) {\n const regex = /status--.+/\n const colorClass = Array.from(e.currentTarget.classList).find(value => regex.test(value))\n e.currentTarget.classList.remove(colorClass)\n e.currentTarget.classList.add(`status--${e.currentTarget.value}`)\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static values = {\n url: String\n }\n\n connect() {\n setTimeout(() => {\n window.location.href = this.urlValue;\n }, 10000);\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n selectNotSendReason = (e) => {\n let sendButton = e.target.closest('form').querySelector('input[type=\"submit\"]')\n sendButton.classList.toggle('hidden');\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = [ 'publicationInput', 'modalButton', 'submitButton' ]\n\n initialize() {\n this.handlePriceWarning()\n }\n\n handlePriceWarning = () => {\n if (!this.modalButtonTarget || !this.submitButtonTarget) return;\n\n if (this.publicationInputTarget.checked) {\n this.modalButtonTarget.classList.remove('hidden')\n this.submitButtonTarget.classList.add('hidden')\n } else {\n this.modalButtonTarget.classList.add('hidden')\n this.submitButtonTarget.classList.remove('hidden')\n }\n }\n}\n","import { Controller } from '@hotwired/stimulus';\nimport Swiper from 'swiper/bundle';\n\nexport default class extends Controller {\n connect() {\n this.fetchSales();\n }\n\n fetchSales = async () => {\n const headers = {\n 'X-CSRF-Token': document.getElementsByName('csrf-token')[0].getAttribute('content'),\n 'X-Requested-With': 'XMLHttpRequest',\n 'Accept': 'text/html'\n }\n\n try {\n const response = await fetch(\n '/pages/sales', {\n method: 'GET',\n headers: headers,\n credentials: 'same-origin'\n }\n )\n // get content from response\n const content = await response.text();\n // fill partial with content\n document.getElementById('sales-carousel-remote').innerHTML = await content;\n // then trigger carousel\n await new Swiper('.last-sales-carousel', {\n slidesPerView: 1,\n spaceBetween: 40,\n centeredSlides: false,\n navigation: {\n nextEl: '.next-sale',\n prevEl: '.prev-sale'\n },\n breakpoints: {\n 640: {\n centeredSlides: false,\n slidesPerView: 2,\n spaceBetween: 5\n },\n 1024: {\n centeredSlides: false,\n slidesPerView: 3,\n spaceBetween: 100\n },\n 1550: {\n centeredSlides: false,\n slidesPerView: 4,\n spaceBetween: 100\n }\n }\n });\n } catch (error) {\n console.log(error);\n }\n }\n}\n","const UPDATE_LAYERS = {\n paintSector(map, layerId, action, hosmanSectorId, value, defaultValue = 'transparent') {\n map.setPaintProperty(layerId, action, ['match', ['get', 'hosman_id'], hosmanSectorId, value, defaultValue]);\n }\n}\n\nexport default UPDATE_LAYERS;\n","import { Controller } from '@hotwired/stimulus';\n\nimport { fetchProperties } from '../../api/properties'\n\nimport SET_MAP from '../../config/mapbox/setMap'\nimport SET_LAYERS from '../../config/mapbox/setLayers'\nimport SET_MARKERS from '../../config/mapbox/setMarkers'\n\nimport UPDATE_LAYERS from './functions/updateLayers'\n\nimport { generateLayerId, filterZone, fillPaint, linePaint, SOURCE_ID } from '../henriette/mapbox_options'\n\nconst COLORS = { 'blue-100': '#5076F6', 'purple-100': '#21175A', 'neutral-30': '#4B485F', 'neutral-40': '#BCBAC3', transparent: 'transparent' };\n\nexport default class extends Controller {\n static values = {\n publicKey: String,\n style: String,\n tilesetId: String,\n propertyLat: String,\n propertyLng: String,\n quarterLat: String,\n quarterLng: String,\n hosmanSectorId: Number,\n avgPriceHouse: String,\n avgPriceApartment: String,\n propertyKind: String,\n zoom: Number\n }\n\n static targets = [\n 'generalContent',\n 'customContent',\n 'soldPropertiesCount',\n 'soldPropertiesCountTitle',\n 'awaitingOfferPropertiesCount',\n 'propertiesCount',\n 'avgPrice',\n 'awaitingOfferPropertiesCard',\n 'soldPropertiesText',\n 'awaitingOfferPropertiesText',\n 'avgPriceCard'\n ]\n\n connect = async () => {\n await this.handleProperties()\n if (this.properties.length > 3) this.customContentTargets.forEach(content => content.classList.remove('vesta-display-none'))\n else this.generalContentTarget.classList.remove('vesta-display-none')\n this.mapboxMap = SET_MAP.initMap(this.publicKeyValue, [this.quarterLngValue, this.quarterLatValue], this.zoomValue ? this.zoomValue : 13, this.styleValue, 'sales-sector-map')\n this.mapboxMapLoaded()\n await this.handleMarkers()\n await this.handleCardContent()\n // await this.handleGeoDatum()\n if (window.matchMedia(\"(max-width: 430px)\").matches) this.handleMapWithSmallScreen()\n }\n\n mapboxMapLoaded = () => {\n this.mapboxMap.on('load', async () => {\n SET_MAP.initSource(this.mapboxMap, 'geo-datas', this.tilesetIdValue)\n\n SET_LAYERS.withOptions({\n map: this.mapboxMap,\n layerId: generateLayerId('fill', 'quarter'),\n sourceId: SOURCE_ID,\n type: 'fill',\n filter: filterZone('quarter'),\n paint: fillPaint(COLORS['purple-100'], COLORS['blue-100'])\n });\n\n SET_LAYERS.withOptions({\n map: this.mapboxMap,\n layerId: generateLayerId('line', 'quarter'),\n sourceId: SOURCE_ID,\n type: 'line',\n filter: filterZone('quarter'),\n paint: linePaint()\n });\n\n UPDATE_LAYERS.paintSector(this.mapboxMap, 'geo-datas-fill-quarter', 'fill-color', this.hosmanSectorIdValue, COLORS['blue-100'])\n UPDATE_LAYERS.paintSector(this.mapboxMap, 'geo-datas-line-quarter', 'line-color', this.hosmanSectorIdValue, COLORS['blue-100'])\n UPDATE_LAYERS.paintSector(this.mapboxMap, 'geo-datas-line-quarter', 'line-width', this.hosmanSectorIdValue, 3, 0)\n })\n }\n\n handleProperties = async () => {\n this.properties = await fetchProperties(this.hosmanSectorIdValue);\n this.propertiesCount = this.properties.length\n this.propertiesSoldCount = this.properties.filter(property => property.state === 'sold').length\n this.propertiesAwaitingOfferCount = this.propertiesCount - this.propertiesSoldCount\n }\n\n handleGeoDatum = async () => {\n const avgPrice = this.numberToCurrency(this.propertyKindValue === 'house' ? Number(this.avgPriceHouseValue) : Number(this.avgPriceApartmentValue))\n if (this.hasAvgPriceTarget) this.avgPriceTarget.innerHTML = avgPrice\n }\n\n handleMarkers = () => {\n // handle main marker\n SET_MARKERS.main(this.mapboxMap, [this.propertyLngValue, this.propertyLatValue])\n // handle others marker\n const soldPropertiesCount = this.properties.filter(property => property.state === 'sold').length\n if (soldPropertiesCount > 0) this.properties.forEach(property => SET_MARKERS.specific(this.mapboxMap, property))\n }\n\n handleCardContent = () => {\n if (this.hasPropertiesCountTarget) this.propertiesCountTarget.innerHTML = this.propertiesCount\n if (this.hasSoldPropertiesCountTarget) this.soldPropertiesCountTarget.innerHTML = `${this.propertiesSoldCount < 10 ? 0 : ''}${this.propertiesSoldCount}`\n if (this.hasSoldPropertiesCountTitleTarget) this.soldPropertiesCountTitleTarget.innerHTML = this.propertiesSoldCount\n if (this.propertiesAwaitingOfferCount === 0) this.awaitingOfferPropertiesCardTarget.classList.add('vesta-display-none')\n if (this.hasAwaitingOfferPropertiesCountTarget) this.awaitingOfferPropertiesCountTarget.innerHTML = `${this.propertiesAwaitingOfferCount < 10 ? 0 : ''}${this.propertiesAwaitingOfferCount}`\n if (this.hasSoldPropertiesTextTarget) this.soldPropertiesTextTarget.innerHTML = `Bien${this.propertiesSoldCount > 1 ? 's' : ''} vendu${this.propertiesSoldCount > 1 ? 's' : ''}`\n if (this.hasAwaitingOfferPropertiesTextTarget) this.awaitingOfferPropertiesTextTarget.innerHTML = `Bien${this.propertiesAwaitingOfferCount > 1 ? 's' : ''} à vendre`\n }\n\n handleMapWithSmallScreen = () => {\n this.mapboxMap.scrollZoom.disable();\n this.mapboxMap.dragPan.disable();\n }\n\n numberToCurrency = (number) => {\n return number.toLocaleString('fr-FR', { style: 'currency', currency: 'EUR', minimumFractionDigits: 0, maximumFractionDigits: 0 });\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n displayHint = (event) => {\n const newKind = event.currentTarget.value;\n const container = event.currentTarget.closest('.sales-user-fields-container');\n const otherHints = container.querySelectorAll('.kind-hint');\n const newHint = container.querySelector('.kind-hint-' + newKind);\n\n otherHints.forEach((el) => { el.classList.add('hidden') });\n if (newHint) newHint.classList.remove('hidden');\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = ['userSelect']\n\n initialize() {\n this.initSelect2()\n\n // NOTE: fields to auto complete user details, no fields to just find a user\n if (document.getElementById('client-data-fields') !== null) {\n this.addListener()\n }\n\n const user_id = this.userSelectTarget.value;\n if (user_id) this.fetchUser(user_id, this.selectUser.bind(this));\n }\n\n initSelect2() {\n $(this.userSelectTarget).select2({\n allowClear: true,\n placeholder: 'prenom.nom@example.com',\n ajax: {\n url: '/admin/clients',\n dataType: 'json',\n delay: 250,\n data: (params) => {\n return {\n \"q[first_name_unaccent_or_last_name_unaccent_or_email_cont]\": params.term\n };\n },\n processResults: (data) => {\n const results = $.map(data, (item) => {\n const full_name = (item.first_name || item.last_name) ? [item.first_name, item.last_name].join(' ') : null\n const text = [full_name, item.email].filter(n => n).join(' - ')\n return { \"id\": item.id, \"text\": text }\n });\n return { \"results\": results }\n }\n }\n })\n }\n\n addListener() {\n $(this.userSelectTarget)\n .on('select2:select', (e) => this.fetchUser(e.params.data.id, this.selectUser.bind(this)))\n .on('select2:unselect', () => this.unselectUser())\n }\n\n selectUser(user) {\n this.fillField('email', user.email, true);\n this.fillField('first_name', user.first_name, true);\n this.fillField('last_name', user.last_name, true);\n this.fillField('phone_number', user.phone_number, true);\n this.fillField('phone_country_code', user.phone_country_code, true);\n\n if (user.civility) {\n document.querySelector('input[name*=\"[civility]\"][value=\"' + user.civility + '\"]').checked = true\n } else {\n document.querySelectorAll('input[name*=\"[civility]\"]').forEach((e) => e.checked = false)\n }\n document.querySelectorAll('input[name*=\"[civility]\"]').forEach((e) => {\n e.disabled = true\n e.readOnly = true\n });\n\n document.getElementById('client-no-match').classList.add('vesta-display-none');\n }\n\n unselectUser() {\n this.fillField('email');\n this.fillField('first_name');\n this.fillField('last_name');\n this.fillField('phone_number');\n this.fillField('phone_country_code', 'FR', false);\n\n document.querySelectorAll('input[name*=\"[civility]\"]').forEach((e) => {\n e.checked = false\n e.disabled = false\n e.readOnly = false\n });\n\n document.getElementById('client-no-match').classList.remove('vesta-display-none');\n document.getElementById('client-data-fields').classList.add('vesta-display-none');\n }\n\n fillField(field, value = null, disable = !!value) {\n let input = document.getElementById('sales_user_user_attributes_' + field);\n if (!input) {\n input = document.getElementById('offers_user_user_attributes_' + field);\n }\n\n input.disabled = disable;\n input.readOnly = disable;\n input.value = value;\n $(input).trigger('change');\n }\n\n fetchUser(id, operation) {\n fetch('/admin/clients/' + id, {\n method: 'GET',\n credentials: 'same-origin',\n headers: {\n 'Content-Type': 'application/json',\n 'Accept': 'application/json'\n }\n }).then(this.handle_response_errors)\n .then((response) => {\n document.getElementById('client-data-fields')?.classList?.remove('vesta-display-none');\n return response.json().then(operation)\n })\n .catch((e) => {\n alertMessage('Une erreur est survenue', 'error');\n })\n }\n\n handle_response_errors(response) {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n return response;\n }\n\n showClientFields = (e) => {\n document.getElementById('client-data-fields').classList.remove('vesta-display-none');\n e.target.classList.add('vesta-display-none');\n };\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n\n stylize = () => {\n const select2Dropdown = document.querySelector('.select2-dropdown--below');\n const select2SearchField = document.querySelector('.select2-search__field');\n if (select2Dropdown) select2Dropdown.classList.add('vesta-select2-dropdown--below');\n if (select2SearchField) select2SearchField.classList.add('vesta-select2-search__field');\n }\n\n adjustTopPosition = () => {\n const select2Dropdown = document.querySelector('.select2-dropdown.select2-dropdown--below');\n if(select2Dropdown) {\n select2Dropdown.style.position = 'relative';\n select2Dropdown.style.top = '-41px';\n }\n }\n\n customHeaderInput = (e) => {\n const searchZonesInput = document.getElementById('search-zones');\n const select2SearchField = document.querySelector('.select2-search__field');\n const select2Results = document.querySelector('.select2-results');\n // If in Zone page => custom select2 as design system header input\n if(searchZonesInput && select2SearchField) {\n select2SearchField.style.borderRadius = '20px'\n select2SearchField.style.height = '60px'\n select2SearchField.style.top = '-19px'\n select2SearchField.style.paddingLeft = '50px'\n select2SearchField.style.maxWidth = '400px'\n select2Results.style.maxWidth = '400px'\n select2SearchField.style.background = 'linear-gradient(to left, white 42%, white 90%, transparent 91%)'\n }\n }\n}\n\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = ['select'];\n\n connect() {\n const select = this.selectTarget;\n if (select) {\n const placeholder = select.options[0];\n placeholder.hidden = true;\n placeholder.disabled = true;\n }\n }\n}\n","import { Controller } from '@hotwired/stimulus';\nimport SlimSelect from 'slim-select'\n\nexport default class extends Controller {\n static targets = [ 'searchOption' ]\n static values = { placeholder: String }\n\n connect() {\n this.slim = new SlimSelect({\n select: this.element,\n settings: {\n showSearch: this.hasSearchOptionTarget,\n placeholderText: this.placeholderValue\n },\n events: {\n afterChange: (newVal) => {\n if (newVal[0].value === '') this.applyPlaceholderChanges(this.slim.settings.id)\n }\n }\n })\n\n if (this.slim.getSelected()[0] === '') this.applyPlaceholderChanges(this.slim.settings.id)\n }\n\n applyPlaceholderChanges = (optionId) => {\n const placeholderIdContainer = document.querySelector(`.ss-main[data-id=${optionId}]`);\n placeholderIdContainer.querySelector('.ss-single').classList.add('vesta-purple-40-important')\n }\n\n destroy() {\n this.slim.destroy()\n }\n}\n","import { Controller } from '@hotwired/stimulus';\nimport Swiper from 'swiper/bundle';\n\nexport default class extends Controller {\n initialize() {\n this.checkDevice();\n if (this.device === 'mobile') this.initializeMobileCarousel()\n this.initializeModalCarousel()\n }\n\n checkDevice() {\n const userAgent = navigator.userAgent;\n\n if (/mobile|iPad|Tablet/i.test(userAgent)) this.device = 'mobile'\n }\n\n initializeModalCarousel() {\n this.initializeThumbCarousel();\n this.initializeMainCarousel();\n this.carouselUpdate();\n }\n\n initializeThumbCarousel() {\n this.carouselGenericThumb = new Swiper('.carousel-generic-thumb', {\n loop: true,\n freeMode: true,\n watchSlidesProgress: true,\n touchRatio: 0.2,\n slidesPerView: 3,\n spaceBetween: 5,\n initialSlide: 0,\n breakpoints: {\n 990: {\n slidesPerView: 5,\n spaceBetween: 10\n }\n }\n });\n }\n\n initializeMainCarousel() {\n this.carouselGenericMain = new Swiper('.carousel-generic-main', {\n loop: true,\n navigation: {\n nextEl: '.next-slide',\n prevEl: '.prev-slide'\n },\n effect: 'fade',\n fadeEffect: {\n crossFade: true\n },\n speed: 500,\n thumbs: {\n swiper: this.carouselGenericThumb\n },\n keyboard: {\n enabled: true\n },\n initialSlide: 0\n });\n }\n\n initializeMobileCarousel() {\n this.carouselGenericThumbMobile = new Swiper('.carousel-generic-thumb-mobile', {\n loop: true,\n spaceBetween: 10,\n slidesPerView: 4,\n freeMode: true,\n watchSlidesProgress: true\n });\n\n this.carouselGenericMainMobile = new Swiper('.carousel-generic-main-mobile', {\n loop: true,\n spaceBetween: 10,\n navigation: {\n nextEl: '.next-slide',\n prevEl: '.prev-slide'\n },\n effect: 'fade',\n fadeEffect: {\n crossFade: true\n },\n thumbs: {\n swiper: this.carouselGenericThumbMobile\n }\n });\n }\n\n carouselUpdate() {\n // Hack to make the thumbnail click work on the main carousel if the thumbnail is clicked before the main carousel. otherwise, the main carousel will not update as the thumbnail\n if (this.device === 'mobile') this.handleClickThumbnail(this.carouselGenericThumbMobile, this.carouselGenericMainMobile)\n else this.handleClickThumbnail(this.carouselGenericThumb, this.carouselGenericMain)\n\n // Update the main carousel when the modal is shown (to make sure it's updated with proper index of clicked image)\n $('#ModalCarousel').on('shown.bs.modal', () => {\n this.carouselGenericMain.update();\n this.carouselGenericThumb.update();\n this.carouselGenericMain.slideTo(this.clickedIndex);\n this.carouselGenericThumb.slideTo(this.clickedIndex);\n });\n }\n\n handleClickThumbnail(thumbCarousel, modalCarousel) {\n thumbCarousel.on('click', () => {\n setTimeout(() => {\n modalCarousel.update();\n }, 100);\n });\n\n modalCarousel.on('click', () => {\n setTimeout(() => {\n thumbCarousel.update();\n }, 100);\n });\n }\n\n clickPhoto(event) {\n this.clickedIndex = parseInt(event.currentTarget.dataset.index);\n }\n}\n","import { Controller } from '@hotwired/stimulus';\nimport Swiper from 'swiper/bundle';\n\nexport default class extends Controller {\n static targets = ['nextBtnSlide', 'prevBtn'];\n\n connect = () => {\n this.swiper = new Swiper('.swiper-available-slots', {\n slidesPerView: 2,\n navigation: {\n nextEl: '.next-slot',\n prevEl: '.prev-slot'\n },\n on: {\n init: () => {\n this.handleSlidesButton();\n },\n slideChange: () => {\n this.handleSlidesButton();\n },\n },\n breakpoints: {\n 380: {\n slidesPerView: 3\n },\n 1100: {\n slidesPerView: 5\n },\n 1200: {\n slidesPerView: 7\n }\n }\n });\n };\n\n handleSlidesButton = () => {\n if (!this.swiper) return\n\n const isLastSlide = this.swiper.isEnd;\n const isFirstSlide = this.swiper.isBeginning;\n const prevSlide = document.querySelector('.swiper-button-prev-custom')\n const nextSlide = document.querySelector('.swiper-button-next-custom')\n\n this.toggleSlides(prevSlide, isFirstSlide);\n this.toggleSlides(nextSlide, isLastSlide);\n }\n\n toggleSlides = (slideEl, firstOrLastSlide) => {\n if (!slideEl) return;\n\n if (firstOrLastSlide) {\n slideEl.classList.add('swiper-button-disabled');\n } else {\n slideEl.classList.remove('swiper-button-disabled');\n }\n }\n}\n","import { Controller } from '@hotwired/stimulus';\nimport Swiper from 'swiper/bundle';\n\nexport default class extends Controller {\n connect = () => {\n new Swiper('.swiper-estimate-steps', {\n slidesPerView: 1,\n spaceBetween: 30,\n navigation: {\n nextEl: '.next-estimate-steps',\n prevEl: '.prev-estimate-steps'\n }\n });\n };\n}\n","import { Controller } from '@hotwired/stimulus';\nimport Swiper from 'swiper/bundle';\n\nlet INDEX = 0;\nexport default class extends Controller {\n static targets = ['swiper'];\n static values = {\n secondPhoto: String\n };\n\n connect = () => {\n this.swiperTargets.forEach(() => {\n INDEX += 1;\n new Swiper(`.swiper-last-sale-carousel-photos-${INDEX}`, {\n slidesPerView: 'auto',\n centeredSlides: true,\n loop: true,\n spaceBetween: 10,\n nested: true,\n navigation: {\n nextEl: `.next-sale-photo-${INDEX}`,\n prevEl: `.prev-sale-photo-${INDEX}`\n }\n });\n });\n };\n}\n","import { Controller } from '@hotwired/stimulus';\nimport Swiper from 'swiper/bundle';\n\nexport default class extends Controller {\n static targets = ['swiper'];\n static values = {\n secondPhoto: String\n };\n\n connect = () => {\n new Swiper('.swiper-premium-reviews', {\n centeredSlides: true,\n loop: true,\n effect: 'fade',\n speed: 1000,\n fadeEffect: {\n crossFade: true\n },\n autoplay: {\n delay: 5000,\n disableOnInteraction: false\n },\n spaceBetween: 10,\n navigation: {\n nextEl: '.vesta-next-review',\n prevEl: '.vesta-prev-review'\n }\n });\n };\n}\n","import { Controller } from '@hotwired/stimulus';\nimport Swiper from 'swiper/bundle';\n\nexport default class extends Controller {\n static targets = ['anchor']\n\n connect = () => {\n this.initializeIntersectionObserver();\n };\n\n triggerPagination = (e) => {\n const productCard = e.currentTarget\n const productCardIndex = productCard.dataset.productCardIndex\n const paginationEl = document.querySelector(`.swiper-pagination-bullet-${productCardIndex}`)\n this.removeActiveCard()\n productCard.classList.add('vesta-active')\n paginationEl.click()\n }\n\n triggerCard = (e) => {\n const productCard = e.currentTarget\n const productCardIndex = productCard.dataset.productPaginationIndex\n const paginationEl = document.querySelector(`[data-product-card-index='${productCardIndex}']`)\n this.removeActiveCard()\n paginationEl.classList.add('vesta-active')\n }\n\n removeActiveCard = () => {\n const activeProductCard = document.querySelector('.vesta-active')\n activeProductCard.classList.remove('vesta-active')\n }\n\n initializeIntersectionObserver = () => {\n const options = {\n root: null,\n rootMargin: '0px',\n threshold: 0,\n };\n\n const observer = new IntersectionObserver(this.handleObserver, options);\n if (this.anchorTarget) {\n observer.observe(this.anchorTarget);\n }\n }\n\n handleObserver = (entities) => {\n const target = entities[0];\n if (target.isIntersecting) {\n this.handleSwiperIntersection()\n } else {\n if(this.highlightSwiper?.mount) this.highlightSwiper.autoplay.stop()\n }\n }\n\n handleSwiper = () => {\n this.highlightSwiper = new Swiper('.swiper-product-highlight', {\n slidesPerView: 1,\n speed: 500,\n effect: 'fade',\n autoplay: {\n delay: 6000,\n disableOnInteraction: false,\n },\n pagination: {\n el: '.swiper-pagination',\n clickable: true,\n renderBullet: function (index, className) {\n return ``\n },\n },\n });\n }\n\n handleAutoplay = () => {\n if(this.highlightSwiper?.mount) {\n this.highlightSwiper.on('autoplay', () => {\n const activeCardOld = document.querySelector('.vesta-active');\n activeCardOld.classList.remove('vesta-active')\n const activeSlideIndex = this.highlightSwiper.activeIndex + 1;\n const activeCard = document.querySelector(`.swiper-card-${activeSlideIndex}`);\n if (this.highlightSwiper.autoplay.running) {\n activeCard.classList.add('vesta-active')\n }\n });\n }\n }\n\n handleSwiperIntersection = () => {\n if(this.highlightSwiper?.mount) {\n this.highlightSwiper.autoplay.start()\n } else {\n this.handleSwiper()\n this.handleAutoplay()\n }\n }\n}\n","import { Controller } from '@hotwired/stimulus';\nimport Swiper from 'swiper/bundle';\n\nexport default class extends Controller {\n static targets = ['swiper'];\n static values = {\n secondPhoto: String\n };\n\n connect = () => {\n new Swiper('.swiper-property-card-panel-photos', {\n centeredSlides: true,\n loop: true,\n spaceBetween: 10,\n navigation: {\n nextEl: '.next-sale-photo',\n prevEl: '.prev-sale-photo'\n }\n });\n };\n}\n","import { Controller } from '@hotwired/stimulus';\nimport Swiper from 'swiper/bundle';\n\nexport default class extends Controller {\n connect = () => {\n new Swiper('.swiper-simple-carousel', {\n slidesPerView: 1,\n spaceBetween: 30,\n navigation: {\n nextEl: '.next-estimate-steps',\n prevEl: '.prev-estimate-steps'\n }\n });\n };\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = ['sellerContent', 'sellerButton', 'buyerContent', 'buyerButton'];\n static values = {\n type: String\n };\n\n switchToSeller = () => {\n if (this.typeValue === 'seller') return;\n\n this.typeValue = 'seller';\n this.toggleSwitchBtn();\n };\n\n switchToBuyer = () => {\n if (this.typeValue === 'buyer') return;\n\n this.typeValue = 'buyer';\n this.toggleSwitchBtn();\n };\n\n toggleSwitchBtn = () => {\n if (this.typeValue === 'seller') {\n this.handleContentDisplay(this.sellerContentTarget, this.buyerContentTarget);\n this.handleButtonSwitch(this.sellerButtonTarget, this.buyerButtonTarget);\n }\n\n if (this.typeValue === 'buyer') {\n this.handleContentDisplay(this.buyerContentTarget, this.sellerContentTarget);\n this.handleButtonSwitch(this.buyerButtonTarget, this.sellerButtonTarget);\n }\n };\n\n handleContentDisplay = (activeContent, inactiveContent) => {\n activeContent.classList.remove('vesta-switch-display-none');\n inactiveContent.classList.add('vesta-switch-display-none');\n };\n\n handleButtonSwitch = (activeButton, inactiveButton) => {\n activeButton.classList.add('vesta-active-switch');\n activeButton.classList.remove('vesta-inactive-switch');\n inactiveButton.classList.add('vesta-inactive-switch');\n inactiveButton.classList.remove('vesta-active-switch');\n };\n}\n","import { Controller } from '@hotwired/stimulus';\nimport priceFormatting from '../../shared/utils/priceFormatting';\nexport default class extends Controller {\n static targets = ['basicTarif', 'premiumTarif', 'premiumService', 'basicService', 'basicServiceExplanation', 'premiumServiceExplanation', 'houseOption', 'premiumMinPrice'];\n static values = {\n offerType: String,\n basicTarif: String,\n premiumTarif: String,\n basicTarifRegion: String,\n premiumTarifRegion: String,\n };\n\n switchToPremium = () => {\n if (this.offerTypeValue === 'premium') return;\n\n this.offerTypeValue = 'premium';\n this.toggleSwitchBtn();\n };\n\n switchToEssential = () => {\n if (this.offerTypeValue === 'essential') return;\n\n this.offerTypeValue = 'essential';\n this.toggleSwitchBtn();\n };\n\n toggleSwitchBtn = () => {\n const activeSwitch = document.querySelector('.vesta-active-switch.vesta-tarifs');\n const inactiveSwitch = document.querySelector('.vesta-inactive-switch.vesta-tarifs');\n activeSwitch.classList.remove('vesta-active-switch');\n activeSwitch.classList.add('vesta-inactive-switch');\n inactiveSwitch.classList.remove('vesta-inactive-switch');\n inactiveSwitch.classList.add('vesta-active-switch');\n this.basicServiceTarget.classList.toggle('vesta-switch-display-none');\n this.premiumServiceTarget.classList.toggle('vesta-switch-display-none');\n this.basicServiceExplanationTarget.classList.toggle('vesta-switch-display-none');\n this.premiumServiceExplanationTarget.classList.toggle('vesta-switch-display-none');\n this.houseOptionTarget.classList.toggle('vesta-switch-display-none');\n this.premiumMinPriceTarget.classList.toggle('vesta-switch-display-none');\n };\n\n offerTypeValueChanged(value) {\n if (value === 'essential') {\n this.handleTarifChanges(this.basicTarifValue, this.basicTarifRegionValue);\n } else if (value === 'premium') {\n this.handleTarifChanges(this.premiumTarifValue, this.premiumTarifRegionValue);\n }\n }\n\n handleTarifChanges = (tarifValue, premiumTarifValue) => {\n this.basicTarifTarget.textContent = priceFormatting(tarifValue);\n this.premiumTarifTarget.textContent = priceFormatting(premiumTarifValue);\n };\n}\n","import { Controller } from '@hotwired/stimulus';\nimport { agencyFees } from '../../shared/helpers/agencyFeesHelper';\n\nexport default class extends Controller {\n static targets = ['estimationStep',\n 'resultStep',\n 'submit',\n 'agencyFees',\n 'netSellerWithClassicAgency',\n 'netSellerWithHosman',\n 'agencyFeesDiff',\n 'premiumLogo',\n 'priceRef',\n 'firstCategory',\n 'secondCategory',\n 'thirdCategory',\n 'fourthCategory',\n 'input',\n 'category',\n 'yourCommission',\n 'changeCriteria',\n 'container',\n 'noExclusivityPrice'];\n\n static values = {\n parisRegion: Boolean,\n price: String\n }\n\n connect = () => {\n if (this.hasPriceValue) {\n this.price = this.priceValue\n this.parisRegion = this.parisRegionValue;\n this.handleAgencyFees()\n this.handleHTMLContent()\n this.handleHTMLDisplay()\n } else {\n this.parisRegion = null;\n this.price = null;\n this.region = null;\n if (this.hasSubmitTarget && !this.submitTarget.disabled) this.submitTarget.disabled = true\n }\n }\n\n handleChange = (e) => {\n const target = e.currentTarget\n\n if (target.name === 'region') {\n this.parisRegion = target.value.toLowerCase() === 'paris'\n this.region = target.value.toLowerCase()\n }\n\n if (target.name === 'price') this.price = target.value\n if (this.parisRegion !== null && this.price !== null) this.submitTarget.disabled = false\n }\n\n handleSubmit = () => {\n this.handleStepsDisplay()\n this.handleAgencyFees()\n this.handleHTMLContent()\n this.handleHTMLDisplay()\n this.pushDataLayer()\n }\n\n resetModule = () => {\n if(!this.premiumLogoTarget.classList.contains('vesta-display-none')) this.premiumLogoTarget.classList.add('vesta-display-none')\n this.estimationStepTarget.classList.remove('vesta-display-none')\n this.resultStepTarget.classList.remove('active')\n this.categoryTargets.map(category => {\n if(!category.classList.contains('vesta-display-none')) category.classList.add('vesta-display-none')\n })\n this.inputTargets.map(input => {\n if(input.name === 'propertyKind') input.checked = false\n else input.value = ''\n })\n this.resetSlimSelect()\n this.connect()\n }\n\n resetSlimSelect = () => {\n const inputs = this.inputTargets.filter(input => input.type === 'select-one')\n inputs.forEach(input => {\n const slimSelectController = this.application.getControllerForElementAndIdentifier(\n input,\n \"application--slim-select\"\n );\n slimSelectController.destroy()\n slimSelectController.connect()\n })\n }\n\n handleStepsDisplay = () => {\n this.estimationStepTarget.classList.add('vesta-display-none')\n this.resultStepTarget.classList.add('active')\n }\n\n handleAgencyFees = () => {\n this.agencyFees = agencyFees(\n this.parisRegion,\n this.price,\n false\n );\n }\n\n handleHTMLContent = () => {\n this.classicAgencyRate = Number(this.price) <= 100000 ? 6.0 : 4.87\n this.feesWithClassicAgency = Number(this.price) * (this.classicAgencyRate / 100)\n\n if (Number(this.price) > process.env.PERCENTAGE_TRESHOLD_PARIS && this.parisRegion) {\n this.agencyFeesTarget.innerHTML = '2%'\n } else if (Number(this.price) > process.env.PERCENTAGE_TRESHOLD_REGIONS && !this.parisRegion) {\n this.agencyFeesTarget.innerHTML = '2,5%'\n } else {\n this.agencyFeesTarget.innerHTML = this.formatPriceHelper(this.agencyFees)\n }\n\n this.netSellerWithHosmanTarget.innerHTML = this.formatPriceHelper(Number(this.price) - Number(this.agencyFees))\n this.netSellerWithClassicAgencyTarget.innerHTML = this.formatPriceHelper(Number(this.price) - Number(this.feesWithClassicAgency))\n if(this.hasPriceValue && (this.feesWithClassicAgency - this.agencyFees) < 1000) this.containerTarget.classList.add('vesta-display-none')\n this.agencyFeesDiffTarget.innerHTML = this.formatPriceHelper(this.feesWithClassicAgency - this.agencyFees)\n this.priceRefTarget.innerHTML = this.formatPriceHelper(Number(this.price))\n this.noExclusivityPriceTarget.innerHTML = this.calculateNoExclusivityAddFees(this.price, this.parisRegion)\n }\n\n handleHTMLDisplay = () => {\n // Premium logo condition\n if ((Number(this.price) > process.env.PREMIUM_START_VALUE_REGIONS && !this.parisRegion) || (Number(this.price) > process.env.PREMIUM_START_VALUE_PARIS && this.parisRegion)) this.premiumLogoTarget.classList.toggle('vesta-display-none')\n\n // \"Strong points\" trad condition according to hosman prices steps\n if (Number(this.price) <= 300000) this.firstCategoryTarget.classList.toggle('vesta-display-none')\n else if (Number(this.price) <= process.env.PREMIUM_START_VALUE_REGIONS) this.secondCategoryTarget.classList.toggle('vesta-display-none')\n else if (Number(this.price) <= process.env.PREMIUM_START_VALUE_PARIS) this.thirdCategoryTarget.classList.toggle('vesta-display-none')\n else this.fourthCategoryTarget.classList.toggle('vesta-display-none')\n }\n\n pushDataLayer = () => {\n // new GA4 tracking plan\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push({\n 'event': 'submit_tariff_estimation',\n 'region': this.region,\n })\n }\n\n formatPriceHelper = (price) => {\n const options = { style: 'currency', currency: 'EUR', minimumFractionDigits: 0, maximumFractionDigits: 0 };\n const priceString = price.toLocaleString('fr-FR', options);\n return priceString;\n }\n\n scrollToAnchor() {\n const anchor = document.querySelector(\"#title-anchor\")\n anchor.scrollIntoView({ behavior: 'smooth' })\n }\n\n calculateNoExclusivityAddFees(price, parisRegion) {\n if (parseInt(price) < parseInt(process.env.PERCENTAGE_TRESHOLD_REGIONS)) { return '+ 2000 €' }\n else if (parisRegion && parseInt(price) < parseInt(process.env.PERCENTAGE_TRESHOLD_PARIS)) { return '+ 3000 €' }\n else { return '+ 0,5%' }\n }\n}\n","import {Controller} from '@hotwired/stimulus';\n\nexport default class extends Controller {\n toggle_value = async (event) => {\n const field_name = event.currentTarget.dataset.value\n const url = event.currentTarget.closest('.team-members__leads').dataset.url;\n const switch_slider = event.currentTarget.querySelector('.toggle-btn-team-member-leads');\n \n const response = await fetch(url, {\n method: 'PUT',\n credentials: 'same-origin',\n headers: {\n 'X-CSRF-Token': document.getElementsByName('csrf-token')[0].getAttribute('content'),\n 'Content-Type': 'application/json',\n 'Accept': 'application/json'\n },\n body: JSON.stringify({changed_field: field_name})\n })\n \n if(response.ok) { \n alertMessage('Les modifications ont bien été prises en compte', 'success');\n switch_slider.classList.toggle('active');\n } else {\n const error = await response.json()\n alertMessage(error.message, 'error');\n }\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = [ 'block' ];\n\n connect = () => {\n //hide timeline blocks which are outside the viewport\n this.blockTargets.forEach((block) => {\n if(this.getOffset(block).top > window.scrollY + window.innerHeight * 1) {\n block.querySelectorAll('.cd-timeline-img, .cd-timeline-content').forEach(block_find => {\n block_find.classList.add('is-hidden');\n })\n }\n });\n }\n\n observeIntersection = () => {\n this.blockTargets.forEach((block) => {\n if(this.getOffset(block).top <= window.scrollY + window.innerHeight * 1 &&\n block.querySelector('.cd-timeline-img').classList.contains('is-hidden') ) {\n block.querySelectorAll('.cd-timeline-img, .cd-timeline-content').forEach(block_find => {\n block_find.classList.remove('is-hidden');\n block_find.classList.add('bounce-in');\n })\n }\n });\n }\n\n getOffset(element){\n if (!element.getClientRects().length)\n {\n return { top: 0, left: 0 };\n }\n\n let rect = element.getBoundingClientRect();\n let win = element.ownerDocument.defaultView;\n return (\n {\n top: rect.top + win.pageYOffset,\n left: rect.left + win.pageXOffset\n });\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = [ 'hiddenDiv' ]\n\n show() {\n this.hiddenDivTarget.classList.toggle('hidden');\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ 'content', 'trigger' ]\n\n connect() {\n this.toggle()\n }\n\n toggle() {\n const isChecked = this.triggerTarget.querySelector('input[value=\"true\"]').checked\n this.contentTarget.classList.toggle('vesta-display-none', !isChecked)\n }\n}\n","// NOTE: one can pass in triggers whatever data is useful for identification\nimport { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = [ 'hiddenPart', 'triggeringPart' ]\n\n connect() {\n const hiddenTarget = this.hiddenPartTarget;\n const triggeringTarget = this.triggeringPartTarget;\n const triggers = hiddenTarget.dataset.triggers.split(',');\n\n if (triggers.includes(triggeringTarget.value) && hiddenTarget.classList.contains('hidden')) {\n hiddenTarget.classList.remove('hidden');\n }\n }\n\n check(e) {\n const hiddenTarget = this.hiddenPartTarget;\n const triggers = hiddenTarget.dataset.triggers.split(',');\n\n if (triggers.includes(e.target.value) && hiddenTarget.classList.contains('hidden')) {\n hiddenTarget.classList.remove('hidden');\n }\n\n if (!triggers.includes(e.target.value) && !hiddenTarget.classList.contains('hidden')) {\n hiddenTarget.classList.add('hidden');\n }\n }\n}\n","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = [\"text\"]\n\n connect() {\n this.element.addEventListener('mouseenter', () => {\n this.show()\n })\n this.element.addEventListener('mouseleave', () => {\n this.hide()\n })\n }\n\n show() {\n this.textTarget.classList.add('show')\n }\n\n hide() {\n this.textTarget.classList.remove('show')\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = ['intersectionAnchor', 'toggle']\n\n connect() {\n const observer = new IntersectionObserver(entries => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n this.toggleTarget.classList.remove('vesta-visible--fade');\n this.toggleTarget.classList.add('vesta-hidden--fade');\n } else {\n this.toggleTarget.classList.remove('vesta-hidden--fade');\n this.toggleTarget.classList.add('vesta-visible--fade');\n }\n });\n }, { threshold: 0.1 });\n\n observer.observe(this.intersectionAnchorTarget);\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = ['prequalifiedCheckbox']\n\n managePrequalified = () => {\n const url = `${window.location.origin}/api/v1/visits/${this.prequalifiedCheckboxTarget.dataset.visitId}`\n\n fetch(url, {\n method: 'PUT',\n credentials: 'same-origin',\n headers: {\n 'X-CSRF-Token': document.getElementsByName('csrf-token')[0].getAttribute('content'),\n 'Content-Type': 'application/json',\n 'Accept': 'application/json'\n },\n body: JSON.stringify({prequalified: this.prequalifiedCheckboxTarget.checked})\n })\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = [\n 'vabInfos',\n 'technicalInfos',\n 'keysInfos',\n 'visitorFields',\n 'counterVisitCheckbox',\n 'emailInput',\n 'selectLead',\n 'submitButton',\n 'selectInput'\n ]\n\n static values = { saleDead: Boolean }\n\n connect() {\n if(this.hasSaleDeadValue && this.saleDeadValue) this.manageTechnicalVisit();\n }\n\n manageClassicVisit = () => {\n this.toggleVisitorFields('show');\n this.vabInfosTarget.classList.add('hidden');\n this.selectLeadTarget.classList.add('hidden');\n this.emailInputTarget.removeAttribute('disabled');\n this.technicalInfosTarget.classList.add('hidden');\n this.keysInfosTarget.classList.add('hidden');\n this.handleDisabledButton()\n if (this.hasCounterVisitCheckboxTarget) {\n this.counterVisitCheckboxTarget.checked = false;\n }\n }\n\n manageGuideVisit = () => {\n this.toggleVisitorFields('hide')\n this.vabInfosTarget.classList.remove('hidden');\n this.selectLeadTarget.classList.add('hidden');\n this.technicalInfosTarget.classList.add('hidden');\n this.keysInfosTarget.classList.add('hidden');\n this.handleDisabledButton()\n if (this.hasCounterVisitCheckboxTarget) {\n this.counterVisitCheckboxTarget.checked = false;\n }\n }\n\n manageCounterVisit = (event) => {\n this.vabInfosTarget.classList.add('hidden');\n this.toggleVisitorFields('hide')\n this.selectLeadTarget.classList.remove('hidden');\n this.technicalInfosTarget.classList.add('hidden');\n this.keysInfosTarget.classList.add('hidden');\n this.emailInputTarget.toggleAttribute('disabled');\n if (this.hasSelectInputTarget) {\n this.handleDisabledButton(event.srcElement.checked && this.selectInputTarget.value === '');\n }\n if (this.hasCounterVisitCheckboxTarget) {\n this.counterVisitCheckboxTarget.checked = true;\n }\n }\n\n manageTechnicalVisit = () => {\n this.toggleVisitorFields('hide')\n this.vabInfosTarget.classList.add('hidden');\n if (this.hasSelectLeadTarget) {\n this.selectLeadTarget.classList.add('hidden');\n }\n this.handleDisabledButton()\n if (this.hasCounterVisitCheckboxTarget) {\n this.counterVisitCheckboxTarget.checked = false;\n }\n this.keysInfosTarget.classList.add('hidden');\n this.technicalInfosTarget.classList.remove('hidden');\n }\n\n manageKeysVisit = () => {\n this.toggleVisitorFields('hide')\n this.vabInfosTarget.classList.add('hidden');\n if (this.hasSelectLeadTarget) {\n this.selectLeadTarget.classList.add('hidden');\n }\n this.handleDisabledButton()\n if (this.hasCounterVisitCheckboxTarget) {\n this.counterVisitCheckboxTarget.checked = false;\n }\n this.technicalInfosTarget.classList.add('hidden');\n this.keysInfosTarget.classList.remove('hidden');\n }\n\n updateSubmitButton = () => {\n this.handleDisabledButton(!this.selectInputTarget.value != '')\n }\n\n handleDisabledButton = (toDisabled) => {\n if(toDisabled) this.submitButtonTarget.setAttribute('disabled', '')\n else this.submitButtonTarget.removeAttribute('disabled')\n }\n\n toggleVisitorFields = (state) => {\n if (!this.hasVisitorFieldsTarget) return;\n if (state) {\n state === 'show' ? this.visitorFieldsTarget.classList.remove('hidden') : this.visitorFieldsTarget.classList.add('hidden');\n }\n else {\n this.visitorFieldsTarget.classList.toggle('hidden');\n }\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = [ 'autoSmsToVisitor', 'triggerAutoSmsToVisitor', 'visitorReachedDate', 'smsSentDate', 'callReminderToVisitor' ]\n\n toggleBtn = (e) => {\n const triggerBtn = e.currentTarget\n const url = e.currentTarget.dataset.url;\n const data = { visit_report: { client_reached: false } }\n\n triggerBtn.setAttribute('disabled', true)\n\n this.request_update(url, data, {\n success: () => {\n this.autoSmsToVisitorTarget.classList.toggle('hidden');\n triggerBtn.classList.toggle('hidden');\n },\n failure: () => {\n triggerBtn.removeAttribute('disabled', false);\n alertMessage(\"Les modifications n'ont pas pu être prises en compte\", 'error')\n }\n });\n }\n\n markAsReached = (e) => {\n const triggerBtn = e.currentTarget\n const url = e.currentTarget.dataset.url;\n const data = { visit_report: { client_reached: true } }\n\n this.request_update(url, data, {\n success: () => {\n triggerBtn.classList.add('hidden');\n this.autoSmsToVisitorTarget.classList.add('hidden');\n this.triggerAutoSmsToVisitorTarget.classList.add('hidden');\n this.visitorReachedDateTarget.textContent = \"Appelé à l'instant\";\n this.visitorReachedDateTarget.classList.remove('hidden');\n if (this.hasSmsSentDateTarget) this.smsSentDateTarget.classList.add('hidden');\n if (this.hasCallReminderToVisitorTarget) this.callReminderToVisitorTarget.classList.add('hidden');\n }\n });\n }\n\n request_update(url, data, options) {\n fetch(url, {\n method: 'PUT',\n credentials: 'same-origin',\n headers: {\n 'X-CSRF-Token': document.getElementsByName('csrf-token')[0].getAttribute('content'),\n 'X-Requested-With': 'XMLHttpRequest',\n 'Content-Type': 'application/json',\n 'Accept': 'application/json'\n },\n body: JSON.stringify(data)\n })\n .then(this.handle_response_errors)\n .then(options.success)\n .catch(options.failure)\n }\n\n handle_response_errors(response) {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n return response;\n }\n}\n","const SET_LAYERS = {\n withOptions({ map, layerId, type, sourceId, filter, paint }) {\n map.addLayer({\n id: layerId,\n type,\n source: sourceId,\n 'source-layer': 'Hosman',\n filter: filter,\n paint: paint\n });\n },\n};\n\nexport default SET_LAYERS;\n","const SET_MAP = {\n initMap(apiKey, center, zoom, style, containerId) {\n mapboxgl.accessToken = apiKey;\n\n return new mapboxgl.Map({\n container: containerId,\n center: center,\n zoom: zoom,\n style: style\n });\n },\n\n initSource(map, sourceId, tilesetId) {\n map.addSource(sourceId, {\n type: 'vector',\n url: `mapbox://${tilesetId}`,\n promoteId: 'mapbox_id'\n });\n },\n\n initLocalGeocoder(features) {\n return new MapboxGeocoder({\n accessToken: mapboxgl.accessToken,\n mapboxgl: mapboxgl,\n flyTo: {\n zoom: 12\n },\n placeholder: 'Rechercher une ville, un quartier...',\n marker: false,\n localGeocoder: (query) => customGeocoder(query, features),\n localGeocoderOnly: true\n });\n },\n\n initGeocoder() {\n return new MapboxGeocoder({\n accessToken: mapboxgl.accessToken,\n mapboxgl: mapboxgl,\n countries: 'fr',\n types: 'address'\n })\n }\n};\n\nexport default SET_MAP;\n\nfunction customGeocoder(query, features) {\n const matchingFeatures = features.filter(({ properties }) => properties.name.toLowerCase().includes(query.toLowerCase())).filter(({ properties }) => properties.active);\n\n const options = [];\n for (const feature of matchingFeatures) {\n feature['place_name'] = feature.properties.name;\n options.push(feature);\n }\n\n const uniqueOptions = options.filter((value, index, self) => index === self.findIndex((f) => f.place_name === value.place_name));\n return uniqueOptions;\n}\n","const SET_MARKERS = {\n main(map, center, popup = false, className) {\n this.divElement = document.createElement('div');\n this.divElement.className = className || 'hosman-marker';\n\n const marker = new mapboxgl.Marker(this.divElement)\n .setLngLat(center)\n .addTo(map);\n\n if(popup !== false) marker.setPopup(popup)\n return marker\n },\n\n specific(map, item) {\n const divEl = document.createElement('div');\n divEl.id = `vesta-marker-${item.state.replace(/_/g, '-')}`;\n\n new mapboxgl.Marker(divEl)\n .setLngLat({ lat: item.lat, lng: item.lng })\n .addTo(map);\n }\n}\n\nexport default SET_MARKERS;\n","const SET_POPUP = {\n init(popupOffsets, HTMLContent) {\n return new mapboxgl.Popup({ offset: popupOffsets }).setHTML(HTMLContent)\n }\n}\n\nexport default SET_POPUP;\n","// Load all the controllers within this directory and all subdirectories.\n// Controller files must be named *_controller.js.\nimport { Application } from '@hotwired/stimulus';\nimport { definitionsFromContext } from \"@hotwired/stimulus-webpack-helpers\"\n\nwindow.Stimulus = Application.start()\nconst context = require.context(\"controllers\", true, /\\.js$/)\nStimulus.load(definitionsFromContext(context))\n","import 'controllers';\nimport 'channels';\nimport localStorageHandler from './main/application/localStorageHandler';\nimport autotyper from './main/application/autotyper.min';\nimport typingEffect from './main/application/typing_effect';\nimport initAttachinary from './main/application/init_attachinary';\nimport buyerAlert from './main/application/buyer_alert';\nimport citiesSearch from './main/application/cities_search';\nimport expertsCarousel from './main/application/experts_carousel';\nimport lastSalesCarousel from './main/application/last_sales_carousel';\nimport select2 from './main/application/select2';\nimport swiper from './main/application/swiper';\nimport select2DropDownPosition from './main/application/select2DropDownPosition';\nimport handleStopPropagation from './main/application/handleStopPropagation';\nimport HTMLElementsDeclarations from './main/application/HTMLElementsDeclarations';\n\ndocument.addEventListener('DOMContentLoaded', () => {\n localStorageHandler();\n initAttachinary();\n autotyper();\n typingEffect();\n buyerAlert();\n expertsCarousel();\n lastSalesCarousel();\n select2DropDownPosition();\n select2();\n swiper();\n handleStopPropagation();\n citiesSearch();\n HTMLElementsDeclarations()\n});\n","const autotyper = () => {\n /*!\n * autotyperjs v1.0.1\n * A vanilla javascript plugin for animated typewriting.\n *\n * Author: Huseyin Elmas\n */\n !function (e, t) { e.autoTyper = function (e) { var o = { selector: \"\", words: [], charSpeed: 85, delay: 2100, loop: !0, flipflop: !0, position: 0, currentWord: \"\", element: null, isStopped: !1 }; !function (e) { if (e) for (var t in e) e.hasOwnProperty(t) && (o[t] = e[t]) }(e); var n = function* () { (o.position === o.currentWord.length || o.isStopped) && (o.flipflop && (yield setTimeout(function () { i().next() }, o.delay)), yield null), o.element.innerHTML += o.currentWord[o.position++], yield setTimeout(function () { n().next() }, o.position < o.currentWord.length ? o.charSpeed : 0) }, i = function* () { (0 === o.position || o.isStopped) && (yield null), o.element.innerHTML = o.currentWord.substr(0, --o.position), yield setTimeout(function () { i().next() }, o.position > 0 ? o.charSpeed : 0) }, r = function* (e, t) { yield setTimeout(function () { o.position = 0, o.currentWord = e, o.element.innerHTML = \"\", n().next() }, t) }, l = function* () { o.isStopped && (yield null); for (var e = 0, t = 0; t < o.words.length; t++) { if (o.words[t]) { r(o.words[t], e).next(); var n = o.words[t].length * o.charSpeed; o.flipflop && (n *= 2), e += n + o.delay } } yield setTimeout(function () { o.loop && l().next() }, e) }; this.start = function () { if (\"string\" == typeof o.selector && o.selector && Array.isArray(o.words) && o.words.length) { var e = t.querySelector(o.selector); e && (o.element = e, o.isStopped = !1, l().next()) } }, this.stop = function () { o.isStopped = !0, o.position = 0, o.currentWord = \"\" } } }(window, document);\n}\n\nexport default autotyper;\n","const buyerAlert = () => {\n if ($.fn.select2) {\n $.fn.select2.amd.define(\n 'select2/data/googleAutocompleteAdapter',\n ['select2/data/array', 'select2/utils'],\n function (ArrayAdapter, Utils) {\n function GoogleAutocompleteDataAdapter($element, options) {\n GoogleAutocompleteDataAdapter.__super__.constructor.call(\n this,\n $element,\n options\n );\n }\n\n Utils.Extend(GoogleAutocompleteDataAdapter, ArrayAdapter);\n\n GoogleAutocompleteDataAdapter.prototype.query = function (\n params,\n callback\n ) {\n const returnSuggestions = function (predictions, status) {\n var data = { results: [] };\n if (predictions !== null) {\n if (status != google.maps.places.PlacesServiceStatus.OK) {\n callback(data);\n }\n for (var i = 0; i < predictions.length; i++) {\n data.results.push({\n id: predictions[i].description,\n text: predictions[i].description,\n });\n }\n }\n callback(data);\n };\n\n if (params.term) {\n const options = {\n input: params.term,\n componentRestrictions: { country: 'fr' },\n types: ['(regions)'],\n };\n const service = new google.maps.places.AutocompleteService();\n service.getPlacePredictions(options, returnSuggestions);\n } else {\n const data = { results: [] };\n callback(data);\n }\n };\n return GoogleAutocompleteDataAdapter;\n }\n );\n\n var googleAutocompleteAdapter = $.fn.select2.amd.require(\n 'select2/data/googleAutocompleteAdapter'\n );\n\n $('.select-2-address-autocomplete').select2({\n width: '100%',\n dataAdapter: googleAutocompleteAdapter,\n placeholder: 'Ville, arrondissement, code postal...',\n escapeMarkup: function (markup) {\n return markup;\n },\n minimumInputLength: 2,\n templateResult: formatRepo,\n templateSelection: formatRepoSelection,\n });\n }\n\n function formatRepo(repo) {\n if (repo.loading) {\n return repo.text;\n }\n var markup =\n \"
\" +\n \"
\" +\n repo.text +\n '
';\n return markup;\n }\n\n function formatRepoSelection(repo) {\n return repo.text;\n }\n};\n\nexport default buyerAlert;\n","const citiesSearch = () => {\n if ($.fn.select2) {\n $.fn.select2.amd.define('select2/data/hosmanAutocompleteAdapter', ['select2/data/array', 'select2/utils'],\n function (ArrayAdapter, Utils) {\n function HosmanAutocompleteDataAdapter ($element, options) {\n HosmanAutocompleteDataAdapter.__super__.constructor.call(this, $element, options);\n }\n\n Utils.Extend(HosmanAutocompleteDataAdapter, ArrayAdapter);\n\n HosmanAutocompleteDataAdapter.prototype.query = function (params, callback) {\n var data = {results: []};\n if (params.term && params.term != '') {\n const url = `/api/v1/cities?q[name_or_zip_codes_agg_cont_any]=${params.term}`\n const fetchCitiesPredictions = (url) => {\n fetch(url, {\n method: 'GET',\n headers: { 'Content-Type': 'text/html', 'Accept': 'text/html' },\n credentials: 'same-origin'\n }).then((response) => {\n if (response.status == 200) {\n response.json().then((predictions) => {\n for (var i = 0; i< predictions.length; i++) {\n data.results.push({ id: predictions[i].id, text: predictions[i].name });\n }\n });\n setTimeout(() => {\n callback(data);\n }, 1);\n\n } else {\n callback(data);\n }\n })\n }\n\n fetchCitiesPredictions(url)\n } else {\n callback(data);\n };\n };\n return HosmanAutocompleteDataAdapter;\n }\n );\n\n var hosmanAutocompleteAdapter = $.fn.select2.amd.require('select2/data/hosmanAutocompleteAdapter');\n\n $('.select-2-address-custom-autocomplete').select2({\n width: '100%',\n dataAdapter: hosmanAutocompleteAdapter,\n placeholder: 'Entrez une ou plusieurs villes ou arrondissements',\n escapeMarkup: function (markup) { return markup; },\n minimumInputLength: 2,\n templateResult: formatRepo,\n templateSelection: formatRepoSelection\n });\n }\n\n function formatRepo(repo) {\n if (repo.loading) {\n return repo.text;\n }\n var markup = \"
\" +\n \"
\" + repo.text + \"
\";\n return markup;\n }\n\n function formatRepoSelection(repo) {\n return repo.text;\n }\n}\n\nexport default citiesSearch;\n","const expertsCarousel = () => {\n if (document.getElementById('experts-slick-carousel')) {\n $('#experts-slick-carousel').slick({\n lazyLoad: 'ondemand',\n infinite: true,\n slidesToShow: $('#experts-slick-carousel')[0].dataset.expertsNumber,\n slidesToScroll: 1,\n prevArrow: $('.experts-slick-carousel-prev'),\n nextArrow: $('.experts-slick-carousel-next'),\n\n responsive: [\n {\n breakpoint: 1050,\n settings: {\n slidesToShow: 3,\n slidesToScroll: 1,\n arrows: false,\n },\n },\n {\n breakpoint: 980,\n settings: {\n slidesToShow: 1,\n slidesToScroll: 1,\n arrows: false,\n },\n },\n ],\n });\n }\n}\n\nexport default expertsCarousel;\n","const handleStopPropagation = () => {\n const stopPropagationBlock = document.querySelector('#stopPropagationBlock')\n if (stopPropagationBlock) {\n stopPropagationBlock.addEventListener('click', function(event) {\n event.stopPropagation();\n event.preventDefault();\n });\n }\n}\n\nexport default handleStopPropagation;\n","const initAttachinary = () => {\n $('.attachinary-input').attachinary();\n}\n\nexport default initAttachinary;\n","const lastSalesCarousel = () => {\n $('.carousel-init-class').each(function() {\n const slider = $(this);\n let nextArrow = '';\n let prevArrow = '';\n if (slider.hasClass('secondary-carousel')) {\n nextArrow = $('.secondary-carousel-next');\n prevArrow = $('.secondary-carousel-prev');\n }\n else {\n nextArrow = $('.last-sales-carousel-next');\n prevArrow = $('.last-sales-carousel-prev');\n }\n slider.slick({\n lazyLoad: 'ondemand',\n infinite: true,\n slidesToShow: 3,\n slidesToScroll: 1,\n autoplay: true,\n autoplaySpeed: 2000,\n prevArrow: prevArrow,\n nextArrow: nextArrow,\n responsive: [\n {\n breakpoint: 1050,\n settings: {\n slidesToShow: 2,\n slidesToScroll: 1,\n arrows: false,\n },\n },\n {\n breakpoint: 418,\n settings: {\n slidesToShow: 1,\n slidesToScroll: 1,\n arrows: false,\n },\n },\n ],\n });\n });\n}\n\n\nexport default lastSalesCarousel;\n","const localStorageHandler = () => {\n const localStorageGclid = localStorage.getItem('gclid');\n const gclid = new URLSearchParams(window.location.search).get('gclid');\n\n const gclidNotStoredYet = localStorageGclid === null && gclid !== null\n const differentGclidStored = gclid !== null && localStorageGclid !== gclid\n\n if (gclidNotStoredYet || differentGclidStored) localStorage.setItem('gclid', gclid);\n}\n\nexport default localStorageHandler;\n","const select2 = () => {\n // TODO investigate to use pure JS instead of jQuery\n let select2List = $('.select2-list');\n\n if (select2List.length > 0) select2List.select2();\n\n if ($('#search-zone').length > 0) {\n const onlineEstimationUrl = $('#mapbox-zones')[0].dataset.online;\n\n $('#search-zone').closest('body').css({ 'overflow-x': 'hidden' });\n\n $('#search-zone').select2({\n placeholder:\n 'Rechercher une ville, un arrondissement',\n allowClear: true,\n dropdownPosition: 'below',\n escapeMarkup: function (markup) {\n return markup;\n },\n language: {\n noResults: function () {\n return `\n
\n \n Hosman n'est pas encore présent dans votre ville, mais en attendant,\n nous vous mettons à disposition notre moteur d'estimation en ligne\n \n \n
\n `;\n }\n }\n });\n }\n\n if ($('#departments_selection').length > 0) {\n $('#departments_selection').select2({\n placeholder: 'Sélectionner un département',\n allowClear: true\n });\n }\n\n if ($('#regions_selection').length > 0) {\n $('#regions_selection').select2({\n placeholder: 'Sélectionner une région',\n allowClear: true\n });\n }\n\n if ($('#buyer_alert_phone_country_code').length > 0) {\n $('#buyer_alert_phone_country_code').select2({\n dropdownParent: $('#buyer-alert-admin')\n });\n }\n\n $(document).on('cocoon:after-insert', function (e, insertedItem) {\n select2List = $('.select2-list');\n if (select2List.length > 0) select2List.select2();\n });\n\n if (document.getElementsByClassName('multiple-cities-select').length > 0) {\n $('.multiple-cities-select').select2();\n }\n\n if (document.getElementsByClassName('multiple-exposure-select').length > 0) {\n $('.multiple-exposure-select').select2({\n maximumSelectionLength: 3,\n language: {\n maximumSelected: function (e) {\n return 'Vous ne pouvez sélectionner que ' + e.maximum + ' valeurs';\n }\n }\n });\n }\n\n if (document.getElementsByClassName('multiple-states-select').length > 0) {\n $('.multiple-states-select').select2({\n placeholder: 'State du bien'\n });\n }\n\n if (document.getElementsByClassName('multiple-categories-select').length > 0) {\n $('.multiple-categories-select').select2({\n placeholder: \"Catégorie d'acheteur\"\n });\n }\n\n if (document.getElementsByClassName('multiple-status-select').length > 0) {\n $('.multiple-status-select').select2({\n placeholder: 'Statut'\n });\n }\n\n if (document.getElementsByClassName('multiple-bedroom-select').length > 0) {\n $('.multiple-bedroom-select').select2({\n placeholder: '2'\n });\n }\n\n if (document.getElementsByClassName('multiple-outdoor-space-select').length > 0) {\n $('.multiple-outdoor-space-select').select2({\n placeholder: 'Pas nécessairement'\n });\n }\n\n if (document.getElementsByClassName('multiple-floor-select').length > 0) {\n $('.multiple-floor-select').select2({\n placeholder: 'Peu importe'\n });\n }\n\n\n if (document.getElementsByClassName('multiple-elevator-select').length > 0) {\n $('.multiple-elevator-select').select2({\n placeholder: 'Si 1er étage ou plus'\n });\n }\n\n // if (document.getElementsByClassName('select2-property-advert-autocomplete').length > 0) {\n // $('.select2-property-advert-autocomplete').select2({\n // placeholder: 'State du bien'\n // });\n // }\n\n if (document.getElementsByClassName('select-2-state-expertmap').length > 0) {\n $('.select-2-state-expertmap').select2();\n }\n\n if (document.getElementsByClassName('select-2-floor-expertmap').length > 0) {\n $('.select-2-foor-expertmap').select2();\n }\n\n if ($('#competitors-list').length > 0) {\n $('#competitors-list').select2({\n placeholder: 'Rechercher un compétiteur'\n });\n }\n};\n\nexport default select2;\n","const select2DropDownPosition = () => {\n (function ($) {\n\n var Defaults = $.fn.select2.amd.require('select2/defaults');\n\n $.extend(Defaults.defaults, {\n dropdownPosition: 'auto'\n });\n\n var AttachBody = $.fn.select2.amd.require('select2/dropdown/attachBody');\n\n var _positionDropdown = AttachBody.prototype._positionDropdown;\n\n AttachBody.prototype._positionDropdown = function () {\n\n var $window = $(window);\n\n var isCurrentlyAbove = this.$dropdown.hasClass('select2-dropdown--above');\n var isCurrentlyBelow = this.$dropdown.hasClass('select2-dropdown--below');\n\n var newDirection = null;\n\n var offset = this.$container.offset();\n\n offset.bottom = offset.top + this.$container.outerHeight(false);\n\n var container = { height: this.$container.outerHeight(false) };\n\n container.top = offset.top;\n container.bottom = offset.top + container.height;\n\n var dropdown = {\n height: this.$dropdown.outerHeight(false)\n };\n\n var viewport = {\n top: $window.scrollTop(),\n bottom: $window.scrollTop() + $window.height()\n };\n\n var enoughRoomAbove = viewport.top < (offset.top - dropdown.height);\n var enoughRoomBelow = viewport.bottom > (offset.bottom + dropdown.height);\n\n var css = {\n left: offset.left,\n top: container.bottom\n };\n\n // Determine what the parent element is to use for calciulating the offset\n var $offsetParent = this.$dropdownParent;\n\n // For statically positoned elements, we need to get the element\n // that is determining the offset\n if ($offsetParent.css('position') === 'static') {\n $offsetParent = $offsetParent.offsetParent();\n }\n\n var parentOffset = $offsetParent.offset();\n\n css.top -= parentOffset.top\n css.left -= parentOffset.left;\n\n var dropdownPositionOption = this.options.get('dropdownPosition');\n\n if (dropdownPositionOption === 'above' || dropdownPositionOption === 'below') {\n newDirection = dropdownPositionOption;\n } else {\n if (!isCurrentlyAbove && !isCurrentlyBelow) {\n newDirection = 'below';\n }\n if (!enoughRoomBelow && enoughRoomAbove && !isCurrentlyAbove) {\n newDirection = 'above';\n } else if (!enoughRoomAbove && enoughRoomBelow && isCurrentlyAbove) {\n newDirection = 'below';\n }\n }\n\n if (newDirection == 'above' ||\n (isCurrentlyAbove && newDirection !== 'below')) {\n css.top = container.top - parentOffset.top - dropdown.height;\n }\n\n if (newDirection != null) {\n this.$dropdown\n .removeClass('select2-dropdown--below select2-dropdown--above')\n .addClass('select2-dropdown--' + newDirection);\n this.$container\n .removeClass('select2-container--below select2-container--above')\n .addClass('select2-container--' + newDirection);\n }\n\n this.$dropdownContainer.css(css);\n\n };\n\n })(window.jQuery);\n}\n\nexport default select2DropDownPosition;\n","const slideDown = (target, duration=500) => {\n target.style.removeProperty('display');\n let display = window.getComputedStyle(target).display;\n\n if (display === 'none')\n display = 'block';\n\n target.style.display = display;\n let height = target.offsetHeight;\n target.style.overflow = 'hidden';\n target.style.height = 0;\n target.style.paddingTop = 0;\n target.style.paddingBottom = 0;\n target.style.marginTop = 0;\n target.style.marginBottom = 0;\n target.offsetHeight;\n target.style.boxSizing = 'border-box';\n target.style.transitionProperty = \"height, margin, padding\";\n target.style.transitionDuration = duration + 'ms';\n target.style.height = height + 'px';\n target.style.removeProperty('padding-top');\n target.style.removeProperty('padding-bottom');\n target.style.removeProperty('margin-top');\n target.style.removeProperty('margin-bottom');\n window.setTimeout( () => {\n target.style.removeProperty('height');\n target.style.removeProperty('overflow');\n target.style.removeProperty('transition-duration');\n target.style.removeProperty('transition-property');\n }, duration);\n}\nexport default slideDown;\n","const slideUp = (target, duration=500) => {\n target.style.transitionProperty = 'height, margin, padding';\n target.style.transitionDuration = duration + 'ms';\n target.style.boxSizing = 'border-box';\n target.style.height = target.offsetHeight + 'px';\n target.offsetHeight;\n target.style.overflow = 'hidden';\n target.style.height = 0;\n target.style.paddingTop = 0;\n target.style.paddingBottom = 0;\n target.style.marginTop = 0;\n target.style.marginBottom = 0;\n window.setTimeout( () => {\n target.style.display = 'none';\n target.style.removeProperty('height');\n target.style.removeProperty('padding-top');\n target.style.removeProperty('padding-bottom');\n target.style.removeProperty('margin-top');\n target.style.removeProperty('margin-bottom');\n target.style.removeProperty('overflow');\n target.style.removeProperty('transition-duration');\n target.style.removeProperty('transition-property');\n //alert(\"!\");\n }, duration);\n}\n\nexport default slideUp;\n","import Swiper from 'swiper/bundle';\n// TODO 1 use stimulus controller to use it only when needed\n// TODO 2 import only necessary modules (check lazy)\n\nconst swiperJs = () => {\n new Swiper('.last-sales-carousel', {\n slidesPerView: 1,\n spaceBetween: 40,\n centeredSlides: false,\n navigation: {\n nextEl: '.next-sale',\n prevEl: '.prev-sale'\n },\n breakpoints: {\n 640: {\n centeredSlides: false,\n slidesPerView: 2,\n spaceBetween: 5\n },\n 1024: {\n centeredSlides: false,\n slidesPerView: 3,\n spaceBetween: 100\n },\n 1550: {\n centeredSlides: false,\n slidesPerView: 4,\n spaceBetween: 100\n }\n }\n });\n\n new Swiper('.last-sales-carousel-side-title', {\n spaceBetween: 30,\n slidesPerView: 'auto',\n speed: 800,\n loop: true,\n\n navigation: {\n nextEl: '.next-sale',\n prevEl: '.prev-sale'\n },\n });\n\n new Swiper('.strong-points', {\n slidesPerView: 1,\n spaceBetween: 90,\n navigation: {\n nextEl: '.next-review',\n prevEl: '.prev-review'\n }\n });\n\n new Swiper('.strong-points-seller', {\n slidesPerView: 1,\n spaceBetween: 90,\n navigation: {\n nextEl: '.next-review',\n prevEl: '.prev-review'\n }\n });\n\n new Swiper('.strong-points-buyer', {\n slidesPerView: 1,\n spaceBetween: 90,\n navigation: {\n nextEl: '.next-step-buyer',\n prevEl: '.prev-step-buyer'\n }\n });\n\n new Swiper('.experts-list-swiper', {\n slidesPerView: 2,\n spaceBetween: 15,\n navigation: {\n nextEl: '.swiper-button-next-expert',\n prevEl: '.swiper-button-prev-expert'\n }\n });\n\n new Swiper('.strong-points-premium', {\n slidesPerView: 1,\n spaceBetween: 90,\n navigation: {\n nextEl: '.next-review-premium',\n prevEl: '.prev-review-premium'\n }\n });\n\n new Swiper('.similar-sales', {\n slidesPerView: 3,\n spaceBetween: 10,\n navigation: {\n nextEl: '.next-sales',\n prevEl: '.prev-sales'\n }\n });\n\n new Swiper('.sale-steps-swiper', {\n slidesPerView: 'auto',\n speed: 1000,\n navigation: {\n nextEl: '.next-step',\n prevEl: '.prev-step'\n },\n effect: 'fade',\n fadeEffect: {\n crossFade: true\n },\n breakpoints: {\n 980: {\n direction: 'vertical',\n slidesPerView: 1,\n spaceBetween: 10,\n pagination: {\n el: '.swiper-pagination',\n type: 'progressbar'\n },\n navigation: {\n nextEl: '.next-step',\n prevEl: '.prev-step'\n },\n mousewheel: true\n }\n }\n });\n};\n\nexport default swiperJs;\n","const typingEffect = () => {\n const div = document.getElementById('dynamic-typing-word');\n if (div) {\n const listWord = div.dataset.listWord;\n const array = listWord.split(', ');\n\n const typer = new autoTyper({\n selector: '#dynamic-typing-word',\n words: array,\n charSpeed: 100, // typing speed\n delay: 2800, // typing delay\n loop: true, // infinite loop\n flipflop: false, // enable flipflop effect\n });\n\n typer.start();\n }\n}\n\nexport default typingEffect;\n","// parisRegion and noExclusivity are booleans, price is an Integer\nexport function agencyFees(parisRegion, price, noExclusivity) {\n let feesAmount = 0;\n\n feesAmount = parisRegion ? parisFees(price) : regionFees(price);\n if (noExclusivity) feesAmount += calculateNoExclusivityAddFees(price, parisRegion);\n\n return feesAmount;\n}\n\nfunction parisFees(price) {\n if (price < 100000) { return 5900 }\n else if (price < 200000) { return 6900 }\n else if (price < 300000) { return 7900 }\n else if (price < 400000) { return 8900 }\n else if (price < 500000) { return 9900 }\n else if (price < 600000) { return 12900 }\n else if (price < 700000) { return 14900 }\n else if (price < 800000) { return 16900 }\n else if (price < 1000000) { return 19900 }\n else { return price * 0.02 }\n}\n\nfunction regionFees(price) {\n if (price < 100000) { return 5900 }\n else if (price < 200000) { return 6900 }\n else if (price < 300000) { return 7900 }\n else if (price < 400000) { return 8900 }\n else if (price < 500000) { return 9900 }\n else { return price * 0.025 }\n}\n\nfunction calculateNoExclusivityAddFees(price, parisRegion) {\n if (price < process.env.PERCENTAGE_TRESHOLD_REGIONS) { return 2000 }\n else if (parisRegion && price < process.env.PERCENTAGE_TRESHOLD_PARIS) { return 3000 }\n else { return 0.005 * price }\n}\n","export default (value) => {\n return new Intl.NumberFormat('fr-FR', { style: 'currency', currency: 'EUR', minimumFractionDigits: 0, maximumFractionDigits: 0 }).format(value)\n}\n"],"names":["map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","module","exports","createConsumer","flatsyChatContainer","document","querySelector","consumer","subscriptions","create","channel","sale_id","dataset","saleid","received","data","trigger","getElementById","chatBox","controller","action","message","hosmanian","created_at","not_sent","insertAdjacentHTML","scrollTop","scrollHeight","channels","require","forEach","visitContainer","property_id","propertyid","alertMessage","type","FILL_LAYER_ID","LINE_LAYER_ID","SOURCE_ID","filterZone","zoneType","charAt","toUpperCase","slice","LAYER_COLOR","FILL_LAYER_PAINT","LINE_LAYER_PAINT","Controller","static","publicKey","String","style","regionLat","regionLng","zoom","Number","tilesetId","connect","this","handleMapSettings","handleLayers","handleGeocoder","handleMapEvent","adminZoneMap","SET_MAP","initMap","publicKeyValue","regionLngValue","regionLatValue","styleValue","geocoder","initGeocoder","addControl","on","initSource","tilesetIdValue","SET_LAYERS","withOptions","layerId","sourceId","filter","paint","flyTo","center","zoneResultTarget","textContent","geocoder_point","project","result","query","queryRenderedFeatures","layers","inZoneAlertTarget","classList","remove","geocoderTarget","value","properties","insee_code","filterCities","add","zone_category_id","hasGeocoderTarget","features","length","onkeyup","toLowerCase","cityCardTargets","cityCard","name","inseeCode","indexOf","display","toggle","contentTargets","content","url","uniqueHash","generate","loadingLayerTarget","generateBtnTarget","disabled","handleGa4Event","populateEmail","fetch","urlValue","method","headers","getElementsByName","getAttribute","body","JSON","stringify","sale","price","priceTarget","credentials","then","response","status","json","emailTarget","innerHTML","replace","emailDivTarget","copyBtnTarget","getElementsByClassName","enableGenerateBtn","copy","styledHtmlText","blob","Blob","ClipboardItem","navigator","clipboard","write","error","window","dataLayer","push","uniqueHashValue","URLSearchParams","location","search","get","$","modal","hideModal","enable","enableSubmit","keyInputTarget","submitButtonTarget","parametized","event","target","propertyLat","propertyLng","SET_MARKERS","main","mapboxMap","propertyLngValue","propertyLatValue","matchMedia","matches","handleMapWithSmallScreen","mapboxgl","NavigationControl","resize","ficheCsCta","addEventListener","zoomValue","scrollZoom","disable","dragPan","hasPapTarget","changeColor","papTarget","hasAgencyTarget","agencyTarget","hasSellStateTarget","sellStateTarget","hasSellProbabilityTarget","sellProbabilityTarget","hasCommentTatget","checkFiftyChars","commentTarget","select","input","color","parse","find","pair","className","undefined","trim","tooltipTarget","originalTitle","warning","group","Sortable","element","onEnd","bind","groupValue","sortableUpdateUrl","item","row_order_position","newIndex","spinIt","contains","loadingLayerSizedAbsoluteTarget","fetch_stats","inseeCodeValue","r","stats","displayStatistics","averageSellingPriceMeter","average_selling_price_per_meter","averageSellingPriceTarget","innerText","isNaN","priceFormatting","currentlyAwaitingOfferSalesTarget","currently_awaiting_offer_sales","acceptedOffersTarget","accepted_offers","sellTimeTarget","sell_time","all_prices","reduce","accumulator","currentValue","Math","round","console","prev","curr","all_sell_times","triggerTab","activeBtnTab","currentTarget","tabContentTarget","targetTitle","scrollMax","scrollContainerTarget","clientWidth","scrollAmount","scrollMin","scrollStep","scrollLeft","scrollWidth","scroll","process","writeText","buyerphone","solicitate","buyerid","async","users_solicitation","user_id","buyerId","success_text","elementToToggleTarget","buyerAlertsMatch","saleUniqueHash","Accept","fetchContent","text","fetchProperties","hosmanId","params","q","sale_state_eq_any","sale_quarter_id_eq","parking_or_garage_eq","querifyObject","fetchProperty","propertyId","object","parent","key","full_key","fullKey","Array","isArray","v","toQuery","join","encodeURIComponent","emailInputTarget","select2","placeholder","tags","tokenSeparators","checkAccents","val","some","email","test","warningTarget","submitTarget","defaultActiveDropdowns","querySelectorAll","activeDropdown","icon","panel","nextElementSibling","maxHeight","activeAccordion","toggleAccordion","total","updateCount","valueTarget","saleValue","resultTarget","count","hasActiveTarget","active","activeTarget","generateAdvert","generateButtonTarget","populateAdvert","advertTitleTarget","title","advertContentTarget","hasUniqueHashValue","pushDataLayer","viewLocation","viewVirtualVisit","viewPlan","viewStreetView","update","scrolled","documentElement","clientHeight","progressionBarTarget","width","ctaLinks","inlineCtaTargets","ctaSpan","closest","articleBodyTarget","getElementsByTagName","link","setAttribute","includes","slotsCount","visit","user","currentUser","Boolean","currentUserIsHosmanian","handleGa4Tracking","initialize","hasNextLinkTarget","originalNextUrl","atob","nextLinkTarget","encode","btnSlotTargets","btn","handleBtnSlot","adminUrl","href","slot","source","sharedByUser","lead","hasStickyContainerTarget","stickyContainerTarget","setTimeout","selectedDateSlotTargets","dateSlot","localDateTime","Date","activeDaySlot","daySlotValue","day","current_date","showMoreSlots","hasBottomContainerTarget","bottomContainerTarget","hasMoreSlotsCtaTarget","moreSlotsCtaTarget","timeInt","strResult","toLocaleDateString","weekday","year","month","hour","minute","manageSlots","mobileSlidesTargets","slide","li_element","date","hidden_el","managePrevWeek","deskSlidesTargets","chevronPrevWeekTarget","chevronNextWeekTarget","manageNextWeek","submitVisit","preventDefault","modalController","application","getControllerForElementAndIdentifier","modalIdentifierTarget","show","formData","FormData","formTarget","createVisit","formatVisitCreationParams","handleError","currentUserIsHosmanianValue","redirectForHosmanians","currentUserValue","redirectToDashboard","updateModalWithFormData","hide","hasLoaderTarget","hasContentTarget","loaderTarget","contentTarget","opacity","closeModalRedirectionTarget","hasEmailTarget","hasPasswordConfirmationContainerTarget","last_sign_in_at","passwordConfirmationContainerTarget","hasForgotPasswordLinkTarget","forgotPasswordLinkTarget","hasPasswordLabelTarget","passwordLabelTarget","hasPasswordLengthLabelContainerTarget","passwordLengthLabelContainerTarget","hasCloseModalRedirectionTarget","success_redirection_url","hasSubtitleTarget","subtitleTarget","civility","last_name","submitSession","password","passwordTarget","createSession","origin","sign_in","fromEntries","entries","first_name","phone_number","phone_country_code","situation","project_state","visits_attributes","start_time","slot_type","fame_reason","alert_opt_in","shared_by_user","protocol","host","ga4Event","slotsCountValue","hasContactFormTarget","hasConfirmationPageTarget","visitValue","userValue","elementHiddenForNav","el","fixedCTA","nextEl","navbarContainerTarget","footer","hasAttribute","animate","burgerMenuTarget","pathname","showStep2","handleToggle","userInfoFormTarget","userInfoIlluTarget","criteriasFormTarget","criteriasIlluTarget","showStep1","bannersTarget","spin","showErrors","errorBannerTarget","fetchSimilarSales","form","formContainerTarget","apartment","getAll","house","minBudget","maxBudget","minArea","floor","minFloorForElevator","renovation","outDoorSpace","minRoomNumber","minBedroomNumber","zonesFiltered","zone","buyerAlertField","infoMessage","counterErrors","entry","textVariable","uselessCaracter","lastIndexOf","min_budget","max_budget","min_area","outdoor_space","min_floor_for_elevator","min_room_number","min_bedroom_number","buyer_alert_params","hasTextTarget","textTarget","salePrice","zoneCategoryId","regionNamePretty","activeZone","buyer_alerts","saleUniqueHashValue","salePriceValue","checkConditionDisplay","requestedConditionDisplay","users","containerTarget","buyer_alert","index","leadsEllipsesContainerTarget","profilePictureHTML","results","picture","thumbnail","buyerAlertMatchCard","user_first_name","user_last_name_initial","numberToCurrency","cardsContainerTarget","ellipseHTML","leadsCountTargets","leadCount","leadsCountMinusDisplayedTarget","ParisZone1AboveThreeHundred","zoneCategoryIdValue","regionNamePrettyValue","ParisOtherZonesAboveTwoHundred","RegionAboveOneHundred","activeZoneValue","number","toLocaleString","currency","minimumFractionDigits","maximumFractionDigits","buyerAlert","zones","buyerAlertValue","zonesValue","property_kind","purchase_type","last_names","toggleFiltersDisplay","filtersTarget","arrowTarget","field","cleaveMoneyInputTargets","initFormatMoneyInput","formatMoneyInput","dataActionEvent","Cleave","numeral","numeralThousandsGroupStyle","delimiter","numeralDecimalScale","onValueChanged","inputEvent","rawValue","formatDateInput","datePattern","formatPhoneNumberInput","phone","phoneRegionCode","copyText","alertUser","copyInput","linkValue","childHeight","imageTargets","offsetHeight","height","crossFadeImages","randomize","activeImage","setImageOnLoad","randomNumber","setNextImage","arrayLength","random","path","nextImage","hosmanOverlayMenuTarget","eventName","layerDivTarget","budgetLow","budgetHigh","surfaceLow","surfaceHigh","createSliders","btnSlider","hasBudgetSliderTarget","noUiSlider","budgetSliderTarget","start","budgetLowValue","budgetHighValue","step","range","min","max","values","_","budgetLowTarget","toString","budgetLowValueTarget","numberWithSpaces","budgetHighTarget","budgetHighValueTarget","hasSurfaceSliderTarget","surfaceSliderTarget","surfaceLowValue","surfaceHighValue","surfaceLowTarget","surfaceLowValueTarget","surfaceHighTarget","surfaceHighValueTarget","currentIndex","startRotation","disconnect","interval","clearInterval","setInterval","rotate","dynamicContentTargets","words","default","transition","wordsValue","displayReplacementExpertFields","replacementExpertFields","replacementExpertFieldsTarget","endReplacement","endReplacementTarget","checked","selectedIndex","dateField","translateY","observer","IntersectionObserver","isIntersecting","fadeIn","fadeOut","threshold","elementTargets","observe","hasTranslateYValue","transform","translateYValue","openForms","selectFameReasonTarget","onchange","closeForms","selectedOptions","slug","saleUniqueHTarget","userEmailTarget","userIdTarget","btsOriginTarget","infoSpanTarget","validation","files","interestRatesTen","interestRatesFifteen","interestRatesTwenty","interestRatesTwentyFive","interestRates","interestRatesTenValue","interestRatesFifteenValue","interestRatesTwentyValue","interestRatesTwentyFiveValue","loanDurationTarget","loanDurationSliderTarget","interestRateTarget","apportValue","priceValue","apportTarget","apportSliderTarget","monthlyPaymentsTarget","computeMonthlyPayments","changeLoanDuration","changeApport","loanDurationInMonths","monthlyInterestRate","monthlyPayments","pow","buyerLink","sellerLink","targetElement","intersectionObserverCallback","root","rootMargin","burgerMenu","handleRevertIntersection","handleIntersection","buyerPageFocus","ctaWording","ctaElement","buyerLinkValue","sellerLinkValue","btnTarget","initializeIntersectionObserver","handleObserver","containerFixedBtnTarget","entities","fixedCtaTarget","hasLandingZoneCityTarget","placesOptions","types","componentRestrictions","country","set_up_autocomplete","landingZoneCityTarget","populateZoneAddress","restriction","geoFullAddressTarget","populateAddress","geoStreetNameTarget","geoStreetNumberTarget","geoZipCodeTarget","geoCityTarget","geoCountryCodeTarget","parentNode","autocomplete","google","maps","places","Autocomplete","setFields","addListener","addDomListener","toast","iziToast","place","getPlace","components","getAddressComponents","blur","address","split","zip_code","city","address_components","component","formatted_address","street_number","street_name","country_code","geoLatTarget","lat","geoLngTarget","lng","landingZoneZipCodeTarget","landingZoneLatTarget","landingZoneLngTarget","route","country_full","long_name","short_name","geometry","displayFields","explainDisplayFieldsTarget","buyPage","ga4EventName","estimationKind","buyPageValue","inputTarget","fields","onPlaceChanged","waitForPacContainer","MutationObserver","mutations","mutation","addedNodes","node","moveAutocompleteContainer","childList","subtree","hasPacContainerTarget","pacContainerTarget","insertAdjacentElement","handlePlaceAsCookie","redirectTo","validePlaceData","saveAsCookie","listingAdsUrl","funnelUrl","cookieName","cookie","addressComponents","postalCodeComponent","addressComponent","cityComponent","postalCode","fullPath","ga4EventNameValue","hosmanianValue","dataToParams","append","MAP_EVENTS","flyToClickedZone","geoDataMap","propertiesMarkers","markers","marker","property","propertyPin","divEl","createElement","state","Marker","setLngLat","addTo","marketEl","getElement","zIndex","picture_url","pictures","innerWidth","advert_label_sold","signature_date","splice","advert_title","kind","area","carrez_area","room_number","displayFloor","bedroom_number","handlePopupEvents","initPopup","initMarker","total_floor","popupElement","stopPropagation","PARTIALS","updatePageData","mapOnly","baseUrl","step_type","record_id","record_type","dynamicContent","dynamicTitleH1","dynamicTitleH2","dynamicSoldProperties","dynamicPricingZones","pricingTopCities","pricingQuarters","dynamicFaqs","seoZonesLinks","handleFetchData","anchorContent","Swiper","slidesPerView","spaceBetween","centeredSlides","navigation","prevEl","breakpoints","pushVirtualPageView","region","quarter","UPDATE_LAYERS","handleLayerStylingForFranceAndAbove","getLayer","removeLayer","setPaintProperty","COLORS","ZOOM_OUT","history","pushState","BASE_URL","STEP_ZOOM","LAST_CLICKED_ZONES","CURRENT_MARKERS","handleLayerStylingBetweenFranceAndRegion","handleLayoutStylingBetweenRegionAndCity","handleLayoutStylingBetweenCityAndQuarter","generateLayerId","fillPaint","linePaint","ZOOM_IN","Buffer","capitalize","string","REGION_NAME","paris","nantes","bordeaux","lyon","transparent","STATE_ZOOM","france","INITIAL_CENTER","LAST_UPDATED_ZONES","PREVIOUS_ZOOM","CURRENT_ZOOM","HOVERED_STATE_ID","PREVIOUS_URL","FEATURES","MAP_RENDERED","stepState","cityId","recordType","changeTitle","handleScrollActions","getZoom","hosmanIdValue","initMapControl","initMapEvent","call","recordTypeValue","lngValue","latValue","hasCityIdValue","parseInt","cityIdValue","buffer","arrayBuffer","gunzipSync","from","initLocalGeocoder","hasMobileGeocoderTarget","geocoder_mobile","mobileGeocoderTarget","appendChild","onAdd","nav","handleGeocoderSearch","hosman_id","hosman_class","city_slug","aggregSlug","currentZoom","originalEvent","point","quarterCityId","apply","handleMouseEvent","eventType","setFeatureState","sourceLayer","hover","HOVERED_STATE_QUARTER_ID","onscroll","rect","getBoundingClientRect","top","left","bottom","innerHeight","right","isInViewport","selectZone","recordId","stepType","propertyKind","recordSlug","recordRegion","selectPropertyKind","apartmentInputTarget","houseInputTarget","houseContentCardTargets","apartmentContentCardTargets","propertyKindTitleTarget","togglePropertyKind","label","propertyKindRadioTargets","backToFranceStep","backToRegionStep","recordLat","recordLng","backToCityStep","toggleModal","modalTargets","modalAnchor","uspAnchor","scrollIntoView","firstPanelTarget","hoveredColor","scrollDown","sendMessage","inputFieldTarget","messageHTML","windowTarget","lastMessage","lastElementChild","errorNotif","dateNotif","inputTargets","validatePassword","labelTarget","passwordConfirmationContainer","passwordConfirmationNotDisplay","hasInputConfirmationTarget","validatePasswordConfirmation","confirmation","inputConfirmationTarget","errorThreshold","passwordsMatch","confirmationLabelTarget","toggleVisibility","isotope","Isotope","filterContainerTarget","itemSelector","layoutMode","transitionDuration","arrange","filterValue","selector","hash","selectFilter","selectedOption","options","background","fetchReviews","request","Request","outputTarget","log","gdcEnabled","disableGdcOption","gdcEnabledValue","handleCheckbox","checkbox","linkedPortal","linkedCheckbox","parisRegion","parkingKind","noExclusivity","currentFees","currentPrice","displayFees","checkChangePrice","currentPriceValue","newFees","parkingKindValue","agencyFees","parisRegionValue","replaceAll","noExclusivityValue","currentFeesValue","feesFormTarget","newFeesValueTarget","newFeesInputTarget","newFeesTarget","liquidSale","leadAgent","estimationHigh","displayWarning","leadAgentValue","buyerFeesTarget","onclick","premiumPackTarget","disallowPremium","checkPremium","computeFees","delta","mandatePriceTarget","estimationHighValue","noWarningTarget","sendMandateTarget","liquidSaleValue","mandatePrice","exclusivityTargets","agencyFeesTarget","computeFeesPercentage","percentage","isFinite","mandateFeesPercentageTarget","allowPremium","cta","initMapbox","searchZone","setLayoutProperty","doubleClickZoom","zoneInfos","popup","createPopup","closePopup","zoneName","coordinates","click","HTMLContent","ctaValue","SET_POPUP","init","approximateLocation","handleCenter","initZoom","handleMap","handleMarker","handleZoom","approximateLocationValue","hasApproximateLocationValue","hasZoomValue","scaledMarkerSize","marqueeItemTargets","clone","cloneNode","marqueeContentTarget","handleScroll","lastScrollChange","currentScroll","scrollY","advertNavTarget","modalTarget","backdropTarget","modalContainerTarget","dropdownType","scrollInactive","prevScrollPosition","pageYOffset","hasScrollInactiveValue","scrollInactiveValue","hasDefaultTarget","currentScrollPosition","defaultTarget","scrolledTarget","openDropdown","chevronEl","dropdownTypeValue","dropdownEl","closeDropdown","dropdownOpen","chevronUp","closeDropdownOnDocument","chevronTarget","toggleDropdownMobile","displayForm","formClicked","targets","constructor","notCurrent","isForm","match","containerNumbersTarget","animateNumber","numberKeysTargets","block","time","ceil","goto","ctrlKey","howTo","open","whereTo","focus","nope","guideCardBlockV1","getLastChildrenNodes","createSpanEl","lastChildrenNode","changeLastChildrenNode","children","spanEl","btoa","blank","insertBefore","nextSibling","decodeUrlLinks","EncodedUrl","DecodedUrl","changeSelection","reasonType","selectedReason","selectedTooltip","tooltipTargets","tooltip","repeatLoanConditionTarget","toggleLoanConditionInfo","loanConditionInfoTarget","toggleApportInfo","apportInfoTarget","toggleLoanPartner","hasOfferSubmitFinancialsTarget","offerSubmitFinancialsTarget","submitPromiseOfFinancingTarget","openPrettoSection","prettoCardInfoTarget","childNodes","slideUp","slideDown","redirectToUpload","openPrettoSectionTarget","fileInput","removeAttribute","financePromiseIconSuccessTarget","financePromiseDocDivTarget","docToUploadTarget","docUploadedTarget","activate","perPage","showPage","page","disabledValue","end","itemTargets","currentPageTarget","totalPagesTarget","pageCount","handleDisabledButtons","previousPageButtonTarget","nextPageButtonTarget","nextPage","currentPage","previousPage","reachedPageLimit","button","findIndex","buttonsTarget","searchTerm","filteredItems","renderFilteredItems","SlimSelect","userSelectTarget","events","Promise","n","showClientFields","clientFieldsTarget","showClassicVisitFields","classicVisitFieldsTargets","selectionRendered","selected","reader","FileReader","onload","canvasTarget","src","readAsDataURL","sourceTarget","checks","houseKind","selectedHouseKindTarget","apartmentKind","selectedApartmentKindTarget","select_min_floor","select_floor","apartmentPropertyTarget","regex","colorClass","selectNotSendReason","handlePriceWarning","modalButtonTarget","publicationInputTarget","fetchSales","paintSector","hosmanSectorId","defaultValue","quarterLat","quarterLng","avgPriceHouse","avgPriceApartment","handleProperties","customContentTargets","generalContentTarget","quarterLngValue","quarterLatValue","mapboxMapLoaded","handleMarkers","handleCardContent","hosmanSectorIdValue","propertiesCount","propertiesSoldCount","propertiesAwaitingOfferCount","handleGeoDatum","avgPrice","propertyKindValue","avgPriceHouseValue","avgPriceApartmentValue","hasAvgPriceTarget","avgPriceTarget","specific","hasPropertiesCountTarget","propertiesCountTarget","hasSoldPropertiesCountTarget","soldPropertiesCountTarget","hasSoldPropertiesCountTitleTarget","soldPropertiesCountTitleTarget","awaitingOfferPropertiesCardTarget","hasAwaitingOfferPropertiesCountTarget","awaitingOfferPropertiesCountTarget","hasSoldPropertiesTextTarget","soldPropertiesTextTarget","hasAwaitingOfferPropertiesTextTarget","awaitingOfferPropertiesTextTarget","displayHint","newKind","container","otherHints","newHint","initSelect2","fetchUser","selectUser","allowClear","ajax","dataType","delay","term","processResults","unselectUser","fillField","readOnly","operation","handle_response_errors","catch","ok","statusText","stylize","select2Dropdown","select2SearchField","adjustTopPosition","position","customHeaderInput","searchZonesInput","select2Results","borderRadius","paddingLeft","maxWidth","selectTarget","hidden","slim","settings","showSearch","hasSearchOptionTarget","placeholderText","placeholderValue","afterChange","newVal","applyPlaceholderChanges","getSelected","optionId","destroy","checkDevice","device","initializeMobileCarousel","initializeModalCarousel","userAgent","initializeThumbCarousel","initializeMainCarousel","carouselUpdate","carouselGenericThumb","loop","freeMode","watchSlidesProgress","touchRatio","initialSlide","carouselGenericMain","effect","fadeEffect","crossFade","speed","thumbs","swiper","keyboard","enabled","carouselGenericThumbMobile","carouselGenericMainMobile","handleClickThumbnail","slideTo","clickedIndex","thumbCarousel","modalCarousel","clickPhoto","handleSlidesButton","slideChange","isLastSlide","isEnd","isFirstSlide","isBeginning","prevSlide","nextSlide","toggleSlides","slideEl","firstOrLastSlide","INDEX","secondPhoto","swiperTargets","nested","autoplay","disableOnInteraction","triggerPagination","productCard","productCardIndex","paginationEl","removeActiveCard","triggerCard","productPaginationIndex","anchorTarget","handleSwiperIntersection","highlightSwiper","mount","stop","handleSwiper","pagination","clickable","renderBullet","handleAutoplay","activeSlideIndex","activeIndex","activeCard","running","switchToSeller","typeValue","toggleSwitchBtn","switchToBuyer","handleContentDisplay","sellerContentTarget","buyerContentTarget","handleButtonSwitch","sellerButtonTarget","buyerButtonTarget","activeContent","inactiveContent","activeButton","inactiveButton","offerType","basicTarif","premiumTarif","basicTarifRegion","premiumTarifRegion","switchToPremium","offerTypeValue","switchToEssential","activeSwitch","inactiveSwitch","basicServiceTarget","premiumServiceTarget","basicServiceExplanationTarget","premiumServiceExplanationTarget","houseOptionTarget","premiumMinPriceTarget","offerTypeValueChanged","handleTarifChanges","basicTarifValue","basicTarifRegionValue","premiumTarifValue","premiumTarifRegionValue","tarifValue","basicTarifTarget","premiumTarifTarget","hasPriceValue","handleAgencyFees","handleHTMLContent","handleHTMLDisplay","hasSubmitTarget","handleChange","handleSubmit","handleStepsDisplay","resetModule","premiumLogoTarget","estimationStepTarget","resultStepTarget","categoryTargets","category","resetSlimSelect","slimSelectController","classicAgencyRate","feesWithClassicAgency","formatPriceHelper","netSellerWithHosmanTarget","netSellerWithClassicAgencyTarget","agencyFeesDiffTarget","priceRefTarget","noExclusivityPriceTarget","calculateNoExclusivityAddFees","firstCategoryTarget","secondCategoryTarget","thirdCategoryTarget","fourthCategoryTarget","scrollToAnchor","behavior","toggle_value","field_name","switch_slider","changed_field","blockTargets","getOffset","block_find","observeIntersection","getClientRects","win","ownerDocument","defaultView","pageXOffset","hiddenDivTarget","isChecked","triggerTarget","hiddenTarget","hiddenPartTarget","triggeringTarget","triggeringPartTarget","triggers","check","toggleTarget","intersectionAnchorTarget","managePrequalified","prequalifiedCheckboxTarget","visitId","prequalified","saleDead","hasSaleDeadValue","saleDeadValue","manageTechnicalVisit","manageClassicVisit","toggleVisitorFields","vabInfosTarget","selectLeadTarget","technicalInfosTarget","keysInfosTarget","handleDisabledButton","hasCounterVisitCheckboxTarget","counterVisitCheckboxTarget","manageGuideVisit","manageCounterVisit","toggleAttribute","hasSelectInputTarget","srcElement","selectInputTarget","hasSelectLeadTarget","manageKeysVisit","updateSubmitButton","toDisabled","hasVisitorFieldsTarget","visitorFieldsTarget","toggleBtn","triggerBtn","request_update","visit_report","client_reached","success","autoSmsToVisitorTarget","failure","markAsReached","triggerAutoSmsToVisitorTarget","visitorReachedDateTarget","hasSmsSentDateTarget","smsSentDateTarget","hasCallReminderToVisitorTarget","callReminderToVisitorTarget","addLayer","apiKey","containerId","accessToken","Map","addSource","promoteId","MapboxGeocoder","localGeocoder","matchingFeatures","feature","self","f","place_name","customGeocoder","localGeocoderOnly","countries","divElement","setPopup","popupOffsets","Popup","offset","setHTML","Stimulus","Application","context","load","definitionsFromContext","localStorageHandler","initAttachinary","autotyper","typingEffect","expertsCarousel","lastSalesCarousel","select2DropDownPosition","handleStopPropagation","citiesSearch","HTMLElementsDeclarations","t","autoTyper","charSpeed","flipflop","currentWord","isStopped","hasOwnProperty","i","next","substr","l","fn","amd","define","ArrayAdapter","Utils","GoogleAutocompleteDataAdapter","$element","__super__","Extend","prototype","callback","returnSuggestions","predictions","PlacesServiceStatus","OK","description","AutocompleteService","getPlacePredictions","googleAutocompleteAdapter","dataAdapter","escapeMarkup","markup","minimumInputLength","templateResult","repo","loading","templateSelection","HosmanAutocompleteDataAdapter","fetchCitiesPredictions","hosmanAutocompleteAdapter","slick","lazyLoad","infinite","slidesToShow","expertsNumber","slidesToScroll","prevArrow","nextArrow","responsive","breakpoint","arrows","stopPropagationBlock","attachinary","each","slider","hasClass","autoplaySpeed","localStorageGclid","localStorage","getItem","gclid","setItem","select2List","onlineEstimationUrl","online","css","dropdownPosition","language","noResults","dropdownParent","insertedItem","maximumSelectionLength","maximumSelected","maximum","Defaults","extend","defaults","AttachBody","_positionDropdown","$window","isCurrentlyAbove","$dropdown","isCurrentlyBelow","newDirection","$container","outerHeight","dropdown","viewport","enoughRoomAbove","enoughRoomBelow","$offsetParent","$dropdownParent","offsetParent","parentOffset","dropdownPositionOption","removeClass","addClass","$dropdownContainer","jQuery","duration","removeProperty","getComputedStyle","overflow","paddingTop","paddingBottom","marginTop","marginBottom","boxSizing","transitionProperty","swiperJs","direction","mousewheel","div","array","listWord","feesAmount","parisFees","regionFees","Intl","NumberFormat","format"],"sourceRoot":""}