{"version":3,"sources":["logo.svg","components/NavMenu.js","errors/ExtendableError.js","errors/ParameterError.js","errors/ParameterErrors.js","errors/ParseError.js","core/RemoteFileHelper.js","core/UrlHelper.js","core/GroupedCallbacks.js","enums/NFilteredSitePlansToShow.js","configuration/PlotStatusConfiguration.js","errors/NotImplementedError.js","errors/ValueError.js","site/PlotStatus.js","configuration/PlotStatusConfigurations.js","configuration/CurrencyConfiguration.js","configuration/Configuration.js","configuration/Configurations.js","validation/Validation.js","geometry/Vector2.js","geometry/Vector3.js","modelling/Location.js","RunningMode.js","urls/Urls.js","core/eventEnable.js","mvvm/Binding.js","mvvm/Bindings.js","mvvm/ModelBindingsForName.js","mvvm/BindingsHandler.js","mvvm/enableAcceptBindings.js","core/capitalizeFirstLetter.js","mvvm/PropertyHelper.js","mvvm/exposeBinding.js","site/HouseType.js","site/HouseTypes.js","site/RoomType.js","core/Handle.js","core/Handles.js","site/SiteJsonUnitBirdsEyeView.js","site/SiteJsonUnitBirdsEyeViews.js","images/FitType.js","images/DynamicImageFitCriteria.js","images/DynamicImageEntry.js","images/DynamicImage.js","site/SiteJsonUnitPlotRoom.js","site/SiteJsonUnitPlotRooms.js","core/numberWithCommas.js","core/HashSource.js","mvvm/MyBindings.js","mvvm/enableBindingToOthers.js","mvvm/PropertyBinding.js","mvvm/PropertyBindingCarriedOver.js","mvvm/PropertyBindingShell.js","mvvm/PropertyBindingFactory.js","core/enableHash.js","site/SiteJsonUnitPlot.js","geometry/EulerAngles.js","site/SiteJsonFileUnitNearestOutside360Move.js","site/SiteJsonUnit.js","site/SiteJsonUnits.js","enums/CubeFace.js","360_react/ExportedCubeJsonFace.js","360_react/ExportedCubeJson.js","core/Iterator.js","core/getParentClass.js","validation/ParameterValidation.js","360_react/Scene360Hotspot.js","360_react/Scene360LayerChoice.js","360_react/Scene360Layer.js","360_react/Scene360.js","enums/HotspotType.js","site/HotspotOutside360Move.js","site/HotspotOutside360Configurator.js","site/HotspotOutside360Info.js","site/SiteJsonOutside360Scene.js","site/SiteJsonOutside360.js","filters/AvailablePricesSettings.js","filters/FiltersSettings.js","pixel_mapping/PixelMappings.js","site/SiteJsonUnitBirdsEyeViewOutside360MarkerPosition.js","site/SiteJsonBirdsEyeViewsBirdsEyeView.js","site/SiteJsonBirdsEyeViews.js","modelling/ObjectIdNodeIdsMappings.js","modelling/Model.js","modelling/Models.js","core/WhenFinishedModifying.js","site/SiteJson.js","site/Configurator.js","features/FeatureForPlot.js","features/FeatureForHouseType.js","features/Feature.js","site/LatestSiteInfo.js","modelling/quadrants/v3/Quadrant.js","modelling/quadrants/v3/QuadrantV3.js","modelling/quadrants/v3/QuadrantsV3.js","assets_management/AssetsManager.js","core/isMobile.js","enums/PlotMoreInformationType.js","ui_core/getAbsolute.js","geometry/Rect.js","components/UnitMarker.js","ui_core/Alignment.js","components/Tooltip.js","components/IconButton.js","components/DialogButton.js","components/Dialog.js","core/EventNormalizer.js","core/Once.js","ui_core/EfficientMoveCycle.js","ui_core/TwoFingerTouch.js","core/FrequencyLimitedCallback.js","ui_core/FullScreen.js","components/Spinner.js","ui_core/getStyle.js","ui_core/isDisplaying.js","components/ZoomableDragable.js","components/DirectionalButtons.js","core/Timer.js","core/TemporalCallback.js","ui_core/ResizeWatcher.js","components/BirdsEyeView.js","enums/MenuType.js","components/UnitMarkerKey.js","ui_core/ClickedOffHandle.js","ui_core/ClickedOff.js","ui_core/ClickedOffManager.js","components/SubMenuHeader.js","components/FiltersButtons.js","components/Filters.js","ui_core/ReactTypeChecking.js","ui_core/stopEventPropagation.js","components/Checkbox.js","components/CheckboxFilterOption.js","components/CheckboxFilter.js","choices/Option.js","components/AvailablePricesFilter.js","favourites/Favourite.js","components/StatusFilter.js","components/BedroomsFilter.js","components/FeaturesFilter.js","components/slider_components/SliderHandle.js","components/Slider.js","components/Star.js","ui_core/InsertedMenuItemsRegistrationHandle.js","ui_core/InsertedMenuItemsHandler.js","components/ZoomButtons.js","enums/DragDropType.js","interfaces/IDragDropRecipient.js","components/DragDropStreetViewButton.js","enums/WindowType.js","window/WindowEventNames.js","ui_core/styleFromObject.js","window/Windows.js","components/IconButtonNonReact.js","components/MenuBarWindowEntries.js","components/MenuBar.js","components/MainMenu.js","views/ProgressBar.js","components/VideoPlayer.js","components/MenuManager.js","components/HouseTypeFilter.js","errors/TypeError.js","filters/PlotFilterer.js","components/KeyboardButton.js","components/NumericalKeyboard.js","components/PlotSearch.js","components/MouseBlocker.js","components/SitePicker.js","ui_core/getViewportDimensions.js","ui_core/EdgeLocation.js","components/PopupMenu.js","components/tabs/TabPanel_Panel.js","components/tabs/TabPanel_Tab.js","components/TabPanel.js","ui_core/TabInfo.js","components/ImageCarousel.js","components/JumpableZoomableDragable.js","components/PlotMoreInformationFloorPlans.js","components/PlotMoreInformationGallery.js","components/PlotMoreInformationOverview.js","components/PlotMoreInformation.js","validation/PhoneNumberValidation.js","validation/EmailValidation.js","enums/BrochureProgressStatus.js","brochures/BrochureBeingGenerated.js","google/GoogleAnalytics.js","storage/LocalStorageHelper.js","sessions/SessionManager.js","brochures/BrochuresManager.js","components/BrochureGeneration.js","components/ImageViewer.js","components/FavouriteEntry.js","ui_core/Drag.js","ui_core/setText.js","ui_core/Resizer.js","ui_core/SelectHelper.js","core/Settings.js","window/GenericWindow.js","components/SubMenuHeaderNonReact.js","plot_detailed_information/PlotDetailedInformationSectionType.js","plot_detailed_information/PlotDetailedInformationSummary.js","ui_core/ResizeWatchers.js","images/DynamicImageDisplayer.js","plot_detailed_information/PlotDetailedInformationGallery.js","plot_detailed_information/PlotDetailedInformationDescription.js","plot_detailed_information/PlotDetailedInformationFloorPlans.js","plot_detailed_information/PlotDetailedInformationVideo.js","plot_detailed_information/PlotDetailedInformationTour.js","plot_detailed_information/PlotDetailedInformation.js","plot_detailed_information/PlotDetailedInformationsManager.js","plot_detailed_information/PlotComparisonScrollManager.js","plot_detailed_information/PlotComparisonManager.js","components/Favourites.js","html/StylesHelper.js","components/PrivacyPolicy.js","view_models/ViewModelBase.js","modelling/ModelRefs.js","view_models/UnitViewModel.js","progress/CompositeProgressSource.js","view_models/SitePlan3DViewModel.js","views/3d/BabylonViewBase.js","modelling/BabylonCameraPan.js","modelling/BabylonCameraZoom.js","progress/StandardProgressSource.js","views/3d/SiteView.js","views/3d/SitePlan3DView.js","modelling/ModelFile.js","modelling/Mesh.js","modelling/BabylonModel.js","modelling/BabylonModelsManagerCache.js","modelling/BabylonMeshesCombiner.js","modelling/BabylonModelsManager.js","modelling/BabylonScene.js","components/SitePlan3D.js","360_react/Hotspot.js","360_react/View360.js","components/MiniMap.js","hotspots/InfoHotspot.js","components/Hider.js","components/SitePlan360.js","components/Configurator.js","enums/SitePlanVisibleType.js","components/PlotMenu.js","enums/BrochureType.js","brochures/BrochuresMenuEntry.js","brochures/BrochuresMenu.js","components/PlotsSelectionMenuEntry.js","components/PlotsSelectionMenu.js","house_types_viewer/HouseTypesViewerEntryStatusesEntry.js","house_types_viewer/HouseTypesViewerEntryStatuses.js","house_types_viewer/HouseTypesViewerEntryPriceRange.js","house_types_viewer/HouseTypesViewerEntry.js","house_types_viewer/HouseTypesViewer.js","view_models/HouseTypeViewModel.js","view_models/HouseTypesViewModel.js","components/FullScreenImagesViewer.js","geometry/DistanceHelper.js","components/NearbySite.js","components/NearbySites.js","components/SitePlan.js","components/SitePlanWrapper.js","site/SiteJsons.js","components/DropdownSelectorMenu.js","what_are_you_looking_for/WhatAreYouLookingForFirstOptions.js","what_are_you_looking_for/WhatAreYouLookingForToggleButton.js","what_are_you_looking_for/WhatAreYouLookingForNBeds.js","what_are_you_looking_for/WhatAreYouLookingForFeatures.js","what_are_you_looking_for/WhatAreYouLookingForPrice.js","what_are_you_looking_for/WhatAreYouLookingForHouseType.js","view_models/WhatAreYouLookingForViewModel.js","what_are_you_looking_for/WhatAreYouLookingForContentType.js","what_are_you_looking_for/WhatAreYouLookingFor.js","components/SitePlans.js","components/Footer.js","App.js","serviceWorker.js","index.js"],"names":["Component","ExtendableError","message","innerError","console","error","name","constructor","Error","captureStackTrace","stack","ParameterError","ParameterErrors","type","ParseError","Promise","longStackTraces","config","warnings","RemoteFileHelper","url","undefined","resolve","reject","fetch","method","credentials","headers","then","response","text","content","JSON","parse","catch","err","data","BSON","deserialize","UrlHelper","relativeUrl","window","location","origin","lastIndexForwardSlash","lastIndexOf","substring","length","hasStartSlash","hasEndSlash","firstCharacterIsSlash","lastCharacterIsSlash","throwNotProvided","throwNotOfType","GroupedCallbacks","this","_callbacksThen","_callbacksCatch","bind","doThen","doCatch","callbackThen","push","callbackCatch","callbacksThen","splice","apply","arguments","callbacksCatch","NFilteredSitePlansToShow","All","One","Two","PlotStatusConfiguration","props","unitMarkerColor","configuratorIconFileName","plotStatus","_plotStatus","_unitMarkerColor","_configuratorIconFileName","jObject","NotImplementedError","ValueError","PlotStatus","AVAILABLE","COMING_SOON","FUTURE_RELEASE","SOLD_OR_UNAVAILABLE","RESERVED","Object","values","filter","value","configuration","plotStatusConfiguration","plotStatusConfigurations","getFromPlotStatus","parseFromString","parseFromInt","toLowerCase","indexOf","PlotStatusConfigurations","list","_list","toCssHtmlString","i","strs","cssNamePrefix","getCssName","UNIT_MARKER_COLOR_SUFFIX","join","key","fromEnumAndJObject","CurrencyConfiguration","currencyPrefix","currencySuffix","_currencyPrefix","_currencySuffix","Configuration","goStraightToFiltersMenu","showShowForSaleButton","hidePlotMoreInformationTabs","plotMoreInformationHasOverview","fullScreenGalleryAndFloorPlans","useCurrentPositionIcon","sentryDSN","brochureGeneratorUrl","delayShowPlotMarkersSeconds","plotMarkerKeyAtTop","googleAnalyticsTrackingCode","siteName","siteSlug","siteSlugForLatestSiteInfo","configuratorRootUrl","assetsFolderName","siteInfoUrl","defaultOutside360PlotNumber","defaultAerialIndex","threeDEnabled","windowStyleMenus","showNBathrooms","showPlotDetailedInformationOnDesktopClickInsteadOfHover","brochuresMenuEnabled","plotComparisonEnabled","onClickPlotSelectionMenuEntryShowDetailedElseSmallPlotInfo","showHouseTypesViewerOnOpen","siteVideoEnabled","showFadedFilteredOutPlots","twoDSitePlanEnabled","miniMapConeMarkerEnabled","showPanelOnClickOutside360ConfiguratorIcon","whatAreYouLookingForEnabled","featuresEnabled","nFilteredSitePlansToShow","suggestedSitesEnabled","houseTypesViewerEnabled","hideNBedrooms","rotateOutside360Cameras180Degrees","showPlotDetailedInformationOnClickPlotMenu","plotSelectionMenuEnabled","_hideNBedrooms","_plotStatusConfigurations","_goStraightToFiltersMenu","_showShowForSaleButton","_hidePlotMoreInformationTabs","_plotMoreInformationHasOverview","_fullScreenGalleryAndFloorPlans","_useCurrentPositionIcon","_sentryDSN","_brochureGeneratorUrl","_delayShowPlotMarkersSeconds","_plotMarkerKeyAtTop","_googleAnalyticsTrackingCode","_siteSlug","_siteSlugForLatestSiteInfo","_configuratorRootUrl","_siteInfoUrl","_defaultOutside360PlotNumber","_defaultAerialIndex","_threeDEnabled","_windowStyleMenus","_siteName","_showNBathrooms","_showPlotDetailedInformationOnDesktopClickInsteadOfHover","_brochuresMenuEnabled","_plotComparisonEnabled","_onClickPlotSelectionMenuEntryShowDetailedElseSmallPlotInfo","_showHouseTypesViewerOnOpen","_siteVideoEnabled","_showFadedFilteredOutPlots","_twoDSitePlanEnabled","_miniMapConeMarkerEnabled","_showPanelOnClickOutside360ConfiguratorIcon","_whatAreYouLookingForEnabled","_featuresEnabled","_houseTypesViewerEnabled","_nFilteredSitePlansToShow","_suggestedSitesEnabled","_rotateOutside360Cameras180Degrees","_showPlotDetailedInformationOnClickPlotMenu","_plotSelectionMenuEnabled","href","split","_currencyConfiguration","_scrollablePlotMoreInformationGalleryAndFloorPlansElseSingleJumpableZoomableDragableImages","fromJSON","plotStatuses","scrollablePlotMoreInformationGalleryAndFloorPlansElseSingleJumpableZoomableDragableImages","Configurations","entries","_entries","jArray","defaultConfiguration","concat","map","jObjectConfiguration","Validation","isNumber","str","match","regExpStringIsValidInt","regExpStringIsValidFloat","number","parseFloat","isNaN","throwIsNotNumber","Vector2","x","y","_x","_y","toArray","arr","obj","Vector3","z","_z","Location","position","rotation","scaling","_position","_rotation","_scaling","toJSON","fromArray","RunningMode","process","Urls","isDevelopment","root","AssetsManager","makeSureSlashOnEnd","getSiteInfo","relativePath","getBrochureGenerator","assets","iconRelativePath","getIcons","plot","houseType","configuratorUrl","tourUrl","getAssetsForSite","thisPagePort","port","backendPortString","backendPort","protocol","hostname","eventEnable","addEventListener","listener","_listeners","listeners","hasEventListener","removeEventListener","listenerArray","index","dispatchEvent","event","target","array","call","Binding","callbackSet","dispose","_callbackSet","_dispose","_disposed","getCallbackSet","callCallbackSet","_dispatchDispose","binding","Bindings","self","disposed","slice","forEach","bindings","callbackDispose","e","removeBinding","add","listenForDispose","getList","remove","ModelBindingsForName","getByCallbackSet","listBindings","containsCallbackSet","changed","BindingsHandler","model","mapNameToModelBindings","callbackDisposeModelBindings","getName","viewBindings","view","getViewBindings","modelBindings","unbind","enableAcceptBindings","bindingsHandler","capitalizeFirstLetter","substr","toUpperCase","PropertyHelper","propertyName","_getGetterName","_getSetterName","propertyNames","getterName","setterName","capitalizedName","exposeBinding","getLambda","setLambda","getGetterName","getSetterName","HouseType","log","slug","imageRelativePath","getSiteJson","nBedrooms","nBathrooms","about","_nBedrooms","_nBathrooms","_about","_getSiteJson","_configuration","_slug","_name","_imageRelativePath","_allPossibleLowerCaseStrings","_getAllPossibleLowerCaseStrings","_configuratorUrl","_tourUrl","_videoUrl","_features","_statuses","statuses","videoUrl","features","removeStartSlash","getPlotsForHouseType","allowedNameSeperators","_ALLOWED_NAME_SEPERATORS","nameComponents","RegExp","seperator","nameComponent","HouseTypes","getBySlug","Array","isArray","valueNormalised","allPossibleLowerCaseStrings","jArrayHouseTypes","houseTypes","jObjectHouseType","RoomType","KITCHEN","BEDROOM","BATHROOM","EN_SUITE","roomType","Handle","_callbackDispose","Handles","_handles","_currentlyHasHandles","take","_dispatchChangedIfChanged","_dispatchChanged","handle","setTimeout","handles","hasHandles","SiteJsonUnitBirdsEyeView","angle","markerPosition","_angle","_markerPosition","fromObj","SiteJsonUnitBirdsEyeViews","getMarkerPositionForBirdsEyeViewWithAngle","birdsEyeViewsWithIndex","birdsEyeView","FitType","WIDTH","HEIGHT","DynamicImageFitCriteria","fitType","_fitType","DynamicImageEntry","width","height","_width","_height","_relativePath","DynamicImage","_entriesIncreasing","sort","a","b","getBestEntryToFit","getBestEntryToFitWidth","getBestEntryToFitHeight","params","fitCriteria","fitWidth","entry","SiteJsonUnitPlotRoom","images","getParentPlot","_roomType","_getParentPlot","_images","image","SiteJsonUnitPlotRooms","room","jArraySites","rooms","jObjectSite","numberWithCommas","toString","replace","HashSource","next","String","_count","MyBindings","me","_propertyBindings","Set","reset","propertyBinding","has","delete","enableBindingToOthers","myBindings","PropertyBinding","valueChanged","_me","_model","_valueChanged","set","get","_setterName","_getterName","setter","getter","PropertyBindingCarriedOver","propertyBindingSource","propertyBindingCarriedOver","getSource","getCarriedOver","PropertyBindingShell","getterMethod","setterMethod","_getMethod","_setMethod","PropertyBindingFactory","meOrParams","nameParam","viewModelName","converter","onChange","onSetByView","names","_carryOver","propertyBindings","c","createViewModel","onViewModelSet","viewModel","currentModel","_change","oldValue","change","oldViewModel","createView","onViewSet","currentViewModel","oldView","disposeCurrentView","createConvertedItem","removedItem","changedCallback","postpone","_arrayConversion","item","hash","enableHash","getHashFromItem","mapHashToConvertedItem","currentConvertedItems","standard","items","hashesSeen","convertedItem","viewModelsName","callbackChanged","arrayConversion","capitalizedNameViewModel","setterNameViewModel","getterNameViewModel","s","main","convertedValue","from","to","SiteJsonUnitPlot","getUnit","affordable","frontViewImage","price","status","selected","floorPlanImages","currencyConfiguration","_getUnit","_hash","_number","_rooms","_affordable","_frontViewImage","_price","_status","_houseType","_floorPlanImages","_selected","_houseTypeFeaturesChanged","plotFeatures","_propertyBindingHouseTypeFeatures","frontViewImageRelativePath","_frontViewImageRelativePath","getArray","_plotFeatures","floorPlanImage","EulerAngles","yawRadians","pitchRadians","rollRadians","_yawRadians","_pitchRadians","_rollRadians","SiteJsonFileUnitNearestOutside360Move","outside360UniqueId","cameraAngleToFaceFrontDoor","_outside360UniqueId","_cameraAngleToFaceFrontDoor","SiteJsonUnit","id","birdsEyeViews","useFrontViewInsteadOfStreetView","threeDNodes","nearestOutside360Move","plots","streetViewImage","_id","_birdsEyeViews","_nearestOutside360Move","_threeDNodes","_plots","plotA","plotB","_plotSelectedChanged","_streetViewImage","_useFrontViewInsteadOfStreetView","_dispatchActiveChanged","_handleActiveHandlesChange","_activeHandles","getBirdsEyeViewMarkerPositionForBirdsEyeViewWithAngle","active","taken","unit","SiteJsonUnits","getPlotsArray","getByUnitId","getPlotByNumber","getSelectedPlotsAsArray","units","CubeFace","BACK","FRONT","RIGHT","LEFT","UP","DOWN","throwCouldNotParse","fromString","fromNumber","ExportedCubeJsonFace","cubeFace","cubeFaceChar","tiledImageFolderRelativePath","_cubeFace","_cubeFaceChar","_tiledImageFolderRelativePath","ExportedCubeJson","directoryRelativePath","faces","levels","size","_directoryRelativePath","_face","_levels","_faces","exportedCubeFaces","face","Iterator","_index","_array","_length","getParentClass","targetClass","Function","parentClass","getPrototypeOf","ParameterValidation","parameterName","expectedType","allowInheritance","_checkBaseTypes","currentParentClass","Scene360Hotspot","eulerAngles","pointingAtEulerAngles","_type","_iconRelativePath","_eulerAngles","_pointingAtEulerAngles","_rotateToCompensate","Scene360LayerChoice","Scene360Layer","choices","validateArray","_choices","Scene360","layers","hotspots","urlPrefix","uniqueId","cameraEulerAngles","getLevels","_urlPrefix","_layers","_hotspots","_uniqueId","_cameraEulerAngles","HotspotType","OUTSIDE_360_MOVE","OUTSIDE_360_CONFIGURATOR","INFO","HotspotOutside360Move","outside360ToMoveToUniqueId","_outside360ToMoveToUniqueId","HotspotOutside360Configurator","plotNumber","_plotNumber","_getPlotByNumber","getConfiguratorIconRelativePath","getConfiguratorUrlForPlot","HotspotOutside360Info","className","_text","_className","SiteJsonOutside360Scene","exportedCubeJson","configuratorHotspots","_exportedCubeJson","_configuratorHotspots","jObjectOutside360Scene","exportedCube","_hotspotsFromJSON","jArrayHotspots","jObjectHotspot","hotspot","SiteJsonOutside360","scenes","_scenes","_scene360s","getScene360s","_getScene360s","siteRelativePath","scene360s","scene","getOutside360","jObjectOutside360","AvailablePricesSettings","desiredIntervalsPrice","_desiredIntervalsPrice","Filters","availablePricesSettings","_availablePricesSettings","availablePrices","PixelMappings","mapAToBToGToRToValue","imageFileRelativePath","_mapAToBToGToRToValue","_imageFileRelativePath","_canvas","document","createElement","initialize","getValueFromPercentages","getValueFromProportions","getValueFromPixel","_getPixelARGB","_checkInitialized","_initialized","img","crossOrigin","src","getContext","drawImage","xPercent","yPercent","xProportion","yProportion","parseInt","rgba","mapBToGToRToValue","mapGToRToValue","mapRToValue","getImageData","rgbaValuePairs","rgbaValuePair","g","r","_parseRgbaValuePairsToMap","SiteJsonUnitBirdsEyeViewOutside360MarkerPosition","SiteJsonBirdsEyeViewsBirdsEyeView","imageAspectRatio","nearestOutside360PixelMappings","outside360MarkerPositions","_imageAspectRatio","_nearestOutside360PixelMappings","_outside360MarkerPositions","_mapOutside360UniqueIdToMarkerPosition","outside360MakerPosition","getMarkerPositionForOutside360","outside360MarkerPosition","SiteJsonBirdsEyeViews","jObjectBirdsEyeView","ObjectIdNodeIdsMappings","mapObjectIdToNodeIds","getNodeIdsForObjectId","getNodeIdsForObjectIds","_mapObjectIdToNodeIds","objectId","objectIds","nodeIds","nodeIdsForObjectId","keys","Map","Model","groupCode","code","objectIdNodeIdsMappings","quadrantsRelativePath","_code","_groupCode","_objectIdNodeIdsMappings","_quadrantsRelativePath","Models","mapGroupCodeToModels","_map","_mapGroupCodeToModels","getModelByCode","getModelsByGroupCode","objArray","modelsMap","WhenFinishedModifying","delay","callback","_delay","_callback","_currentTimeout","trigger","clearTimeout","SiteJson","filtersSettings","outside360","models","latLng","_latLng","_units","_houseTypes","_filtersSettings","_outside360","_models","_houseTypesOrPlotFeaturesChanged","_updateAllFeatures","_whenFinishedModifyingHouseTypesOrPlotFeatures","siteJsonUnitPlot","allFeatures","mapFeatureIdToFeature","feature","_allFeatures","min","max","siteJson","currency","FiltersSettings","Configurator","houseTypeSlug","_houseTypeSlug","FeatureForPlot","getFeatureById","featureId","_getFeatureById","_featureId","FeatureForHouseType","Feature","description","_description","LatestSiteInfo","configurators","latestPlotInfos","latestHouseTypeInfos","_configurators","_latestPlotInfos","_latestHouseTypeInfos","jObjectFeature","latestPlotInfo","featuresForPlot","featureForPlot","latestHouseTypeInfo","featuresForHouseType","featureForHouseType","jObjectConfigurator","Quadrant","_objectIds","getObjectIds","TWO_PI","Math","PI","QuadrantV3","quadrantsForYawPitch","pitchFromRestInSingleQuadrantRadians","pitchToRestInSingleQuadrantRadians","_quadrantsForYawPitch","_pitchFromRestInSingleQuadrantRadians","_pitchToRestInSingleQuadrantRadians","yawIndex","floor","pitchIndex","quadrantsForPitch","quadrant","_quadrantLevels","quadrantsForPitchJArray","quadrantJObject","QuadrantsV3","xYZFrom","sceneSize","xYZQuadrants","_xYZFrom","_sceneSize","_xYZQuadrants","_xLength","_yLength","_zLength","proportionX","proportionY","proportionZ","xIndex","yIndex","zIndex","yZQuadrantJArray","zQuadrantJArray","siteAssets","_mapSiteSlugToSiteAssets","groupedCallbackGetSiteAssets","_mapSiteSlugToGroupedCallbackGetSiteAssets","deleteGroupedCallbackFromMap","_getSiteAssets","nJsonFilesGot","latestSiteInfo","done","gotAJsonFileOrError","_updateSiteJsonFromLatestSiteInfo","_getSiteJsonForSite","siteJsonIn","getLatestSiteInfo","latestSiteInfoIn","loadJSON","quadrants","configurator","mapPlotNumberToPlot","plotStatusId","newFeatures","errorMessage","jArrayPlots","configurationJson","_configurations","configurationsJson","isMobile","test","navigator","userAgent","PlotMoreInformationType","OVERVIEW","GALLERY","FLOOR_PLANS","getAbsolute","element","rect","getBoundingClientRect","docEl","documentElement","top","pageYOffset","clientTop","left","pageXOffset","clientLeft","right","bottom","Rect","containsPoint","point","UnitMarker","onHover","onClick","_siteJson","_unit","_callbackOnHover","_callbackOnClick","_handleMouseEnter","_handleMouseLeave","_handleClick","_handleActiveChanged","_handleSelectedChanged","_dispatchCallbackOnHover","_getMarkerPosition","getMouseInBounds","_releaseUnitActiveHandle","_element","React","createRef","deactivate","propertyBindingSelected","state","filteredOut","hovering","favourite","current","absolutePosition","offsetWidth","offsetHeight","setState","_currentUnitActiveHandle","takeActiveHandle","marker","availablePlots","comingSoonPlots","reservedPlots","hasMoreThanOneUnit","ref","style","onMouseEnter","onMouseLeave","Alignment","Tooltip","atomicCallbackShow","noEnterLeaveEvents","tooltip","_getOrCreateTooltip","mouseDown","cancelShow","show","hide","onMouseDown","mouseUp","disposeMouseDown","_tooltip","classList","tooltipTextElement","appendChild","body","setVisible","_getSetVisible","setPosition","_getSetPosition","triangleElement","elementShowingFor","getMouseDown","showing","innerHTML","visible","setAlignment","_getSetAlignment","absolutePositionElementShowingFor","leftWhichWouldBeRequiredForLeftAlign","alignment","currentAlignmentClass","alignmentClass","IconButton","faIcon","imgUrl","disabled","_callbackClick","_elementRef","innerIcon","icon","register","previousProps","DialogButton","_onClick","Dialog","preventInterraction","options","title","onClickClose","_preventInterraction","_options","_message","_callbackClickClose","buttons","option","_createOnClickForOption","_mapOptionHashToButton","_buttons","_setVisible","_handleClickButtonClose","ReactDom","unmountComponentAtNode","findDOMNode","parentNode","render","EventNormalizer","callback2","args","addFriendlyXYToTouch","addFriendlyXYToMouse","touch","changedTouches","clientX","clientY","Once","_set","_unsetIt","_setIt","EfficientMoveCycle","stopPropagation","preventDefault","onStart","onMove","onEnd","friendlyXY","_stopPropagation","_preventDefault","_onStartMouse","addFriendlyXYToMouse_LexicalClosure","_onStartTouch","addFriendlyXYToTouch_LexicalClosure","_onMoveMouse","_onMoveTouch","_onEndOnce","_onEndMouse","_onEndTouch","_mouseDown","_mouseMove","_mouseUp","_stopPropagationIfRequired","_preventDefaultIfRequired","_addMouseMoveEvent","_addMouseUpEvent","_touchStart","_touchMove","_touchEnd","_addTouchEnd","_addTouchMove","passive","_friendlyXY","_addFriendlyMouseXY","_clearCurrentMouseMove","_clearCurrentMouseUp","_clearCurrentTouchMove","_clearCurrentTouchEnd","_currentTouchMove","_currentTouchEnd","_currentMouseMove","_currentMouseUp","TwoFingerTouch","onStartFinger1","onStartFinger2","onMoveFinger1","onMoveFinger2","onEndFinger1","onEndFinger2","_finger1Active","_finger2Active","_touch1","_touch2","_onStart","_onMoveFinger2","_onMoveFinger1","_onStartFinger1","_onStartFinger2","_onEndFinger1","_onEndFinger2","_onEnd","_finger1Id","_finger2Id","_start","_startAnywhere","_startFinger2","_move","_end","changedTouch","identifier","touch1","touch2","FrequencyLimitedCallback","frequencyHz","cancel","_triggered","_pausing","FullScreen","fullscreenElement","exit","enable","isEnabled","requestFullscreen","webkitRequestFullscreen","msRequestFullscreen","_dispatchChange","exitFullscreen","fullscreenEnabled","Spinner","spinnerHandles","invertHandles","_invertHandles","_spinnerHandles","_spinnerHandlesChanged","getStyle","currentStyle","getComputedStyle","getPropertyValue","isDisplaying","currentElement","parentElement","ParentElement","getContainerAspectRatio","updateExternalZoomSource","zoomMax","zoomMin","parentElementRef","_zoomMin","_zoomMax","_updateExternalZoomSource","_getContainerAspectRatio","site","_parentElementRef","_imageWrapper","_inner","_img","_handleDragStart","_handleDragMove","_handleDragEnd","_handleImageLoaded","_handleImageError","_handleWindowResize","_constrainAndSetPositionOfImageWrapper","_calculateMaxMinPosition","_calculateZoomMultiplier","setZoom","_setZoomOnce","_onTwoFingerStart","_clearImage","resizeIfNecessary","_resize","_updateZoomFromTwoFingerTouch","_onTwoFingerEnd","_handleMouseWheelZoom","_constrainAndSetZoom","_getImgAspectRatio","_load","load","_groupedCallbacksSetZoom","imageWrapperPosition","zoom","showImage","_zoom","_unmultipliedZoom","_onceSetZoom","_initialUnmultipliedZoomOnStartOfTwoFingerTouch","_zoomMultiplier","_doingTwoFingerTouch","_groupedCallbacksImageLoaded","_startDistanceTwoFingerTouch","_frequencyLimitedCallbackZoom","_imgUrl","_doneCalculateZoomMultiplier","imgAspectRatio","containerAspectRatio","naturalWidth","naturalHeight","currentZoom","imageWrapper","multiplier","proportionImageToLeft","offsetLeft","newImageWrapperWidth","newLeft","proportionImageToTop","offsetTop","newImageWrapperHeight","newTop","fitToHeight","spinnerHandle","doReject","res","imgAlreadyHasUrl","afterImgLoadIfNecessary","_fitToHeight","isTouchElseMouse","startPosition","screenZParent","touches","_startOffset","screenX","screenY","widthImageWrapper","heightImageWrapper","minY","maxY","minX","maxX","_maxPosition","_minPosition","_resizeDue","_efficientMoveCycle","_twoFingerTouch","deltaY","newZoom","_finger1Point","_finger2Point","_calculateDistanceBetweenPoints","newDistance","newUnmultipliedZoom","sqrt","pow","innerClassName","marginLeft","marginTop","onLoad","onError","children","_spinnerRef","DirectionalButtons","onClickLeft","onClickUp","onClickRight","onClickDown","_onClickLeft","_onClickRight","_onClickUp","_onClickDown","faCaretUp","faCaretDown","Timer","nTicks","_nTicksCount","_nTicks","_interval","_isRunning","_tick","stop","start","setDelay","isRunning","_setInterval","_cancelInterval","keepRunning","clearInterval","setInterval","TemporalCallback","maxNTriggers","maxTotalDelay","_maxNTriggers","_maxTotalDelay","_timerDelay","_timerMaxDelay","_nTriggers","ResizeWatcher","onResized","onFirstResize","staggered","_onResized","_onFirstResize","manual","_resizedCallbackNotInitial","_logSize","_scheduleResize","_finishedResizing","_resized","_doStartIfRequired","__resized","_dispatchResized","_temporalCallback","_timerFinishedResizing","_startedResizing","_loggedSize","_resizeObserver","_hasResizeObserver","_resizedCallback","_resizedCallbackForNotInitial","previousLoggedSize","BirdsEyeView","showPlotMoreInformation","favouritesRef","addFavourite","removeFavourite","showOutside360","enterHouse","showBrochureGenerationDialog","plotMenuRef","showPlotDetailedInformation","getConfiguration","_getConfiguration","_favouritesRef","_showPlotDetailedInformation","_callbackShowPlotMoreInformation","_callbackAddFavourite","_callbackRemoveFavourite","_callbackShowOutside360","_callbackEnterHouse","_callbackShowBrochureGenerationDialog","_birdsEyeViewAnglesAscending","_plotMenuRef","_zoomableDragableRef","_markersRef","_dragDropMarkerRef","_createMarkers","_clear","_clearPlotMarkers","_handleClickPlotMarker","_setMarkersVisible","_handleHoverPlotMarker","_handleShowPlotMoreInformation","resize","_handleClickLeft","_handleClickRight","_handleEnterHouse","_showPlotMenu","_handleShowBrochureGenerationDialog","_getShouldFitToHeight","_getAspectRatio","_getNearestSiteJsonOutside360","_setDragDropMarkerPosition","getMarkerPositionForPlotNumber","_initializeNearestOutside360PixelMappingsIfNecessary","_isDesktopAndShouldShowPlotDetailedInformationInstead","_frequencyLimitedCallbackGetNearestSiteJsonOutside360","_fittedToHeight","_zoomedOutOnFirstFilterAfterFittingToHeight","_birdsEyeViewIndex","_currentSiteJsonBirdsEyeViewsBirdsEyeView","_nearestOutside360UniqueId","_showPlotMenuOnce","unitMarkers","showPlotMarkers","_resizeWatcherParentElement","unitsArray","filtered","_unitsArray","zoomOut","getBirdsEyeViewMarkerPositionForBirdsEyeViewWithIndex","positionAsPercentages","elementAbsolutePosition","_cancelCurrentLoadOperation","cancelled","siteJsonBirdsEyeViewsBirdsEyeView","afterLoadImg","_createdMarkers","zoomableDragable","initialized","plotMoreInformationType","unitMarker","getMouseInSourceBounds","allPlotsAffordable","dragDropMarkerElement","display","unitMarkersAbsolutePosition","birdsEyeViewMarkers","hasMoreThanOneBirdsEyeView","MenuType","MENU_BAR","MAIN_MENU","FILTERS","AVAILABLE_PRICES_FILTER","STATUS_FILTER","BEDROOMS_FILTER","HOUSE_TYPE_FILTER","PLOT_SEARCH","SITE_PICKER","PLOT_MORE_INFORMATION","BROCHURE_GENERATION","FAVOURITES","IMAGE_VIEWER","PRIVACY_POLICY","BROCHURES","PLOT_DETAILED_INFORMATION","FEATURES_FILTER","UnitMarkerKey","hasKeyHeading","_hasKeyHeading","plotsArray","plotStatusesForPlots","firstPlotStatus","secondPlotStatus","firstPlotStatusDescription","getDescription","secondPlotStatusDescription","heading","ClickedOffHandle","callbackHide","_additionalElements","_callbackHide","addAdditionalElement","removeAdditionalElement","getElements","getElement","additionalElement","ClickedOff","_clicked","_onceClicked","_containsElement","getDisposed","handlesSnashot","elements","withinOne","j","xLeft","xRight","yTop","yBottom","_clickedDocument","_touchedDocument","ClickedOffManager","elementRef","_hide","_clickedOffHandle","SubMenuHeader","_children","_hasChildren","_handleClickButtonBack","_iMenuManager","back","close","FiltersButtons","clickClear","clickShowForSale","nextKey","singleRow","iMenuManager","_clickClear","_clickShowForSale","_singleRow","_uniqueKey","_nextKey","_handleClickFeatures","_handleClickPlot","_handleClickShowForSale","_handleClickStatus","_handleClickAvailablePrices","_handleClickBedrooms","_handleClickHouseType","_handleClickClear","showMenuByType","rows","faPoundSign","clearButton","iconButtonStatus","iconButtonPrice","iconButtonBedrooms","iconButtonHouseType","allUnitsHaveMultiplePlots","iconButtonPlot","_subMenuHeader","_unitMarkerKeyRef","_clickedOffManager","_filtersButtonsRef","showMe","setIMenuManager","unitMarkerKeyAtTop","bottomUnitMarkerKey","ReactTypeChecking","component","prototype","isReactComponent","includes","isClassComponent","isFunctionComponent","isValidElement","isElement","stopEventPropagation","eventList","Checkbox","paths","toggleOnClick","stopEventsPropagating","_toggleOnClick","_stopEventsPropagating","_paths","_get_dispatchChange_lexicalClosure","_onCallbackChange","toggle","_stopEventPropagation","checked","_checkboxRef","_checked","onceToggle","p","fill","d","xmlns","viewBox","aria-hidden","focusable","CheckboxFilterOption","_inputCheckbox","_callbackChange","clear","_option","_toggleChecked","_handleClickOnce","_onceHandleClick","isChecked","classNameOption","valueString","CheckboxFilter","onSelectionChange","_onSelectionChange","getCheckedValues","setOptions","newOptions","mapValueStringToOption","newOption","checkboxFilterOptionsToRemove","existingCheckboxFilterOption","existingCheckboxFilterOptionValueString","checkboxFilterOptionToRemove","checkboxFilterOption","checkedValues","Option","_value","_valueString","stringify","AvailablePricesFilter","onSelectedOptionsChange","_callbackSelectedOptionsChange","_checkboxFilter","_dynamicallyGetFromPriceWithLowerRange","_roundDownToNearest100","_roundUpToNearest100","_getAndUpdateOptions","_updateOptions","filterPlots","whatAreYouLookingForViewModel","priceRange","hasFrom","hasTo","getCheckboxOptions","checkboxOption","hasFromAndFromIsInsideRangeForCheckbox","hasToAndToIsInsideRangeForCheckbox","hasFromAndToAndConsumesEntireCheckboxRange","priceRangesToShow","plotsToShow","priceRangeToShow","plotsInPriceOrder","desiredPriceIntervalsPlusDynamicallyAddedPriceIntervalsPrice","requiredRanges","previousPriceIntervalWithToLessThan","dynamicRangesSeen","foundRange","priceInterval","nextPriceInterval","range","dynamicRangeString","previousPriceInterval","priceRoundedDownToNearest100","requiredRange","isApplied","Favourite","payload","sortValue","imageUrl","onRemove","_onRemove","_payload","_imageUrl","_sortValue","StatusFilter","plotStatusesToShow","newChecked","BedroomsFilter","bedroomsFilterSettings","callbackClose","nBedroomssToShow","nBedroomssForPlots","FeaturesFilter","setFromWhatAreYouLookingForViewModel","_handleSelectedOptionsChanged","_setSelectedFeatures","_selectedFeatures","_mapFeatureIdToOption","_selectedOptionsChangedOnce","selectedFeatures","selectedFeature","_propertyBindingAllFeatures","o","SliderHandle","callbackMoved","_callbackMoved","_startPosition","_mouseStartPosition","capturing","isTouch","dX","dY","_handleMouseDown","onMouseUp","_handleMouseUp","_handlemouseLeave","Slider","initial","onValueChanged","isHorizontal","_onValueChanged","_min","_max","_initial","_isHorizontal","_sliderHandle","setValue","_constrainValue","_sliderHandleMoved","setMin","setMax","_updateSliderHandlePosition","_calculateAndDispatchNewValue","_setSliderPositionFromValue","setFromInitialValue","sliderHandle","inner","newX","innerWidth","newY","innerHeight","newDesired","innerLength","Star","onSelectedChange","_onSelectedChange","_clicking","faStar","InsertedMnuItemsRegistrationHandle","callbackRemove","_callbackRemove","InsertedMenuItemsHandler","getInsertedMenuItems","setInservedMenuItems","_setInservedMenuItems","_getInsertedMenuItems","_getCallbackRemoveLexicalClosure","registerMenuItems","menuItems","insertedMenuItems","menuItem","InsertedMenuItemsRegistrationHandle","ZoomButtons","interval","_handleClickDown","_handleClickUp","DragDropType","STREET_VIEW_BUTTON","IDragDropRecipient","objTypeName","onDrop","onDragging","DragDropStreetViewButton","showDefaultOutside360","getDragDropRecipient","_callbackShowDefaultOutside360","_getDragDropRecipient","_setElementPosition","_onDragStart","_onDragMove","_onDragEnd","_setImage","_getImageUrl","_imgRef","_offsets","_moving","_iDragDropRecipient","validate","dragging","WindowType","PLOTS_SELECTION_MENU","HOUSE_TYPE_VIEWER","SITE_PLAN","WindowEventNames","MAXIMIZED","MINIMIZED","FOCUSSED","UNMINIMIZED","UNMAXIMIZED","MOVED","CLOSED","WINDOW_CREATED","WINDOW_DESTROYED","DRAGGED","DRAG_STARTED","RESIZE_STARTED","styleFromObject","Windows","_instances","currentBounds","minYPx","maxYPx","minXPerc","maxXPerc","getActive","getStartPosition","mostActiveWindowNotThisWindow","getParentElement","otherWindowPosition","getPosition","_screenResized","divDragHeightTaskBarPx","clientHeight","_updateZIndices","_setZIndex","sendToBack","instances","_dispatchWindowCreatedEvent","EventNames","_dispatchWindowDestroyedEvent","_innerElement","_iconElement","_textElement","fontAwesomeIconFactory","createFactory","FontAwesomeIcon","ReactDOM","_imgElement","MenuBarWindowEntries","_windowCreated","_windowDestroyed","_mapWindowHashToEntry","getHash","getType","iconButton","IconButtonNonReact","toggleMinimize","removeChild","MenuBar","showMainMenu","onZoomChange","setFavouritesActive","getDragDropRecipientForStreetViewButton","showDefault3d","showBrochures","showPlots","showHouseTypes","playSiteVideo","showTwoDSitePlan","showSuggestedSites","_mapMenuTypeToHandles","_showMainMenu","_callbackShowPlots","_callbackShowDefault3d","_callbackShowBrochures","_callbackShowHouseTypes","_callbackPlaySiteVideo","_callbackShowTwoDSitePlan","_callbackShowSuggestedSites","_zoomButtonsRef","_starRef","_callbackZoomChange","_setFavouritesActive","_getDragDropRecipientForStreetViewButton","_handleClickButtonSite","_handleClickButton3d","_handleClickButtonBrochures","_handleSliderZoomValueChanged","getHandlesActivateButton","_handleClickButtonTwoDSitePlan","_onStarSelectedChange","_handleWindowResized","_handleClickButtonPlots","_dispatchIsHorizontalChanged","_menuTypeActiveChanged","_getIsPortrait","_handleClickButtonHouseTypes","_handleClickButtonPlaySiteVideo","_handleClickButtonSuggestedSites","_windowEntriesRef","horizontal","insertedMenuItemsAtEnd","_insertedMenuItemsHandler","_insertedMenuItemsAtEndHandler","_menuBarWindowEntries","menuType","isActive","clientWidth","_setHorizontal","iconButtonFullScreen","isSupported","_handleClickButtonFullscreen","buttonPlots","playSiteVideoButton","brochureMenu","twoDSitePlanButton","suggestedSitesButton","buttonHouseTypes","MainMenu","_handleClickFilter","_handleClickSite","_handleClickBrochure","faFilter","faCity","faBook","ProgressBar","propertyNameProgressProportion","propertyNameVisible","delayHide","clickEvent","_handleProgressProportionChanged","_handleVisibleChanged","_touchedProgressBar","_startedTouchForwardReverse","_moveTouchForwardReverse","_endTouchForwardReverse","_updateProgressBarProportionFromTouch","_delayHide","_bar","_timeoutHide","_reachedHundredPercentAt","_propertyBindingProgressProportion","_propertyBindingVisible","_efficientMoveCycleTouchForwardReverse","_frequencyLimitedCallbackTouchForwardReverse","Date","getTime","proportion","VideoPlayer","maximized","closeable","toggleMaximizeButton","forceFillWidth","_forceFillWidth","_maximized","play","_setPlayButtonImage","_clickedPlayStopButton","_updateFillWidthHeight","_onVolumeSliderValueChanged","_setVolumeVisible","_hideVolume","_mouseActive","_showUI","_hideUI","_onVideoTimeUpdate","_videoEnded","_setVideoTimeFromTouchForwardReverseDistance","_clickedProgressBar","_updateMaximized","_setHasVideo","_showVolume","_toggleVolume","_videoElement","_volumeWrapperElement","_volumeWrapperInnerElement","_videoWrapperElement","_buttonPlayPause","_imgPlayPause","_playing","_iconButtonNonReactClose","__uiVisible","_uiVisible","_proportion","_progressBar","_temporalCallbackHideUI","_resizeWatcher","_iconButtonVolume","_iconButtonFullScreen","_volumeSliderRef","sliderFactory","_volumeShowing","_clickedOffVolumeHandle","proportionVolume","volume","currentTime","duration","_touchDownNotCancelledYet","_hideUISuspended","_startTouchPosition","_videoProportionAtStartOfTouch","distanceX","dProportion","newProportion","triggerClicked","videoAspectRatio","videoWidth","videoHeight","elementAspectRatio","_play","pause","playing","video","__proportion","MenuManager","outerElementRef","_outerElementRef","_currentMenusShowing","_mapMenuTypeToMenu","_menuHistory","_showMenuByType","_showMenuWithLoopBreak","_showMenu","_close","_closeOnce","_showMenuOnce","hasBacks","keepHistory","currentMenuShowing","_setHasBacks","menu","sameAsLast","childMenu","childMenuInstance","HouseTypeFilter","_setHouseTypeViewModelsToShow","houseTypeViewModelsToShow","houseTypesToShow","houseTypeViewModelToShow","houseTypesWithSameName","_houseTypesViewModel","houseTypeViewModel","houseTypeViewModels","houseTypesViewModel","imageAbsolutePath","TypeError","PlotFilterer","_filters","plotFilter","filters","KeyboardButton","textNotProvided","_icon","NumericalKeyboard","onKey","_onKey","_handleClickKeyboardButton","_createButton","additionalClasses","keyboardButtons","PlotSearch","selectedPlot","_callbackSelectedPlot","_input","_handleInput","_handleKey","_allowedKeyCodes","plotNumberStr","numberValid","_selectedPlot","_callbackClose","triggered","nativeEvent","inputType","charCodeAt","keyCode","_MAX_LENGTH","fromCharCode","plotValidAndNotAffordable","previousSelectedPlot","classNamePlotNumber","onInput","MouseBlocker","getViewportDimensions","getElementsByTagName","EdgeLocation","TOP_LEFT","TOP_CENTER","TOP_RIGHT","MIDDLE_RIGHT","BOTTOM_RIGHT","BOTTOM_CENTER","BOTTOM_LEFT","MIDDLE_LEFT","PopupMenu","edgeLocation","onHide","_callbackOnHide","_edgeLocation","_repositionVerticallySoOnPage","_repositionHorizontallySoOnPage","_startWatchingForClickOff","_startWatchingMouseForLeave","_checkMouseWithinBoundsAndAct","_doResposition","_getCurrentRect","_setLeft","_setTop","_setRelocated","_showing","_checkMouseWithinBoundsAndActOnce","relocated","untilClickOff","_getMouseInSourceBounds","_dueReposition","_currentRect","viewportDimensions","currentRect","relocatedVertically","relocatedHorizontally","fromTopOfViewPort","fromBottomOfViewPort","correctionForEdgeLocation","fromLeftOfViewPort","fromRightOfViewPort","TabPanel_Panel","_child","tabInfo","_tabInfo","TabPanel_Tab","panel","setActive","_setActive","_panel","_handleSetActive","tabInfoClassName","TabPanel","defaultActiveTabIndex","onSetActive","_callbackSetActive","panels","_defaultActiveTabIndex","child","panelRef","childTabKey","tabKey","tabs","tab","tabElement","panelElement","tabRef","TabInfo","_title","ImageCarousel","getContainerViewPort","aspectRatioThreshold","onExpandImage","rootUrl","_rootUrl","_callbackExpandImage","_getContainerViewPort","_getVerticalElseHorizontal","calculateAndUpdateVerticalOrHorizontal","_handleClickExpand","_createImageElements","_dynamicImageFitCriteriaVertical","_dynamicImageFitCriteriaHorizontal","imageElements","verticalElseHorizontal","imagesChanged","rootUrlChanged","viewPort","dynamicImageEntry","faExpand","containerViewPortDimensions","aspectRatio","_aspectRatioThreshold","largestImageUrl","getLargestEntry","JumpableZoomableDragable","_loadImage","noMoreLeft","noMoreRight","dynamicImageOrImagePathString","PlotMoreInformationFloorPlans","getViewPort","_loadFloorPlanImages","_IMAGE_CAROUSEL_ASPECT_RATIO_THRESHOLD","PlotMoreInformationGallery","_loadRoomImages","roomImages","PlotMoreInformationOverview","showStreetView","_star","_callbackShowStreetView","_handleStarSelectedChanged","_handlePlotSelectedChanged","_ellipsisAbout","_handleClickShowStreetView","_workBackwardsThroughStringToFindLastCharacterBeforeSpaceIndex","showAll","aboutTruncated","_firstAboutTruncation","aboutTruncatedWithEllipsisWithEllipsisIfRequired","previousState","oldPlot","newPlot","scrollHeight","indexToChopRemainingWrodOffFrom","proportionToKeep","lastCharacterBeforeSpaceIndex","nearPlot","hasPrice","isSold","getPlotImageAbsolutePath","faStreetView","priceString","faBed","PlotMoreInformation","_tabPanelRef","_overview","_gallery","_floorPlans","_getTitle","_getPanelsViewPort","_disposeClickedOffHandle","_releasePlotActiveHandle","_handleShowStreetView","_handleTabSetActive","_currentPlotActiveHandle","_currentPlotMoreInformationType","_plot","_site","PhoneNumberValidation","REG_EXP_INTERNATIONAL_NUMBER","EmailValidation","REG_EXP_EMAIL_RFC_5322","BrochureProgressStatus","Queued","Generating","Generated","brochureProgressStatus","BrochureBeingGenerated","brochureGenerationIdentifier","plotNumbers","brochureUrl","brochureType","_brochureGenerationIdentifier","_brochureProgressStatus","_proportionProgress","_brochureUrl","_brochureType","_plotNumbers","updateProgress","progress","proportionProgress","GoogleAnalytics","trackingCode","script","_trackingCode","dataLayer","_gtag","_instance","LocalStorageHelper","localStorage","getItem","ex","setItem","SESSION_TOKEN","SessionManager","_sessionToken","getObj","sessionToken","setObj","BrochuresManager","_brochuresBeingGenerated","_mapBrochureGenerationIdentifierToBrochureBeingGenerated","setSessionTokenAndAddBrochureGenerationIdentifier_fromResponse_IfValid","_addBrochureBeingGenerated","_getUpdatesToBrochureBeingGenerateds","_processUpdatesResponse","_processBrochuresResponse","_dispatchBrochuresBeingGeneratedChanged","_clearBrochuresBeingGeneratedWhichAreNotComplete","_getBrochuresForSession","_timerGetUpdatesToBrochureBeingGenerateds","firstName","surname","email","phoneNumber","optInOptions","agreedToPrivacyNotice","singlePlotBrochure","waitForUrl","debug","userInfo","instance","logPlotBrochureRequest","logFavouritesBrochureRequest","getGeneratePDFBrochureSimple","jObjectResponse","startedAt","brochureBeingGenerated","sessionTokenIsValid","clearSessionToken","getBrochureGenerationGetBrochuresForSession","brochureGenerationIdentifiersToGetUpdateFor","brochureGenerationIdentifiers","getBrochureGenerationCheckProgress","progresses","sessionTimedOut","newBrochuresBeingGenerated","toRemove","brochuresBeingGenerated","BrochureGeneration","getSiteAndUnits","showBrochuresMenu","getSelectedFavourites","_getSiteAndUnits","_getSelectedFavourites","_showBrochuresMenu","_titleRef","_firstNameRef","_surnameRef","_phoneNumberRef","_checkboxOptInPhoneRef","_checkboxOptInEmailRef","_checkboxOptInTextRef","_emailRef","_privacyNoticeCheckboxRef","_currentDialog","_agreedToPrivacyNotice","_handleClickGenerate","_startPdfDownload","_handleTitleChange","_handleFirstNameChange","_handleSurnameChange","_handleEmailChange","_handlePhoneNumberChange","_handleClickShowPrivacyPolicy","_validateText","_validatePhoneNumber","_validateEmail","_getClassNameField","_disposeCurrentDialog","_showHasNoPlotsFavouritedDialog","_showYouMustAgreeToPrivacyNoticeDialog","_getOptInOptions","_onClickBrochureGenerationResultDialog","_handleCheckboxAgreedToPrivacyNoticeChanged","_showResponseDialog","_setGenerating","generating","titleValid","emailValid","phoneNumberValid","firstNameValid","surnameValid","_plotsShownFor","create","_validateOnSubmission","selectedPlotsArray","generate","_firstName","_surname","_email","_phoneNumber","link","download","click","allowEmpty","validateInternational","emailRFC5322","valid","classNameIconButtonGenerate","placeholder","ImageViewer","_sliderRef","_pictureWrapperRef","_subMenuHeaderRef","_updateZoomSlider","slider","FavouriteEntry","onClickRemove","_callbackClickRemove","_handleCheckboxChanged","_handleClickClose","_favourite","dangerouslySetInnerHTML","__html","Drag","callbackStarted","minXPercent","maxXPercent","timer","drag","startedButNotMovedYet","updateMinMax","setText","Resizer","div","minWidth","divInner","minHeight","maxWidth","maxHeight","bounds","callbackResized","callbackInstantaneous","toInclude","fixedAspectRatio","divLeft","divTop","divRight","divBottom","divLeftTop","divLeftBottom","divRightTop","divRightBottom","maxXPercentage","minXPercentage","setCornerGeneric","leftTop","leftBottom","rightTop","rightBottom","setFixedAspectRatio","cursor","rigtTop","rightButton","moveEvent","upEvent","startOffset","doResize","resizeLeft","resizeRight","resizeTop","resizeBottom","pageX","pageY","setDimensions","getDimensions","touchstart","padding","onmousedown","setBounds","boundsIn","previousBounds","minYpx","SelectHelper","selectStrings","setSelectable","selectableString","nodeType","setAttribute","onselectstart","selectString","firstChild","nextSibling","makeSelectable","makeUnselectable","Settings","settingsName","callbackReset","getAll","addRange","resetAll","defaults","dragable","minimizable","maximizable","minimizeOnClose","GenericWindow","previousSizes","maximizedSizes","cancelBringToFront","timerFlash","flashCount","tooltipMessage","iconPath","defaultWidth","defaultHeight","minimized","defaultX","defaultY","resizable","zIndexOffset","toggleMaximizeOnDoubleClick","divTab","divMain","divName","saveName","settings","flash","flashing","setName","setTooltipMessage","getIcon","getTooltip","Z_INDEX_CHANGED","getState","maximize","unmaximize","minimize","unminimize","focus","bringToFront","dispatchFocussedEvent","toggleMaximize","setWindowSizePositionMaximized","getMinimizable","getTabElement","fillLeftHalf","setWindowSizePosition","fillRightHalf","halfWidth","clickedOnMe","getMainElement","paddingString","initializePadding","_resizer","equals","getSizes","RESIZED","_drag","fillerElement","iconButonMinimize","iconButonMaximize","iconButonClose","startSize","startZIndex","_unminimize","mouseDragPosition","leftOffset","l","SubMenuHeaderNonReact","menuManager","childrenElement","titleElement","backButtonWrapperElement","closeButtonWrapperElement","_iconButtonNonReactBack","PlotDetailedInformationSectionType","FloorPlans","StreetViewImage","FrontViewImage","Gallery","Description","Tour","Video","PlotDetailedInformationSummary","scrollToFloorPlans","scrollToGallery","_selectedChanged","_handleClickSendBrochure","_handleClickEnterHouse","_setValuesFromSiteJsonUnitPlot","_siteJsonUnitPlot","_plotNameElement","_plotNumberElement","_plotStatusDescriptionElement","_plotPriceElement","_nBedroomsElement","_smallButtonsElement","childElement","starFactory","hasOneOrMoreRoomImages","_iconButtonWalkmode","_iconButtonShowGallery","_buttonEnterHouse","buttonSendBrochure","_propertyBindingSelected","showPrice","isReserved","nBathroomString","ResizeWatchers","DynamicImageDisplayer","dynamicImage","resizeWatcherParentElement","fitWidthElseHeight","allowDowngradeResolution","resolutionMultiplier","onLoaded","_allowDowngradeResolution","_resolutionMultiplier","_dynamicImage","_parentElement","_onParentElementResize","_fitImageToWidth","_fitImageToHeight","_shouldSkipUpdateCosIsDowngrade","_setSrc","_fitImage","newDynamicImageEntry","_currentDynamicImageEntry","PlotDetailedInformationGallery","showImagesFullScreen","_showImagesFullScreen","_setupFromSiteJsonUnitPlot","_loadImages","_setRoomImageClass","_dispatchLoaded","_loadedOnce","_imgWrapperElement","_dynamicRoomImages","newClassName","_currentRoomImageClassName","PlotDetailedInformationDescription","PlotDetailedInformationFloorPlans","_setFloorPlanImageClass","_dynamnicImageDisplayers","dynamicImageDisplayer","PlotDetailedInformationVideo","_videoUrlChanged","_videoPlayer","_propertyBindingTourUrl","PlotDetailedInformationTour","_iframeElement","_tourUrlChanged","PlotDetailedInformation","showPlot","callbackPlotNumberChanged","_enterHouse","_showPlot","_callbackShowImagesFullScreen","_callbackPlotNumberChanged","_scrollToFloorPlans","_scrollToGallery","_scrollToElement","scrollToTop","_onClose","scrollToSectionWithProportion","setSectionProportionRanges","_dispatchScrolled","moreThanOnePlotInUnit","_window","_createNextPreviousPlotButtons","_mainElement","_summary","_video","_tour","_scrollableElement","_sections","section","scrollTop","nextPreviousElement","setNewPlotFromIndex","_setupSiteJsonUnitPlot","previousButton","faAngleLeft","indexOfThisPlot","newIndex","nextButton","faAngleRight","textElement","insertBefore","childNodes","scrollableElementHeight","_sectionProportionRanges","proportionFrom","proportionTo","plotDetailedInformationSectionType","sectionProportionRange","sectionType","totalProportionToScrollTo","pxToScrollTo","plotDetailedInformation","currentProportion","currentSection","PlotDetailedInformationsManager","_callbackDisposePlotDetailedInformation","_plotNumberChanged","_plotDetailedInformations","bringIntoFocus","PlotComparisonScrollManager","plotDetailedInformations","_onPlotDetailedInformationWindowFocused","_releasePreviouslyFocusedPlotDetailedInformation","_setFocusedPlotDetailedInformation","_currentlyFocusedPlotDetailedInformationScrolled","_currentlyFocusedPlotDetailedInformation","_focussed","windowHash","sectionTypeAndProportion","sectionTypeAndProportionScrolled","plotDetailedInformationToScroll","eventNamesToDetectWhenToExitComparison","PlotComparisonManager","plotDetailedInformationsManager","sitePlanElement","_plotDetailedInformationsManager","compare","_sitePlanElement","_plotComparisonElement","_plotComparisonTextElement","_showTooManyPlotsSelectedToDoComparison","_showAtLeastTwoPlotsMustBeSelectedDialog","_setComparingClassOnSitePlan","_getNPlotDetailedInformationWindowsInEachDirection","_getPositionNextWindow","_registerEventsToDetermineWhenToExit","_exitComparisonMode","siteJsonUnitPlots","positionNextWindow","_PlotComparisonScrollManager","_unregisterEventsToDetermineWhenToExit","eventName","_plotComparisonScrollManager","nPlotDetailedInformations","nPlotDetailedInformationWindowsInEachDirection","windowDimensionsPx","nX","nY","Favourites","onShowSendFavouritesBrochure","_callbackShowSendFavouritesBrochure","_onClickFavouriteEntryRemove","_handleClickSendMyFavouritesBrochure","_handleClickCompare","_getEntryByHash","favouriteEntry","selectedFavourites","comparisonButton","selectedEntries","StylesHelper","cssString","head","styleSheet","cssText","createTextNode","PrivacyPolicy","ViewModelBase","UnitViewModel","siteJsonUnit","_siteJsonUnit","CompositeProgressSource","weightingFactor","progressSources","_add","_onProgressSourceProgressChanged","_update","_dispatchProgressChanged","_sum","_isDone","_weightingFactor","_progressSources","progressSource_s","added","progressSource","oldProportion","progressProportion","sumProgressTimesWeight","sumWeights","weightingFactorSum","SitePlan3DViewModel","_loadingProgressProportionChanged","_unitViewModels","_progressSourceLoading","loadProgressProportion","progressBarVisible","BabylonViewBase","BabylonCameraPan","babylonScene","inertiaDecayFactor","inertiaNegligibleThreshold","_inertiaDecayFactor","_inertiaNegligibleThreshold","_babylonScene","_isNewForwardVectorTooCloseToSingularity","_pan","_sphericalPan","_inertialPan","_getPointerViewSpaceDirectionToRef","_mouseLeft","_onPointerUp","_onPointerDown","_setMouseButtonStates","_stopPanningIfPanning","defaultCursor","camera","rotationQuaternion","BABYLON","Identity","_leftButtonDown","_rightButtonDown","_ptrX","_ptrY","_inertiaX","_inertiaY","_priorDir","_currentDir","_rotationAxis","_rotationAngle","_newForward","_newRight","_newUp","_matrix","_inertialPanObserver","_sphericalPanObserver","onPointerDown","onPointerUp","isLeftButton","button","which","isRightButton","v","abs","Dot","Up","_currentlyPanning","onBeforeRenderObservable","currX","currY","computeNewForward","CrossToRef","lengthSquared","GetAngleBetweenVectors","RotationAxisToRef","rotateByQuaternionToRef","setRowFromFloats","fromRotationMatrixToRef","getRotationMatrix","pointerX","pointerY","UnprojectToRef","canvas","getProjectionMatrix","normalize","BabylonCameraZoom","zoomSpeedFactor","closestCanGetToSurface","_zoomSpeedFactor","_closestCanGetToSurface","_getMaximumDistanceCanMoveForward","_onPointerWheel","onPrePointerObservable","POINTERWHEEL","pointerInfo","eventState","delta","wheelDelta","detail","direction","getDirection","actualDistanceToMove","scaledDirection","scale","addInPlace","distanceWouldLikeToMove","ray","hit","pickWithRay","distanceLeftToMoveForward","distance","StandardProgressSource","SiteView","babylonModelsManager","_babylonModelsManager","_loadSiteModels","_setupControls","siteModels","progressSourceLoading","iteratorModels","nModel","iteratorProgressSources","babylonModels","loadNextModel","hasNext","getNewMesh","quadrantsPath","getQuadrantsAbsolutePath","standardProgressSource","babylonModel","defaultCamerasAndLight","attachCameraControls","startRendering","setCameraPosition","SitePlan3DView","_unitViews","_progressBarVisibleChanged","_zoomChanged","_logoLarge","_bindingProgressBarVisible","babylonMaterialsManager","_babylonMaterialsManager","ModelFile","fileName","_throwMustProvideUrlOrRootUrlAndFileName","_fileName","seperatedUrlComponents","seperateUrlIntoRootUrlAndFileName","BabylonModel","babylonMeshes","particleSystems","skeletons","_root","_quadrants","_babylonMeshes","_particleSystems","_skeletons","_location","setLocation","setVisibleObjects","_setNodeEnabled","_setPositionRotationAndScaling","setAllObjectsVisible","clone","_mapNodeIdToBabylonMesh","_currentNodeIdsVisible","babylonMesh","allNodeIds","nodeId","nodeIdsVisible","nodeIdVisible","indexInCurrentNodeIdsVisible","nodeIdToDisable","enabled","mesh","setEnabled","loggingLevel","DETAILED_LOGGING","BabylonModelsManagerCache","_mapFileNameToBabylonModel","filePath","BabylonMeshesCombiner","_scene","_mapMaterialNameToCombinedMesh","combineMeshesByMaterial","_get_MaterialName_MeshesToCombine_Pairs","_validateAllVerticesHaveBufferBound","_get_getName","_mergeMeshes","materialName_MeshesToCombine_Pairs","pair","materialName","meshesToCombine","combinedMesh","nMerge","mapMeshNameToMeshesToCombine","material","meshName","meshes","firstMesh","newUv2s","newColors","newMatricesIndices","newMatricesWeights","newIndices","newPositions","newNormals","newUvs","meshesToDispose","hasUv2s","hasColors","hasMatricesIndices","hasMatricesWeights","hasNormals","normalsForEachMesh","normals","getVerticesData","NormalKind","isVerticesDataPresent","UV2Kind","ColorKind","MatricesIndicesKind","MatricesWeightsKind","indices","getIndices","positions","PositionKind","computeWorldMatrix","UVKind","UV3Kind","positionsOffset","worldMatrix","getWorldMatrix","vertexIndex","vertex","TransformCoordinates","normalsIndex","normal","TransformNormal","indicesIndex","newMesh","setVerticesData","setIndices","BabylonModelsManager","modelsRootUrl","_modelsRootUrl","_babylonModelsManagerCache","_babylonMeshesCombiner","_getModelFileFromModelAndOrCode","_scheduleApplyTexturesToModel","_scheduleApplyTextureToMesh","_makeBabylonMeshInvisible","_isCollider","loadBabylonModel","getDefault","modelFile","promiseGetQuadrants","getQuadrants","ImportMesh","babylonModelAdded","loaded","total","materialsManager","getByName","getInvisibleMaterial","getBabylonMaterialByName","babylonMaterial","modelRelativePath","suffix","BabylonScene","_onWindowResize","_engine","onReadyToAddSceneComponents","_rendering","_onReadyToAddSceneComponents","stopRendering","setRendering","_rendeLoop","_babylonModelDisposed","_updateVisibleObjects","_cameraPositionOrRotationChanged","_setScalingRotationAndPosition","setNTimesInitialCameraRadius","_babylonModels","_updateVisibleObjectsFrequencyLimitedCallback","sceneInstrumentation","SceneInstrumentation","drawCallsCounter","createDefaultEnvironment","createDefaultLight","lights","intensity","_camera","Zero","_initialCameraRadius","radius","n","rotationMatrix","FromRotationMatrixToRef","runRenderLoop","stopRenderLoop","objectIdsToShow","toEulerAngles","SitePlan3D","getInsertedMenuItemsHandler","getInsertedMenuItemsAtEndHandler","_getInsertedMenuItemsHandler","_displayErrorDialog","_retryLoad","_retryLoadWithLowerResolution","_groupedCallbacksLoad","_insertedMenuItemsRemoveHandle","rootView","sitePlan3DViewModel","modelRefs","_modelRefs","retry","retryWithLowerResolution","Hotspot","scene360Hotspot","scene360","marzipanoScene","getIconUrlFromRelativePath","_scene360Hotspot","_scene360","_iconUrl","rotateToCompensate","_setTransform","_calculateCompensatedRotation","_setToRotate","iconElement","tooltipElement","_cosPitchRadians","cos","_hotspot","hotspotContainer","createHotspot","yaw","pitch","roll","originalUpdate","xYMarker","xYPointingAt","_view","coordinatesToScreen","angleRadians","atan2","_yaw","rotationRadians","transformProperties","property","View360","onClickHotspot","mapHotspotTypeToFactory","_mapHotspotTypeToFactory","_getIconUrlFromRelativePath","_callbackClickHotspot","_viewer360Ref","_createImageUrlSources","_createLayers","_handleSceneTransitionUpdate","_createMarzipanoScene","_createTileUrl","_sourceFromTile","_createHotspots","_createHotspotFromFactory","loadScene","_handleSceneTransitionDone","_handleHotspotClick","_hookUpdateEvent","_setCameraDirectionEulerAngles","_cancelCurrentLoadScene","viewerElement","_marzipanoViewer","Marzipano","Viewer","stageType","controls","mouseViewMode","stage","antialias","preserveDrawingBuffer","generateMipmaps","_limiter","RectilinearView","limit","traditional","cameraDirectionEulerAngles","imageUrlSources","rectilinearView","createEmptyScene","_unhookCurrentUpdateEvent","marzipanoViewer","oldUpdate","_renderLoop","_boundLoop","scene360Layers","scene360LayerChoice","imageUrlSource","ImageUrlSource","tile","scene360Layer","marzipanoCubeGeometry","CubeGeometry","createLayer","source","geometry","pinFirstLevel","fromFactory","factoryMethod","listScenes","destroyScene","shift","doRejectBecauseCancelled","updateSize","listLayers","iteratorLayers","layer","_loadLayer","_switchToScene","setYaw","switchTo","transitionDuration","transitionUpdate","val","newScene","oldScene","newVal","opacity","util","clamp","mergeEffects","_hotspotContainer","domElement","textureStore","MiniMap","_mapImageRef","_currentPositionMarkerRef","toggleShowing","setAtOutside360","_setCurrentPositionMarkerLeftPercent","_setCurrentPositionMarkerTopPercent","_setCurrentPositionMarkerVisibile","setAngleRadians","_setupResize","_mapImageError","_mapImageLoaded","_groupedCallbacksMapImageLoad","_visible","_fixedAspectRatio","mapImageElement","offsets","widthFromHeight","heightFromWidth","aspectRatioSquared","markerPositionProportion","radians","offset","miniMapConeOffset","transform","leftPercent","_currentPositionMarkerElement","topPercent","currentPosition","InfoHotspot","_expand","expandedTextElement","textContent","Hider","_handlesChanged","SitePlan360","onBack","goToConfigurator","showPlotMenu","_view360Ref","_miniMapRef","_handleClickBack","_normalizeRadians","_callbackBack","_callbackGoToConfigurator","_handleClickHotspot","_handleToggleMinimap","_getCameraDirectionEulerAngles","whenLoaded","_sceneMoved","_create_SwitchToOutside360_LexicalClosure","_getInsertedMenuItemsAtEndHandler","_groupedCallbacksLoaded","_insertedMenuItemsAtEndRemoveHandle","_loaded","getDefaultScene","_switchToOutside360","_previousScene","previousScene360","hotspotsForScene","yawRadianss","hadNoOutside360MoveHotspots","previousHotspot","normalized","directionOfTravel","differenceInDirectionOfTravelAndYawRadians","sign","atEnd","centerPosition","hideBehindSpinner","showConfiguratorForPlot","closeCurrentConfigurator","_iframeLoaded","_nextIframeKey","iframes","_iframeCount","roomName","roomStr","iframe","SitePlanVisibleType","BIRDS_EYE_VIEW","OUTSIDE_360","CONFIGURATOR","THREE_D","PlotMenu","_lhsRef","_popupMenu","setFilteredPlots","_getFirstPlotMatchingFilteredPlots","_handleClickMoreInfo","_handleClickPreviousPlot","_handleClickNextPlot","_handlePopupMenuHide","_handleClickShowGallery","_handleClickShowFloorPlan","_handleClickMeaningShowPlotDetailedInformation","_handleClickLHS","_getImgUrl","_groupedCallbackImageLoaded","_startedShowAt","_loadingImageHandles","_currentLoadingImageHandle","imgLoaded","whenImgLoaded","_filteredPlots","plotsMatchingFilteredPlots","_imgLoading","currentPlot","nextIndex","dynamicImages","showMoreInformation","classNameStatus","BrochureType","FavouritesAllPlots","FavouritesAllHouseTypes","BrochuresMenuEntry","_brochureBeingGenerated","_whenFinishedModifying","_brochureProgressStatusChanged","_brochureUrlChanged","_proportionProgressChanged","_updateProgressBarProportion","_currentBrochureProgressStatusClass","_progressElement","_timerUpdateProgressProportion","_propertyBindingBrochureProgressStatus","_propertyBindingBrochureUrl","_propertyBindingProportionProgress","_changedStatusAtMilliseconds","_updateBrochureProgressStatusClassOnElement","_getText","getClassName","progressPercent","millisecondsSinceChangedStatus","neverGetThereProportion","getString","open","_showDownloadedBrochuresWillAppearHere","BrochuresMenu","_getHandlesActivateButton","_updateNoBrochuresVisibility","_setNoBrochuresVisible","_brochuresBeingGeneratedChanged","_releaseHandleActivateIcon","_removeEntry","_addEntryForNewBrochureBeingGenerated","_entriesWrapperElement","_entriesElement","_mapBrochureGenerationIdentifierToEntry","_noBrochuresElement","scrollToBottom","_handlActivateButton","currentBrochureGenerationIdentifiersNotSeen","brochureGenerationIdentifierNotSeen","brochuresMenuEntry","PlotsMenuEntry","callbackClicked","_callbackClicked","_handleClicked","_imageWrapperElement","_descriptionWrapperElement","_descriptionElement","blockString","_plotStatusElement","PlotsSelectionMenu","showPlotMenuForPlot","showMenu","clearFilters","getSitePlanVisibleType","_showPlotMenuForPlot","_showStreetView","_getSitePlanVisibleType","_buttonDoneElement","_createEntries","_callbackClickedEntry","_done","_addEntry","_onResize","_setColumnsClass","_menuElement","_iconButtonMenu","_filtersButtonsWrapperElement","filtersButtonsFactory","filteredSiteJsonUnitPlots","mapPlotNumberToEntry","filteredSiteJsonUnitPlot","_currentColumnClassName","selectedSiteJsonUnitPlots","_callbackPicked","PlotsSelectionMenuEntry","HouseTypesViewerEntryStatusesEntry","plotsToConsider","_plotsToConsider","update","_dotElement","_nameElement","_nElement","_updateOnce","HouseTypesViewerEntryStatuses","getValues","HouseTypesViewerEntryPriceRange","minPriceString","maxPriceString","minPrice","maxPrice","plotToConsider","HouseTypesViewerEntry","callbackAddFavourite","callbackRemoveFavourite","_houseTypeViewModel","_priceRange","_houseTypeViewModelSelectedChanged","_handleClickButtonWalkmode","_showFloorPlans","_handleClickImage","_showRoomImages","_handleShowConfigurator","_expandAbout","firstHouseTypeWithName","firstPlot","_firstPlot","firstUnit","_infoWrapperElement","_descriptionTextElement","_topElement","_plotPriceRangeElement","_iconButtonShowFloorplan","_iconButtonEnterHouse","checkboxFactory","_checkboxElement","_checkbox","_aboutElement","_aboutExpanded","allImages","HouseTypesViewer","_updateSelected","_mapHouseTypeToEntry","_clickedEntry","_iconButtonClearFilters","houseTypeListsSelected","_getHouseTypeListsSelected","seenEntries","houseTypeListSelected","houseTypeSelected","entryNotSeen","allHouseTypePlots","houseTypesViewerEntry","HouseTypeViewModel","_houseTypesWithSameName","_firstHouseType","_dispatchSelectedChanged","getImageAbsolutePath","HouseTypesViewModel","houseTypesForPlots","mapHouseTypeNameToHouseTypes","listOfHouseTypesForName","houseTypeLists","houseTypeList","FullScreenImagesViewer","_jumpableZoomableDragableWrapperElement","_jumpableZoomableDragableFactory","_renderJumpableZoomableDragable","DistanceHelper","latLng1","latLng2","_validateLatLng","lat1","lon1","lat2","lon2","φ1","φ2","Δφ","Δλ","sin","NearbySite","thisSiteJson","_distanceElement","round","calculateKmFromLatLng","NearbySites","siteJsons","nearbySite","SitePlan","URLSearchParams","search","callbackDidMount","_callbackDidMount","_menuBarRef","_mainMenuRef","_filtersRef","_availablePricesFilterRef","_statusFilterRef","_bedroomsFilterRef","_plotSearchRef","_houseTypeFilterRef","_featuresFilterRef","_mouseBlockerRef","_plotMoreInformationRef","_brochureGenerationRef","_imageViewerRef","_showForSale","_birdsEyeViewRef","_privacyPolicyRef","_sitePlan3DRef","_sitePlan360Ref","_configuratorRef","_menuManagerRef","_brochuresMenuRef","_loadSite","_load3dSite","_getFilteredPlots","_handleShowMainMenu","_filtersChanged","_filterAndLoadPlots","_loadIndividualPlot","_clearFilters","_plotSearchSelectedPlot","_getDimensions","_handlePlaySiteVideo","_handleShowTwoDSitePlan","_handleClickedFavourite","_handleZoomChange","_setMenuBarZoom","_handleSetFavouritesActive","_handleFavouritesHide","_handleExpandImage","_handleAddFavourite","_handleRemoveFavourite","_handleShowOutside360","_handleShowDefaultOutside360","_handleShow3d","_handleShowBrochures","_handleBackFromSitePlan360","_handleShowSuggestedSites","_initializeConfiguredCssClasses","_showTooManyFavouritesDialog","_handlePreviousSitePlanVisibleTypeElseDefault","_handleShowSendFavouritesBrochure","_hasSpaceToShowMenuOnOpen","_menuBarIsHorizontalChanged","_handleEnterHouseByPlotNumber","_setupFirstShowPlotMarkers","_handleShowPlots","_handleShowHouseTypes","setFilterInSiteFromWhatAreYouLookingFor","_previousSitePlanVisibleType","_currentSitePlanVisibleType","_plotFilterer","_initializedConfiguredCssClasses","_showPlotMarkers","_doneFirstShowPlotMarkers","menuBarHorizontal","fadeInPlotMarkers","getSiteAssets","_plotsSelectionMenu","_houseTypesViewer","_nearbySites","_setVisibleType","getPlotsStillAvailableForSite","setAvailableOnly","filteredPlots","loadPlotsDirectory","siteJsonUnits","plotsStillAvailableWithOr","getPlotsStillAvailableWithOr","allPlots","allAvailablePlotsForSite","allPlotsThatCouldBecomeAvailable","handleFirstMouseDown","sitePlanVisibleType","dimensions","filteredUnits","unitPlotsArray","unitPlot","filtersApplied","addPlotFilter","_brochuresMenu","_videoPlayerFullScreen","iHouseTypesFilter","showPlotsMenu","_fullScreenImageViewer","setForSale","count","_MAX_FAVOURITES","switchToOutside360","getFirstPlot","cssHtmlString","appendCssToPage","videos","classNameSitePlan","getCssClassName","BIRDS_EYE_VIEW_ZOOM_MIN","BIRDS_EYE_VIEW_ZOOM_MAX","insertedMenuItemsHandler","insertedMenuItemsAtEndHandler","_handlePlotMenuHide","SitePlanWrapper","hasFilteredOptions","singleSite","_hasFilteredOptions","_siteJsons","maximised","sitePlanFactory","sitePlan","_sitePlan","SiteJsons","_whenFinishedModifyingSiteJsonAllFeatures","seenIds","configurations","configurationsIterator","doNext","DropdownSelectorMenu","classNames","defaultTitle","showEntries","setEntries","hideEntries","_setExpandedClassName","entryElement","WhatAreYouLookingForFirstOptions","nBeds","_whatAreYouLookingForViewModel","_clickedNext","_getPriceRangeText","_setNextEnabled","_plotsStillAvailableChanged","collapseExpandedOptions","_formatNumberToString","_handleBack","_get_show","_buttonBedsElement","_buttonPriceElement","becomingVisible","_buttonFeaturesElement","_buttonHousetypeElement","_nBeds","_Price","buttonNextTitleElement","_buttonNext","_propertyBindingPlotsStillAvailable","_plotsStillAvailable","_nextEnabled","hasFilterApplied","setFilterInSite","priceFrom","priceTo","_currentCssClassNameShow","cssClassNameShow","buttonText","cssClassName","getTextFromValue","buttonElement","_iconButtonBack","titleTextElement","WhatAreYouLookingForToggleButton","select","unselect","WhatAreYouLookingForNBeds","_createSetNBedsButton","_get_setNBeds","_nBedroomsSelectedValueChanged","_nBedroomAvailableWithOtherOptionsChanged","_mapValueToToggleButton","_toggleButtons","nBedroomsValues","nBedsValue","_propertyBindingNBedrooms","_propertyBindingNBedroomAvailableWithOtherOptions","_currentlySelectedButton","toggleButton","setAvailableOption","WhatAreYouLookingForFeatures","_createSetFeaturesButton","_removeFeaturesButton","_featuresChanged","_selectedFeaturesChanged","_get_setFeature","_featuresAvailableWithOtherOptionsChanged","_mapFeatureIdToButton","_propertyBindingFeatures","_propertyBindingSelectedFeatures","_propertyBindingFeaturesAvailableWithOtherOptions","availableFeatureIds","isAvailableOption","WhatAreYouLookingForPrice","_minSliderRef","_maxSliderRef","_priceRangeChanged","_onSliderMinValueChanged","_onSliderMaxValueChanged","_handleClickButtonDone","_valueElement","_sliderMinWrapperElement","_sliderMaxWrapperElement","minPlotPrice","maxPlotPrice","_propertyBindingPriceRange","_firstBecomingVisible","currentPriceRange","WhatAreYouLookingForHouseType","_createSetHouseTypesButton","_houseTypesAvailableWithOtherOptionsChanged","_get_setHouseTypes","_houseTypesChanged","_mapHouseTypeViewModelToButton","_propertyBindingHouseTypes","_propertyBindingHouseTypesAvailableWithOtherOptions","SelectedOptionType","NBedrooms","PriceRange","Features","WhatAreYouLookingForViewModel","_availablePlots","siteJsonsUnitPlot","isAvailable","_setFilterInSiteCallback","_getPlotsAvailableWithOtherSelectedOptions","_createIsInPriceRangeLexicalClosure","_createNBedroomsAvailableWithOtherOptions","_createHouseTypesAvailableWithOtherOptions","_createPriceRangeAvailableWithOtherOptions","nBedroomsAvailableWithOtherOptions","houseTypesAvailableWithOtherOptions","featuresAvailableWithOtherOptions","priceRangeAvailableWithOtherOptions","selectedOptionTypeFor","plotsStillAvailable","siteJsonUnitPlotsForSite","Bedrooms","_isInPriceRange","selectedFeatureIds","oneOfEachPlotsStillAvailable","plotStillAvailable","_nBedroomsAvailableWithOtherOptions","mapHouseTypeToHouseTypeViewModel","_houseTypeViewModelsStillAvailable","_featuresAvailableWithOtherOptions","siteJsonsUnitPlots","_minPrice","_maxPrice","_priceRangeAvailableWithOtherOptions","nBedroomsFilterApplied","houseTypesFilterApplied","featuresFilterApplied","priceRangeFilterApplied","_nBedroomsValues","_createFeaturesAvailableWithOtherOptions","WhatAreYouLookingForContentType","FirstOptions","WhatAreYouLookingFor","_setContent","_visibleChanged","_titleElement","_contentElement","_whatAreYouLookingForNBeds","_whatAreYouLookingForFeatures","_whatAreYouLookingForPrice","_whatAreYouLookingForHouseType","_whatAreYouLookingForFirstOptions","ContentType","contentType","newContentElement","_currentContentElement","SitePlans","_sitePlansWrapperElement","_sitePlanSelectorMenu","_mapSiteSlugToSitePlanWrapper","_createSitePlan","_showPlotsExplanationDialog","_setupSiteSelectorMenu","_getSiteJsonsWithPlots","_loadSitesForSiteJsons","_getSetWindowVisibilityForSitePlan","_setFilterInSitesFromWhatAreYouLookingFor","_whatAreYouLookingFor","_spinnerWrapperElement","spinnerFactory","_spinnerHandleLoading","andElseOr","siteJsonsWithPlots","siteJsonsIterator","sitePlanWrappers","setWindowVisibilityForSitePlan","sitePlanWrapper","iteratorSiteJsons","doNextSiteJson","firstSitePlanWrapper","nExistingSitePlans","isFirst","Sentry","dsn","integrations","Integrations","BrowserTracing","tracesSampleRate","App","_appRef","_googleAnalytics","sitePlans","Boolean","StrictMode","getElementById","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.4d229234.chunk.js","sourcesContent":["export default __webpack_public_path__ + \"static/media/logo.2d27ead7.svg\";","import React, { Component } from 'react';\r\nimport './NavMenu.css';\r\nexport default class NavMenu extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props)\r\n\t}\r\n\trender() {\r\n\t\treturn (
\r\n\t\t\t
)\r\n\t}\r\n}\r\n","export default class ExtendableError extends Error {\r\n constructor(message, innerError) {\r\n\t\tif(innerError)\r\n\t\t\tconsole.error(innerError);\r\n super(message);\r\n this.name = this.constructor.name;\r\n this.innerError = innerError;\r\n if (typeof Error.captureStackTrace === 'function') {\r\n Error.captureStackTrace(this, this.constructor);\r\n } else {\r\n this.stack = (new Error(message)).stack;\r\n }\r\n }\r\n}\r\n","import ExtendableError from './ExtendableError';\r\nexport default class ParameterError extends ExtendableError {\r\n\r\n}","import ParameterError from './ParameterError';\r\nexport default class ParameterErrors {\r\n static throwNotProvided(name) {\r\n throw new ParameterError(`No parameter \"${name}\" was provided`);\r\n }\r\n static throwNotArray(name) {\r\n throw new ParameterError(`The parameter \"${name}\" was not an array`);\r\n }\r\n static throwNotOfType(name, type) {\r\n throw new ParameterError(`The parameter \"${name}\" was not of type \"${type}\"`);\r\n }\r\n}","import ExtendableError from './ExtendableError';\r\nexport default class ParseError extends ExtendableError {\r\n\r\n}","import {Promise} from \"bluebird\";\r\nimport ParseError from '../errors/ParseError';\r\nimport ParameterError from '../errors/ParameterError';\r\nimport BSON from 'bson';\r\nPromise.longStackTraces();\r\nPromise.config({\r\n warnings: true,\r\n longStackTraces: true\r\n});\r\nexport default class RemoteFileHelper {\r\n static loadJSON(url) {\r\n\t\tif(url===undefined||url===null)\r\n\t\t{\r\n\t\t\tthrow new ParameterError(`url was ${url}`);\r\n\t\t}\r\n return new Promise((resolve, reject) => {\r\n\t\t\tconst headers={\"Content-Type\": \"application/json\"};\r\n fetch(url, {\r\n\t\t\t\tmethod: 'GET', \r\n\t\t\t\tcredentials: \"same-origin\",\r\n\t\t\t\theaders:headers\r\n\t\t\t}).then((response) => {\r\n response.text().then((content) => {\r\n resolve(JSON.parse(content));\r\n }).catch((err)=>{\r\n\t\t\t\t\treject(new ParseError(`Parsing json from file path \\\"${url}\\\"`, err));\r\n\t\t\t\t});\r\n });\r\n })\r\n }\r\n static loadBSON(url) {\r\n\t\tif(url===undefined||url===null)\r\n\t\t{\r\n\t\t\tthrow new ParameterError(`url was ${url}`);\r\n\t\t}\r\n return new Promise((resolve, reject) => {\r\n\t\t\tconst headers={\"Content-Type\": \"application/bson\"};\r\n fetch(url, {\r\n\t\t\t\tmethod: 'GET', \r\n\t\t\t\tcredentials: \"same-origin\",\r\n\t\t\t\theaders:headers\r\n\t\t\t}).then((response) => {\r\n response.text().then((content) => {\r\n\t\t\t\t\tconst data = BSON.deserialize(content);\r\n resolve(data);\r\n }).catch((err)=>{\r\n\t\t\t\t\treject(new ParseError(`Parsing bin from file path \\\"${url}\\\"`, err));\r\n\t\t\t\t});\r\n });\r\n })\r\n }\r\n}","export default class UrlHelper {\r\n \r\n static getAbsoluteFromRelative(relativeUrl) {\r\n if (relativeUrl[0] !== '/')\r\n relativeUrl = '/' + relativeUrl;\r\n return `${window.location.origin}${relativeUrl}`;\r\n }\r\n static seperateUrlIntoRootUrlAndFileName(url) {\r\n const lastIndexForwardSlash = url.lastIndexOf('/');\r\n if (lastIndexForwardSlash < 0) {\r\n return ['', url];\r\n }\r\n return [\r\n url.substring(0, lastIndexForwardSlash + 1),\r\n url.substring(lastIndexForwardSlash + 1, url.length)];\r\n }\r\n static makeSureSlashOnEnd(url) {\r\n if (url === null || url === undefined||url.length<1) return url;\r\n if (url[url.length - 1] === '/') return url;\r\n return url + '/';\r\n }\r\n\tstatic setSlashes(url, hasStartSlash, hasEndSlash){\r\n if (url === null || url === undefined||url.length<1) return url;\r\n if (url[url.length - 1] === '/') return url;\r\n\t\tconst firstCharacter = url[0];\r\n\t\tconst firstCharacterIsSlash=firstCharacter==='/';\r\n\t\tif(hasStartSlash){\r\n\t\t\tif(!firstCharacterIsSlash)\r\n\t\t\t\turl = '/'+url;\r\n\t\t}\r\n\t\telse{\r\n\t\t\tif (firstCharacterIsSlash)\r\n\t\t\t\turl = url.substring(1, url.length-1);\r\n\t\t}\r\n\t\tconst lastCharacter = url[url.length-1];\r\n\t\tconst lastCharacterIsSlash=lastCharacter==='/';\r\n\t\tif(hasEndSlash){\r\n\t\t\tif(!lastCharacterIsSlash)\r\n\t\t\t\turl = url+'/';\r\n\t\t}\r\n\t\telse{\r\n\t\t\tif(lastCharacterIsSlash)\r\n\t\t\t\turl = url.substring(0, url.length-1);\r\n\t\t}\r\n\t\treturn url;\r\n\t}\r\n static removeStartSlash(url) {\r\n if (url === null || url === undefined||url.length<1) return url;\r\n if (url[0] === '/') return url.substring(1, url.length);\r\n return url;\r\n }\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nconst {throwNotProvided, throwNotOfType}=ParameterErrors;\r\nexport default class GroupedCallbacks {\r\n\tconstructor(){\r\n\t\tthis._callbacksThen=[];\r\n\t\tthis._callbacksCatch=[];\r\n\t\tthis.then = this.then.bind(this);\r\n\t\tthis.catch = this.catch.bind(this);\r\n\t\tthis.doThen = this.doThen.bind(this);\r\n\t\tthis.doCatch = this.doCatch.bind(this);\r\n\t}\r\n\tthen(callbackThen){\r\n\t\tthis._callbacksThen.push(callbackThen);\r\n\t\treturn this;\r\n\t}\r\n\tcatch(callbackCatch){\r\n\t\tif(callbackCatch===undefined||callbackCatch===null)throwNotProvided('callbackCatch');\r\n\t\tif(typeof(callbackCatch)!=='function')throwNotOfType('callbackCatch', 'function');\r\n\t\tthis._callbacksCatch.push(callbackCatch);\r\n\t\treturn this;\r\n\t}\r\n\tdoThen(){\r\n\t\tconst callbacksThen = this._callbacksThen;\r\n\t\twhile(callbacksThen.length>0)\r\n\t\t{\r\n\t\t\tconst callbackThen = callbacksThen.splice(0, 1)[0];\r\n\t\t\ttry{\r\n\t\t\t\tcallbackThen.apply(null, arguments);\r\n\t\t\t}\r\n\t\t\tcatch(err){\r\n\t\t\t\tconsole.error(err);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tdoCatch(err){\r\n\t\tconst callbacksCatch = this._callbacksCatch;\r\n\t\twhile(callbacksCatch.length>0)\r\n\t\t{\r\n\t\t\tconst callbackCatch = callbacksCatch.splice(0, 1)[0];\r\n\t\t\ttry{\r\n\t\t\t\tcallbackCatch(err);\r\n\t\t\t}\r\n\t\t\tcatch(err){\r\n\t\t\t\tconsole.error(err);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}","const NFilteredSitePlansToShow={All:0, One:1, Two:2, };\r\nexport default NFilteredSitePlansToShow;","import ParameterErrors from '../errors/ParameterErrors';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class PlotStatusConfiguration{\r\n\tstatic get UNIT_MARKER_COLOR_SUFFIX(){\r\n\t\treturn '-unit-marker-color';\r\n\t}\r\n\tconstructor(props){\r\n\t\tconst {unitMarkerColor, configuratorIconFileName, plotStatus} = props;\r\n\t\tif(plotStatus===undefined||plotStatus===null)\r\n\t\t\tthrowNotProvided('plotStatus');\r\n\t\tif(unitMarkerColor===undefined||unitMarkerColor===null)\r\n\t\t\tthrowNotProvided('unitMarkerColor');\r\n\t\tthis._plotStatus = plotStatus;\r\n\t\tthis._unitMarkerColor=unitMarkerColor;\r\n\t\tthis._configuratorIconFileName=configuratorIconFileName;\r\n\t}\r\n\tget unitMarkerColor(){\r\n\t\treturn this._unitMarkerColor;\r\n\t}\r\n\tget configuratorIconFileName(){\r\n\t\treturn this._configuratorIconFileName;\r\n\t}\r\n\tget plotStatus(){\r\n\t\treturn this._plotStatus;\r\n\t}\r\n\tstatic fromEnumAndJObject (plotStatus, jObject){\r\n\t\tconst unitMarkerColor = jObject.unitMarkerColor\r\n\t\treturn new PlotStatusConfiguration({plotStatus:plotStatus, \r\n\t\t\tunitMarkerColor:unitMarkerColor, configuratorIconFileName:jObject.configuratorIconFileName});\r\n\t}\r\n}","import ExtendableError from './ExtendableError';\r\nexport default class NotImplementedError extends ExtendableError {\r\n\r\n}","import ExtendableError from './ExtendableError';\r\nexport default class ValueError extends ExtendableError {\r\n\r\n}","import ParseError from '../errors/ParseError';\r\nimport NotImplementedError from '../errors/NotImplementedError';\r\nimport ValueError from '../errors/ValueError';\r\nimport AssetsManager from '../assets_management/AssetsManager';\r\nconst PlotStatus = {\r\n AVAILABLE:4,\r\n COMING_SOON:3,\r\n FUTURE_RELEASE:6,\r\n SOLD_OR_UNAVAILABLE:2,\r\n\tRESERVED:8\r\n};\r\nPlotStatus.getValues = function(){\r\n\treturn Object.values(PlotStatus).filter(value=>typeof(value)==='number');\r\n};\r\nPlotStatus.getDescription = function(plotStatus){\r\n\tif(plotStatus===PlotStatus.AVAILABLE)\r\n\t\treturn \"Available\";\r\n\tif( plotStatus===PlotStatus.COMING_SOON)\r\n\t\treturn \"Coming Soon\";\r\n\tif( plotStatus===PlotStatus.FUTURE_RELEASE)\r\n\t\treturn \"Future Release\";\r\n\tif( plotStatus===PlotStatus.SOLD_OR_UNAVAILABLE)\r\n\t\treturn \"Sold\";\r\n\tif( plotStatus===PlotStatus.RESERVED)\r\n\t\treturn \"Reserved\";\r\n\tthrow new NotImplementedError(`Not implemented for \"${plotStatus}\"`);\r\n};\r\nPlotStatus.getCssName = function(plotStatus){\r\n\tif(plotStatus===PlotStatus.AVAILABLE)\r\n\t\treturn \"available\";\r\n\tif( plotStatus===PlotStatus.COMING_SOON)\r\n\t\treturn \"coming-soon\";\r\n\tif( plotStatus===PlotStatus.FUTURE_RELEASE)\r\n\t\treturn \"future-release\";\r\n\tif( plotStatus===PlotStatus.SOLD_OR_UNAVAILABLE)\r\n\t\treturn \"sold-or-unavailable\";\r\n\tif( plotStatus===PlotStatus.RESERVED)\r\n\t\treturn \"reserved\";\r\n\tthrow new NotImplementedError(`Not implemented for \"${plotStatus}\"`);\r\n};\r\nPlotStatus.toStr = function(plotStatus){\r\n\tif( plotStatus===PlotStatus.AVAILABLE)\r\n\t\treturn \"available\";\r\n\tif( plotStatus===PlotStatus.COMING_SOON)\r\n\t\treturn \"comingSoon\";\r\n\tif( plotStatus===PlotStatus.FUTURE_RELEASE)\r\n\t\treturn \"futureRelease\";\r\n\tif( plotStatus===PlotStatus.SOLD_OR_UNAVAILABLE)\r\n\t\treturn \"soldOrUnavailable\";\r\n\tif( plotStatus===PlotStatus.RESERVED)\r\n\t\treturn \"reserved\";\r\n\tthrow new NotImplementedError(`Not implemented for \"${plotStatus}\"`);\r\n};\r\nPlotStatus.getConfiguratorIconRelativePath = function(plotStatus, configuration){\r\n\t\tconst plotStatusConfiguration = configuration.plotStatusConfigurations.getFromPlotStatus(plotStatus);\r\n\t\treturn `icons/${plotStatusConfiguration?.configuratorIconFileName}`;\r\n};\r\nPlotStatus.parse = function(value){\r\n\tif(value===undefined||value===null)\r\n\t\tthrow ValueError('value was None');\r\n\tif(typeof(value)==='string')\r\n\t\treturn PlotStatus.parseFromString(value);\r\n\tif(typeof(value)==='number')\r\n\t\treturn PlotStatus.parseFromInt(value);\r\n\tthrow new ParseError(`Could not parse value \"${value}\" to PlotStatus\"`);\r\n};\r\nPlotStatus.parseFromString = function(value){\r\n\tvalue = value.toLowerCase();\r\n\tif (value==='available')\r\n\t\treturn PlotStatus.AVAILABLE;\r\n\tif (['coming soon', 'comingsoon', 'coming_soon', 'coming', 'soon'].indexOf(value)>=0){\r\n\t\treturn PlotStatus.COMING_SOON;\r\n\t}\r\n\tif (['future release', 'futurerelease', 'future_release', 'future'].indexOf(value)>=0){\r\n\t\treturn PlotStatus.FUTURE_RELEASE;\r\n\t}\r\n\tif (['sold or unavailable', 'soldorunavailable','sold_or_unavailable', 'sold', 'unavailable'].indexOf(value)>=0){\r\n\t\treturn PlotStatus.SOLD_OR_UNAVAILABLE;\r\n\t}\r\n\tif (['reserved'].indexOf(value)>=0){\r\n\t\treturn PlotStatus.RESERVED;\r\n\t}\r\n\tthrow new NotImplementedError(`Not implemented for \"${value}\"`);\r\n};\r\nPlotStatus.parseFromInt = function(value){\r\n\treturn value;\r\n};\r\nexport default PlotStatus;","import ParameterErrors from '../errors/ParameterErrors';\r\nimport PlotStatusConfiguration from './PlotStatusConfiguration';\r\nimport PlotStatus from '../site/PlotStatus';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class PlotStatusConfigurations{\r\n\tconstructor(props){\r\n\t\tconst {list}=props;\r\n\t\tthis._list = list;\r\n\t\tthis.getFromPlotStatus = this.getFromPlotStatus.bind(this);\r\n\t\tthis.toCssHtmlString = this.toCssHtmlString.bind(this);\r\n\t}\r\n\tgetFromPlotStatus(plotStatus){\r\n\t\tfor(var i=0; i2: same as 0, null or undefined: same as\r\n\t}\r\n\tget plotSelectionMenuEnabled(){\r\n\t\treturn this._plotSelectionMenuEnabled;\r\n\t}\r\n\tget showPlotDetailedInformationOnClickPlotMenu(){\r\n\t\treturn this._showPlotDetailedInformationOnClickPlotMenu;\r\n\t}\r\n\tget houseTypesViewerEnabled(){\r\n\t\treturn this._houseTypesViewerEnabled;\r\n\t}\r\n\tget suggestedSitesEnabled(){\r\n\t\treturn this._suggestedSitesEnabled;\r\n\t}\r\n\tget nFilteredSitePlansToShow(){\r\n\t\treturn this._nFilteredSitePlansToShow;\r\n\t}\r\n\tget featuresEnabled(){\r\n\t\treturn this._featuresEnabled;\r\n\t}\r\n\tget whatAreYouLookingForEnabled(){\r\n\t\treturn this._whatAreYouLookingForEnabled||window.location.href.split('#')[1]==='welcome';\r\n\t}\r\n\tget showPanelOnClickOutside360ConfiguratorIcon(){\r\n\t\treturn this._showPanelOnClickOutside360ConfiguratorIcon;\r\n\t}\r\n\tget miniMapConeMarkerEnabled(){\r\n\t\treturn this._miniMapConeMarkerEnabled;\r\n\t}\r\n\tget showFadedFilteredOutPlots(){\r\n\t\treturn this._showFadedFilteredOutPlots;\r\n\t}\r\n\tget showHouseTypesViewerOnOpen(){\r\n\t\treturn this._showHouseTypesViewerOnOpen;\r\n\t}\r\n\tget plotComparisonEnabled(){\r\n\t\treturn this._plotComparisonEnabled;\r\n\t}\r\n\tget brochuresMenuEnabled(){\r\n\t\treturn this._brochuresMenuEnabled;\r\n\t}\r\n\tget showPlotDetailedInformationOnDesktopClickInsteadOfHover(){\r\n\t\treturn this._showPlotDetailedInformationOnDesktopClickInsteadOfHover;\r\n\t}\r\n\tget windowStyleMenus(){\r\n\t\treturn this._windowStyleMenus;\r\n\t}\r\n\tget showNBathrooms(){\r\n\t\treturn this._showNBathrooms;\r\n\t}\r\n\tget threeDEnabled(){\r\n\t\treturn this._threeDEnabled;\r\n\t}\r\n\tget siteName(){\r\n\t\treturn this._siteName;\r\n\t}\r\n\tget siteSlug(){\r\n\t\treturn this._siteSlug;\r\n\t}\r\n\tget siteSlugForLatestSiteInfo(){\r\n\t\t\treturn this._siteSlugForLatestSiteInfo;\r\n\t\t\r\n\t}\r\n\tget defaultOutside360PlotNumber(){\r\n\t\treturn this._defaultOutside360PlotNumber;\r\n\t}\r\n\tget defaultAerialIndex(){\r\n\t\treturn this._defaultAerialIndex;\r\n\t}\r\n\tget plotStatusConfigurations(){\r\n\t\treturn this._plotStatusConfigurations;\r\n\t}\r\n\tget currencyConfiguration(){\r\n\t\treturn this._currencyConfiguration;\r\n\t}\r\n\tget goStraightToFiltersMenu(){\r\n\t\treturn this._goStraightToFiltersMenu;\r\n\t}\r\n\tget showShowForSaleButton(){\r\n\t\treturn this._showShowForSaleButton;\r\n\t}\r\n\tget hidePlotMoreInformationTabs(){\r\n\t\treturn this._hidePlotMoreInformationTabs;\r\n\t}\r\n\tget plotMoreInformationHasOverview(){\r\n\t\treturn this._plotMoreInformationHasOverview ;\r\n\t}\r\n\tget scrollablePlotMoreInformationGalleryAndFloorPlansElseSingleJumpableZoomableDragableImages(){\r\n\t\treturn this._scrollablePlotMoreInformationGalleryAndFloorPlansElseSingleJumpableZoomableDragableImages;\r\n\t}\r\n\tget fullScreenGalleryAndFloorPlans(){\r\n\t\treturn this._fullScreenGalleryAndFloorPlans;\r\n\t}\r\n\tget useCurrentPositionIcon(){\r\n\t\treturn this._useCurrentPositionIcon;\r\n\t}\r\n\tget sentryDSN(){\r\n\t\treturn this._sentryDSN;\r\n\t}\r\n\tget brochureGeneratorUrl(){\r\n\t\treturn this._brochureGeneratorUrl;\r\n\t}\r\n\tget delayShowPlotMarkersSeconds(){\r\n\t\treturn this._delayShowPlotMarkersSeconds;\r\n\t}\r\n\tget plotMarkerKeyAtTop(){\r\n\t\treturn this._plotMarkerKeyAtTop;\r\n\t}\r\n\tget googleAnalyticsTrackingCode(){\r\n\t\treturn this._googleAnalyticsTrackingCode;\r\n\t}\r\n\tget configuratorRootUrl(){\r\n\t\treturn this._configuratorRootUrl;\r\n\t}\r\n\tget siteInfoUrl(){\r\n\t\treturn this._siteInfoUrl;\r\n\t}\r\n\tget onClickPlotSelectionMenuEntryShowDetailedElseSmallPlotInfo(){\r\n\t\treturn this._onClickPlotSelectionMenuEntryShowDetailedElseSmallPlotInfo;\r\n\t}\r\n\tget siteVideoEnabled(){\r\n\t\treturn this._siteVideoEnabled;\r\n\t}\r\n\tget twoDSitePlanEnabled(){\r\n\t\treturn this._twoDSitePlanEnabled;\r\n\t}\r\n\tget hideNBedrooms(){\r\n\t\treturn this._hideNBedrooms;\r\n\t}\r\n\tget rotateOutside360Cameras180Degrees(){\r\n\t\treturn this._rotateOutside360Cameras180Degrees;\r\n\t}\r\n\tstatic fromJSON(jObject){\r\n\t\tconst plotStatusConfigurations = PlotStatusConfigurations.fromJSON(jObject.plotStatuses);\r\n\t\treturn new Configuration({plotStatusConfigurations:plotStatusConfigurations, \r\n\t\t\tgoStraightToFiltersMenu:jObject.goStraightToFiltersMenu, showShowForSaleButton:jObject.showShowForSaleButton,\r\n\t\t\thidePlotMoreInformationTabs:jObject.hidePlotMoreInformationTabs,\r\n\t\t\tplotMoreInformationHasOverview:jObject.plotMoreInformationHasOverview,\r\n\t\t\tscrollablePlotMoreInformationGalleryAndFloorPlansElseSingleJumpableZoomableDragableImages:\r\n\t\t\t\tjObject.scrollablePlotMoreInformationGalleryAndFloorPlansElseSingleJumpableZoomableDragableImages,\r\n\t\t\tfullScreenGalleryAndFloorPlans:jObject.fullScreenGalleryAndFloorPlans,\r\n\t\t\tuseCurrentPositionIcon:jObject.useCurrentPositionIcon,\r\n\t\t\tsentryDSN:jObject.sentryDSN,\r\n\t\t\tbrochureGeneratorUrl:jObject.brochureGeneratorUrl,\r\n\t\t\tdelayShowPlotMarkersSeconds:jObject.delayShowPlotMarkersSeconds,\r\n\t\t\tplotMarkerKeyAtTop:jObject.plotMarkerKeyAtTop,\r\n\t\t\tgoogleAnalyticsTrackingCode:jObject.googleAnalyticsTrackingCode,\r\n\t\t\tsiteName:jObject.siteName,\r\n\t\t\tsiteSlug:jObject.siteSlug,\r\n\t\t\tsiteSlugForLatestSiteInfo:jObject.siteSlugForLatestSiteInfo,\r\n\t\t\tconfiguratorRootUrl:jObject.configuratorRootUrl,\r\n\t\t\tsiteInfoUrl:jObject.siteInfoUrl,\r\n\t\t\tdefaultOutside360PlotNumber:jObject.defaultOutside360PlotNumber,\r\n\t\t\tdefaultAerialIndex:jObject.defaultAerialIndex,\r\n\t\t\tthreeDEnabled:jObject.threeDEnabled,\r\n\t\t\twindowStyleMenus:jObject.windowStyleMenus,\r\n\t\t\tbrochuresMenuEnabled:jObject.brochuresMenuEnabled,\r\n\t\t\tshowNBathrooms:jObject.showNBathrooms,\r\n\t\t\tshowPlotDetailedInformationOnDesktopClickInsteadOfHover:jObject.showPlotDetailedInformationOnDesktopClickInsteadOfHover,\r\n\t\t\tplotComparisonEnabled:jObject.plotComparisonEnabled,\r\n\t\t\tonClickPlotSelectionMenuEntryShowDetailedElseSmallPlotInfo:jObject.onClickPlotSelectionMenuEntryShowDetailedElseSmallPlotInfo,\r\n\t\t\tshowHouseTypesViewerOnOpen:jObject.showHouseTypesViewerOnOpen,\r\n\t\t\tsiteVideoEnabled:jObject.siteVideoEnabled,\r\n\t\t\tshowFadedFilteredOutPlots:jObject.showFadedFilteredOutPlots,\r\n\t\t\ttwoDSitePlanEnabled:jObject.twoDSitePlanEnabled,\r\n\t\t\ttwoDSitePlanEnabled:jObject.twoDSitePlanEnabled,\r\n\t\t\tminiMapConeMarkerEnabled:jObject.miniMapConeMarkerEnabled,\r\n\t\t\tshowPanelOnClickOutside360ConfiguratorIcon:jObject.showPanelOnClickOutside360ConfiguratorIcon,\r\n\t\t\twhatAreYouLookingForEnabled:jObject.whatAreYouLookingForEnabled,\r\n\t\t\tfeaturesEnabled:jObject.featuresEnabled,\r\n\t\t\tnFilteredSitePlansToShow:jObject.nFilteredSitePlansToShow,\r\n\t\t\tsuggestedSitesEnabled:jObject.suggestedSitesEnabled,\r\n\t\t\thouseTypesViewerEnabled:jObject.houseTypesViewerEnabled,\r\n\t\t\thideNBedrooms:jObject.hideNBedrooms,\r\n\t\t\trotateOutside360Cameras180Degrees:jObject.rotateOutside360Cameras180Degrees,\r\n\t\t\tshowPlotDetailedInformationOnClickPlotMenu:jObject.showPlotDetailedInformationOnClickPlotMenu,\r\n\t\t\tplotSelectionMenuEnabled:jObject.plotSelectionMenuEnabled\r\n\t\t});\r\n\t}\r\n}","import Configuration from './Configuration';\r\nexport default class Configurations{\r\n\tconstructor(entries){\r\n\t\tthis._entries = entries;\r\n\t}\r\n\tget entries(){\r\n\t\treturn this._entries;\r\n\t}\r\n\tstatic fromJSON(jArray, defaultConfiguration){\r\n\t\tconst entries = [defaultConfiguration].concat(jArray.map(jObjectConfiguration=>Configuration.fromJSON(jObjectConfiguration)));\r\n\t\treturn new Configurations(entries);\r\n\t}\r\n}","const Validation = { isNumber};\r\nexport default Validation;\r\nconst regExpStringIsValidInt = /^-?\\d+$/;\r\nconst regExpStringIsValidFloat = /^-?\\d+\\.\\d+$/;\r\nfunction isNumber(value) {\r\n if (value === undefined || value === null) return false;\r\n if (typeof (value) === 'string') {\r\n if (!numberStringIsValid(value)) return false;\r\n }\r\n const number = parseFloat(value);\r\n if (isNaN(number)) return false;\r\n return true\r\n}\r\nfunction numberStringIsValid(str) {\r\n if (str.match(regExpStringIsValidInt)) return true;\r\n if (str.match(regExpStringIsValidFloat)) return true;\r\n return false;\r\n}\r\n","import ParameterErrors from '../errors/ParameterErrors';\r\nimport Validation from '../validation/Validation';\r\nconst { throwIsNotNumber } = ParameterErrors;\r\nexport default class Vector2 {\r\n constructor(props) {\r\n const { x, y } = props;\r\n if (!Validation.isNumber(x)) throwIsNotNumber(\"x\");\r\n if (!Validation.isNumber(y)) throwIsNotNumber(\"y\");\r\n this._x = x;\r\n this._y = y;\r\n\t\tthis.toArray = this.toArray.bind(this);\r\n }\r\n get x() {\r\n return this._x;\r\n }\r\n get y() {\r\n return this._y;\r\n }\r\n\ttoArray(){\r\n\t\treturn [this._x, this._y];\r\n\t}\r\n static fromArray(arr) {\r\n return new Vector2({\r\n x: arr[0],\r\n y: arr[1]\r\n })\r\n }\r\n static fromObj(obj) {\r\n return new Vector2(obj);\r\n }\r\n}\r\n","import ParameterErrors from '../errors/ParameterErrors';\r\nimport Validation from '../validation/Validation';\r\nconst { throwNotOfType } = ParameterErrors;\r\nexport default class Vector3 {\r\n constructor(props) {\r\n const { x, y, z } = props;\r\n if (!Validation.isNumber(x)) throwNotOfType(\"x\", \"number\");\r\n if (!Validation.isNumber(y)) throwNotOfType(\"y\", \"number\");\r\n if (!Validation.isNumber(z)) throwNotOfType(\"z\", \"number\");\r\n this._x = x;\r\n this._y = y;\r\n this._z = z;\r\n\t\tthis.toArray = this.toArray.bind(this);\r\n }\r\n get x() {\r\n return this._x;\r\n }\r\n get y() {\r\n return this._y;\r\n }\r\n get z() {\r\n return this._z;\r\n }\r\n\ttoArray(){\r\n\t\treturn [this._x, this._y, this._z];\r\n\t}\r\n static fromArray(arr) {\r\n return new Vector3({\r\n x: arr[0],\r\n y: arr[1],\r\n z: arr[2]\r\n });\r\n }\r\n static fromObj(obj) {\r\n return new Vector3(obj);\r\n }\r\n}\r\n","import Validation from '../validation/Validation';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport Vector3 from '../geometry/Vector3';\r\nconst { throwNotProvided, throwNotOfType } = ParameterErrors;\r\nexport default class Location {\r\n constructor(props) {\r\n const { position, rotation, scaling } = props;\r\n\r\n if (!position)\r\n throwNotProvided(\"position\");\r\n if (!position instanceof Vector3)\r\n throwNotOfType(\"position\", Vector3.constructor.name);\r\n this._position = position;\r\n\r\n\r\n if (!rotation)\r\n throwNotProvided(\"rotation\");\r\n if (!rotation instanceof Vector3)\r\n throwNotOfType(\"rotation\", Vector3.constructor.name);\r\n this._rotation = rotation;\r\n\r\n\r\n if (!scaling)\r\n throwNotProvided(\"scaling\");\r\n if (!scaling instanceof Vector3)\r\n throwNotOfType(\"scaling\", Vector3.constructor.name);\r\n this._scaling = scaling;\r\n\t\tthis.toJSON = this.toJSON.bind(this);\r\n }\r\n get position() {\r\n return this._position;\r\n }\r\n get rotation() {\r\n return this._rotation;\r\n }\r\n get scaling() {\r\n return this._scaling;\r\n }\r\n\ttoJSON(){\r\n\t\treturn {\r\n\t\t\tposition:this._position.toArray(), \r\n\t\t\trotation:this._rotation.toArray(), \r\n\t\t\tscaling:this._scaling.toArray()\r\n\t\t};\r\n\t}\r\n static fromJSON(obj) {\r\n return new Location({\r\n position: Vector3.fromArray(obj.position),\r\n rotation: Vector3.fromArray(obj.rotation),\r\n scaling: Vector3.fromArray(obj.scaling)\r\n })\r\n }\r\n\tstatic getDefault(){\r\n return new Location({\r\n position: Vector3.fromArray([0,0,0]),\r\n rotation: Vector3.fromArray([0,0,0]),\r\n scaling: Vector3.fromArray([1,1,1])\r\n })\r\n\t}\r\n}\r\n","export default class RunningMode{\r\n\tstatic get isDevelopment(){\r\n\t\treturn process.env.NODE_ENV === 'development';\r\n\t}\r\n}\r\n","import UrlHelper from '../core/UrlHelper';\r\nimport RunningMode from '../RunningMode';\r\nimport AssetsManager from '../assets_management/AssetsManager';\r\nexport default class Urls{\r\n\tstatic get backendPort(){\r\n\t\tconst thisPagePort = window.location.port;\r\n\t\treturn RunningMode.isDevelopment?51395:(thisPagePort===80?null:thisPagePort);\r\n\t}\r\n\tstatic get root(){\r\n\t\tconst backendPortString = Urls.backendPort!==null?`:${Urls.backendPort}`:'';\r\n\t\treturn `${window.location.protocol}//${window.location.hostname}${backendPortString}/`;\r\n\t}\r\n\tstatic getBrochureGenerator(){\r\n\t\treturn RunningMode.isDevelopment?`${Urls.root}brochureGeneration/`:AssetsManager.configuration.brochureGeneratorUrl;\r\n\t}\r\n\tstatic getSiteInfo(configuration){\r\n\t\treturn RunningMode.isDevelopment?`${Urls.root}siteInfo/`:UrlHelper.makeSureSlashOnEnd(configuration.siteInfoUrl);\r\n\t}\r\n\tstatic getLatestSiteInfo(configuration){\r\n\t\treturn `${Urls.getSiteInfo(configuration)}latestSiteInfo?siteName=${configuration.siteSlugForLatestSiteInfo?configuration.siteSlugForLatestSiteInfo:configuration.siteSlug}`;\r\n\t}\r\n\tstatic getQuadrantsAbsolutePath({configuration, relativePath}){\r\n\t\treturn `${Urls.root}assets/${configuration.siteSlug}/${relativePath}`;\r\n\t}\r\n\tstatic getGeneratePDFBrochureSimple(){\r\n\t\treturn `${Urls.getBrochureGenerator()}generatePDFBrochureSimple`;\r\n\t}\r\n\tstatic get assets(){\r\n\t\treturn `${Urls.root}assets/${AssetsManager.configuration.siteSlug}/`;\r\n\t}\r\n\tstatic getAssetsForSite(siteSlug){\r\n\t\treturn `${Urls.root}assets/${siteSlug}/`;\r\n\t}\r\n\tstatic get videos(){\r\n\t\treturn Urls.assets+'videos/';\r\n\t}\r\n\tstatic getConfigurationJSON(){\r\n\t\treturn `${Urls.assets}configuration.json`;\r\n\t}\r\n\tstatic getIcon(iconRelativePath){\r\n\t\treturn Urls.getIcons()+iconRelativePath;\r\n\t}\r\n\tstatic getBrochureGenerationCheckProgress(){\r\n\t\treturn `${Urls.getBrochureGenerator()}checkProgress`;\r\n\t}\r\n\tstatic getBrochureGenerationGetBrochuresForSession(){\r\n\t\treturn `${Urls.getBrochureGenerator()}getBrochuresForSession`;\r\n\t}\r\n\tstatic getConfiguratorUrlForPlot(plot, configuration){\r\n\t\tconst configuratorRootUrl = configuration.configuratorRootUrl;\r\n\t\tif(configuratorRootUrl)\r\n\t\t{\r\n\t\t\treturn`${configuratorRootUrl}${plot.number}`;\r\n\t\t}\r\n\t\tlet url = plot.houseType?.configuratorUrl;\r\n\t\tif(url) url +=`?plot=${plot.number}`;\r\n\t\telse url = plot.houseType?.tourUrl;\r\n\t\treturn url;\r\n\t}\r\n\tstatic getSiteAssets_3D(configuration){\r\n\t\treturn Urls.getAssetsForSite(configuration.siteSlug)+'3d/';\r\n\t}\r\n\tstatic getOutside360(configuration){\r\n\t\treturn Urls.getAssetsForSite(configuration.siteSlug)+'outside_360/';\r\n\t}\r\n\tstatic getIcons(){\r\n\t\treturn Urls.assets;\r\n\t}\r\n\tstatic getSiteJson(configuration){\r\n\t\treturn Urls.getAssetsForSite(configuration.siteSlug)+'site.json';\r\n\t}\r\n}","const eventEnable = function (obj) {\r\n\r\n\tobj.addEventListener = function (type, listener) {\r\n\r\n\t\tif (this._listeners == undefined)\r\n\t\t\tthis._listeners = {};\r\n\t\tvar listeners = this._listeners;\r\n\r\n\t\tif (listeners[type] == undefined) {\r\n\t\t\tlisteners[type] = [];\r\n\t\t}\r\n\r\n\t\tif (listeners[type].indexOf(listener) == - 1) {\r\n\r\n\t\t\tlisteners[type].push(listener);\r\n\r\n\t\t}\r\n\t};\r\n\r\n\tobj.hasEventListener = function (type, listener) {\r\n\r\n\t\tif (this._listeners == undefined) return false;\r\n\r\n\t\tvar listeners = this._listeners;\r\n\r\n\t\tif (listeners[type] !== undefined && listeners[type].indexOf(listener) !== - 1) {\r\n\r\n\t\t\treturn true;\r\n\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\r\n\t};\r\n\r\n\tobj.removeEventListener = function (type, listener) {\r\n\r\n\t\tif (this._listeners == undefined) return;\r\n\r\n\t\tvar listeners = this._listeners;\r\n\t\tvar listenerArray = listeners[type];\r\n\r\n\t\tif (listenerArray !== undefined) {\r\n\r\n\t\t\tvar index = listenerArray.indexOf(listener);\r\n\r\n\t\t\tif (index !== - 1) {\r\n\r\n\t\t\t\tlistenerArray.splice(index, 1);\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tobj.dispatchEvent = function (event) {\r\n\t\tif (this._listeners == undefined)\r\n\t\t\treturn;\r\n\t\tvar listeners = this._listeners;\r\n\t\tvar listenerArray = listeners[event.type];\r\n\r\n\t\tif (listenerArray !== undefined) {\r\n\r\n\t\t\tevent.target = this;\r\n\t\t\tvar array = [], i = 0;\r\n\t\t\tvar length = listenerArray.length;\r\n\r\n\t\t\tfor (i = 0; i < length; i++) {\r\n\t\t\t\tarray[i] = listenerArray[i];\r\n\t\t\t}\r\n\t\t\tfor (i = 0; i < length; i++) {\r\n\t\t\t\tarray[i].call(this, event);\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t};\r\n};\r\nexport default eventEnable;","import eventEnable from '../core/eventEnable';\r\nexport default class Binding{\r\n\tconstructor(name, callbackSet, dispose){\r\n\t\tthis._callbackSet = callbackSet;\r\n\t\tthis._dispose = dispose;\r\n\t\tthis._disposed = false;\r\n\t\tthis.getCallbackSet=this.getCallbackSet.bind(this);\r\n\t\tthis.callCallbackSet = this.callCallbackSet.bind(this);\r\n\t\tthis.dispose= this.dispose.bind(this);\r\n\t\tthis._dispatchDispose= this._dispatchDispose.bind(this);\r\n\t\teventEnable(this);\r\n\t}\r\n\tgetCallbackSet(){\r\n\t\treturn this._callbackSet;\r\n\t}\r\n\tcallCallbackSet(value){\r\n\t\tthis._callbackSet(value);\r\n\t}\r\n\tdispose(){\r\n\t\tif(this._disposed)return;\r\n\t\tthis._disposed = true;\r\n\t\tthis._dispatchDispose();\r\n\t}\r\n\t_dispatchDispose(){\r\n\t\tthis.dispatchEvent({type:'dispose', binding:this});\r\n\t}\r\n}","import eventEnable from '../core/eventEnable';\r\nexport default function Bindings(name, binding){\r\n\teventEnable(this);\r\n\tvar self = this;\r\n\tvar disposed = false;\r\n\tvar list = [];\r\n\tthis.add = add;\r\n\tthis.getList = function(){\r\n\t\treturn list;\r\n\t};\r\n\tthis.dispose = dispose;\r\n\tthis.remove = removeBinding;\r\n\tif(binding)\r\n\t\tself.add(binding);\r\n\tfunction dispose(){\r\n\t\tif(disposed)return;\r\n\t\tdisposed = true;\r\n\t\tlist.slice().forEach((binding)=>{/* because as we dispose them they will be calling back to remove themselves*/\r\n\t\t\tbinding.dispose();\r\n\t\t});\r\n\t\tdispatchDispose(); //Not really needed because upon disposing the last binding the event will be dispatched.\r\n\t}\r\n\tfunction add(binding){\r\n\t\tlistenForDispose(binding);\r\n\t\tlist.push(binding);\r\n\t}\r\n\tfunction listenForDispose(binding){\r\n\t\tbinding.addEventListener('dispose', callbackDispose);\r\n\t}\r\n\tfunction callbackDispose(e){\r\n\t\tremoveBinding(e.binding);\r\n\t}\r\n\tfunction removeBinding(binding){\r\n\t\tvar index = list.indexOf(binding);\r\n\t\tif(index<0)return;\r\n\t\tlist.splice(index, 1);\r\n\t\tif(list.length>0)return;\r\n\t\tdispose();\r\n\t}\r\n\tfunction dispatchDispose(){\r\n\t\tself.dispatchEvent({type:'dispose', bindings:self});\r\n\t}\r\n}","import Bindings from './Bindings';\r\nexport default function ModelBindingsForName(name, binding){\r\n\t\tvar self = this;\r\n\t\tvar bindings = new Bindings(name, binding);\r\n\t\tthis.containsCallbackSet=function(callbackSet){\r\n\t\t\treturn getByCallbackSet(callbackSet)?true:false;\r\n\t\t};\r\n\t\tthis.getByCallbackSet = getByCallbackSet;\r\n\t\tthis.changed= function(value){\r\n\t\t\tbindings.getList().forEach((binding)=>{\r\n\t\t\t\tbinding.callCallbackSet(value);\r\n\t\t\t});\r\n\t\t};\r\n\t\tthis.add = bindings.add;\r\n\t\tthis.getList = bindings.getList;\r\n\t\tthis.dispose = bindings.dispose;\r\n\t\tthis.addEventListener = bindings.addEventListener;\r\n\t\tthis.removeEventListener = bindings.removeEventListener;\r\n\t\tfunction getByCallbackSet(callbackSet){\r\n\t\t\tconst listBindings = bindings.getList();\r\n\t\t\tfor(var i=0, binding; binding=listBindings[i]; i++){\r\n\t\t\t\tif(binding.getCallbackSet()==callbackSet){\r\n\t\t\t\t\treturn binding;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}","import Console from './Console';\r\nimport Binding from './Binding';\r\nimport Bindings from './Bindings';\r\nimport ModelBindingsForName from './ModelBindingsForName';\r\nconst console = Console;\r\nexport default function BindingsHandler(model){\r\n\tconst self = this;\r\n\tconst mapNameToModelBindings = {};\r\n\tmodel.bind = (name, callbackSet)=>{\r\n\t\tvar view = this;\r\n\t\tvar viewBindings = getViewBindings(view);\r\n\t\tvar bindings = mapNameToModelBindings[name];\r\n\t\tif(!bindings){\r\n\t\t\tconst binding = new Binding(name, callbackSet);\r\n\t\t\tviewBindings.add(binding);\r\n\t\t\tconst modelBindings = new ModelBindingsForName(name, binding);\r\n\t\t\tmodelBindings.addEventListener('dispose', callbackDisposeModelBindings);\r\n\t\t\tmapNameToModelBindings[name]=modelBindings;\r\n\t\t\treturn viewBindings;\r\n\t\t}\r\n\t\tif(bindings.containsCallbackSet(callbackSet))return false;\r\n\t\tconst binding = new Binding(name, callbackSet);\r\n\t\tviewBindings.add(binding);\r\n\t\tbindings.add(binding);\r\n\t\treturn viewBindings;\r\n\t};\r\n\tmodel.unbind = (name, callbackSet)=>{\r\n\t\tvar bindings = mapNameToModelBindings[name];\r\n\t\tif(!bindings)return;\r\n\t\tvar binding = bindings.getByCallbackSet(callbackSet);\r\n\t\tif(!binding)return;\r\n\t\tbinding.dispose();\r\n\t};\r\n\tthis.changed = function(name, value){\r\n\t\tvar bindings = mapNameToModelBindings[name];\r\n\t\tif(!bindings)return;\r\n\t\tbindings.changed(value);\r\n\t};\r\n\tthis.dispose= function(){\r\n\t\tfor(var i in mapNameToModelBindings){\r\n\t\t\tvar modelBindings = mapNameToModelBindings[i];\r\n\t\t\tmodelBindings.dispose();\r\n\t\t}\r\n\t\tmapNameToModelBindings={};\r\n\t};\r\n\tfunction getViewBindings(view){\r\n\t\tif(!view.bindings){\r\n\t\t\tview.bindings = new Bindings();\r\n\t\t}\r\n\t\treturn view.bindings;\r\n\t}\r\n\tfunction callbackDisposeModelBindings(e){\r\n\t\tvar name = e.bindings.getName();\r\n\t\tif(mapNameToModelBindings[name])\r\n\t\t\tdelete mapNameToModelBindings[name];\r\n\t}\r\n}","import BindingsHandler from './BindingsHandler';\r\nimport Console from './Console';\r\nconst console = Console;\r\nexport default function enableAcceptBindings(model){\r\n\tif(model.bindingsHandler)return model.bindingsHandler\r\n\tmodel.bindingsHandler = new BindingsHandler(model);\r\n\treturn model.bindingsHandler;\r\n};","export default function capitalizeFirstLetter(str){\r\n\treturn str.substr(0, 1).toUpperCase()+str.substr(1, str.length-1);\r\n}","import capitalizeFirstLetter from '../core/capitalizeFirstLetter';\r\nexport default class PropertyHelper{\r\n\t//type '+model.constructor.name+' does not contain a getter method with name '+getterName);\r\n\tstatic getGetterName(propertyName){\r\n\t\treturn PropertyHelper._getGetterName(capitalizeFirstLetter(propertyName));\r\n\t}\r\n\tstatic getSetterName(propertyName){\r\n\t\treturn PropertyHelper._getSetterName(capitalizeFirstLetter(propertyName));\r\n\t}\r\n\tstatic hasGetter(model, propertyName){\r\n\t\treturn model[PropertyHelper._getGetterName(capitalizeFirstLetter(propertyName))]?true:false;\r\n\t}\r\n\tstatic propertyValuesToObj(obj, model, propertyNames){\r\n\t\tif(!obj)obj={};\r\n\t\tpropertyNames.forEach((propertyName)=>{\r\n\t\t\tvar getterName = PropertyHelper._getGetterName(capitalizeFirstLetter(propertyName));\r\n\t\t\tvar method = model[getterName];\r\n\t\t\tif(method===undefined)throw new Error('Model of type '+model.constructor.name+' has no method '+getterName);\r\n\t\t\tobj[propertyName]=method();\r\n\t\t});\r\n\t\treturn obj;\r\n\t}\r\n\tstatic propertyValuesFromObj(obj, model, propertyNames){\r\n\t\tpropertyNames.forEach((propertyName)=>{\r\n\t\t\tvar setterName = PropertyHelper._getSetterName(capitalizeFirstLetter(propertyName));\r\n\t\t\tvar method = model[setterName];\r\n\t\t\tif(method===undefined)throw new Error('Model of type '+model.constructor.name+' has no method '+setterName);\r\n\t\t\tmethod(obj[propertyName]);\r\n\t\t});\r\n\t\treturn obj;\r\n\t}\r\n\tstatic _getGetterName(capitalizedName){\r\n\t\treturn 'get'+capitalizedName;\r\n\t}\r\n\tstatic _getSetterName(capitalizedName){\r\n\t\treturn 'set'+capitalizedName;\r\n\t}\r\n}","import PropertyHelper from './PropertyHelper';\r\nimport enableAcceptBindings from './enableAcceptBindings';\r\nimport Console from './Console';\r\nconst console = Console;\r\nexport default function exposeBinding(model, name, getLambda, setLambda){\r\n\tconst getterName = PropertyHelper.getGetterName(name);\r\n\tif(model[getterName]!==undefined)throw new Error(`getter for exposing \\\"${name}\\\" is already defined`);\r\n\tconst setterName = PropertyHelper.getSetterName(name);\r\n\tif(model[setterName]!==undefined)throw new Error(`setter for exposing \\\"${name}\\\" is already defined`);\r\n\tmodel[getterName]=getLambda;\r\n\tmodel[setterName]=setLambda;\r\n\tenableAcceptBindings(model);\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport Urls from '../urls/Urls';\r\nimport UrlHelper from '../core/UrlHelper';\r\nimport enableAcceptBindings from '../mvvm/enableAcceptBindings';\r\nimport exposeBinding from '../mvvm/exposeBinding';\r\nimport eventEnable from '../core/eventEnable';\r\nconst {throwNotProvided, throwNotOfType}=ParameterErrors;\r\nexport default class HouseType{\r\n\tstatic get _ALLOWED_NAME_SEPERATORS(){\r\n\t\treturn [' ', '_', '-', ''];\r\n\t}\r\n\tconstructor(props){\r\n\t\tconsole.log(props);\r\n\t\tconst{slug, name, imageRelativePath, getSiteJson, configuration, nBedrooms, nBathrooms, about}=props;\r\n\t\teventEnable(this);\r\n\t\tenableAcceptBindings(this);\r\n\t\t\r\n\t\t\r\n\t\tif(nBedrooms===undefined||nBedrooms===null)\r\n\t\t\tthrowNotProvided('nBedrooms');\r\n\t\t\r\n\t\tif(typeof(nBedrooms)!=='number')\r\n\t\t\tthrowNotOfType('nBedrooms', 'number');\r\n\t\tthis._nBedrooms = nBedrooms;\r\n\t\tthis._nBathrooms = nBathrooms;\r\n\t\tthis._about = about;\r\n\t\tconsole.log('_About is '+this._about);\r\n\t\tthis._getSiteJson =getSiteJson;\r\n\t\tthis._configuration = configuration;\r\n\t\tthis._slug = slug;\r\n\t\tthis._name = name;\r\n\t\tthis._imageRelativePath = imageRelativePath;\r\n\t\tthis._allPossibleLowerCaseStrings = HouseType._getAllPossibleLowerCaseStrings(name);\r\n\t\tthis._configuratorUrl = null;\r\n\t\tthis._tourUrl = null;\r\n\t\tthis._videoUrl = null;\r\n\t\tthis._features = [];\r\n\t\texposeBinding(this, 'tourUrl', ()=>this.tourUrl, (value)=>this.tourUrl = value);\r\n\t\tthis._statuses = null;\r\n\t\texposeBinding(this, 'statuses', ()=>this.statuses, (value)=>this.statuses = value, true);\r\n\t\texposeBinding(this, 'videoUrl', ()=>this.videoUrl, (value)=>this.videoUrl = value, true);\r\n\t\texposeBinding(this, 'features', ()=>this.features, (value)=>this.features = value);\r\n\t}\r\n\tget allPossibleLowerCaseStrings(){\r\n\t\treturn this._allPossibleLowerCaseStrings;\r\n\t}\r\n\tgetDescription(){\r\n\t\treturn this._name;\r\n\t}\r\n\tget name(){\r\n\t\treturn this._name;\r\n\t}\r\n\tget slug(){\r\n\t\treturn this._slug;\r\n\t}\r\n\tget configuratorUrl(){\r\n\t\treturn this._configuratorUrl;\r\n\t}\r\n\tset configuratorUrl(value){\r\n\t\tthis._configuratorUrl = value;\r\n\t}\r\n\tget tourUrl(){\r\n\t\treturn this._tourUrl;\r\n\t}\r\n\tget statuses(){\r\n\t\treturn this._statuses;\r\n\t}\r\n\tset tourUrl(value){\r\n\t\tconst changed = this._tourUrl!==value\r\n\t\tif(!changed)return;\r\n\t\tthis._tourUrl = value;\r\n\t\tthis.bindingsHandler.changed('tourUrl', value);\r\n\t}\r\n\tget videoUrl(){\r\n\t\treturn this._videoUrl;\r\n\t}\r\n\tset videoUrl(value){\r\n\t\tconst changed = this._videoUrl!==value\r\n\t\tif(!changed)return;\r\n\t\tthis._videoUrl = value;\r\n\t\tthis.bindingsHandler.changed('videoUrl', value);\r\n\t}\r\n\tget plots(){\r\n\t\treturn this._getSiteJson().getPlotsForHouseType(this);\r\n\t}\r\n\tgetImageAbsolutePath(){\r\n\t\treturn `${Urls.getAssetsForSite(this._configuration.siteSlug)}${UrlHelper.removeStartSlash(this._imageRelativePath)}`;\r\n\t}\r\n\tget features(){\r\n\t\treturn this._features;\r\n\t}\r\n\tset features(value){\r\n\t\tconsole.log('house type feature set');\r\n\t\tconsole.log(value);\r\n\t\tthis._features= value;\r\n\t\tthis.bindingsHandler.changed('features');\r\n\t\tthis.dispatchEvent({type:'featureschanged', features:this._features});\r\n\t}\r\n\tget nBedrooms(){\r\n\t\treturn this._nBedrooms;\r\n\t}\r\n\tget nBathrooms(){\r\n\t\treturn this._nBathrooms;\r\n\t}\r\n\tget about(){\r\n\t\treturn this._about;\r\n\t}\r\n\tstatic _getAllPossibleLowerCaseStrings(name){\r\n\t\tname = name.toLowerCase();\r\n\t\tconst allowedNameSeperators = HouseType._ALLOWED_NAME_SEPERATORS;\r\n\t\tconst nameComponents = name.split(new RegExp('['+allowedNameSeperators.join('')+']'));\r\n\t\tif(nameComponents.length<1)return name;\r\n\t\tconst strs=[];\r\n\t\tallowedNameSeperators.forEach((seperator)=>{\r\n\t\t\tlet str='';\r\n\t\t\tnameComponents.forEach(nameComponent=>str+=nameComponent);\r\n\t\t\tstrs.push(str);\r\n\t\t});\r\n\t\treturn strs;\r\n\t}\r\n\tstatic fromJSON(jObject, getSiteJson, configuration){\r\n\t\treturn new HouseType({\r\n\t\t\tslug:jObject.slug,\r\n\t\t\tname:jObject.name,\r\n\t\t\timageRelativePath:jObject.imageRelativePath,\r\n\t\t\tgetSiteJson,\r\n\t\t\tconfiguration,\r\n\t\t\tnBedrooms:jObject.nBedrooms,\r\n\t\t\tnBathrooms:jObject.nBathrooms,\r\n\t\t\tabout:jObject.about\r\n\t\t});\r\n\t}\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport HouseType from './HouseType';\r\nimport ParseError from '../errors/ParseError';\r\nconst {throwNotProvided, throwNotOfType}=ParameterErrors;\r\nexport default class HouseTypes{\r\n\tconstructor(props){\r\n\t\tconst{list } = props;\r\n\t\tthis.getBySlug = this.getBySlug.bind(this);\r\n\t\tif(list===undefined||list===null)throwNotProvided('list');\r\n\t\tif(!Array.isArray(list))throwNotOfType('list', 'array');\r\n\t\tthis._list = list;\r\n\t}\r\n\tgetArray(){\r\n\t\treturn this._list;\r\n\t}\r\n\tgetBySlug(slug){\r\n\t\tfor(var i=0; i=0)\r\n\t\t\t\treturn houseType;\r\n\t\t}\r\n\t\tthrow new ParseError(`Could not parse \"${value}\" to HouseType`);\r\n\t}\r\n}","import ParseError from '../errors/ParseError';\r\nimport NotImplementedError from '../errors/NotImplementedError';\r\nimport ValueError from '../errors/ValueError';\r\nconst RoomType = {\r\n\tKITCHEN:1,\r\n BEDROOM:2,\r\n BATHROOM:3,\r\n EN_SUITE:4\r\n};\r\nRoomType.getDescription = function(roomType){\r\n\tif(roomType===RoomType.KITCHEN)\r\n\t\treturn \"Kitchen\";\r\n\tif( roomType===RoomType.BEDROOM)\r\n\t\treturn \"Bedroom\";\r\n\tif( roomType===RoomType.BATHROOM)\r\n\t\treturn \"Bathroom\";\r\n\tif( roomType===RoomType.EN_SUITE)\r\n\t\treturn \"En Suite\";\r\n\tthrow new NotImplementedError(`Not implemented for \"${roomType}\"`);\r\n};\r\nRoomType.toStr = function(roomType){\r\n\tif( roomType===RoomType.KITCHEN)\r\n\t\treturn \"kitchen\";\r\n\tif( roomType===RoomType.BEDROOM)\r\n\t\treturn \"bedroom\";\r\n\tif( roomType===RoomType.BATHROOM)\r\n\t\treturn \"bathroom\";\r\n\tif( roomType===RoomType.EN_SUITE)\r\n\t\treturn \"ensuite\";\r\n\tthrow new NotImplementedError(`Not implemented for \"${roomType}\"`);\r\n};\r\nRoomType.parse = function(value){\r\n\tif(value===undefined||value===null)\r\n\t\tthrow ValueError('value was None');\r\n\tif(typeof(value)==='string')\r\n\t\treturn RoomType.parseFromString(value);\r\n\tif(typeof(value)==='number')\r\n\t\treturn RoomType.parseFromInt(value);\r\n\tthrow new ParseError(`Could not parse value \"${value}\" to RoomType\"`);\r\n};\r\nRoomType.parseFromString = function(value){\r\n\tvalue = value.toLowerCase();\r\n\tif (value==='kitchen')\r\n\t\treturn RoomType.KITCHEN;\r\n\tif (value==='bedroom'){\r\n\t\treturn RoomType.BEDROOM;\r\n\t}\r\n\tif (value==='bathroom'){\r\n\t\treturn RoomType.BATHROOM;\r\n\t}\r\n\tif ( ['ensuite', 'en_suite', 'en suite'].indexOf(value)>=0){\r\n\t\treturn RoomType.EN_SUITE;\r\n\t}\r\n\tthrow new NotImplementedError(`Not implemented for \"${value}\"`);\r\n};\r\nRoomType.parseFromInt = function(value){\r\n\treturn value;\r\n};\r\nexport default RoomType;","export default class Handle{\r\n\tconstructor(props){\r\n\t\tthis._callbackDispose = props.dispose;\r\n\t\tthis.dispose = this.dispose.bind(this);\r\n\t}\r\n\tdispose(){\r\n\t\tthis._callbackDispose(this);\r\n\t}\r\n}","import eventEnable from './eventEnable';\r\nimport Handle from './Handle';\r\nexport default class Handles{\r\n\tconstructor(props){\r\n\t\teventEnable(this);\r\n\t\tthis._handles = [];\r\n\t\tthis._currentlyHasHandles = false;\r\n\t\tthis.take = this.take.bind(this);\r\n\t\tthis._dispose = this._dispose.bind(this);\r\n\t\tthis._dispatchChangedIfChanged = this._dispatchChangedIfChanged.bind(this);\r\n\t\tthis._dispatchChanged = this._dispatchChanged.bind(this);\r\n\t}\r\n\ttake(){\r\n\t\tconst handle = new Handle({dispose:this._dispose});\r\n\t\tthis._handles.push(handle);\r\n\t\tsetTimeout(this._dispatchChangedIfChanged, 0);\r\n\t\treturn handle;\r\n\t}\r\n\tget taken(){\r\n\t\treturn this._handles.length>0;\r\n\t}\r\n\t_dispose(handle){\r\n\t\tconst handles = this._handles;\r\n\t\tconst index = handles.indexOf(handle);\r\n\t\tif(index<0)return;\r\n\t\thandles.splice(index, 1);\r\n\t\tthis._dispatchChangedIfChanged();\r\n\t}\r\n\t_dispatchChangedIfChanged(){\r\n\t\tif((this._handles.length>0)^(this._currentlyHasHandles))\r\n\t\t{\r\n\t\t\tthis._currentlyHasHandles=!this._currentlyHasHandles;\r\n\t\t\tsetTimeout(this._dispatchChanged, 0);\r\n\t\t}\r\n\t}\r\n\t_dispatchChanged(){\r\n\t\tthis.dispatchEvent({type:'change', hasHandles:this._currentlyHasHandles});\r\n\t}\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport Vector2 from '../geometry/Vector2';\r\nimport Location from '../modelling/Location';\r\nimport UrlHelper from '../core/UrlHelper';\r\nimport PlotStatus from './PlotStatus';\r\nimport HouseTypes from './HouseTypes';\r\nimport RoomType from './RoomType';\r\nimport eventEnable from '../core/eventEnable';\r\nimport Handles from '../core/Handles';\r\nimport enableAcceptBindings from '../mvvm/enableAcceptBindings';\r\nimport exposeBinding from '../mvvm/exposeBinding';\r\nconst { throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class SiteJsonUnitBirdsEyeView{\r\n\tconstructor(props){\r\n\t\tconst {angle, markerPosition}=props;\r\n\t\tif(angle===undefined||angle===null)\r\n\t\t\tthrowNotProvided('angle');\r\n\t\t\r\n\t\tif(typeof(angle)!=='number')\r\n\t\t\tthrowNotOfType('angle', 'number');\r\n\t\tthis._angle = angle;\r\n\t\t\r\n\t\tif(markerPosition===undefined || markerPosition===null)\r\n\t\t\tthrowNotProvided('markerPosition');\r\n\t\tthis._markerPosition = markerPosition;\r\n\t}\r\n\tget angle(){\r\n\t return this._angle;\r\n\t}\r\n\tget markerPosition(){\r\n\t\treturn this._markerPosition;\r\n\t}\r\n\ttoJSON(){\r\n\t\tthrow new Error('Not implemented');\r\n\t}\r\n\tstatic fromJSON(jObject){\r\n\t\treturn new SiteJsonUnitBirdsEyeView({\r\n\t\t\tangle:jObject.angle, \r\n\t\t\tmarkerPosition:jObject.markerPosition?Vector2.fromObj(jObject.markerPosition):null\r\n\t\t});\r\n\t}\r\n\t\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport enableAcceptBindings from '../mvvm/enableAcceptBindings';\r\nimport exposeBinding from '../mvvm/exposeBinding';\r\nimport SiteJsonUnitBirdsEyeView from './SiteJsonUnitBirdsEyeView';\r\nconst { throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class SiteJsonUnitBirdsEyeViews{\r\n\tconstructor(props){\r\n\t\tconst {list}=props;\r\n\t\tthis._list = list;\r\n\t\tthis.getMarkerPositionForBirdsEyeViewWithAngle= this.getMarkerPositionForBirdsEyeViewWithAngle.bind(this);\r\n\t\tthis.toJSON=this.toJSON.bind(this);\r\n\t}\r\n\tgetMarkerPositionForBirdsEyeViewWithAngle(angle){\r\n\t\tconst birdsEyeViewsWithIndex = this._list.filter(birdsEyeView=>{\r\n\t\t\treturn birdsEyeView.angle===angle;\r\n\t\t});\r\n\t\treturn birdsEyeViewsWithIndex.length>0?birdsEyeViewsWithIndex[0].markerPosition:null; \r\n\t}\r\n\ttoJSON(){\r\n\t\tthrow new Error('Not implemented');\r\n\t}\r\n\tstatic fromJSON(jArray){\r\n\t\tconst list = jArray.map(jObject=>SiteJsonUnitBirdsEyeView.fromJSON(jObject));\r\n\t\treturn new SiteJsonUnitBirdsEyeViews({\r\n\t\t\tlist:list\r\n\t\t});\r\n\t}\r\n\t\r\n}","const FitType ={WIDTH:'width', HEIGHT:'height'};\r\nexport default FitType;","import ParameterErrors from '../errors/ParameterErrors';\r\nimport Validation from '../validation/Validation';\r\nimport FitType from './FitType';\r\nconst{throwNotProvided, throwNotOfType}=ParameterErrors;\r\nexport default class DynamicImageFitCriteria {\r\n\tconstructor(props){\r\n\t\tconst {fitType} = props;\r\n\t\tthis._fitType = fitType;\r\n\t}\r\n\tget fitType(){\r\n\t\treturn this._fitType;\r\n\t}\r\n\tget fitWidth(){\r\n\t\treturn this._fitType===FitType.WIDTH;\r\n\t}\r\n\tget fitHeight(){\r\n\t\treturn this._fitType===FitType.HEIGHT;\r\n\t}\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport Validation from '../validation/Validation';\r\nconst{throwNotProvided, throwNotOfType}=ParameterErrors;\r\nexport default class DynamicImageEntry {\r\n\tconstructor(props){\r\n\t\tconst {relativePath, width, height} = props;\r\n\t\tthis._width = width;\r\n\t\tthis._height = height;\r\n\t\tthis._relativePath = relativePath;\r\n\t}\r\n\tget width(){\r\n\t\treturn this._width;\r\n\t}\r\n\tget height(){\r\n\t\treturn this._height;\r\n\t}\r\n\tget relativePath(){\r\n\t\treturn this._relativePath;\r\n\t}\r\n\tstatic fromJSON(jObject){\r\n\t\treturn new DynamicImageEntry({\r\n\t\t\twidth:jObject.width,\r\n\t\t\theight:jObject.height,\r\n\t\t\trelativePath:jObject.relativePath\r\n\t\t});\r\n\t}\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport Validation from '../validation/Validation';\r\nimport DynamicImageFitCriteria from './DynamicImageFitCriteria';\r\nimport DynamicImageEntry from './DynamicImageEntry';\r\nconst{throwNotProvided, throwNotOfType}=ParameterErrors;\r\nexport default class DynamicImage {\r\n\tconstructor(props){\r\n\t\tconst {entries}=props;\r\n\t\tthis._entriesIncreasing = entries;\r\n\t\tthis._entriesIncreasing.sort(function(a, b) {\r\n\t\t\treturn a.width - b.width;\r\n\t\t});\r\n\t\tthis.getBestEntryToFit= this.getBestEntryToFit.bind(this);\r\n\t\tthis.getBestEntryToFitWidth= this.getBestEntryToFitWidth.bind(this);\r\n\t\tthis.getBestEntryToFitHeight= this.getBestEntryToFitHeight.bind(this);\r\n\t}\r\n\tget entries(){\r\n\t\treturn this._entriesIncreasing;\r\n\t}\r\n\tgetLargestEntry (){\r\n\t\treturn this._entriesIncreasing[this._entriesIncreasing.length-1];\r\n\t}\r\n\tgetBestEntryToFit(params){\r\n\t\tconst {fitCriteria}=params;\r\n\t\tif(!fitCriteria)throwNotProvided('fitCriteria');\r\n\t\tif(fitCriteria.fitWidth){\r\n\t\t\treturn this.getBestEntryToFitWidth(params.width);\r\n\t\t}\r\n\t\treturn this.getBestEntryToFitHeight(params.height);\r\n\t}\r\n\tgetBestEntryToFitWidth(width){//Can improve how it picks images later. \r\n\t\tvar i=0; \r\n\t\twhile(i=width){\r\n\t\t\t\treturn entry;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this._entriesIncreasing[i-1];\r\n\t}\r\n\tgetBestEntryToFitHeight(height){\r\n\t\tvar i=0; \r\n\t\twhile(i=height){\r\n\t\t\t\treturn entry;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this._entriesIncreasing[i-1];\r\n\t}\r\n\tstatic fromJSON(jObject){\r\n\t\treturn new DynamicImage({\r\n\t\t\tentries:jObject.entries.map(entry=>new DynamicImageEntry(entry))\r\n\t\t});\r\n\t}\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport RoomType from './RoomType';\r\nimport UrlHelper from '../core/UrlHelper';\r\nimport DynamicImage from '../images/DynamicImage';\r\nconst { throwNotProvided, throwNotOfType } = ParameterErrors;\r\nexport default class SiteJsonUnitPlotRoom{\r\n\tconstructor(props){\r\n\t\tconst {roomType, features, images, getParentPlot}=props;\r\n\t\tif(roomType === undefined || roomType === null)throwNotProvided('roomType');\r\n\t\tthis._roomType = roomType;\r\n\t\t\r\n\t\tif(features ===undefined || features === null)\r\n\t\t\tthrowNotProvided('features');\r\n\t\t\r\n\t\tif(getParentPlot ===undefined || getParentPlot === null)\r\n\t\t\tthrowNotProvided('getParentPlot');\r\n\t\tthis._getParentPlot = getParentPlot;\r\n\t\t\r\n\t\tif(features ===undefined || features === null)\r\n\t\t\tthrowNotProvided('features');\r\n\t\t\r\n\t\tif(!Array.isArray(features))\r\n\t\t\tthrowNotOfType('features', 'array');\r\n\t\tthis._features = features;\r\n\t\t\r\n\t\tif(images==undefined||images===null)throwNotProvided('images');\r\n\t\tthis._images=images;\r\n\t\t\r\n\t}\r\n\tget roomType(){\r\n\t\treturn this._roomType;\r\n\t}\r\n\tget features(){\r\n\t\treturn this._features;\r\n\t}\r\n\tget images(){\r\n\t\treturn this._images;\r\n\t}\r\n\tstatic fromJSON(jObject, getParentPlot){\r\n\t\treturn new SiteJsonUnitPlotRoom({\r\n\t\t\troomType:RoomType.parse(jObject.roomType),\r\n\t\t\tfeatures:jObject.features,\r\n\t\t\timages:jObject.images.map(image=>DynamicImage.fromJSON(image)),\r\n\t\t\tgetParentPlot:getParentPlot\r\n\t\t});\r\n\t}\r\n\t\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport SiteJsonUnitPlotRoom from './SiteJsonUnitPlotRoom';\r\nconst { throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class SiteJsonUnitPlotRooms{\r\n\tconstructor(props){\r\n\t\tconst {list}=props;\r\n\t\tif(list === undefined || list === null)\r\n\t\t\tthrowNotProvided('list');\r\n\t\tif(!Array.isArray(list))\r\n\t\t\tthrowNotOfType('list', 'Array');\r\n\t\tthis._list = list;\r\n\t\tthis.toJSON= this.toJSON.bind(this);\r\n\t}\r\n\tgetArray(){\r\n\t\treturn this._list;\r\n\t}\r\n\ttoJSON(){\r\n\t\treturn this._list.map(room=>room.toJSON());\r\n\t}\r\n\tget allImages(){\r\n\t\tlet images =[];\r\n\t\tthis._list.forEach(room=>images = images.concat(room.images));\r\n\t\treturn images;\r\n\t}\r\n\tstatic fromJSON(jArraySites, getParentPlot){\r\n\t\tif(getParentPlot === undefined || getParentPlot === null)\r\n\t\t\tthrowNotProvided('getParentPlot');\r\n\t\tconst rooms=[];\r\n\t\tfor(var i=0; i{\r\n\t\t\tpropertyBinding.unbind();\r\n\t\t});\r\n\t\tthis._propertyBindings=new Set();\r\n\t}\r\n\tdispose(){\t\r\n\t\tif(this._disposed)\r\n\t\t\treturn;\r\n\t\tthis._disposed=true;\r\n\t\tthis.reset();\r\n\t}\r\n}","import MyBindings from './MyBindings';\r\nexport default function enableBindingToOthers (me){\r\n\tif(me.myBindings)return me.myBindings;\r\n\tme.myBindings= new MyBindings(me);\r\n\treturn me.myBindings;\r\n}","\r\nimport enableBindingToOthers from './enableBindingToOthers';\r\n//import enableHash from '../core/enableHash';\r\nimport capitalizeFirstLetter from '../core/capitalizeFirstLetter';\r\n//import PropertyBindings from './PropertyBindings';\r\n//import PropertyBinding from './PropertyBinding';\r\nimport PropertyHelper from './PropertyHelper';\r\n//import PropertyBindingCarriedOver from './PropertyBindingCarriedOver';\r\n//import PropertyBindingShell from './PropertyBindingShell';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nconst {throwNotProvided }= ParameterErrors\r\nexport default class PropertyBinding{\r\n\t\tconstructor (me, model, name, valueChanged){\r\n\t\t\tthis._me = me;\r\n\t\t\tthis._model = model;\r\n\t\t\tthis._name = name;\r\n\t\t\tthis._valueChanged = valueChanged;\r\n\t\t\tthis._disposed=false;\r\n\t\t\t\r\n\t\t\tthis.set = this.set.bind(this);\r\n\t\t\tthis.get = this.get.bind(this);\r\n\t\t\tthis.getName = this.getName.bind(this);\r\n\t\t\tthis.dispose= this.dispose.bind(this);\r\n\t\t\tthis.unbind = this.unbind.bind(this);\r\n\t\t\t\r\n\t\t\tconst capitalizedName = capitalizeFirstLetter(name);\r\n\t\t\tthis._setterName = PropertyHelper.getSetterName(capitalizedName);\r\n\t\t\tthis._getterName = PropertyHelper.getGetterName(capitalizedName);\r\n\t\t\tif(!model)throwNotProvided('model');\r\n\t\t\tmodel.bind(name, valueChanged);\r\n\t\t\tconst myPropertyBindings= enableBindingToOthers(me);\r\n\t\t\tmyPropertyBindings.add(this);\r\n\t\t}\r\n\t\tset(value){\r\n\t\t\tvar setter = this._model[this._setterName];\r\n\t\t\tif(!setter)\r\n\t\t\t\tthrow new Error('model of type '+this._model.constructor.name+' does not contain a setter method with name '+this._setterName);\r\n\t\t\tif(typeof(setter)!=='function')\r\n\t\t\t\tthrow new Error(this._model.constructor.name+'.'+this._setterName+' is not a function');\r\n\t\t\tsetter(value);\r\n\t\t}\r\n\t\tget(){\r\n\t\t\tvar getter = this._model[this._getterName];\r\n\t\t\tif(!getter)throw new Error('model of type '+this._model.constructor.name+' does not contain a getter method with name '+this._getterName);\r\n\t\t\tif(typeof(getter)!=='function')\r\n\t\t\t\tthrow new Error(this._model.constructor.name+'.'+this._getterName+' is not a function');\r\n\t\t\treturn getter();\r\n\t\t}\r\n\t\tgetName(){\r\n\t\t\treturn this._name;\r\n\t\t}\r\n\t\tdispose(){\r\n\t\t\tif(this._disposed)return;\r\n\t\t\tthis._disposed=true;\r\n\t\t\tthis._me.myBindings.remove(this);\r\n\t\t\tthis.unbind();\r\n\t\t}\r\n\t\tunbind(){\r\n\t\t\tthis._model.unbind(this._name, this._valueChanged);\r\n\t\t}\r\n\t}","export default function PropertyBindingCarriedOver(propertyBindingSource, propertyBindingCarriedOver){\r\n\t\tthis.getSource=function(){return propertyBindingSource;};\r\n\t\tthis.getCarriedOver=function(){return propertyBindingCarriedOver;};\r\n\t}","export default class PropertyBindingShell{\r\n\tconstructor(getterMethod, setterMethod){\r\n\t\tthis._getMethod = getterMethod;\r\n\t\tthis._setMethod =setterMethod;\r\n\t\tthis.get = this.get.bind(this);\r\n\t\tthis.set = this.set.bind(this);\r\n\t}\r\n\tget(){\r\n\t\treturn this._getMethod();\r\n\t}\r\n\tset(value){\r\n\t\tthis._setMethod(value);\r\n\t}\r\n}","import Console from './Console';\r\nimport enableAcceptBindings from './enableAcceptBindings';\r\nimport enableHash from '../core/enableHash';\r\nimport capitalizeFirstLetter from '../core/capitalizeFirstLetter';\r\nimport PropertyBinding from './PropertyBinding';\r\nimport PropertyHelper from './PropertyHelper';\r\nimport PropertyBindingCarriedOver from './PropertyBindingCarriedOver';\r\nimport PropertyBindingShell from './PropertyBindingShell';\r\nconst console = Console;\r\nexport default class PropertyBindingFactory{\r\n\t\r\n\t//meOrParams, model, nameParam, onChange, converter, viewModelName, onSetByView\r\n\t/*params {\r\n\t\tS.ME\r\n\t\tS.MODEL\r\n\t\tS.NAME or S_NAMES\r\n\t\tS.VIEW_MODEL_NAME (optional)\r\n\t\tS.ON_CHANGE(optional) Not intended if more than one name supplied.\r\n\t\tS.CONVERTER (optional)\r\n\t\tS.ON_SET_BY_VIEW (optional)\r\n\t}*/\r\n\tstatic carryOver(meOrParams, model, nameParam, viewModelName, converter, onChange, onSetByView){\r\n\t\tvar me, viewModelName;\r\n\t\tif(model===undefined&&nameParam===undefined){\r\n\t\t\tme=meOrParams.me;\r\n\t\t\tmodel = meOrParams.model;\r\n\t\t\tnameParam=meOrParams.name;\r\n\t\t\tif(!nameParam)\r\n\t\t\t\tnameParam=meOrParams.names;\r\n\t\t\telse \r\n\t\t\t{\r\n\t\t\t\tviewModelName = meOrParams.viewModelName;\r\n\t\t\t\tif(!viewModelName){\r\n\t\t\t\t\tviewModelName = nameParam;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tonChange=meOrParams.onChange;\r\n\t\t\tconverter=meOrParams.converter;\r\n\t\t\tonSetByView=meOrParams.onSetByView;\r\n\t\t}\r\n\t\telse\r\n\t\t\tme=meOrParams;\r\n\t\tif(typeof(nameParam)==='string'){\r\n\t\t\treturn /*new*/ PropertyBinding._carryOver(me, model, nameParam, onChange, converter, onSetByView, viewModelName);\r\n\t\t}\r\n\t\tconst propertyBindings=[];\r\n\t\tnameParam.forEach((name)=>{\r\n\t\t\tpropertyBindings.push(/*new*/ PropertyBinding._carryOver(me, model, name, undefined, converter));\r\n\t\t});\r\n\t\treturn propertyBindings;\r\n\t}\r\n\t\r\n\t\r\n\t//me, model, name, viewModelClass, onViewModelSet\r\n\t//me, model, name, viewModelName, viewModelClass, onViewModelSet\r\n\tstatic carryOverChildModelAsChildViewModel(me, model/*the model being carried over is a property of this model*/, name, a,b,c){\r\n\t\tvar createViewModel, onViewModelSet,viewModelName;\r\n\t\tif(typeof(a)==='string')\r\n\t\t{\r\n\t\t\tviewModelName=a;\r\n\t\t\tcreateViewModel = b;\r\n\t\t\tonViewModelSet = c;\r\n\t\t}else{\r\n\t\t\tviewModelName=name;\r\n\t\t\tcreateViewModel=a;\r\n\t\t\tonViewModelSet=b;\r\n\t\t}\t\t\r\n\t\tvar bindingsHandler = enableAcceptBindings(me);\r\n\t\tvar viewModel;\r\n\t\tvar currentModel;\r\n\t\tconst _change=(value, oldValue)=>{\r\n\t\t\tbindingsHandler.changed(viewModelName, value);\r\n\t\t\tonViewModelSet&&onViewModelSet(value, oldValue);\r\n\t\t};\r\n\t\tconst change=(value)=>{\r\n\t\t\tvar oldViewModel = viewModel;\r\n\t\t\tif(!value)\r\n\t\t\t{\r\n\t\t\t\tif(!currentModel)return;\r\n\t\t\t\tviewModel = null;\r\n\t\t\t\t_change(viewModel, oldViewModel);\r\n\t\t\t\tcurrentModel= null;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif(value==currentModel)\r\n\t\t\t{\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tcurrentModel = value;\r\n\t\t\tviewModel = createViewModel(value);\r\n\t\t\t_change(viewModel, oldViewModel);\r\n\t\t};\r\n\t\tvar capitalizedName = capitalizeFirstLetter(viewModelName);\r\n\t\tvar getterName = PropertyHelper.getGetterName(capitalizedName);\r\n\t\t//if(!model[getterName])throw new Error('Model of type '+model.constructor.name+' does not contain a getter with name '+getterName);\r\n\t\tme[getterName]=function(){return viewModel;};\r\n\t\tvar propertyBinding = new PropertyBinding(me, model, name, change);\r\n\t\tchange(propertyBinding.get());\r\n\t\treturn propertyBinding;\r\n\t}\r\n\tstatic carryOverChildViewModelAsChildView(me, viewModel,// this is actually very similar to the above but for now keep as seperate to avoid confusion.\r\n\t\tname, createView, onViewSet){\r\n\t\tvar bindingsHandler = enableAcceptBindings(me);\r\n\t\tvar view;\r\n\t\tvar currentViewModel;\r\n\t\tfunction change(value){\r\n\t\t\tif(!value)\r\n\t\t\t{\r\n\t\t\t\tif(!currentViewModel)return;\r\n\t\t\t\tvar oldView = view;\r\n\t\t\t\tdisposeCurrentView();\r\n\t\t\t\t_change(null, oldView);\r\n\t\t\t\tcurrentViewModel= null;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif(value==currentViewModel)\r\n\t\t\t{\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tvar oldView = view;\r\n\t\t\tdisposeCurrentView();\r\n\t\t\tcurrentViewModel = value;\r\n\t\t\tview = createView(value);\r\n\t\t\t_change(view, oldView);\r\n\t\t};\r\n\t\tfunction disposeCurrentView(){\r\n\t\t\tif(!view)return;\r\n\t\t\tview.dispose();//force implementing dispose for good practise so dont forget cleanup.\r\n\t\t\tview = null;\r\n\t\t}\r\n\t\tfunction _change(view, oldView){\r\n\t\t\tbindingsHandler.changed(name, view);\r\n\t\t\tonViewSet&&onViewSet(view, oldView);\r\n\t\t}\r\n\t\tvar capitalizedName = capitalizeFirstLetter(name);\r\n\t\tvar getterName = PropertyHelper.getGetterName(capitalizedName);\r\n\t\tvar getter = viewModel[getterName];\r\n\t\tif(!getter)throw new Error('Model of type '+viewModel.constructor.name+' does not contain a get method for property named '+name);\r\n\t\tchange(getter());\r\n\t\tme[getterName]=function(){return view;};\r\n\t\tvar propertyBinding = new PropertyBinding(me, viewModel, name, change);\r\n\t\treturn propertyBinding;\r\n\t}\r\n\tstatic arrayConversion(me, model, name, createConvertedItem, removedItem, changedCallback, postpone/* called any time the child changes*/){\r\n\t\treturn PropertyBindingFactory._arrayConversion(me, model, name, createConvertedItem, removedItem, changedCallback, postpone, function(item){\r\n\t\t\treturn enableHash(item);\r\n\t\t});\r\n\t}\r\n\tstatic arrayConversionFromPrimitives(me, model, name, createConvertedItem, removedItem, changedCallback/* called any time the child changes*/, postpone){\r\n\t\treturn PropertyBindingFactory._arrayConversion(me, model, name, createConvertedItem, removedItem, changedCallback, postpone, function(item){\r\n\t\t\treturn String(item);\r\n\t\t});\r\n\t}\r\n\tstatic _arrayConversion(me, model, name, createConvertedItem, removedItem, changedCallback/* called any time the child changes*/, postpone, getHashFromItem){\r\n\t\tvar mapHashToConvertedItem={};\r\n\t\tvar currentConvertedItems=[];\r\n\t\tvar propertyBinding = PropertyBindingFactory.standard(me, model, name, changed, true);\r\n\t\tfunction changed(items){\r\n\t\t\tvar hashesSeen = [];\r\n\t\t\tfor(var i=0; ithis.selected, (value)=>this.selected = value);\r\n\t\texposeBinding(this, 'status', ()=>this.status, (value)=>this.status = value);\r\n\t\texposeBinding(this, 'features', ()=>this.features, (value)=>this.features = value);\r\n\t\texposeBinding(this, 'plotFeatures', ()=>this.plotFeatures, (value)=>this.plotFeatures = value);\r\n\t\tthis._propertyBindingHouseTypeFeatures = PropertyBindingFactory.standard(this, this._houseType, 'features', this._houseTypeFeaturesChanged);\r\n\t}\r\n\tget unit(){\r\n\t\treturn this._getUnit();\r\n\t}\r\n\tget hash(){\r\n\t return this._hash;\r\n\t}\r\n\tget name(){\r\n\t\treturn this._name;\r\n\t}\r\n\tget about(){\r\n\t\treturn this._houseType.about;\r\n\t}\r\n\tget number(){\r\n\t\treturn this._number;\r\n\t}\r\n\tget rooms(){\r\n\t\treturn this._rooms;\r\n\t}\r\n\tget affordable(){\r\n\t\treturn this._affordable;\r\n\t}\r\n\tget frontViewImage(){\r\n\t\treturn this._frontViewImage;\r\n\t}\r\n\tget price(){\r\n\t\treturn this._price;\r\n\t}\r\n\tset price(value){\r\n\t\tthis._price = value;\r\n\t}\r\n\tget status(){\r\n\t\treturn this._status;\r\n\t}\r\n\tset status(value){\r\n\t\tthis._status=value;\r\n\t}\r\n\tget isSold(){\r\n\t\treturn this._status===PlotStatus.SOLD_OR_UNAVAILABLE;\r\n\t}\r\n\tget isReserved(){\r\n\t\treturn this._status===PlotStatus.RESERVED;\r\n\t}\r\n\tget isAvailable(){\r\n\t\treturn this._status===PlotStatus.AVAILABLE;\r\n\t}\r\n\tget nBedrooms(){\r\n\t\treturn this._houseType.nBedrooms;\r\n\t\t//return this._rooms.getArray().filter(room=>room.roomType===RoomType.BEDROOM).length;\r\n\t}\r\n\tget nBathrooms(){\r\n\t\treturn this._houseType.nBathrooms\r\n\t}\r\n\tget houseType(){\r\n\t\treturn this._houseType;\r\n\t}\r\n\tget priceString(){\r\n\t\treturn `${this._currencyConfiguration.currencyPrefix}${numberWithCommas(this.price)}${this._currencyConfiguration.currencySuffix}`;\r\n\t}\r\n\tget selected(){\r\n\t\treturn this._selected;\r\n\t}\r\n\tset selected(value){\r\n\t\tconst oldValue = this._selected;\r\n\t\tthis._selected = value;\r\n\t\tif(oldValue!==value){\r\n\t\t\tthis.bindingsHandler.changed('selected', value);\r\n\t\t\tthis.dispatchEvent({type:'selectedChanged'});\r\n\t\t}\r\n\t}\r\n\tget floorPlanImages(){\r\n\t\treturn this._floorPlanImages;\r\n\t}\r\n\tget hasOneOrMoreRoomImages(){\r\n\t\tconsole.log('hasOneOrMoreRoomImages ');\r\n\t\tconsole.log(this.rooms);\r\n\t\tif(!this.rooms)return false;\r\n\t\tconst rooms = this.rooms.getArray();\r\n\t\tconsole.log(rooms);\r\n\t\tfor(var i=0; i0){\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\tget features(){\r\n\t\tlet value = [];\r\n\t\tif(this._houseType.features)\r\n\t\t\tvalue =value.concat(this._houseType.features);\r\n\t\tif(this.plotFeatures)\r\n\t\t\tvalue = value.concat(this.plotFeatures);\r\n\t\treturn value;\r\n\t}\r\n\tget plotFeatures(){\r\n\t\treturn this._plotFeatures;\r\n\t}\r\n\tset plotFeatures(value){\r\n\t\tthis._plotFeatures= value;\r\n\t\tthis.bindingsHandler.changed('plotFeatures');\r\n\t\tthis.bindingsHandler.changed('features');\r\n\t\tthis.dispatchEvent({type:'plotfeatureschanged', plotFeatures:this._plotFeatures});\r\n\t}\r\n\t_houseTypeFeaturesChanged(){\r\n\t\tthis.bindingsHandler.changed('features');\r\n\t}\r\n\ttoJSON(){\r\n\t\treturn {\r\n\t\t\tname:this._name,\r\n\t\t\tnumber:this._number,\r\n\t\t\tfrontViewImageRelativePath:this._frontViewImageRelativePath,\r\n\t\t\tprice:this._price,\r\n\t\t\tstatus:PlotStatus.toString(this.status),\r\n\t\t\thouseType:this._houseType.name,\r\n\t\t\tselected:this._selected\r\n\t\t};\r\n\t}\r\n\tstatic fromJSON(jObject, houseTypes, currencyConfiguration, getUnit){\r\n\t\tif(jObject.number===undefined||jObject.number===null)\r\n\t\t\tthrowNotProvided('jObject.number (number of the number)');\r\n\t\tlet plot=null;\r\n\t\tconst getParentPlot=()=>{return plot;}\r\n\t\tplot = new SiteJsonUnitPlot({\r\n\t\t\tname:jObject.name,\r\n\t\t\tnumber:jObject.number,\r\n\t\t\trooms:jObject.rooms?SiteJsonUnitPlotRooms.fromJSON(jObject.rooms, getParentPlot):[],\r\n\t\t\taffordable:jObject.affordable||(jObject.houseType===undefined||jObject.houseType===null||jObject.houseType===''),\r\n\t\t\tfrontViewImage:jObject.frontViewImage?DynamicImage.fromJSON(jObject.frontViewImage):null,\r\n\t\t\tprice:jObject.price,\r\n\t\t\tstatus:PlotStatus.parse(jObject.status),\r\n\t\t\thouseType:houseTypes.parse(jObject.houseType),\r\n\t\t\tselected:jObject.selected,\r\n\t\t\tcurrencyConfiguration:currencyConfiguration,\r\n\t\t\tfloorPlanImages:jObject.floorPlanImages?.map(floorPlanImage=>DynamicImage.fromJSON(floorPlanImage)),\r\n\t\t\tgetUnit:getUnit\r\n\t\t});\r\n\t\treturn plot;\r\n\t}\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport Validation from '../validation/Validation';\r\nconst{throwNotProvided, throwNotOfType}=ParameterErrors;\r\nexport default class EulerAngles {\r\n constructor(props) {\r\n\t\tconst {yawRadians, pitchRadians, rollRadians}=props;\r\n\t\tif(yawRadians===undefined||yawRadians===null)\r\n\t\t\tthrowNotProvided('yawRadians');\r\n\t\tif(pitchRadians===undefined||pitchRadians===null)\r\n\t\t\tthrowNotProvided('pitchRadians');\r\n\t\tif(rollRadians===undefined||rollRadians===null)\r\n\t\t\tthrowNotProvided('rollRadians');\r\n\t\tthis._yawRadians = yawRadians;\r\n\t\tthis._pitchRadians = pitchRadians;\r\n\t\tthis._rollRadians = rollRadians;\r\n }\r\n get yawRadians() {\r\n return this._yawRadians;\r\n }\r\n get pitchRadians() {\r\n return this._pitchRadians;\r\n }\r\n get rollRadians() {\r\n return this._rollRadians;\r\n }\r\n static fromJSON(obj) {\r\n return new EulerAngles(obj);\r\n }\r\n}\r\n","import ParameterErrors from '../errors/ParameterErrors';\r\nimport EulerAngles from '../geometry/EulerAngles';\r\nconst { throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class SiteJsonFileUnitNearestOutside360Move{\r\n\tconstructor(props){\r\n\t\tconst {outside360UniqueId, cameraAngleToFaceFrontDoor}=props;\r\n\t\tif(outside360UniqueId===undefined||outside360UniqueId===null)\r\n\t\t\tthrowNotProvided('outside360UniqueId');\r\n\t\tthis._outside360UniqueId = outside360UniqueId;\r\n\t\tif(cameraAngleToFaceFrontDoor===undefined||cameraAngleToFaceFrontDoor===null)\r\n\t\t\tthrowNotProvided('cameraAngleToFaceFrontDoor');\r\n\t\tthis._cameraAngleToFaceFrontDoor = cameraAngleToFaceFrontDoor;\r\n\t}\r\n\tget cameraAngleToFaceFrontDoor(){\r\n\t\treturn this._cameraAngleToFaceFrontDoor;\r\n\t}\r\n\tget outside360UniqueId(){\r\n\t\treturn this._outside360UniqueId;\r\n\t}\r\n\tstatic fromJSON(jObject){\r\n\t\treturn new SiteJsonFileUnitNearestOutside360Move({\r\n\t\t\toutside360UniqueId:jObject.outside360UniqueId,\r\n\t\t\tcameraAngleToFaceFrontDoor:jObject.cameraAngleToFaceFrontDoor?EulerAngles.fromJSON(jObject.cameraAngleToFaceFrontDoor):null\r\n\t\t});\r\n\t}\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport Vector2 from '../geometry/Vector2';\r\nimport Location from '../modelling/Location';\r\nimport UrlHelper from '../core/UrlHelper';\r\nimport Urls from '../urls/Urls';\r\nimport PlotStatus from './PlotStatus';\r\nimport HouseTypes from './HouseTypes';\r\nimport RoomType from './RoomType';\r\nimport eventEnable from '../core/eventEnable';\r\nimport Handles from '../core/Handles';\r\nimport enableAcceptBindings from '../mvvm/enableAcceptBindings';\r\nimport exposeBinding from '../mvvm/exposeBinding';\r\nimport SiteJsonUnitBirdsEyeViews from '../site/SiteJsonUnitBirdsEyeViews';\r\nimport SiteJsonUnitPlot from '../site/SiteJsonUnitPlot';\r\nimport SiteJsonFileUnitNearestOutside360Move from '../site/SiteJsonFileUnitNearestOutside360Move';\r\nimport DynamicImage from '../images/DynamicImage';\r\nimport numberWithCommas from '../core/numberWithCommas';\r\nconst { throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class SiteJsonUnit{\r\n\tconstructor(props){\r\n\t\teventEnable(this);\r\n\t\tenableAcceptBindings(this);\r\n\t\tconst {id, name, birdsEyeViews, useFrontViewInsteadOfStreetView,\r\n\t\t\tselected, threeDNodes, nearestOutside360Move, plots, frontViewImage, streetViewImage}=props;\r\n\t\t\r\n\t\tif(id===undefined||id===null)\r\n\t\t\tthrowNotProvided('id');\r\n\t\t\r\n\t\t/*if(name===undefined||name===null)\r\n\t\t\tthrowNotProvided('name');*/\r\n\t\t\r\n\t\tif(birdsEyeViews===undefined||birdsEyeViews===null)\r\n\t\t\tthrowNotProvided('birdsEyeViews');\r\n\t\t\r\n\t\t/*if(frontViewImageRelativePath===undefined || frontViewImageRelativePath===null)\r\n\t\t\tthrowNotProvided('frontViewImageRelativePath');*/\r\n\t\t\r\n\t\tif(plots===undefined||plots===null)\r\n\t\t\tthrowNotProvided('plots');\r\n\t\t\r\n\t\t\r\n\t\tthis._hash = `unit_${id}`;\r\n\t\tthis._id = id;\r\n\t\tthis._name = name;\r\n\t\tthis._birdsEyeViews = birdsEyeViews;\r\n\t\tthis._nearestOutside360Move = nearestOutside360Move;\r\n\t\tthis._threeDNodes = threeDNodes;\r\n\t\tthis._selected = selected?true:false;\r\n\t\tthis._plots = plots.sort(function(plotA, plotB){return plotA.number - plotB.number});\r\n\t\tthis._plotSelectedChanged=this._plotSelectedChanged.bind(this);\r\n\t\tthis._plots.forEach(plot=>plot.addEventListener('selectedChanged', this._plotSelectedChanged));\r\n\t\tthis._frontViewImage=frontViewImage;\r\n\t\tthis._streetViewImage= streetViewImage;\r\n\t\tthis._useFrontViewInsteadOfStreetView= useFrontViewInsteadOfStreetView;\r\n\t\tthis._dispatchActiveChanged=this._dispatchActiveChanged.bind(this);\r\n\t\tthis._handleActiveHandlesChange=this._handleActiveHandlesChange.bind(this);\r\n\t\tthis._activeHandles = new Handles();\r\n\t\tthis._activeHandles.addEventListener('change', this._handleActiveHandlesChange);\r\n\t\tthis.getBirdsEyeViewMarkerPositionForBirdsEyeViewWithAngle = this.getBirdsEyeViewMarkerPositionForBirdsEyeViewWithAngle.bind(this);\r\n\t\texposeBinding(this, 'selected', ()=>this._selected, (value)=>this._selected = value);\r\n\t}\r\n\t_plotSelectedChanged(){\r\n\t\tthis.bindingsHandler.changed('selected', this.selected);\r\n\t}\r\n\tget frontViewImage(){\r\n\t\treturn this._frontViewImage;\r\n\t}\r\n\tget streetViewImage(){\r\n\t\treturn this._streetViewImage;\r\n\t}\r\n\tget useFrontViewInsteadOfStreetView(){\r\n\t\treturn this._useFrontViewInsteadOfStreetView;\r\n\t}\r\n\tget nearestOutside360Move(){\r\n\t\treturn this._nearestOutside360Move;\r\n\t}\r\n\tget threeDNodes(){\r\n\t\treturn this._threeDNodes;\r\n\t}\r\n\tget hash(){\r\n\t return this._hash;\r\n\t}\r\n\tget id(){\r\n\t\treturn this._id;\r\n\t}\r\n\tget selected(){\r\n\t\treturn this._plots.filter(plot=>plot.selected).length>0;\r\n\t}\r\n\tget plots(){\r\n\t\treturn this._plots;\r\n\t}\r\n\tget allPlotsAffordable(){\r\n\t\tfor(var i=0; i1;\r\n\t}\r\n\t/*\r\n\tset selected(value){\r\n\t\tconst oldValue = this._selected;\r\n\t\tthis._selected = value;\r\n\t\tif(oldValue!==value){\r\n\t\t\tthis.bindingsHandler.changed('selected', value);\r\n\t\t}\r\n\t}*/\r\n\tget active(){\r\n\t\treturn this._activeHandles.taken;\r\n\t}\r\n\ttakeActiveHandle(){\r\n\t\treturn this._activeHandles.take();\r\n\t}\r\n\tgetBirdsEyeViewMarkerPositionForBirdsEyeViewWithAngle(angle){\r\n\t\treturn this._birdsEyeViews.getMarkerPositionForBirdsEyeViewWithAngle(angle);\r\n\t}\r\n\t_dispatchActiveChanged(){\r\n\t\tthis.dispatchEvent({type:'active', active:this.active});\r\n\t}\r\n\t_handleActiveHandlesChange(e){\r\n\t\tthis._dispatchActiveChanged();\r\n\t}\r\n\tstatic fromJSON(jObject, houseTypes, currencyConfiguration){\r\n\t\tlet unit = null;\r\n\t\tconst getUnit=()=>unit;\r\n\t\tconst plots = jObject.plots.map(plot=>SiteJsonUnitPlot.fromJSON(plot, houseTypes, currencyConfiguration, getUnit));\r\n\t\tunit=new SiteJsonUnit({\r\n\t\t\tid:jObject.id,\r\n\t\t\tname:jObject.name, \r\n\t\t\tbirdsEyeViews:SiteJsonUnitBirdsEyeViews.fromJSON(jObject.birdsEyeViews),\r\n\t\t\tfrontViewImage:jObject.frontViewImage?DynamicImage.fromJSON(jObject.frontViewImage):null,\r\n\t\t\tstreetViewImage:jObject.streetViewImage?DynamicImage.fromJSON(jObject.streetViewImage):null,\r\n\t\t\tuseFrontViewInsteadOfStreetView:jObject.useFrontViewInsteadOfStreetView,\r\n\t\t\tnearestOutside360Move:SiteJsonFileUnitNearestOutside360Move.fromJSON(jObject.nearestOutside360Move),\r\n\t\t\tplots:plots,\r\n\t\t\tthreeDNodes:jObject.threeDNodes\r\n\t\t});\r\n\t\treturn unit;\r\n\t}\r\n\t\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport ParseError from '../errors/ParseError';\r\nimport SiteJsonUnit from './SiteJsonUnit';\r\nconst { throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class SiteJsonUnits{\r\n\tconstructor(props){\r\n\t\tconst {list}=props;\r\n\t\tif(list === undefined || list === null)\r\n\t\t\tthrowNotProvided('list');\r\n\t\tif(!Array.isArray(list))\r\n\t\t\tthrowNotOfType('list', 'Array');\r\n\t\tthis._list = list;\r\n\t\tthis.getArray = this.getArray.bind(this);\r\n\t\tthis.getPlotsArray = this.getPlotsArray.bind(this);\r\n\t\tthis.getByUnitId = this.getByUnitId.bind(this);\r\n\t\tthis.getPlotByNumber = this.getPlotByNumber.bind(this);\r\n\t\tthis.getSelectedPlotsAsArray = this.getSelectedPlotsAsArray.bind(this);\r\n\t}\r\n\tgetArray(){\r\n\t\treturn this._list;\r\n\t}\r\n\tgetPlotsArray(){\r\n\t\tlet list = [];\r\n\t\tthis._list.forEach(unit=>list=list.concat(unit.plots));\r\n\t\treturn list;\r\n\t}\r\n\tgetByUnitId(id){\r\n\t\tfor(var i=0; iplot.number===number)[0];\r\n\t}\r\n\tgetSelectedPlotsAsArray(){\r\n\t\treturn this.getPlotsArray().filter(plot=>plot.selected);\r\n\t}\r\n\tstatic fromJSON(jArray, houseTypes, currencyConfiguration){\r\n\t\tconst units=[];\r\n\t\tfor(var i=0; iExportedCubeJsonFace.fromJSON(face));\r\n\t\tconst {directoryRelativePath, levels }= jObject;\r\n\t\treturn new ExportedCubeJson({faces:faces, directoryRelativePath:directoryRelativePath, levels:levels});\r\n\t}\r\n}","export default class Iterator{\r\n\tconstructor(array)\r\n\t{\r\n\t\tthis._index=0;\r\n\t\tthis._array=array;\r\n\t\tthis._length=array.length;\r\n }\r\n\tnext()\r\n {\r\n return this._array[this._index++];\r\n }\r\n hasNext()\r\n {\r\n return this._indexSiteJsonOutside360Scene.fromJSON(scene, getPlotByNumber, configuration));\r\n\t\treturn new SiteJsonOutside360({scenes:scenes, configuration});\r\n\t}\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nconst {throwNotOfType, throwNotProvided} = ParameterErrors;\r\nexport default class AvailablePricesSettings {\r\n\tconstructor(props){\r\n\t\tconst {desiredIntervalsPrice}=props;\r\n\t\tif(desiredIntervalsPrice !== undefined && desiredIntervalsPrice !==null)\r\n\t\tif(!Array.isArray(desiredIntervalsPrice))\r\n\t\t\tthrowNotOfType('desiredIntervalsPrice', 'Array');\r\n\t\tfor(var i=0; i{\r\n\t\t\tif(this._initialized)throw new Error('Already initialized');\r\n\t\t\t\r\n\t\t\tconst img = document.createElement('img');\r\n\t\t\timg.crossOrigin = \"Anonymous\";\r\n\t\t\timg.src = Urls.getAssetsForSite(this._configuration.siteSlug)+this._imageFileRelativePath;\r\n\t\t\timg.addEventListener('load', ()=>{\r\n\t\t\t\tthis._initialized=true;\r\n\t\t\t\tthis._canvas.width = img.width;\r\n\t\t\t\tthis._canvas.height = img.height;\r\n\t\t\t\tthis._canvas.getContext('2d').drawImage(img, 0, 0, img.width, img.height);\r\n\t\t\t\tresolve();\r\n\t\t\t});\r\n\t\t\timg.addEventListener('error', (err)=>{\r\n\t\t\t\treject(err);\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\t_checkInitialized(){\r\n\t\tif(!this._initialized)throw new Error('Not initialize');\r\n\t}\r\n\tgetValueFromPercentages(xPercent, yPercent){\r\n\t\treturn this.getValueFromProportions(xPercent/100, yPercent/100);\r\n\t}\r\n\tgetValueFromProportions(xProportion, yProportion){\r\n\t\tconst x = parseInt(xProportion*this._canvas.width);\r\n\t\tconst y = parseInt(yProportion*this._canvas.height);\r\n\t\treturn this.getValueFromPixel(x, y);\r\n\t}\r\n\tgetValueFromPixel(x, y){\r\n\t\tif(isNaN(x)||isNaN(y))return null;\r\n\t\tconst rgba = this._getPixelARGB(x, y);\r\n\t\tconst mapBToGToRToValue = this._mapAToBToGToRToValue[rgba[3]];\r\n\t\tif(!mapBToGToRToValue)return null;\r\n\t\tconst mapGToRToValue = mapBToGToRToValue[rgba[2]];\r\n\t\tif(!mapGToRToValue)return null;\r\n\t\tconst mapRToValue = mapGToRToValue[rgba[1]];\r\n\t\tif(!mapRToValue)return null;\r\n\t\tconst value = mapRToValue[rgba[0]];\r\n\t\treturn value;\r\n\t}\r\n\t_getPixelARGB(x, y){\r\n\t\tthis._checkInitialized();\r\n\t\tif(x<0)x=0;\r\n\t\telse if(x>=this._canvas.width)x=this._canvas.width-1;\r\n\t\tif(y<0)y=0;\r\n\t\telse if(y>=this._canvas.height)y=this._canvas.height-1;\r\n\t\tconst pixelData = this._canvas.getContext('2d').getImageData(x, y, 1, 1).data;\r\n\t\treturn pixelData;\r\n\t}\r\n\tstatic _parseRgbaValuePairsToMap(rgbaValuePairs){\r\n\t\tconst mapAToBToGToRToValue = {};\r\n\t\trgbaValuePairs.forEach((rgbaValuePair)=>{\r\n\t\t\tconst rgba = rgbaValuePair.rgba;\r\n\t\t\tconst mapBToGToRToValue=mapAToBToGToRToValue[rgba.a];\r\n\t\t\tif(!mapBToGToRToValue){\r\n\t\t\t\tmapAToBToGToRToValue[rgba.a]={\r\n\t\t\t\t\t[rgba.b]:{\r\n\t\t\t\t\t\t[rgba.g]:{\r\n\t\t\t\t\t\t\t[rgba.r]:rgbaValuePair.value\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tconst mapGToRToValue=mapBToGToRToValue[rgba.b];\r\n\t\t\tif(!mapGToRToValue){\r\n\t\t\t\tmapBToGToRToValue[rgba.b]={\r\n\t\t\t\t\t[rgba.g]:{\r\n\t\t\t\t\t\t[rgba.r]:rgbaValuePair.value\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tconst mapRToValue=mapGToRToValue[rgba.g];\r\n\t\t\tif(!mapRToValue){\r\n\t\t\t\tmapGToRToValue[rgba.g]={\r\n\t\t\t\t\t[rgba.r]:rgbaValuePair.value\r\n\t\t\t\t};\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tmapRToValue[rgba.r] = rgbaValuePair.value;\r\n\t\t});\r\n\t\treturn mapAToBToGToRToValue;\r\n\t}\r\n static fromJSON(jObject, configuration) {\r\n\t\tconst rgbaValuePairs=jObject.rgbaValuePairs;\r\n\t\tif(rgbaValuePairs===undefined||rgbaValuePairs===null)\r\n\t\t\tthrowNotProvided('rgbaValuePairs');\r\n\t\tconst imageFileRelativePath= jObject.imageFileRelativePath;\r\n\t\tif(imageFileRelativePath===undefined||imageFileRelativePath===null)\r\n\t\t\tthrowNotProvided('imageFileRelativePath');\r\n\t\tconst mapAToBToGToRToValue = PixelMappings._parseRgbaValuePairsToMap(rgbaValuePairs);\r\n\t\treturn new PixelMappings({mapAToBToGToRToValue:mapAToBToGToRToValue, imageFileRelativePath:imageFileRelativePath, configuration});\r\n }\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport Vector2 from '../geometry/Vector2';\r\nconst { throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class SiteJsonUnitBirdsEyeViewOutside360MarkerPosition{\r\n\tconstructor(props){\r\n\t\tconst {outside360UniqueId, markerPosition}=props;\r\n\t\tif(outside360UniqueId===undefined||outside360UniqueId===null)\r\n\t\t\tthrowNotProvided('outside360UniqueId');\r\n\t\tthis._outside360UniqueId = outside360UniqueId;\r\n\t\tif(markerPosition===undefined||markerPosition===null)\r\n\t\t\tthrowNotProvided('markerPosition');\r\n\t\tthis._markerPosition = markerPosition;\r\n\t}\r\n\tget markerPosition(){\r\n\t\treturn this._markerPosition;\r\n\t}\r\n\tget outside360UniqueId(){\r\n\t\treturn this._outside360UniqueId;\r\n\t}\r\n\tstatic fromJSON(jObject){\r\n\t\treturn new SiteJsonUnitBirdsEyeViewOutside360MarkerPosition({\r\n\t\t\toutside360UniqueId:jObject.outside360UniqueId,\r\n\t\t\tmarkerPosition:jObject.markerPosition?Vector2.fromObj(jObject.markerPosition):null\r\n\t\t});\r\n\t}\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport ParseError from '../errors/ParseError';\r\nimport PixelMappings from '../pixel_mapping/PixelMappings';\r\nimport SiteJsonUnitBirdsEyeViewOutside360MarkerPosition from './SiteJsonUnitBirdsEyeViewOutside360MarkerPosition';\r\nconst { throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class SiteJsonBirdsEyeViewsBirdsEyeView{\r\n\tconstructor(props){\r\n\t\tconst {imageRelativePath, imageAspectRatio, angle, nearestOutside360PixelMappings, outside360MarkerPositions}=props;\r\n\t\tif(!imageRelativePath)throwNotProvided('imageRelativePath');\r\n\t\tthis._imageRelativePath = imageRelativePath;\r\n\t\tif(!imageAspectRatio)throwNotProvided('imageAspectRatio');\r\n\t\tthis._imageAspectRatio = imageAspectRatio;\r\n\t\t/*if(angle===null||angle===undefined)\r\n\t\t\tthrowNotProvided('index');\r\n\t\tif(typeof(index)!=='number')\r\n\t\t\tthrowNotOfType('index', 'number');\r\n\t\t*/\r\n\t\tthis._angle = angle\r\n\t\t\r\n\t\tif(nearestOutside360PixelMappings===undefined||nearestOutside360PixelMappings===null)\r\n\t\t\tthrowNotProvided('nearestOutside360PixelMappings');\r\n\t\tthis._nearestOutside360PixelMappings= nearestOutside360PixelMappings;\r\n\t\t\r\n\t\tif(outside360MarkerPositions===undefined||outside360MarkerPositions===null)\r\n\t\t\tthrowNotProvided('outside360MarkerPositions');\r\n\t\tthis._outside360MarkerPositions= outside360MarkerPositions;\r\n\t\tthis._mapOutside360UniqueIdToMarkerPosition={};\r\n\t\tthis._outside360MarkerPositions.forEach(outside360MakerPosition=>\r\n\t\t\tthis._mapOutside360UniqueIdToMarkerPosition[outside360MakerPosition.outside360UniqueId]= outside360MakerPosition.markerPosition\r\n\t\t);\r\n\t\tthis.getMarkerPositionForOutside360= this.getMarkerPositionForOutside360.bind(this);\r\n\t}\r\n\tget angle(){\r\n\t\treturn this._angle;\r\n\t}\r\n\tget imageRelativePath(){\r\n\t\treturn this._imageRelativePath;\r\n\t}\r\n\tget imageAspectRatio(){\r\n\t\treturn this._imageAspectRatio;\r\n\t}\r\n\tget nearestOutside360PixelMappings(){\r\n\t\treturn this._nearestOutside360PixelMappings;\r\n\t}\r\n\tgetMarkerPositionForOutside360(outside360UniqueId){\r\n\t\treturn this._mapOutside360UniqueIdToMarkerPosition[outside360UniqueId];\r\n\t}\r\n\tstatic fromJSON(jObject, configuration){\r\n\t\treturn new SiteJsonBirdsEyeViewsBirdsEyeView({\r\n\t\t\tangle:jObject.angle,\r\n\t\t\timageRelativePath:jObject.imageRelativePath,\r\n\t\t\timageAspectRatio:jObject.imageAspectRatio,\r\n\t\t\tnearestOutside360PixelMappings:PixelMappings.fromJSON(jObject.nearestOutside360PixelMappings, configuration),\r\n\t\t\toutside360MarkerPositions:jObject.outside360MarkerPositions.map(outside360MarkerPosition=>SiteJsonUnitBirdsEyeViewOutside360MarkerPosition.fromJSON(outside360MarkerPosition))\r\n\t\t});\r\n\t}\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport ParseError from '../errors/ParseError';\r\nimport SiteJsonBirdsEyeViewsBirdsEyeView from './SiteJsonBirdsEyeViewsBirdsEyeView';\r\nconst { throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class SiteJsonBirdsEyeViews{\r\n\tconstructor(props){\r\n\t\tconst {list}=props;\r\n\t\tthis._list = list;\r\n\t}\r\n\tgetArray(){\r\n\t\treturn this._list;\r\n\t}\r\n\tgetDefault(){\r\n\t\treturn this._list[0];\r\n\t}\r\n\tstatic fromJSON(jArray, configuration){\r\n\t\tconst list = jArray.map(jObjectBirdsEyeView=>SiteJsonBirdsEyeViewsBirdsEyeView.fromJSON(jObjectBirdsEyeView, configuration));\r\n\t\treturn new SiteJsonBirdsEyeViews({\r\n\t\t\tlist:list\r\n\t\t});\r\n\t}\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport ParseError from '../errors/ParseError';\r\nconst { throwNotProvided, throwNotOfType} = ParameterErrors;\r\nconst OBJECT_ID_JSON_KEY='o';\r\nconst NODE_IDS_JSON_KEY='n';\r\nexport default class ObjectIdNodeIdsMappings{\r\n\tconstructor(mapObjectIdToNodeIds){\r\n\t\tthis.getNodeIdsForObjectId= this.getNodeIdsForObjectId.bind(this);\r\n\t\tthis.getNodeIdsForObjectIds= this.getNodeIdsForObjectIds.bind(this);\r\n\t\tthis._mapObjectIdToNodeIds= mapObjectIdToNodeIds;\r\n\t}\r\n\tget allNodeIds(){\r\n\t\treturn Array.from(this._mapObjectIdToNodeIds.keys());\r\n\t}\r\n\tgetNodeIdsForObjectId(objectId){\r\n\t\treturn this._mapObjectIdToNodeIds.get(objectId);\r\n\t}\r\n\tgetNodeIdsForObjectIds(objectIds){\r\n\t\tlet nodeIds =[];\r\n\t\tfor(var objectId of objectIds){\r\n\t\t\tconst nodeIdsForObjectId = this.getNodeIdsForObjectId(objectId);\r\n\t\t\tif(!nodeIdsForObjectId)continue;\r\n\t\t\tnodeIds=nodeIds.concat(nodeIdsForObjectId);\r\n\t\t}\r\n\t\treturn nodeIds;\r\n\t}\r\n\tstatic fromJSON(jArray){\r\n\t\tconst mapObjectIdToNodeIds = new Map();\r\n\t\tjArray.forEach(entry=>{\r\n\t\t\tmapObjectIdToNodeIds.set(entry[OBJECT_ID_JSON_KEY], entry[NODE_IDS_JSON_KEY]);\r\n\t\t});\r\n\t\treturn new ObjectIdNodeIdsMappings(mapObjectIdToNodeIds);\r\n\t}\r\n}","import ObjectIdNodeIdsMappings from '../modelling/ObjectIdNodeIdsMappings';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nconst { throwNotProvided, throwNotOfType } = ParameterErrors;\r\nexport default class Model {\r\n constructor(props) {\r\n const { groupCode, code, relativePath, objectIdNodeIdsMappings, quadrantsRelativePath} = props;\r\n if (!code) throwNotProvided(\"code\");\r\n if (!groupCode) throwNotProvided(\"groupCode\");\r\n if (!objectIdNodeIdsMappings) throwNotProvided(\"objectIdNodeIdsMappings\");\r\n this._code = code;\r\n\t\tthis._groupCode = groupCode;\r\n\t\tthis._relativePath = relativePath;\r\n\t\tthis._objectIdNodeIdsMappings = objectIdNodeIdsMappings;\r\n\t\tthis._quadrantsRelativePath = quadrantsRelativePath;\r\n\r\n }\r\n get code() {\r\n return this._code;\r\n }\r\n get groupCode() {\r\n return this._groupCode;\r\n }\r\n\tget relativePath(){\r\n\t\treturn this._relativePath;\r\n\t}\r\n\tget objectIdNodeIdsMappings(){\r\n\t\treturn this._objectIdNodeIdsMappings;\r\n\t}\r\n\tget quadrantsRelativePath(){\r\n\t\treturn this._quadrantsRelativePath;\r\n\t}\r\n static fromObj(obj) {\r\n return new Model({\r\n\t\t\tgroupCode:obj.groupCode,\r\n code: obj.code,\r\n\t\t\trelativePath:obj.relativePath,\r\n\t\t\tquadrantsRelativePath:obj.quadrantsRelativePath,\r\n\t\t\tobjectIdNodeIdsMappings:obj.objectIdNodeIdsMappings?ObjectIdNodeIdsMappings.fromJSON(obj.objectIdNodeIdsMappings):null\r\n })\r\n }\r\n}\r\n","import ParameterErrors from '../errors/ParameterErrors';\r\nimport Model from './Model';\r\nconst { throwNotProvided } = ParameterErrors;\r\nexport default class Models {\r\n constructor(props) {\r\n const { map, mapGroupCodeToModels} = props;\r\n if (!map) throwNotProvided(\"map\");\r\n if (!mapGroupCodeToModels) throwNotProvided(\"mapGroupCodeToModels\");\r\n this._map = map;\r\n\t\tthis._mapGroupCodeToModels = mapGroupCodeToModels;\r\n\t\tthis.getModelByCode= this.getModelByCode.bind(this);\r\n\t\tthis.getModelsByGroupCode= this.getModelsByGroupCode.bind(this);\r\n }\r\n getModelByCode(code) {\r\n\t\tif(!this._map.has(code))return null;\r\n return this._map.get(code);\r\n }\r\n\tgetModelsByGroupCode(groupCode){\r\n\t\treturn this._mapGroupCodeToModels.get(groupCode);\r\n\t}\r\n static fromJSON(objArray) {\r\n const modelsMap = new Map();\r\n\t\tconst mapGroupCodeToModels = new Map();\r\n for (var i = 0; i < objArray.length; i++) {\r\n\t\t\tconst model = Model.fromObj(objArray[i]);\r\n modelsMap.set(model.code, model);\r\n\t\t\tif(!mapGroupCodeToModels.has(model.groupCode)){\r\n\t\t\t\tmapGroupCodeToModels.set(model.groupCode, [model]);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\tmapGroupCodeToModels.get(model.groupCode).push(model);\r\n }\r\n return new Models({ map: modelsMap , mapGroupCodeToModels:mapGroupCodeToModels});\r\n }\r\n}\r\n","import ParameterErrors from '../errors/ParameterErrors';\r\nconst {throwNotProvided }=ParameterErrors;\r\nexport default class WhenFinishedModifying {\r\n constructor(props){\r\n\t\tconst {delay, callback}=props;\r\n\t\tthis._delay = delay;\r\n\t\tif(!delay)\r\n\t\t\tthrowNotProvided('delay');\r\n\t\tif(!callback)\r\n\t\t\tthrowNotProvided('callback');\r\n\t\tthis._callback = callback;\r\n\t\tthis._currentTimeout= null;\r\n\t\tthis.trigger= this.trigger.bind(this);\r\n\t}\r\n\ttrigger(){\r\n\t\tif(this._currentTimeout)\r\n\t\t\tclearTimeout(this._currentTimeout);\r\n\t\tthis._currentTimeout = setTimeout(()=>{\r\n\t\t\tthis._callback();\r\n\t\t}, this._delay);\r\n\t}\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport ParseError from '../errors/ParseError';\r\nimport SiteJsonUnits from './SiteJsonUnits';\r\nimport SiteJsonOutside360 from './SiteJsonOutside360';\r\nimport HouseTypes from './HouseTypes';\r\nimport FiltersSettings from '../filters/FiltersSettings';\r\nimport SiteJsonBirdsEyeViews from './SiteJsonBirdsEyeViews';\r\nimport CurrencyConfiguration from '../configuration/CurrencyConfiguration';\r\nimport Models from '../modelling/Models';\r\nimport exposeBinding from '../mvvm/exposeBinding';\r\nimport WhenFinishedModifying from '../core/WhenFinishedModifying';\r\nimport enableAcceptBindings from '../mvvm/enableAcceptBindings';\r\nconst { throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class SiteJson{\r\n\tconstructor(props){\r\n\t\tenableAcceptBindings(this);\r\n\t\tconst {birdsEyeViews, units, houseTypes, filtersSettings,\r\n\t\toutside360, currencyConfiguration, models, configuration,\r\n\t\tlatLng}=props;\r\n\t\tthis._latLng = latLng;\r\n\t\tthis._configuration = configuration;\r\n\t\tif(!units)throwNotProvided('units');\r\n\t\tthis._units = units;\r\n\t\tif(!houseTypes)throwNotProvided('houseTypes');\r\n\t\tthis._houseTypes = houseTypes;\r\n\t\tif(!filtersSettings)throwNotProvided('filtersSettings');\r\n\t\tthis._filtersSettings = filtersSettings;\r\n\t\tif(!birdsEyeViews)throwNotProvided('birdsEyeViews');\r\n\t\tthis._birdsEyeViews = birdsEyeViews;\r\n\t\tif(!outside360)throwNotProvided('outside360');\r\n\t\tthis._outside360 = outside360;\r\n\t\tif(!currencyConfiguration)throwNotProvided('currencyConfiguration');\r\n\t\tthis._currencyConfiguration = currencyConfiguration;\r\n\t\tthis._models = models;\r\n\t\tthis.getPlotsForHouseType = this.getPlotsForHouseType.bind(this);\r\n\t\tthis.getPlotByNumber= this.getPlotByNumber.bind(this);\r\n\t\tthis.getPlotsArray= this.getPlotsArray.bind(this);\r\n\t\tthis._houseTypesOrPlotFeaturesChanged = this._houseTypesOrPlotFeaturesChanged.bind(this);\r\n\t\tthis._updateAllFeatures = this._updateAllFeatures.bind(this);\r\n\t\tthis._whenFinishedModifyingHouseTypesOrPlotFeatures = new WhenFinishedModifying({\r\n\t\t\tdelay:0.1, callback:this._updateAllFeatures\r\n\t\t});\r\n\t\thouseTypes.getArray().forEach(houseType=>houseType.addEventListener('featureschanged', this._houseTypesOrPlotFeaturesChanged));\r\n\t\tthis.getPlotsArray().forEach(siteJsonUnitPlot=>siteJsonUnitPlot.addEventListener('plotfeatureschanged', this._houseTypesOrPlotFeaturesChanged));\r\n\t\texposeBinding(this, 'allFeatures', ()=>this.allFeatures, (value)=>this.allFeatures = value);\r\n\t}\r\n\tget allUnitsHaveMultiplePlots(){\r\n\t\tfor(var unit of this._units.getArray())\r\n\t\t\tif(unit.plots.length<2)return false;\r\n\t\treturn true;\r\n\t}\r\n\tget latLng(){\r\n\t\treturn this._latLng;\r\n\t}\r\n\tget configuration(){\r\n\t\treturn this._configuration;\r\n\t}\r\n\tget name(){\r\n\t\tthrowNotProvided('name');\r\n\t}\r\n\tget currencyConfiguration(){\r\n\t\treturn this._currencyConfiguration;\r\n\t}\r\n\tget outside360(){\r\n\t\treturn this._outside360;\r\n\t}\r\n\tget units(){\r\n\t\treturn this._units;\r\n\t}\r\n\tget filtersSettings(){\r\n\t\treturn this._filtersSettings;\r\n\t}\r\n\tget birdsEyeViews(){\r\n\t\treturn this._birdsEyeViews;\r\n\t}\r\n\tget houseTypes(){\r\n\t\treturn this._houseTypes;\r\n\t}\r\n\tget allFeatures(){\r\n\t\treturn this._allFeatures;\r\n\t}\r\n\tget models(){\r\n\t\treturn this._models;\r\n\t}\r\n\tgetPlotByNumber(plotNumber){\r\n\t\treturn this.units.getPlotByNumber(plotNumber);\r\n\t}\r\n\tgetPlotsArray(plotNumber){\r\n\t\treturn this.units.getPlotsArray();\r\n\t}\r\n\tgetPlotsForHouseType(houseType){\r\n\t\treturn this.getPlotsArray().filter(plot=>plot.houseType===houseType);\r\n\t}\r\n\tget minPlotPrice(){\r\n\t\tlet min = null;\r\n\t\tthis.getPlotsArray().forEach(siteJsonUnitPlot=>{\r\n\t\t\tif(siteJsonUnitPlot.price===0||siteJsonUnitPlot.price===null||siteJsonUnitPlot.price===undefined) return;\r\n\t\t\tif(min===null)\r\n\t\t\t\tmin = siteJsonUnitPlot.price;\r\n\t\t\telse \r\n\t\t\t\tif(min>siteJsonUnitPlot.price)\r\n\t\t\t\t\tmin = siteJsonUnitPlot.price;\r\n\t\t});\r\n\t\treturn min;\r\n\t}\r\n\tget maxPlotPrice(){\r\n\t\tlet max = null;\r\n\t\tthis.getPlotsArray().forEach(siteJsonUnitPlot=>{\r\n\t\t\tif(max===null)\r\n\t\t\t\tmax = siteJsonUnitPlot.price;\r\n\t\t\telse \r\n\t\t\t\tif(max{\r\n\t\t\tsiteJsonUnitPlot.features?.forEach(feature=>{\r\n\t\t\t\tmapFeatureIdToFeature.set(feature.id, feature);\r\n\t\t\t});\r\n\t\t});\r\n\t\tthis.houseTypes.getArray().forEach(houseType=>{\r\n\t\t\thouseType.features?.forEach(feature=>{\r\n\t\t\t\tmapFeatureIdToFeature.set(feature.id, feature);\r\n\t\t\t});\r\n\t\t});\r\n\t\tthis._allFeatures = Array.from(mapFeatureIdToFeature.values());\r\n\t\tthis.bindingsHandler.changed('allFeatures', this._allFeatures);\r\n\t}\r\n\tstatic fromJSON(jObjectSite, configuration){\r\n\t\tconst name = jObjectSite.name;\r\n\t\tlet siteJson = null;\r\n\t\tconst houseTypes = HouseTypes.fromJSON(jObjectSite.houseTypes,\r\n\t\t\t()=>siteJson, configuration);\r\n\t\tconst currencyConfiguration = CurrencyConfiguration.fromJSON(jObjectSite.configuration.currency);\r\n\t\tconst units = SiteJsonUnits.fromJSON(jObjectSite.units, houseTypes, currencyConfiguration);\r\n\t\tconst filtersSettings = FiltersSettings.fromJSON(jObjectSite.filtersSettings);\r\n\t\tconst outside360 = SiteJsonOutside360.fromJSON(jObjectSite.outside360,\r\n\t\t(plotNumber)=>units.getPlotByNumber(plotNumber), configuration);\r\n\t\tconst birdsEyeViews = SiteJsonBirdsEyeViews.fromJSON(jObjectSite.birdsEyeViews, configuration);\r\n\t\tconst models = jObjectSite.models?Models.fromJSON(jObjectSite.models):null;\r\n\t\tsiteJson = new SiteJson({\r\n\t\t\tname:name, birdsEyeViews:birdsEyeViews,units:units, houseTypes:houseTypes, filtersSettings:filtersSettings, outside360:outside360,\r\n\t\t\tcurrencyConfiguration:currencyConfiguration, models:models,\r\n\t\t\tconfiguration,\r\n\t\t\tlatLng:jObjectSite.latLng\r\n\t\t});\r\n\t\treturn siteJson;\r\n\t}\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport ParseError from '../errors/ParseError';\r\nconst { throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class Configurator{\r\n\tconstructor(props){\r\n\t\tconst {houseTypeSlug, tourUrl, configuratorUrl, videoUrl}=props;\r\n\t\tthis._houseTypeSlug = houseTypeSlug;\r\n\t\tthis._tourUrl = tourUrl;\r\n\t\tthis._videoUrl = videoUrl;\r\n\t\tthis._configuratorUrl = configuratorUrl;\r\n\t}\r\n\tget houseTypeSlug(){\r\n\t\treturn this._houseTypeSlug;\r\n\t}\r\n\tget tourUrl(){\r\n\t\treturn this._tourUrl;\r\n\t}\r\n\tget videoUrl(){\r\n\t\treturn this._videoUrl;\r\n\t}\r\n\tget configuratorUrl(){\r\n\t\treturn this._configuratorUrl;\r\n\t}\r\n\tstatic fromJSON(jObject){\r\n\t\treturn new Configurator(jObject);\r\n\t}\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nconst {throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class FeatureForPlot{\r\n\tconstructor(props){\r\n\t\tconst {getFeatureById, featureId}=props;\r\n\t\tthis._getFeatureById= getFeatureById;\r\n\t\tthis._featureId = featureId;\r\n\t\t\r\n\t}\r\n\tget feature(){\r\n\t\treturn this._getFeatureById(this._featureId);\r\n\t}\r\n\tget featureId(){\r\n\t\treturn this._featureId;\r\n\t}\r\n}\r\n","import ParameterErrors from '../errors/ParameterErrors';\r\nconst {throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class FeatureForHouseType{\r\n\tconstructor(props){\r\n\t\tconst {getFeatureById, featureId}=props;\r\n\t\tthis._getFeatureById= getFeatureById;\r\n\t\tthis._featureId = featureId;\r\n\t\t\r\n\t}\r\n\tget feature(){\r\n\t\treturn this._getFeatureById(this._featureId);\r\n\t}\r\n\tget featureId(){\r\n\t\treturn this._featureId;\r\n\t}\r\n}\r\n","import ParameterErrors from '../errors/ParameterErrors';\r\nconst {throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class Feature{\r\n\tconstructor(props){\r\n\t\tconst {id, name, description}=props;\r\n\t\tthis._id = id;\r\n\t\tthis._name = name;\r\n\t\tthis._description = description;\r\n\t}\r\n\tget id(){\r\n\t\treturn this._id;\r\n\t}\r\n\tget name(){\r\n\t\treturn this._name;\r\n\t}\r\n\tget description(){\r\n\t\treturn this._description;\r\n\t}\r\n}\r\n","import ParameterErrors from '../errors/ParameterErrors';\r\nimport ParseError from '../errors/ParseError';\r\nimport Configurator from './Configurator';\r\nimport FeatureForPlot from '../features/FeatureForPlot';\r\nimport FeatureForHouseType from '../features/FeatureForHouseType';\r\nimport Feature from '../features/Feature';\r\nconst { throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class LatestSiteInfo{\r\n\tconstructor(props){\r\n\t\tconst {configurators, latestPlotInfos, latestHouseTypeInfos}=props;\r\n\t\tif(!configurators)throwNotProvided('configurators');\r\n\t\tthis._configurators = configurators;\r\n\t\tif(!latestPlotInfos)throwNotProvided('latestPlotInfos');\r\n\t\tthis._latestPlotInfos = latestPlotInfos;\r\n\t\tif(!latestHouseTypeInfos)throwNotProvided('latestHouseTypeInfos');\r\n\t\tthis._latestHouseTypeInfos = latestHouseTypeInfos;\r\n\t}\r\n\tget configurators(){\r\n\t\treturn this._configurators;\r\n\t}\r\n\tget latestPlotInfos(){\r\n\t\treturn this._latestPlotInfos;\r\n\t}\r\n\tget latestHouseTypeInfos(){\r\n\t\treturn this._latestHouseTypeInfos;\r\n\t}\r\n\tstatic fromJSON(jObject){\r\n\t\tconst features = jObject.features?.map(jObjectFeature =>new Feature(jObjectFeature));\r\n\t\tconst getFeatureById = (id)=>features?.filter(feature=>feature.id===id)[0];\r\n\t\tconst latestPlotInfos = jObject.latestPlotInfos;\r\n\t\tlatestPlotInfos?.forEach(latestPlotInfo=>{\r\n\t\t\tif(!latestPlotInfo.featuresForPlot)return;\r\n\t\t\tlatestPlotInfo.featuresForPlot = latestPlotInfo.featuresForPlot.map(featureForPlot=>{\r\n\t\t\t\tfeatureForPlot.getFeatureById = getFeatureById;\r\n\t\t\t\treturn new FeatureForPlot(featureForPlot);\r\n\t\t\t});\r\n\t\t});\r\n\t\tconst latestHouseTypeInfos = jObject.latestHouseTypeInfos;\r\n\t\t\r\n\t\tlatestHouseTypeInfos?.forEach(latestHouseTypeInfo=>{\r\n\t\t\tif(!latestHouseTypeInfo.featuresForHouseType)return;\r\n\t\t\tlatestHouseTypeInfo.featuresForHouseType = latestHouseTypeInfo.featuresForHouseType.map(featureForHouseType=>{\r\n\t\t\t\tfeatureForHouseType.getFeatureById = getFeatureById;\r\n\t\t\t\treturn new FeatureForHouseType(featureForHouseType);\r\n\t\t\t});\r\n\t\t});\r\n\t\treturn new LatestSiteInfo({\r\n\t\t\tfeatures,\r\n\t\t\tconfigurators:jObject.configurators?.map(jObjectConfigurator=>Configurator.fromJSON(jObjectConfigurator)),\r\n\t\t\tlatestPlotInfos,\r\n\t\t\tlatestHouseTypeInfos\r\n\t\t});\r\n\t}\r\n}","import ParameterErrors from '../../../errors/ParameterErrors';\r\nconst { throwNotProvided } = ParameterErrors;\r\nconst OBJECT_IDS_JSON_KEY='o';\r\nexport default class Quadrant {\r\n\tconstructor({objectIds }){\r\n\t\tthis._objectIds = objectIds;\r\n\t\tthis.getObjectIds = this.getObjectIds.bind(this);\r\n\t}\r\n\tgetObjectIds(){\r\n\t\treturn this._objectIds;\r\n\t}\r\n\tstatic fromJSON(jObject){\r\n\t\tconst objectIds = jObject[OBJECT_IDS_JSON_KEY];\r\n\t\treturn new Quadrant({objectIds});\r\n\t}\r\n}","import Quadrant from './Quadrant';\r\nimport ParameterErrors from '../../../errors/ParameterErrors';\r\nconst { throwNotProvided } = ParameterErrors;\r\nconst QUADRANTS_FOR_YAW_PITCH_JSON_KEY='a';\r\nconst TWO_PI=Math.PI*2;\r\nexport default class QuadrantV3{\r\n\tconstructor({quadrantsForYawPitch, pitchFromRestInSingleQuadrantRadians, pitchToRestInSingleQuadrantRadians }){\r\n\t\tthis._quadrantsForYawPitch = quadrantsForYawPitch;\r\n\t\tthis._pitchFromRestInSingleQuadrantRadians=pitchFromRestInSingleQuadrantRadians;\r\n\t\tthis._pitchToRestInSingleQuadrantRadians=pitchToRestInSingleQuadrantRadians;\r\n\t}\r\n\tget quadrantLevels(){\r\n\t\treturn this._quadrantLevels;\r\n\t}\r\n\tgetObjectIds({yawRadians, pitchRadians}){\r\n\t\twhile(yawRadians<0)yawRadians+=TWO_PI;\r\n\t\tlet allObjectIds = [];\r\n\t\tconst yawIndex=Math.floor(yawRadians*this._quadrantsForYawPitch.length/TWO_PI);\r\n\t\tconsole.log('yawIndex '+yawIndex);\r\n\t\tconsole.log('this._quadrantsForYawPitch.length '+this._quadrantsForYawPitch.length);\r\n\t\tconsole.log('pitchRadians '+pitchRadians);\r\n\t\tif(yawIndex<0)\r\n\t\t\tyawIndex=0;\r\n\t\telse{\r\n\t\t\tif(yawIndex>=this._quadrantsForYawPitch.length)\r\n\t\t\t\tyawIndex=this._quadrantsForYawPitch.length-1;\r\n\t\t}\r\n\t\tconst quadrantsForPitch = this._quadrantsForYawPitch[yawIndex];\r\n\t\tconsole.log(quadrantsForPitch);\r\n\t\tlet pitchIndex;\r\n\t\tif(pitchRadians<=this._pitchFromRestInSingleQuadrantRadians)\r\n\t\t\tpitchIndex=0;\r\n\t\telse{\r\n\t\t\tif(pitchRadians>=this._pitchToRestInSingleQuadrantRadians)\r\n\t\t\t\tpitchIndex=quadrantsForPitch.length-1;\r\n\t\t\telse{\r\n\t\t\t\tpitchIndex=Math.floor((pitchRadians-this._pitchFromRestInSingleQuadrantRadians)*quadrantsForPitch.length/(this._pitchToRestInSingleQuadrantRadians-this._pitchFromRestInSingleQuadrantRadians));\r\n\t\t\t\tif(pitchIndex>=quadrantsForPitch.length)\r\n\t\t\t\t\tpitchIndex=quadrantsForPitch.length-1;\r\n\t\t\t}\r\n\t\t}\r\n\t\tconsole.log('pitchIndex '+pitchIndex);\r\n\t\tconst quadrant = quadrantsForPitch[pitchIndex];\r\n\t\tconsole.log(quadrant);\r\n\t\tconsole.log('objectIds '+quadrant.getObjectIds());\r\n\t\treturn quadrant.getObjectIds();\r\n\t}\r\n\tstatic fromJSON(jObject, pitchFromRestInSingleQuadrantRadians, pitchToRestInSingleQuadrantRadians){\r\n\t\tconst quadrantsForYawPitch = \r\n\t\t\tjObject[QUADRANTS_FOR_YAW_PITCH_JSON_KEY]\r\n\t\t\t.map(quadrantsForPitchJArray=>\r\n\t\t\t\tquadrantsForPitchJArray.map(\r\n\t\t\t\t\tquadrantJObject=>Quadrant.fromJSON(quadrantJObject)\r\n\t\t\t\t)\r\n\t\t\t);\r\n\t\treturn new QuadrantV3({quadrantsForYawPitch, pitchFromRestInSingleQuadrantRadians, pitchToRestInSingleQuadrantRadians});\r\n\t}\r\n}","import QuadrantV3 from './QuadrantV3';\r\nimport ParameterErrors from '../../../errors/ParameterErrors';\r\nconst { throwNotProvided } = ParameterErrors;\r\nconst XYZ_FROM_JSON_KEY='f',\r\n\tXYZ_QUADRANTS_JSON_KEY='q',\r\n\tSCENE_SIZE_JSON_KEY='s',\r\n PITCH_FROM_REST_IN_SINGLE_QUADRANT_RADIANS='pitchFromRestInSingleQuadrantRadians',\r\n PITCH_TO_REST_IN_SINGLE_QUADRANT_RADIANS='pitchToRestInSingleQuadrantRadians';\r\nexport default class QuadrantsV3{\r\n\tconstructor({xYZFrom, sceneSize, xYZQuadrants}){\r\n\t\tthis._xYZFrom = xYZFrom;\r\n\t\tthis._sceneSize = sceneSize;\r\n\t\tthis._xYZQuadrants = xYZQuadrants; \r\n\t\tthis._xLength = this._xYZQuadrants.length;\r\n\t\tthis._yLength = this._xYZQuadrants[0].length;\r\n\t\tthis._zLength = this._xYZQuadrants[0][0].length;\r\n\t}\r\n\tget xYZFrom(){\r\n\t\treturn this._xYZFrom;\r\n\t}\r\n\tget sceneSize(){\r\n\t\treturn this._sceneSize;\r\n\t}\r\n\tgetObjectIds({yawRadians, pitchRadians, x, y, z}){\r\n\t\tconsole.log('xYZFrom '+this._xYZFrom);\r\n\t\tconsole.log('sceneSize '+this._sceneSize);\r\n\t\tconsole.log('x '+x);\r\n\t\tconsole.log('y '+y);\r\n\t\tconsole.log('z '+z);\r\n\t\tconst proportionX = (x - this._xYZFrom[0])/this._sceneSize[0], \r\n\t\t\tproportionY = (y - this._xYZFrom[1])/this._sceneSize[1], \r\n\t\t\tproportionZ = (z - this._xYZFrom[2])/this._sceneSize[2];\r\n\t\tconsole.log('proportionX is '+proportionX+' proportionY '+proportionY+' proportionZ '+proportionZ);\r\n\t\tlet xIndex=Math.floor(this._xLength*proportionX);\r\n\t\tlet yIndex=Math.floor(this._yLength*proportionY);\r\n\t\tlet zIndex=Math.floor(this._zLength*proportionZ);\r\n\t\tif(xIndex<0)\r\n\t\t\txIndex=0;\r\n\t\telse {\r\n\t\t\tif(xIndex>=this._xLength)\r\n\t\t\t\txIndex=this._xLength-1;\r\n\t\t}\r\n\t\tif(yIndex<0)\r\n\t\t\tyIndex=0;\r\n\t\telse {\r\n\t\t\tif(yIndex>=this._yLength)\r\n\t\t\t\tyIndex=this._yLength-1;\r\n\t\t}\r\n\t\tif(zIndex<0)\r\n\t\t\tzIndex=0;\r\n\t\telse {\r\n\t\t\tif(zIndex>=this._zLength)\r\n\t\t\t\tzIndex=this._zLength-1;\r\n\t\t}\r\n\t\tconsole.log('xIndex is '+xIndex+' yIndex '+yIndex+' zIndex '+zIndex);\r\n\t\treturn this._xYZQuadrants[xIndex][yIndex][zIndex].getObjectIds({yawRadians, pitchRadians});\r\n\t}\r\n\tstatic fromJSON(jObject){\r\n\t\tconst xYZFrom = jObject[XYZ_FROM_JSON_KEY];\r\n\t\tconst sceneSize = jObject[SCENE_SIZE_JSON_KEY];\r\n\t\tconst pitchFromRestInSingleQuadrantRadians=jObject[PITCH_FROM_REST_IN_SINGLE_QUADRANT_RADIANS];\r\n\t\tconst pitchToRestInSingleQuadrantRadians=jObject[PITCH_TO_REST_IN_SINGLE_QUADRANT_RADIANS];\r\n\t\tconst xYZQuadrants = \r\n\t\t\tjObject[XYZ_QUADRANTS_JSON_KEY]\r\n\t\t\t.map(yZQuadrantJArray=>\r\n\t\t\t\tyZQuadrantJArray\r\n\t\t\t\t.map(zQuadrantJArray=>\r\n\t\t\t\t\tzQuadrantJArray.map(quadrantJObject=>\r\n\t\t\t\t\t\tQuadrantV3.fromJSON(quadrantJObject, pitchFromRestInSingleQuadrantRadians, pitchToRestInSingleQuadrantRadians)\r\n\t\t\t\t\t)\r\n\t\t\t\t)\r\n\t\t\t);\r\n\t\treturn new QuadrantsV3({xYZFrom, sceneSize,\r\n\t\t\txYZQuadrants});\r\n\t}\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport RemoteFileHelper from '../core/RemoteFileHelper';\r\nimport UrlHelper from '../core/UrlHelper';\r\nimport GroupedCallbacks from '../core/GroupedCallbacks';\r\nimport Configuration from '../configuration/Configuration';\r\nimport Configurations from '../configuration/Configurations';\r\nimport SiteJson from '../site/SiteJson';\r\nimport FiltersSettings from '../filters/FiltersSettings';\r\nimport LatestSiteInfo from '../site/LatestSiteInfo';\r\nimport Urls from '../urls/Urls';\r\nimport configurationJson from '../site_specific/current/configuration.json';\r\nimport configurationsJson from '../site_specific/configurations.json';\r\nimport QuadrantsV3 from '../modelling/quadrants/v3/QuadrantsV3';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class AssetsManager{\r\n\tstatic get configuration(){\r\n\t\tif(AssetsManager._configuration===undefined){\r\n\t\t\tAssetsManager._configuration = Configuration.fromJSON(configurationJson);\r\n\t\t}\r\n\t\treturn AssetsManager._configuration;\r\n\t}\r\n\tstatic get configurations(){\r\n\t\tif(AssetsManager._configurations===undefined){\r\n\t\t\tAssetsManager._configurations = Configurations.fromJSON(configurationsJson, this.configuration);\r\n\t\t}\r\n\t\treturn AssetsManager._configurations;\r\n\t}\r\n\tstatic getSiteAssets(configuration){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tconst siteSlug = configuration.siteSlug;\r\n\t\t\tconst siteAssets = AssetsManager._mapSiteSlugToSiteAssets.get(siteSlug);\r\n\t\t\tif(siteAssets)\r\n\t\t\t{\r\n\t\t\t\tresolve(siteAssets);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tlet groupedCallbackGetSiteAssets = AssetsManager._mapSiteSlugToGroupedCallbackGetSiteAssets.get(siteSlug);\r\n\t\t\tif(groupedCallbackGetSiteAssets){\r\n\t\t\t\tgroupedCallbackGetSiteAssets.then(resolve).catch(reject);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tgroupedCallbackGetSiteAssets = new GroupedCallbacks();\r\n\t\t\tAssetsManager._mapSiteSlugToGroupedCallbackGetSiteAssets.set(siteSlug, groupedCallbackGetSiteAssets);\r\n\t\t\tconst deleteGroupedCallbackFromMap = ()=> AssetsManager._mapSiteSlugToGroupedCallbackGetSiteAssets.delete(siteSlug);\r\n\t\t\tgroupedCallbackGetSiteAssets.then((siteAssets)=>{\r\n\t\t\t\tdeleteGroupedCallbackFromMap();\r\n\t\t\t\tAssetsManager._mapSiteSlugToSiteAssets.set(siteSlug, siteAssets);\r\n\t\t\t\tresolve(siteAssets);\r\n\t\t\t}).catch((err)=>{\r\n\t\t\t\tdeleteGroupedCallbackFromMap();\r\n\t\t\t\treject(err);\r\n\t\t\t});\r\n\t\t\tAssetsManager._getSiteAssets(configuration)\r\n\t\t\t\t.then((siteAssets)=>{\r\n\t\t\t\t\tconsole.log('siteAssets');\r\n\t\t\t\t\tconsole.log(siteAssets);\r\n\t\t\t\t\tgroupedCallbackGetSiteAssets.doThen(siteAssets);\r\n\t\t\t\t})\r\n\t\t\t\t.catch(groupedCallbackGetSiteAssets.doCatch);\r\n\t\t});\r\n\t}\t\r\n\t\r\n\tstatic _getSiteAssets(configuration){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tlet nJsonFilesGot = 0;\r\n\t\t\tlet siteJson = null, latestSiteInfo = null;\r\n\t\t\tlet done = false;\r\n\t\t\tconst gotAJsonFileOrError=(err)=>{\r\n\t\t\t\tif(err){\r\n\t\t\t\t\tdone = true;\r\n\t\t\t\t\treject(err);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tif(done)return;\r\n\t\t\t\tnJsonFilesGot++;\r\n\t\t\t\tif(nJsonFilesGot<2)return;\r\n\t\t\t\tdone = true;\r\n\t\t\t\tif(latestSiteInfo!==null)\r\n\t\t\t\t\tAssetsManager._updateSiteJsonFromLatestSiteInfo(siteJson, latestSiteInfo);\r\n\t\t\t\tresolve({siteJson:siteJson, configuration:configuration});\r\n\t\t\t};\r\n\t\t\tAssetsManager._getSiteJsonForSite(configuration)\r\n\t\t\t.then((siteJsonIn)=>{\r\n\t\t\t\tsiteJson = siteJsonIn;\r\n\t\t\t\tgotAJsonFileOrError();\r\n\t\t\t}).catch(gotAJsonFileOrError);\r\n\t\t\tAssetsManager.getLatestSiteInfo(configuration).then((latestSiteInfoIn)=>{\r\n\t\t\t\tlatestSiteInfo=latestSiteInfoIn;\r\n\t\t\t\tgotAJsonFileOrError();\r\n\t\t\t}).catch(gotAJsonFileOrError);\r\n\t\t});\r\n\t}\t\r\n\tstatic getQuadrants(url){\r\n\t\tconsole.log('getQuadrants');\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tRemoteFileHelper.loadJSON(url).then((jObject)=>{\r\n\t\t\t\tconst quadrants= \r\n\t\t\t\t\tQuadrantsV3.fromJSON(jObject)\r\n\t\t\t\tresolve(quadrants);\r\n\t\t\t}).catch(reject);\r\n\t\t});\r\n\t}\r\n\tstatic _updateSiteJsonFromLatestSiteInfo(siteJson, latestSiteInfo){\r\n\t\tconst configurators = latestSiteInfo.configurators;\r\n\t\tconfigurators.forEach(configurator=>{\r\n\t\t\tconst houseType = siteJson.houseTypes.getBySlug(configurator.houseTypeSlug);\r\n\t\t\tif(!houseType)return;\r\n\t\t\thouseType.configuratorUrl = configurator.configuratorUrl;\r\n\t\t\thouseType.tourUrl = configurator.tourUrl;\r\n\t\t\thouseType.videoUrl = configurator.videoUrl;\r\n\t\t});\r\n\t\tconst latestPlotInfos = latestSiteInfo.latestPlotInfos;\r\n\t\tconst mapPlotNumberToPlot = {};\r\n\t\tsiteJson.getPlotsArray().forEach(plot=>mapPlotNumberToPlot[plot.number]=plot);\r\n\t\tlatestPlotInfos.forEach(latestPlotInfo=>{\r\n\t\t\tconst plot = mapPlotNumberToPlot[latestPlotInfo.number];\r\n\t\t\tif(!plot)return;\r\n\t\t\tplot.price = latestPlotInfo.price;\r\n\t\t\tplot.status = latestPlotInfo.plotStatusId;\r\n\t\t\tconst newFeatures = latestPlotInfo.featuresForPlot;\r\n\t\t\tif(!newFeatures)return;\r\n\t\t\tplot.plotFeatures = newFeatures.map(featureForPlot=>featureForPlot.feature);\r\n\t\t});\r\n\t\tconst houseTypes = siteJson.houseTypes;\r\n\t\tconst latestHouseTypeInfos = latestSiteInfo.latestHouseTypeInfos;\r\n\t\tlatestHouseTypeInfos.forEach(latestHouseTypeInfo=>{\r\n\t\t\tconst houseType = houseTypes.getBySlug(latestHouseTypeInfo.slug);\r\n\t\t\tif(!houseType)return;\r\n\t\t\tconsole.log('latestHouseTypeInfo.featuresForHouseType');\r\n\t\t\tconsole.log(latestHouseTypeInfo.featuresForHouseType);\r\n\t\t\tconst newFeatures = latestHouseTypeInfo.featuresForHouseType;\r\n\t\t\tif(!newFeatures)return;\r\n\t\t\thouseType.features = newFeatures.filter(featureForHouseType=>featureForHouseType.feature?true:false).map(featureForHouseType=>featureForHouseType.feature);\r\n\t\t});\r\n\t}\r\n\tstatic getLatestSiteInfo(siteSlug){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tconst url = Urls.getLatestSiteInfo(siteSlug);\r\n\t\t\tRemoteFileHelper.loadJSON(url).then((jObject)=>{\r\n\t\t\t\tif(jObject.errorMessage||!jObject.latestSiteInfo)\r\n\t\t\t\t{\r\n\t\t\t\t\treject(new Error('Failed to get latestSiteInfo'));\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tconsole.log('latest site info');\r\n\t\t\t\tconsole.log(jObject);\r\n\t\t\t\tresolve(LatestSiteInfo.fromJSON(jObject.latestSiteInfo));\r\n\t\t\t}).catch(reject);\r\n\t\t});\r\n\t}\r\n\tstatic _getSiteJsonForSite(configuration){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tconst url = Urls.getSiteJson(configuration);\r\n\t\t\tRemoteFileHelper.loadJSON(url).then((jArrayPlots)=>{\r\n\t\t\t\tconst siteJson = SiteJson.fromJSON(jArrayPlots, configuration);\r\n\t\t\t\tresolve(siteJson);\r\n\t\t\t}).catch(reject);\r\n\t\t});\r\n\t}\r\n}\r\nAssetsManager._mapSiteSlugToSiteAssets = new Map();\r\nAssetsManager._mapSiteSlugToGroupedCallbackGetSiteAssets = new Map();","window.isMobile = false; //initiate as false\r\n// device detection\r\nif (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(navigator.userAgent)\r\n || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(navigator.userAgent.substr(0, 4)))\r\n window.isMobile = true;\r\nexport default window.isMobile;","const PlotMoreInformationType={OVERVIEW:'overview', GALLERY:'gallery', FLOOR_PLANS:'floorPlans'};\r\nexport default PlotMoreInformationType;\t\t","function getAbsolute(element)\r\n{\r\n var rect = element.getBoundingClientRect();\r\n var docEl = document.documentElement;\r\n var rectTop = rect.top + window.pageYOffset - docEl.clientTop;\r\n var rectLeft = rect.left + window.pageXOffset - docEl.clientLeft;\r\n var rectRight = rect.right + window.pageYOffset - docEl.clientTop;\r\n var rectBottom = rect.bottom + window.pageXOffset - docEl.clientLeft;\r\n return { top: rectTop, left: rectLeft, right:rectRight, bottom:rectBottom }; \r\n}\r\nexport default getAbsolute;","import ParameterErrors from '../errors/ParameterErrors';\r\nimport Validation from '../validation/Validation';\r\nconst { throwIsNotNumber } = ParameterErrors;\r\nexport default class Rect {\r\n constructor(props) {\r\n const { x, y, width, height } = props;\r\n if (!Validation.isNumber(x)) throwIsNotNumber(\"x\");\r\n if (!Validation.isNumber(y)) throwIsNotNumber(\"y\");\r\n if (!Validation.isNumber(width)) throwIsNotNumber(\"width\");\r\n if (!Validation.isNumber(height)) throwIsNotNumber(\"height\");\r\n this._x = x;\r\n this._y = y;\r\n\t\tthis._width = width;\r\n\t\tthis._height = height;\r\n\t\tthis.containsPoint = this.containsPoint.bind(this);\r\n }\r\n get x() {\r\n return this._x;\r\n }\r\n get y() {\r\n return this._y;\r\n }\r\n get width() {\r\n return this._width;\r\n }\r\n get height() {\r\n return this._height;\r\n }\r\n\tcontainsPoint(point){\r\n\t\tconst x = point[0];\r\n\t\tconst y = point[1];\r\n\t\treturn (x>=this._x)&&(x<=this._x+this._width) && (y>=this._y)&&(y<=this._y+this._height);\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport './UnitMarker.css';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport getAbsolute from '../ui_core/getAbsolute';\r\nimport Rect from '../geometry/Rect';\r\nimport PlotStatus from '../site/PlotStatus';\r\nimport PropertyBindingFactory from '../mvvm/PropertyBindingFactory';\r\nimport enableBindingToOthers from '../mvvm/enableBindingToOthers';\r\nconst{throwNotProvided} = ParameterErrors;\r\nexport default class UnitMarker extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props)\r\n\t\tconst {siteJson, unit, position, onHover, onClick}=props;\r\n\t\tif(!siteJson)throwNotProvided('siteJson');\r\n\t\tif(!unit)throwNotProvided('unit');\r\n\t\tthis._siteJson = siteJson;\r\n\t\tthis._unit = unit;\r\n\t\tthis._position = position;\r\n\t\tif(!onHover)throwNotProvided('onHover');\r\n\t\tif(!onClick)throwNotProvided('onClick');\r\n\t\tthis._callbackOnHover = onHover;\r\n\t\tthis._callbackOnClick = onClick;\r\n\t\tthis._handleMouseEnter = this._handleMouseEnter.bind(this);\r\n\t\tthis._handleMouseLeave = this._handleMouseLeave.bind(this);\r\n\t\tthis._handleClick = this._handleClick.bind(this);\r\n\t\tthis._handleActiveChanged=this._handleActiveChanged.bind(this);\r\n\t\tthis._handleSelectedChanged=this._handleSelectedChanged.bind(this);\r\n\t\tthis._dispatchCallbackOnHover=this._dispatchCallbackOnHover.bind(this);\r\n\t\tthis._getMarkerPosition=this._getMarkerPosition.bind(this);\r\n\t\tthis.getMouseInBounds = this.getMouseInBounds.bind(this);\r\n\t\tthis._releaseUnitActiveHandle= this._releaseUnitActiveHandle.bind(this);\r\n\t\tthis._element = React.createRef();\r\n\t\tthis.deactivate = this.deactivate.bind(this);\r\n\t\tunit.addEventListener('active', this._handleActiveChanged);\r\n\t\tconst propertyBindingSelected = PropertyBindingFactory.standard(this, unit, 'selected', this._handleSelectedChanged);\r\n\t\tthis.state ={filteredOut:false, position:position, hovering:false, active:false, favourite:propertyBindingSelected.get()};\r\n\t\t\r\n\t}\r\n\tset filteredOut(value){\r\n\t\tthis.setState({filteredOut: value});\r\n\t}\r\n\tget position(){\r\n\t\treturn this._position;\r\n\t}\r\n\tget unit(){\r\n\t\treturn this._unit;\r\n\t}\r\n\tgetMouseInBounds(point){\r\n\t\tconst element = this._element.current;\r\n\t\tif(element===null)return;\r\n\t\tconst absolutePosition = getAbsolute(element);\r\n\t\tconst containsPoint = new Rect({x:absolutePosition.left, y:absolutePosition.top, width:element.offsetWidth, height:element.offsetHeight})\r\n\t\t.containsPoint(point);\r\n\t\treturn containsPoint;\r\n\t}\r\n\t_handleActiveChanged(e){\r\n\t\tconst active = e.active;\r\n\t\tif(active!==this.state.active)\r\n\t\t\tthis.setState({active:active});\r\n\t\t\r\n\t}\r\n\t_handleMouseEnter(e){\r\n\t\tthis.setState({hovering:true});\r\n\t\tthis._releaseUnitActiveHandle();\r\n\t\tthis._currentUnitActiveHandle=this._unit.takeActiveHandle();\r\n\t\tthis._dispatchCallbackOnHover(true);\r\n\t}\r\n\t_handleMouseLeave(e){\r\n\t\tthis.setState({hovering:false});\r\n\t\tthis._releaseUnitActiveHandle();\r\n\t\tthis._dispatchCallbackOnHover(false);\r\n\t}\r\n\t_getMarkerPosition(){\r\n const element = this._element.current;\r\n\t\tconst absolutePosition = getAbsolute(element);\r\n\t\treturn [absolutePosition.left+(element.offsetWidth/2), absolutePosition.top+(element.offsetHeight/2)];\r\n\t}\r\n\t_dispatchCallbackOnHover(hovering){\r\n\t\tthis._callbackOnHover({hovering:hovering, markerPosition:this._getMarkerPosition(), marker:this});\r\n\t}\r\n\t_handleClick(){\r\n\t\tthis._callbackOnClick({markerPosition:this._getMarkerPosition(), marker:this});\r\n\t}\r\n\t_releaseUnitActiveHandle(){\r\n\t\tif(!this._currentUnitActiveHandle)return;\r\n\t\tthis._currentUnitActiveHandle.dispose();\r\n\t\tthis._currentUnitActiveHandle=null;\r\n\t}\r\n\t_handleSelectedChanged(value){\r\n\t\tthis.setState({favourite:value});\r\n\t}\r\n\tdeactivate(){\r\n\t\tthis._releaseUnitActiveHandle();\r\n\t}\r\n\trender() {\r\n\t\tlet className=\"unit-marker\";\r\n\t\tif(this.state.active)\r\n\t\t\tclassName+=\" active\";\r\n\t\tif(this.state.favourite)\r\n\t\t\tclassName+=\" favourite\";\r\n\t\tif(this.state.filteredOut)\r\n\t\t\tclassName+=\" filtered-out\";\r\n\t\tconst unit = this._unit;\r\n\t\tconst availablePlots = unit.plots.filter(plot=>plot.status===PlotStatus.AVAILABLE);\r\n\t\tconst comingSoonPlots = unit.plots.filter(plot=>plot.status===PlotStatus.COMING_SOON);\r\n\t\tconst reservedPlots = unit.plots.filter(plot=>plot.status===PlotStatus.RESERVED);\r\n\t\tconst plotStatus = availablePlots.length>0\r\n\t\t\t?PlotStatus.AVAILABLE\r\n\t\t\t:(\r\n\t\t\t\tcomingSoonPlots.length>0\r\n\t\t\t\t?PlotStatus.COMING_SOON\r\n\t\t\t\t:(\r\n\t\t\t\t\treservedPlots.length>0\r\n\t\t\t\t\t?PlotStatus.RESERVED\r\n\t\t\t\t\t:PlotStatus.SOLD_OR_UNAVAILABLE\r\n\t\t\t\t)\r\n\t\t\t);\r\n\t\t\t\r\n\t\tif(!unit.hasMoreThanOneUnit)\r\n\t\t\tclassName+=` ${PlotStatus.getCssName(plotStatus)}`;\r\n\t\treturn (
\r\n\t\t\t
\r\n\t\t
)\r\n\t}\r\n}\r\n","const Alignment ={left:'left', right:'right', top:'top', bottom:'bottom'};\r\nexport default Alignment;","import ParameterErrors from '../errors/ParameterErrors';\r\nimport ParameterError from '../errors/ParameterError';\r\nimport getAbsolute from '../ui_core/getAbsolute';\r\nimport Alignment from '../ui_core/Alignment';\r\nimport './Tooltip.css';\r\nconst{throwNotProvided}=ParameterErrors;\r\nexport default class Tooltip {\r\n\tstatic register({element, text, delay, atomicCallbackShow, noEnterLeaveEvents}){\r\n\t\tif(delay===undefined)\r\n\t\t\tdelay = 600;\r\n\t\tconst tooltip = Tooltip._getOrCreateTooltip();\r\n\t\tlet mouseDown = false;\r\n\t\tlet cancelShow = null;\r\n\t\tconst show = ()=>{\r\n\t\t\tcancelShow&&cancelShow();\r\n\t\t\tcancelShow = tooltip.show(element, text, delay, ()=>mouseDown);\r\n\t\t};\r\n\t\tconst hide = ()=>{\r\n\t\t\tcancelShow&&cancelShow();\r\n\t\t\ttooltip.hide();\r\n\t\t};\r\n\t\tif(!noEnterLeaveEvents){\r\n\t\t\telement.addEventListener('mouseenter', show);\r\n\t\t\telement.addEventListener('mouseleave', hide);\r\n\t\t}\r\n\t\tconst onMouseDown = ()=>{\r\n\t\t\tcancelShow&&cancelShow();\r\n\t\t\tmouseDown = true; \r\n\t\t\ttooltip.hide();\r\n\t\t};\r\n\t\tconst mouseUp = ()=>mouseDown = false;\r\n\t\telement.addEventListener('mousedown', onMouseDown);\r\n\t\telement.addEventListener('mouseup', mouseUp);\r\n\tconst disposeMouseDown= ()=>{\r\n\t\t\telement.removeEventListener('mousedown', onMouseDown);\r\n\t\t\telement.addEventListener('mouseup', mouseUp);\r\n\t\t};\r\n\t\tconst dispose = ()=>{\r\n\t\t\telement.removeEventListener('mouseenter', show);\r\n\t\t\telement.removeEventListener('mouseleave', hide);\r\n\t\t\tdisposeMouseDown&&disposeMouseDown();\r\n\t\t};\r\n\t\tif(atomicCallbackShow){\r\n\t\t\tatomicCallbackShow.show = show;\r\n\t\t}\r\n\t\treturn dispose;\r\n\t}\r\n\tstatic _getOrCreateTooltip(){\r\n\t\tif(Tooltip._tooltip)return Tooltip._tooltip;\r\n\t\tconst element = document.createElement('div');\r\n\t\telement.classList.add('tooltip');\r\n\t\tconst tooltipTextElement = document.createElement('div');\r\n\t\ttooltipTextElement.classList.add('tooltiptext');\r\n\t\telement.appendChild(tooltipTextElement);\r\n\t\tdocument.body.appendChild(element);\r\n\t\tconst setVisible = Tooltip._getSetVisible(element);\r\n\t\tconst setPosition = Tooltip._getSetPosition(element);\r\n\t\tconst triangleElement = document.createElement('div');\r\n\t\ttriangleElement.classList.add('triangle');\r\n\t\telement.appendChild(triangleElement);\r\n\t\tTooltip._tooltip = {\r\n\t\t\telement, \r\n\t\t\tshow:(elementShowingFor, text, delay, getMouseDown)=>{\r\n\t\t\t\tlet showing = true;\r\n\t\t\t\tsetTimeout(()=>{\r\n\t\t\t\t\tif(!showing||getMouseDown())return;\r\n\t\t\t\t\ttooltipTextElement.innerHTML = text;\r\n\t\t\t\t\tsetVisible(true);\r\n\t\t\t\t\tsetPosition(elementShowingFor);\r\n\t\t\t\t}, delay);\r\n\t\t\t\tconst cancelShow = ()=>showing = false;\r\n\t\t\t\treturn cancelShow;\r\n\t\t\t},\r\n\t\t\thide:()=>{\r\n\t\t\t\tsetVisible(false);\r\n\t\t\t},\r\n\t\t\t\r\n\t\t};\r\n\t\treturn Tooltip._tooltip;\r\n\t}\r\n\tstatic _getSetVisible(element){\r\n\t\treturn (visible)=>{\r\n\t\t\tif(visible){\r\n\t\t\t\telement.classList.add('visible');\r\n\t\t\t\tsetTimeout(()=>element.classList.add('faded-in'),0);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\telement.classList.remove('visible');\r\n\t\t\t\telement.classList.remove('faded-in');\r\n\t\t\t}\r\n\t\t};\r\n\t}\r\n\tstatic _getSetPosition(element){\r\n\t\tconst setAlignment = Tooltip._getSetAlignment(element);\r\n\t\treturn (elementShowingFor)=>{\r\n\t\t\telement.style.left='0px';\r\n\t\t\telement.style.top='0px';\r\n\t\t\tconst width = element.offsetWidth;\r\n\t\t\tconst absolutePositionElementShowingFor = getAbsolute(elementShowingFor);\r\n\t\t\tconst leftWhichWouldBeRequiredForLeftAlign = absolutePositionElementShowingFor.left- element.offsetWidth;\r\n\t\t\tlet left;\r\n\t\t\tlet alignment = Alignment.left;\r\n\t\t\tif(leftWhichWouldBeRequiredForLeftAlign<0){\r\n\t\t\t\talignment = Alignment.right;\r\n\t\t\t\tconst leftWhichWouldBeRequiredForRightAlign = absolutePositionElementShowingFor.left+ elementShowingFor.offsetWidth+element.offsetWidth;\r\n\t\t\t\tleft = leftWhichWouldBeRequiredForRightAlign;\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\tleft = leftWhichWouldBeRequiredForLeftAlign;\r\n\t\t\t}\r\n\t\t\tsetAlignment(alignment);\r\n\t\t\telement.style.left=String(left)+'px';\r\n\t\t\telement.style.top=String(absolutePositionElementShowingFor.top+ (elementShowingFor.offsetHeight/2) - (element.offsetHeight/2))+'px';\r\n\t\t};\r\n\t}\r\n\tstatic _getSetAlignment(element){\r\n\t\tlet currentAlignmentClass = null;\r\n\t\treturn (alignment)=>{\r\n\t\t\tconst alignmentClass = alignment===Alignment.left?'align-left':'align-right';\r\n\t\t\tif(currentAlignmentClass===alignmentClass)return;\r\n\t\t\telement.classList.remove(currentAlignmentClass);\r\n\t\t\telement.classList.add(alignmentClass);\r\n\t\t\tcurrentAlignmentClass=alignmentClass;\r\n\t\t}\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport './Filters.css';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport Tooltip from './Tooltip';\r\n\r\nexport default class IconButton extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props)\r\n\t\tconst {faIcon, imgUrl, text, onClick, className, disabled, tooltip} = props;\r\n\t\tthis._callbackClick = onClick;\r\n\t\tthis._elementRef = React.createRef();\r\n\t\tif(faIcon&&imgUrl)throw new Error('Both faIcon and imgUrl were provided');\r\n\t\tthis._text = text;\r\n\t\tthis._handleClick=this._handleClick.bind(this);\r\n\t\tthis.state = { className:className, disabled:disabled===true?true:false, innerIcon :faIcon?():()};\r\n\t\tthis._tooltip = tooltip;\r\n\t}\r\n\tcomponentDidMount(){\r\n\t\tif(this._tooltip)\r\n\t\t\tTooltip.register({element:this._elementRef.current, text:this._tooltip});\r\n\t}\r\n\tcomponentDidUpdate(previousProps){\r\n\t\tif(previousProps.className!==this.props.className||previousProps.disabled!==this.props.disabled)\r\n\t\t\tthis.setState({className:this.props.className, disabled:this.props.disabled});\r\n\t\tif(previousProps.faIcon!==this.props.faIcon||previousProps.imgUrl!==this.props.imgUrl)\r\n\t\t\tthis.setState({innerIcon :this.props.faIcon?():()});\r\n\t\tif(previousProps.onClick!==this.props.onClick)\r\n\t\t{\r\n\t\t\tthis._callbackClick=this.props.onClick;\r\n\t\t}\r\n\t}\r\n\t_handleClick(e){\r\n\t\tthis._callbackClick(e);\r\n\t}\r\n\trender() {\r\n\t\tlet className = \"icon-button\";\r\n\t\tif(this.state.className)\r\n\t\t\tclassName+=` ${this.state.className}`;\r\n\treturn ()\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport './DialogButton.css';\r\nexport default class DialogButton extends Component{\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\t\tconst {onClick, text, className}=props;\r\n\t\t\tthis._className = className;\r\n\t\t\tthis._text = text;\r\n\t\t\tthis._onClick = onClick;\r\n\t}\r\n\trender(){\r\n\t\tlet className = \"dialog-button\";\r\n\t\tif(this._className)className+=` ${this._className}`;\r\n\t\treturn (\r\n\t\t\t);\r\n\t}\r\n}","import React, { Component } from 'react';\r\nimport ReactDom from 'react-dom';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport './Dialog.css';\r\nimport IconButton from './IconButton';\r\nimport DialogButton from './DialogButton';\r\nimport Urls from '../urls/Urls';\r\nimport { faBackward, faTimes} from '@fortawesome/free-solid-svg-icons';\r\nconst { throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class Dialog extends Component{\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {preventInterraction, options, \r\n\t\t//disposeOnHide, \r\n\t\tmessage, title, className, onClickClose}=props;\r\n\t\tthis._preventInterraction=(preventInterraction===undefined||preventInterraction===null)?true:preventInterraction;\r\n\t\tif(!options)throwNotProvided('options');\r\n\t\tthis._options = options;\r\n\t\t//this._disposeOnHide = (disposeOnHide===undefined||disposeOnHide===null)?true:disposeOnHide;\r\n\t\tthis._message = message;\r\n\t\tthis._callbackClickClose = onClickClose;\r\n\t\tthis._disposed=false;\r\n\t\tconst buttons = options.map((option)=>{\r\n\t\t\treturn ();\r\n\t\t});\r\n\t\tthis.state ={className:className, message:message, title:title, buttons:buttons};\r\n\t\tthis._mapOptionHashToButton={};\r\n\t\tthis._buttons=[];\r\n\t\tthis.show = this.show.bind(this);\r\n\t\tthis.dispose = this.dispose.bind(this);\r\n\t\t//this.hide = this.hide.bind(this);\r\n\t\tthis._setVisible = this._setVisible.bind(this);\r\n\t\tthis._handleClickButtonClose = this._handleClickButtonClose.bind(this);\r\n\t\t/*if(preventInterraction){\r\n\t\t\r\n\t\t\tvar p={};\r\n\t\t\tp[S.ELEMENT]=element;\r\n\t\t\tnew PreventInterraction(p);\r\n\t\t\tvar preventInterractionElement = element;\r\n\t\t\telement = E.DIV();\r\n\t\t\tpreventInterractionElement.appendChild(element);\r\n\t\t}*/\r\n\t}\r\n\tshow(){\r\n\t\t\tthis._setVisible(true);\r\n\t\t\treturn this;\r\n\t}\r\n\t/*hide(){\r\n\t\tif(this._disposeOnHide){\r\n\t\t\tthis.dispose();\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.setState({visible:false});\r\n\t}*/\r\n\t_handleClickButtonClose(){\r\n\t\tthis._callbackClickClose&&this._callbackClickClose();\r\n\t\tthis.dispose();\r\n\t}\r\n\t_createOnClickForOption(callback){\r\n\t\treturn ()=>{\r\n\t\t\tcallback&&callback();\r\n\t\t\tthis.dispose();\r\n\t\t};\r\n\t}\r\n\tdispose(){\r\n\t\tif(this._disposed)return;\r\n\t\tthis._disposed=true;\r\n\t\tReactDom.unmountComponentAtNode(ReactDom.findDOMNode(this).parentNode);\r\n\t}\r\n\t_setVisible(value){\r\n\t\tthis.setState({visible:value});\r\n\t}\r\n\tstatic create(props){\r\n\t\tprops.ref = React.createRef();\r\n\t\tconst element = React.createElement(Dialog, props);\r\n\t\tReactDom.render(element , document.body.appendChild(document.createElement('div')));\r\n\t\treturn element.ref;\r\n\t}\r\n\trender(){\r\n\t\tlet className = \"dialog\";\r\n\t\tif(this.state.className)className+=` ${this.state.className}`;\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t
{this.state.title}
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{this.state.message}\r\n\t\t\t\t\t
\r\n\t\t\t\t\t
{this.state.buttons}
\r\n\t\t\t\t
\r\n\t\t\t
);\r\n\t}\r\n}","export default class EventNormalizer{\r\n\tstatic addFriendlyXYToTouch_LexicalClosure(callback2){\r\n\t\treturn (...args)=>{\r\n\t\t\tconst e = args[0];\r\n\t\t\tEventNormalizer.addFriendlyXYToTouch(e);\r\n\t\t\tcallback2.apply(null, args);\r\n\t\t};\r\n\t}\r\n\tstatic addFriendlyXYToMouse_LexicalClosure(callback){\r\n\t\treturn (...args)=>{\r\n\t\t\tconst e = args[0];\r\n\t\t\tEventNormalizer.addFriendlyXYToMouse(e);\r\n\t\t\tcallback.apply(null, args);\r\n\t\t};\r\n\t}\r\n\tstatic addFriendlyXYToTouch(e){\r\n\t\tconst touch = e.changedTouches[0];\r\n\t\tif(touch){\r\n\t\t\te.x = touch.clientX;\r\n\t\t\te.y = touch.clientY;\r\n\t\t}\r\n\t}\r\n\tstatic addFriendlyXYToMouse(e){\r\n\t\ttry{\r\n\t\tif(e.x===undefined)\r\n\t\t\te.x = e.clientX;\r\n\t\tif(e.y===undefined)\r\n\t\t\te.y = e.clientY;\r\n\t\t}catch{}\r\n\t}\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class Once{\r\n\tconstructor(callback){//multiple triggers synchronously results in one call to the callback.\r\n\t\tthis._callback = callback;\r\n\t\tif(callback===undefined||callback===null)\r\n\t\t\tthrowNotProvided('callback');\r\n\t\tthis._set=false;\r\n\t\tthis.trigger = this.trigger.bind(this);\r\n\t\tthis._unsetIt=this._unsetIt.bind(this);\r\n\t\tthis._setIt = this._setIt.bind(this);\r\n\t}\r\n\tget triggered(){\r\n\t\treturn this._set;\r\n\t}\r\n\ttrigger(a){\r\n\t\tif(!this._set){\r\n\t\t\tthis._setIt(arguments);\r\n\t\t}\r\n\t};\r\n\t_unsetIt(){\r\n\t\tthis._set=false;\r\n\t}\r\n\t_setIt(args){\r\n\t\tsetTimeout(this._unsetIt, 0);\r\n\t\tthis._set=true;\r\n\t\tthis._callback.apply(null, args);\r\n\t}\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport EventNormalizer from '../core/EventNormalizer';\r\nimport Once from '../core/Once';\r\nconst { throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class EfficientMoveCycle{\r\n\tconstructor(props){\r\n\t\tconst { element, stopPropagation, preventDefault, onStart, onMove, onEnd , friendlyXY} = props;\r\n\t\tif (!element) throwNotProvided(\"element\");\r\n\t\tthis._stopPropagation = (stopPropagation === undefined || stopPropagation === null)\r\n\t\t\t? false : stopPropagation;\r\n\t\tthis._preventDefault = (preventDefault === undefined || preventDefault === null)\r\n\t\t\t? false : preventDefault;\r\n\r\n\t\tif (!onStart) throwNotProvided(\"onStart\");\r\n\t\tif (typeof (onStart) !== \"function\") throwNotOfType(\"onStart\", \"function\");\r\n\t\tthis._onStartMouse = friendlyXY?EventNormalizer.addFriendlyXYToMouse_LexicalClosure(onStart):onStart;\r\n\t\tthis._onStartTouch = friendlyXY?EventNormalizer.addFriendlyXYToTouch_LexicalClosure(onStart):onStart;\r\n\t\t\r\n\t\tif (!onMove) throwNotProvided(\"onMove\");\r\n\t\tif (typeof (onMove) !== \"function\") throwNotOfType(\"onMove\", \"function\");\r\n\t\tthis._onMoveMouse = friendlyXY?EventNormalizer.addFriendlyXYToMouse_LexicalClosure(onMove):onMove;\r\n\t\tthis._onMoveTouch = friendlyXY?EventNormalizer.addFriendlyXYToTouch_LexicalClosure(onMove):onMove;\r\n\r\n\t\tif (!onEnd) throwNotProvided(\"onEnd\");\r\n\t\tif (typeof (onEnd) !== \"function\") throwNotOfType(\"onEnd\", \"function\");\r\n\t\tthis._onEndOnce = new Once(onEnd);\r\n\t\tthis._onEndMouse = friendlyXY?EventNormalizer.addFriendlyXYToMouse_LexicalClosure(this._onEndOnce.trigger):this._onEndOnce.trigger;\r\n\t\tthis._onEndTouch = friendlyXY?EventNormalizer.addFriendlyXYToTouch_LexicalClosure(this._onEndOnce.trigger):this._onEndOnce.trigger;\r\n\r\n\t\tthis._mouseDown = this._mouseDown.bind(this);\r\n\t\tthis._mouseMove = this._mouseMove.bind(this);\r\n\t\tthis._mouseUp = this._mouseUp.bind(this);\r\n\t\tthis._stopPropagationIfRequired = this._stopPropagationIfRequired.bind(this);\r\n\t\tthis._preventDefaultIfRequired = this._preventDefaultIfRequired.bind(this);\r\n\t\tthis._addMouseMoveEvent = this._addMouseMoveEvent.bind(this);\r\n\t\tthis._addMouseUpEvent = this._addMouseUpEvent.bind(this);\r\n\t\t\r\n\t\tthis._touchStart = this._touchStart.bind(this);\r\n\t\t//this._touchStartAnywhere = this._touchStartAnywhere.bind(this);\r\n\t\tthis._touchMove = this._touchMove.bind(this);\r\n\t\tthis._touchEnd = this._touchEnd.bind(this);\r\n\t\tthis._addTouchEnd = this._addTouchEnd.bind(this);\r\n\t\tthis._addTouchMove = this._addTouchMove.bind(this);\r\n\t\telement.addEventListener('mousedown', this._mouseDown, {passive: false});\r\n\t\telement.addEventListener('touchstart', this._touchStart, {passive: false});\r\n\t}\r\n\t_mouseDown(e) {\r\n\t\tif (!e) e = window.event;\r\n\t\tif(this._friendlyXY)this._addFriendlyMouseXY(e);\r\n\t\tif (this._onStartMouse(e, false) == false) return;\r\n\t\tEfficientMoveCycle._clearCurrentMouseMove();\r\n\t\tEfficientMoveCycle._clearCurrentMouseUp()\r\n\t\tthis._addMouseMoveEvent();\r\n\t\tthis._addMouseUpEvent();\r\n\t\tthis._stopPropagationIfRequired(e);\r\n\t\tthis._preventDefaultIfRequired(e);\r\n\t}\r\n\t_mouseMove(e) {\r\n\t\tif (!e) e = window.event;\r\n\t\tthis._onMoveMouse(e, false);\r\n\t\tthis._stopPropagationIfRequired(e);\r\n\t\tthis._preventDefaultIfRequired(e);\r\n\t}\r\n\t_mouseUp(e) {\r\n\t\tif (!e) e = window.event;\r\n\t\tthis._onEndMouse(e, false);\r\n\t\tEfficientMoveCycle._clearCurrentMouseUp();\r\n\t\tEfficientMoveCycle._clearCurrentMouseMove();\r\n\t\tthis._stopPropagationIfRequired(e);\r\n\t\tthis._preventDefaultIfRequired(e);\r\n\t}\r\n\t\r\n\t\r\n\t\r\n\t_touchStart(e) {\r\n\t\tif (!e)e = window.event;\r\n\t\tif (this._onStartTouch(e, true) == false) return;\r\n\t\tEfficientMoveCycle._clearCurrentTouchMove();\r\n\t\tEfficientMoveCycle._clearCurrentTouchEnd();\r\n\t\tthis._addTouchMove();\r\n\t\tthis._addTouchEnd();\r\n\t}\r\n\t/*_touchStartAnywhere(e){\r\n\t\tif (!e)e = window.event;\r\n\t\tself[S.ON_START_ANYWHERE](e, true);\r\n\t}*/\r\n\t_touchMove(e) {\r\n\t\tif (!e) e = window.event;\r\n\t\tthis._onMoveTouch(e, true);\r\n\t\tthis._stopPropagationIfRequired(e);\r\n\t\tthis._preventDefaultIfRequired(e);\r\n\t}\r\n\t_touchEnd(e) {\r\n\t\tif (!e)e = window.event;\r\n\t\tconst keep = this._onEndTouch(e, true);\r\n\t\tif(keep)return;\r\n\t\tEfficientMoveCycle._clearCurrentTouchEnd();\r\n\t\tEfficientMoveCycle._clearCurrentTouchMove();\r\n\t}\r\n\t_addTouchMove(){\r\n\t\tdocument.documentElement.addEventListener('touchmove', this._touchMove, {passive: false});\r\n\t\tEfficientMoveCycle._currentTouchMove = this._touchMove;\r\n\t}\r\n\t_addTouchEnd(){\r\n\t\tdocument.documentElement.addEventListener('touchend', this._touchEnd, {passive: false});\r\n\t\tEfficientMoveCycle._currentTouchEnd = this._touchEnd;\r\n\t}\r\n\t\r\n\t_stopPropagationIfRequired(e) {\r\n\t\tif (this._stopPropagation) {\r\n\t\t\te.stopPropagation && e.stopPropagation();\r\n\t\t}\r\n\t}\r\n\t_preventDefaultIfRequired(e) {\r\n\t\tif (this._preventDefault) {\r\n\t\t\te.preventDefault && e.preventDefault();\r\n\t\t}\r\n\t}\r\n\t_addMouseMoveEvent() {\r\n\t\tdocument.documentElement.addEventListener('mousemove', this._mouseMove, {passive: false});\r\n\t\tEfficientMoveCycle._currentMouseMove = this._mouseMove;\r\n\t}\r\n\t_addMouseUpEvent() {\r\n\t\tdocument.documentElement.addEventListener('mouseup', this._mouseUp, {passive: false});\r\n\t\tEfficientMoveCycle._currentMouseUp = this._mouseUp;\r\n\t}\t\r\n\tstatic _clearCurrentMouseUp() {\r\n\t\tif (!EfficientMoveCycle._currentMouseUp) return;\r\n\t\tdocument.documentElement.removeEventListener('mouseup', EfficientMoveCycle._currentMouseUp);\r\n\t\tEfficientMoveCycle._currentMouseUp = undefined;\r\n\t}\r\n\tstatic _clearCurrentMouseMove() {\r\n\t\tif (!EfficientMoveCycle._currentMouseMove) return;\r\n\t\tdocument.documentElement.removeEventListener('mousemove', EfficientMoveCycle._currentMouseMove);\r\n\t\tEfficientMoveCycle._currentMouseMove = undefined;\r\n\t}\r\n\t\r\n\t\r\n\tstatic _clearCurrentTouchEnd(){\r\n\t\tif(!EfficientMoveCycle._currentTouchEnd)return;\r\n\t\tdocument.documentElement.removeEventListener('touchend', EfficientMoveCycle._currentTouchEnd);\r\n\t\tEfficientMoveCycle._currentTouchEnd=undefined;\r\n\t}\r\n\tstatic _clearCurrentTouchMove(){\r\n\t\tif(!EfficientMoveCycle._currentTouchMove)return;\r\n\t\tdocument.documentElement.removeEventListener('touchmove', EfficientMoveCycle._currentTouchMove);\r\n\t\tEfficientMoveCycle._currentTouchMove=undefined;\r\n\t}\t\r\n}\r\n","import ParameterErrors from '../errors/ParameterErrors';\r\nconst { throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class TwoFingerTouch{\r\n\tconstructor(props){\r\n\t\tconst {element, onStart, onStartFinger1, onStartFinger2, onMoveFinger1, onMoveFinger2, onEndFinger1, onEndFinger2, onEnd}=props;\r\n\t\tthis._finger1Active = false;\r\n\t\tthis._finger2Active=false;\r\n\t\tthis._touch1 = null;\r\n\t\tthis._touch2 = null;\r\n\t\tthis._onStart=onStart;\r\n\t\tthis._onMoveFinger2 = onMoveFinger2;\r\n\t\tthis._onMoveFinger1 = onMoveFinger1;\r\n\t\tthis._onStartFinger1 = onStartFinger1;\r\n\t\tthis._onStartFinger2 = onStartFinger2;\r\n\t\tthis._onEndFinger1 = onEndFinger1;\r\n\t\tthis._onEndFinger2 = onEndFinger2;\r\n\t\tthis._onEnd = onEnd;\r\n\t\tthis._finger1Id = null;\r\n\t\tthis._finger2Id = null;\r\n\t\t\r\n\t\tthis._start= this._start.bind(this);\r\n\t\tthis._startAnywhere= this._startAnywhere.bind(this);\r\n\t\tthis._startFinger2= this._startFinger2.bind(this);\r\n\t\tthis._move= this._move.bind(this);\r\n\t\tthis._end= this._end.bind(this);\r\n\t\t//onStartFinger1-2\r\n\t\t//onMoveFinger1-2\r\n\t\t//onEndFinger1-2\r\n\t\t//onStart when both fingers are down\r\n\t\t//onEnd when both fingers are up.\r\n\t\telement.addEventListener('touchstart', this._start);\r\n\t}\r\n\t_start(e){\r\n\t\t\tvar changedTouches = e.changedTouches;\r\n\t\t\tfor(var i=0; i{\r\n\t\t\tthis._pausing=false;\r\n\t\t\tif(this._triggered){\r\n\t\t\t\tthis._triggered=false;\r\n\t\t\t\tthis._callback();\r\n\t\t\t}\r\n\t\t}, this._delay);\r\n\t}\r\n}","import eventEnable from '../core/eventEnable';\r\nclass FullScreen{\r\n\tstatic toggle(element){\r\n\t\tif(document.fullscreenElement)\r\n\t\t\tFullScreen.exit();\r\n\t\telse\r\n\t\t\tFullScreen.enable(element);\r\n\t}\r\n\tstatic get isSupported(){\r\n\t\treturn document.fullscreenEnabled;\r\n\t}\r\n\tstatic get isEnabled(){\r\n\t\treturn document.fullscreenElement?true:false;\r\n\t}\r\n\tstatic enable(element){\r\n\t\tif(FullScreen.isEnabled){\r\n\t\t\tif(FullScreen._element===element)return;\r\n\t\t\tFullScreen.exit();\r\n\t\t}\r\n\t\tif (element.requestFullscreen) {\r\n\t\t\telement.requestFullscreen();\r\n\t\t} else if (element.webkitRequestFullscreen) { /* Safari */\r\n\t\t\telement.webkitRequestFullscreen();\r\n\t\t} else if (element.msRequestFullscreen) { /* IE11 */\r\n\t\t\telement.msRequestFullscreen();\r\n\t\t}\r\n\t\tFullScreen._dispatchChange();\r\n\t}\r\n\tstatic exit(){\r\n\t\tif(!FullScreen.isEnabled)return;\r\n\t\tdocument.exitFullscreen();\r\n\t\tFullScreen._dispatchChange();\r\n\t}\r\n\tstatic _dispatchChange(){\r\n\t\t\r\n\t}\r\n}\r\neventEnable(FullScreen);\r\nexport default FullScreen;","import React, { Component } from 'react';\r\nimport './Spinner.css';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nconst {throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class Spinner extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props)\r\n\t\tconst{spinnerHandles, invertHandles}=props;\r\n\t\tif(invertHandles===undefined||invertHandles===null)\r\n\t\t\tthis._invertHandles = false;\r\n\t\telse \r\n\t\t\tthis._invertHandles = invertHandles;\r\n\t\t\r\n\t\tthis._spinnerHandles = spinnerHandles;\r\n\t\tthis._spinnerHandlesChanged = this._spinnerHandlesChanged.bind(this);\r\n\t\tspinnerHandles.addEventListener('change', this._spinnerHandlesChanged);\r\n\t\tthis.state={visible:false};\r\n\t}\r\n\t_spinnerHandlesChanged(e){\r\n\t\tconst visible = this._invertHandles?(!e.hasHandles):e.hasHandles;\r\n\t\tthis.setState({visible:visible});\r\n\t}\r\n\trender() {\r\n\t\tlet className =\"spinner\";\r\n\t\tif(this.state.visible)\r\n\t\t\tclassName+=\" visible\";\r\n\t\treturn (
\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
);\r\n\t}\r\n}\r\n","\r\nexport default function getStyle(element, name)\r\n{ \r\n\treturn element.currentStyle ? element.currentStyle[name] : window.getComputedStyle ? window.getComputedStyle(element, null).getPropertyValue(name) : null;\r\n}","import getStyle from './getStyle';\r\nexport default function isDisplaying(element){\r\n\tlet currentElement = element;\r\n\twhile(currentElement){\r\n\t\tif(getStyle(currentElement, 'display')==='none')return false;\r\n\t\tcurrentElement = currentElement.parentElement;\r\n\t}\r\n\treturn true;\r\n}","import React, { Component } from 'react';\r\nimport './ZoomableDragable.css';\r\nimport EfficientMoveCycle from '../ui_core/EfficientMoveCycle';\r\nimport TwoFingerTouch from '../ui_core/TwoFingerTouch';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport FrequencyLimitedCallback from '../core/FrequencyLimitedCallback';\r\nimport GroupedCallbacks from '../core/GroupedCallbacks';\r\nimport Once from '../core/Once';\r\nimport Handles from '../core/Handles';\r\nimport FullScreen from '../ui_core/FullScreen';\r\nimport Spinner from './Spinner';\r\nimport isDisplaying from '../ui_core/isDisplaying';\r\nconst{throwNotProvided}=ParameterErrors;\r\nexport default class ParentElement extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props)\r\n\t\tconst {getContainerAspectRatio, updateExternalZoomSource, zoomMax, zoomMin, parentElementRef}= props;\r\n\t\tif(updateExternalZoomSource===undefined)throwNotProvided('updateExternalZoomSource');\r\n\t\tif(zoomMax===undefined||zoomMax===null)throwNotProvided('zoomMax');\r\n\t\tif(zoomMin===undefined||zoomMin===null)throwNotProvided('zoomMin');\r\n\t\tif(parentElementRef===undefined||parentElementRef===null)throwNotProvided('parentElementRef');\r\n\t\tthis._zoomMin = zoomMin;\r\n\t\tthis._zoomMax = zoomMax;\r\n\t\tthis._updateExternalZoomSource=updateExternalZoomSource;\r\n\t\tthis._getContainerAspectRatio = getContainerAspectRatio;\r\n\t\tthis.state ={site:null};\r\n\t\tthis._parentElementRef = parentElementRef;\r\n\t\tthis._imageWrapper = React.createRef();\r\n\t\tthis._inner = React.createRef();\r\n\t\tthis._img = React.createRef();\r\n\t\tthis._handleDragStart= this._handleDragStart.bind(this);\r\n\t\tthis._handleDragMove = this._handleDragMove.bind(this);\r\n\t\tthis._handleDragEnd = this._handleDragEnd.bind(this);\r\n\t\tthis._handleImageLoaded = this._handleImageLoaded.bind(this);\r\n\t\tthis._handleImageError = this._handleImageError.bind(this);\r\n\t\tthis._handleWindowResize = this._handleWindowResize.bind(this);\r\n\t\tthis._constrainAndSetPositionOfImageWrapper = this._constrainAndSetPositionOfImageWrapper.bind(this);\r\n\t\tthis._calculateMaxMinPosition= this._calculateMaxMinPosition.bind(this);\r\n\t\tthis._calculateZoomMultiplier= this._calculateZoomMultiplier.bind(this);\r\n\t\tthis.setZoom = this.setZoom.bind(this);\r\n\t\tthis._setZoomOnce = this._setZoomOnce.bind(this);\r\n\t\tthis._onTwoFingerStart= this._onTwoFingerStart.bind(this);\r\n\t\tthis._onMoveFinger1= this._onMoveFinger1.bind(this);\r\n\t\tthis._onMoveFinger2= this._onMoveFinger2.bind(this);\r\n\t\tthis._clearImage= this._clearImage.bind(this);\r\n\t\tthis.resizeIfNecessary = this.resizeIfNecessary.bind(this);\r\n\t\tthis._resize = this._resize.bind(this);\r\n\t\tthis._updateZoomFromTwoFingerTouch = this._updateZoomFromTwoFingerTouch.bind(this);\r\n\t\tthis._onTwoFingerEnd = this._onTwoFingerEnd.bind(this);\r\n\t\tthis._handleMouseWheelZoom = this._handleMouseWheelZoom.bind(this);\r\n\t\tthis._constrainAndSetZoom= this._constrainAndSetZoom.bind(this);\r\n\t\tthis._getImgAspectRatio = this._getImgAspectRatio.bind(this);\r\n\t\tthis._load = this._load.bind(this);\r\n\t\tthis.load = this.load.bind(this);\r\n\t\tthis._groupedCallbacksSetZoom= new GroupedCallbacks();\r\n\t\tthis.state={imageWrapperPosition:[0, 0], zoom:1, showImage:false};\r\n\t\tthis._zoom = 1;\r\n\t\tthis._unmultipliedZoom = 1;\r\n\t\tthis._onceSetZoom = new Once(this._setZoomOnce);\r\n\t\tthis._initialUnmultipliedZoomOnStartOfTwoFingerTouch=null;\r\n\t\tthis._zoomMultiplier = 1;\r\n\t\tthis._doingTwoFingerTouch=null;\r\n\t\tthis._groupedCallbacksImageLoaded = new GroupedCallbacks();\r\n\t\tthis._startDistanceTwoFingerTouch=null;\r\n\t\tthis._frequencyLimitedCallbackZoom = new FrequencyLimitedCallback({frequencyHz:10});\r\n\t\tthis._spinnerHandles = new Handles();\r\n\t\tthis._imgUrl = null;\r\n\t\tthis._groupedCallbacksImageLoaded.then(()=>{\r\n\t\t\tthis._calculateZoomMultiplier();\r\n\t\t\t//this.setZoom(1);\r\n\t\t});\r\n\t\t\r\n\t}\r\n\tsetZoom(value){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tthis._groupedCallbacksSetZoom.then(resolve).catch(reject); \r\n\t\t\tthis._onceSetZoom.trigger(value);\r\n\t\t});\r\n\t}\t\r\n\t_calculateZoomMultiplier(){\r\n\t\tif(!this._doneCalculateZoomMultiplier){\r\n\t\t\tthis._doneCalculateZoomMultiplier= true;\r\n\t\t\tconst imgAspectRatio = this._getImgAspectRatio();\r\n\t\t\tconst containerAspectRatio = this._getContainerAspectRatio();\r\n\t\t\tif(imgAspectRatio>containerAspectRatio)\r\n\t\t\t\tthis._zoomMultiplier=1;\r\n\t\t\telse \r\n\t\t\t\tthis._zoomMultiplier=imgAspectRatio /containerAspectRatio;\r\n\t\t}\r\n\t}\r\n\t_getImgAspectRatio(){\r\n\t\tconst img = this._img.current;\r\n\t\tconst imgAspectRatio = img.naturalWidth/img.naturalHeight;\r\n\t\treturn imgAspectRatio;\r\n\t}\r\n\t_setZoomOnce(value){\r\n\t\ttry{\r\n\t\tthis._updateExternalZoomSource&&this._updateExternalZoomSource (value);\r\n\t\tthis._unmultipliedZoom=value;\r\n\t\tconst currentZoom = this._zoom;\r\n\t\tthis._zoom = this._zoomMultiplier*value;\r\n\t\tconst parentElement = this._parentElementRef.current;\r\n\t\tconst imageWrapper = this._imageWrapper.current;\r\n\t\tconst multiplier = this._zoom/currentZoom;\r\n\t\tthis._calculateMaxMinPosition(imageWrapper.offsetWidth*multiplier, imageWrapper.offsetHeight*multiplier);\r\n\t\tconst proportionImageToLeft = (-imageWrapper.offsetLeft+(parentElement.offsetWidth/2))/imageWrapper.offsetWidth;\r\n\t\tconst newImageWrapperWidth = imageWrapper.offsetWidth*multiplier;\r\n\t\tconst newLeft = (parentElement.offsetWidth/2)-(proportionImageToLeft*newImageWrapperWidth)\r\n\t\t\r\n\t\t\r\n\t\tconst proportionImageToTop = (-imageWrapper.offsetTop+(parentElement.offsetHeight/2))/imageWrapper.offsetHeight;\r\n\t\tconst newImageWrapperHeight = imageWrapper.offsetHeight*multiplier;\r\n\t\tconst newTop = (parentElement.offsetHeight/2)-(proportionImageToTop*newImageWrapperHeight)\r\n\t\tthis._constrainAndSetPositionOfImageWrapper(newLeft, newTop, this._zoom);\r\n\t\t\tthis._groupedCallbacksSetZoom.doThen();\r\n\t\t}\r\n\t\tcatch(err){\r\n\t\t\tconsole.error(err);\r\n\t\t\tthis._groupedCallbacksSetZoom.catch(err);\r\n\t\t}\r\n\t}\r\n\tget imgUrl(){\r\n\t\treturn this._imgUrl;\r\n\t}\r\n\t_fitToHeight(){\r\n\t\tconst imgAspectRatio = this._getImgAspectRatio();\r\n\t\tconst containerAspectRatio = this._getContainerAspectRatio();\r\n\t\tthis.setZoom(imgAspectRatio/containerAspectRatio);\r\n\t}\r\n\tload(imgUrl, fitToHeight){\r\n\t\tthis._imgUrl = imgUrl;\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tconst spinnerHandle = this._spinnerHandles.take();\r\n\t\t\tconst doReject = (err)=>{ \r\n\t\t\t\tspinnerHandle.dispose(); \r\n\t\t\t\treject(err);\r\n\t\t\t};\r\n\t\t\tthis._clearImage().then(()=>{\r\n\t\t\t\tthis.setState({imageWrapperPosition:[0, 0]});\r\n\t\t\t\tthis._load(imgUrl, fitToHeight).then((res)=>{\r\n\t\t\t\t\tspinnerHandle.dispose(); \r\n\t\t\t\t\tresolve(res);\r\n\t\t\t\t}).catch(doReject);\r\n\t\t\t}).catch(doReject);\r\n\t\t});\r\n\t}\r\n\t_load(imgUrl, fitToHeight){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tconst imgAlreadyHasUrl=this.state.imgUrl===imgUrl;\r\n\t\t\tthis._zoom = 1;\r\n\t\t\tthis._unmultipliedZoom = 1;\r\n\t\t\tthis._zoomMultiplier = 1;\r\n\t\t\tthis._doneCalculateZoomMultiplier=false;\r\n\t\t\tthis.setState({imgUrl:imgUrl, zoom:1});\r\n\t\t\tconst afterImgLoadIfNecessary =()=>{\r\n\t\t\t\tthis._calculateZoomMultiplier();\r\n\t\t\t\tthis.setState({showImage:true});\r\n\t\t\t\tif(fitToHeight){\r\n\t\t\t\t\tthis._fitToHeight();\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.setZoom(1);\r\n\t\t\t\t}\r\n\t\t\t\tresolve();\r\n\t\t\t};\r\n\t\t\tif(imgAlreadyHasUrl){\r\n\t\t\t\tafterImgLoadIfNecessary();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tthis._groupedCallbacksImageLoaded.then(()=>{\r\n\t\t\t\tafterImgLoadIfNecessary();\r\n\t\t\t}).catch(reject);\r\n\t\t});\r\n\t}\r\n\t_clearImage(){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tthis.setState({imgUrl:'', showImage:false});\r\n\t\t\tsetTimeout(resolve, 0);\r\n\t\t});\r\n\t}\r\n\t_handleDragStart(e, isTouchElseMouse){\r\n\t\tconst parentElement = this._parentElementRef.current;\r\n\t\tconst imageWrapper = this._imageWrapper.current;\r\n\t\tconst startPosition = [imageWrapper.offsetLeft, imageWrapper.offsetTop];\r\n\t\tthis._calculateMaxMinPosition(imageWrapper.offsetWidth, imageWrapper.offsetHeight);\r\n\t\tconst screenZParent = isTouchElseMouse?e.touches[0]:e;\r\n\t\tthis._startOffset = [startPosition[0]-screenZParent.screenX, startPosition[1]-screenZParent.screenY];\r\n\t}\r\n\t_calculateMaxMinPosition(widthImageWrapper, heightImageWrapper){\r\n\t\tconst parentElement = this._parentElementRef.current;\r\n\t\tconst heightParentElement = parentElement.offsetHeight;\r\n\t\tconst widthParentElement = parentElement.offsetWidth;\r\n\t\tlet minY = heightParentElement-heightImageWrapper;\r\n\t\tif(minY>0)\r\n\t\t\tminY=minY/2;\r\n\t\tconst maxY = minY>0?minY:0;\r\n\t\tlet minX = widthParentElement-widthImageWrapper;\r\n\t\tif(minX>0)\r\n\t\t\tminX=minX/2;\r\n\t\tconst maxX=minX>0?minX:0;\r\n\t\tthis._maxPosition=[maxX, maxY];\r\n\t\tthis._minPosition =[minX, minY];\r\n\t}\r\n\t_handleDragMove(e, isTouchElseMouse){\r\n\t\tif(this._doingTwoFingerTouch )return;\r\n\t\tconst screenZParent = isTouchElseMouse?e.touches[0]:e;\r\n\t\tlet newLeft = screenZParent.screenX +this._startOffset[0];\r\n\t\tlet newTop = screenZParent.screenY + this._startOffset[1];\r\n\t\tthis._constrainAndSetPositionOfImageWrapper(newLeft, newTop, this._zoom);\r\n\t}\r\n\t_handleDragEnd(e){\r\n\r\n\t}\r\n\t_handleWindowResize(e){\r\n\t\tif((!this._inner.current)||(!isDisplaying(this._inner.current))){\r\n\t\t\tthis._resizeDue = true;\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis._resize();\r\n\t}\r\n\tresizeIfNecessary(){\r\n\t\tif((!this._inner.current)||(!isDisplaying(this._inner.current)))return;\r\n\t\tif(this._resizeDue)\r\n\t\t{\r\n\t\t\tthis._resizeDue=false;\r\n\t\t\tthis._resize();\r\n\t\t}\r\n\t}\r\n\t_resize(){\r\n\t\tthis._load(this.state.imgUrl).catch(console.error);\r\n\t}\r\n\tcomponentDidMount() {\r\n\t\tthis._efficientMoveCycle = new EfficientMoveCycle({\r\n\t\t\telement: this._imageWrapper.current,\r\n\t\t\tpreventDefault:true,\r\n onStart: this._handleDragStart,\r\n onMove: this._handleDragMove,\r\n onEnd:this._handleDragEnd\r\n\t\t});\r\n\t\tthis._twoFingerTouch = new TwoFingerTouch({\r\n\t\t\telement: this._imageWrapper.current,\r\n onMoveFinger1: this._onMoveFinger1,\r\n onMoveFinger2: this._onMoveFinger2,\r\n\t\t\tonStart:this._onTwoFingerStart,\r\n\t\t\tonEnd:this._onTwoFingerEnd\r\n\t\t});\r\n\t\tthis._imageWrapper.current.addEventListener('wheel', this._handleMouseWheelZoom);\r\n\t\twindow.addEventListener('resize', this._handleWindowResize);\r\n\t\tFullScreen.addEventListener('change', this._handleWindowResize);\r\n\t}\r\n\t_handleMouseWheelZoom(e){\r\n\t\te.preventDefault();\r\n\t\tconst deltaY = e.deltaY;\r\n\t\tconst newZoom = this._unmultipliedZoom-(deltaY*0.0016);\r\n\t\tthis._constrainAndSetZoom(newZoom);\r\n\t\treturn false;\r\n\t}\r\n\t_onTwoFingerStart(e){\r\n\t\tthis._finger1Point = [e.touch1.clientX, e.touch1.clientY];\r\n\t\tthis._finger2Point = [e.touch2.clientX, e.touch2.clientY];\r\n\t\tthis._startDistanceTwoFingerTouch = this._calculateDistanceBetweenPoints(this._finger1Point, this._finger2Point );\r\n\t\tthis._initialUnmultipliedZoomOnStartOfTwoFingerTouch = this._unmultipliedZoom;\r\n\t\tthis._doingTwoFingerTouch=true;\r\n\t}\r\n\t_onMoveFinger1(touch, e){\r\n\t\tif(!this._doingTwoFingerTouch )return;\r\n\t\tthis._finger1Point = [touch.clientX, touch.clientY];\r\n\t\tthis._updateZoomFromTwoFingerTouch();\r\n\t}\r\n\t_onMoveFinger2(touch, e){\r\n\t\tif(!this._doingTwoFingerTouch )return;\r\n\t\tthis._finger2Point = [touch.clientX, touch.clientY];\r\n\t\tthis._updateZoomFromTwoFingerTouch();\r\n\t}\r\n\t_onTwoFingerEnd(){\r\n\t\tif(this._doingTwoFingerTouch)\r\n\t\t\tthis._updateZoomFromTwoFingerTouch();\r\n\t\tthis._doingTwoFingerTouch=false;\r\n\t}\r\n\t_updateZoomFromTwoFingerTouch(){\r\n\t\tthis._frequencyLimitedCallbackZoom.trigger(()=>{\r\n\t\t\tconst newDistance = this._calculateDistanceBetweenPoints(this._finger1Point, this._finger2Point );\r\n\t\t\tlet newUnmultipliedZoom = this._initialUnmultipliedZoomOnStartOfTwoFingerTouch*newDistance/this._startDistanceTwoFingerTouch;\r\n\t\t\tthis._constrainAndSetZoom(newUnmultipliedZoom);\r\n\t\t});\r\n\t}\r\n\t_constrainAndSetZoom(zoom){\r\n\t\tif(zoom>this._zoomMax)zoom=this._zoomMax;\r\n\t\tif(zoommaxX)\r\n\t\t\tnewLeft =maxX;\r\n\t\telse\r\n\t\t\tif(newLeftmaxY)\r\n\t\t\tnewTop = maxY;\r\n\t\telse\r\n\t\t\tif(newTop\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t{this.props.children}\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t
)\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport './DirectionalButtons.css';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faCaretRight, faCaretLeft, faCaretUp, faCaretDown} from '@fortawesome/free-solid-svg-icons';\r\nimport IconButton from './IconButton';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport HashSource from '../core/HashSource';\r\nimport Urls from '../urls/Urls';\r\nconst { throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class DirectionalButtons extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {onClickLeft, onClickUp, onClickRight, onClickDown} = props;\r\n\t\tthis._onClickLeft = onClickLeft;\r\n\t\tthis._onClickRight = onClickRight;\r\n\t\tthis._onClickUp = onClickUp;\r\n\t\tthis._onClickDown = onClickDown;\r\n\t\tthis.state = {visible:true, disabled:false};\r\n\t}\r\n\trender() {\r\n\t\tlet className = \"directional-buttons\";\r\n\t\tif(this.state.visible)\r\n\t\t\tclassName+= \" visible\"\r\n\t\tconst arr = [];\r\n\t\tif(this._onClickLeft)\r\n\t\t\tarr.push(());\r\n\t\tif(this._onClickUp)\r\n\t\t\tarr.push(());\r\n\t\tif(this._onClickRight)\r\n\t\t\tarr.push(());\r\n\t\tif(this._onClickDown)\r\n\t\t\tarr.push(());\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t{arr}\r\n\t\t\t
\r\n\t\t)\r\n\t}\r\n}","export default class Timer{\r\n\tconstructor(props){\r\n\t\tlet {delay, callback, nTicks}=props;\r\n\t\tif (nTicks == undefined)\r\n\t\t{\r\n\t\t\tnTicks = -1;\r\n\t\t}\r\n\t\tif (delay == undefined)\r\n\t\t{\r\n\t\t\tdelay = 1000;\r\n\t\t}\r\n\t\tthis._nTicksCount = 0;\r\n\t\tthis._delay = delay;\r\n\t\tthis._callback = callback;\r\n\t\tthis._nTicks = nTicks;\r\n\t\tthis._interval = null;\r\n\t\tthis._isRunning=false;\r\n\t\tthis._tick= this._tick.bind(this);\r\n\t\tthis.stop= this.stop.bind(this);\r\n\t\tthis.reset= this.reset.bind(this);\r\n\t\tthis.start= this.start.bind(this);\r\n\t\tthis.setDelay= this.setDelay.bind(this);\r\n\t\tthis.isRunning= this.isRunning.bind(this);\r\n\t\tthis._setInterval= this._setInterval.bind(this);\r\n\t\tthis._cancelInterval= this._cancelInterval.bind(this);\r\n\t}\r\n\t_tick(){\r\n\t\tif (this._nTicks >= 0)\r\n\t\t{\r\n\t\t\tthis._nTicksCount++;\r\n\t\t\tif (this._nTicksCount >= this._nTicks)\r\n\t\t\t\tthis.stop();\r\n\t\t}\r\n\t\tthis._callback();\r\n\t}\r\n\tstop(){\r\n\t\tthis._cancelInterval();\r\n\t}\r\n\treset(keepRunning)\r\n\t{\r\n\t\tthis._nTicksCount = 0;\r\n\t\tif(keepRunning)\r\n\t\t{\r\n\t\t\tif(!this._isRunning)return;\r\n\t\t\tclearInterval(this._interval);\r\n\t\t\tthis._interval = setInterval(this._tick, this._delay);\r\n\t\t}else{\r\n\t\t\tthis._cancelInterval();\r\n\t\t}\r\n\t\t\t\t\r\n\t}\r\n\tstart(){\r\n\t\tif(this._isRunning)return;\r\n\t\tthis._setInterval();\r\n\t};\r\n\tsetDelay(value){\r\n\t\tthis.reset();\r\n\t\tthis._delay = value;\r\n\t\tthis._setInterval();\r\n\t};\r\n\tisRunning(){\r\n\t\treturn this._isRunning;\r\n\t}\r\n\t_setInterval()\r\n\t{\r\n\t\tthis._isRunning=true;\r\n\t\tthis._interval = setInterval(this._tick, this._delay);\r\n\t}\r\n\t_cancelInterval()\r\n\t{\r\n\t\tthis._isRunning=false;\r\n\t\tif (!this._interval)return;\r\n\t\tclearInterval(this._interval);\r\n\t\tthis._interval=null;\r\n\t}\r\n}","import Timer from './Timer';\r\nexport default class TemporalCallback{\r\n\tconstructor({callback, maxNTriggers, maxTotalDelay, delay}){\r\n\t\tthis._callback = callback;\r\n\t\tthis._maxNTriggers = maxNTriggers;\r\n\t\tthis._maxTotalDelay = maxTotalDelay;\r\n\t\tthis._delay = delay;\r\n\t\t\r\n\t\tthis.trigger = this.trigger.bind(this);\r\n\t\tthis._tick = this._tick.bind(this);\r\n\t\t\r\n\t\tthis._timerDelay = new Timer({callback:this._tick, delay:delay, nTicks:1});\r\n\t\tif(maxTotalDelay!==undefined&&maxTotalDelay!==null)\r\n\t\t\tthis._timerMaxDelay = new Timer({callback:this._tick, delay:maxTotalDelay, nTicks:1});\r\n\t\tthis._nTriggers=0;\r\n\t}\r\n\ttrigger(){\r\n\t\tthis._nTriggers++;\r\n\t\tif(!this._timerDelay.isRunning()){\r\n\t\t\tthis._timerDelay.start();\r\n\t\t\tthis._timerMaxDelay&&this._timerMaxDelay.start();\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif(this._maxNTriggers&&this._nTriggers>this._maxNTriggers){\r\n\t\t\tthis._tick();\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis._timerDelay.reset(true);\r\n\t}\r\n\t_tick(){\r\n\t\tthis._nTriggers++;\r\n\t\tthis._timerDelay.reset();\r\n\t\tthis._timerMaxDelay&&this._timerMaxDelay.reset();\r\n\t\tthis._nTriggers=0;\r\n\t\tthis._callback();\r\n\t}\r\n}","\r\nimport eventEnable from '../core/eventEnable';\r\nimport Timer from '../core/Timer';\r\nimport TemporalCallback from '../core/TemporalCallback';\r\nexport default class ResizeWatcher{\r\n\tconstructor({element, onResized, onFirstResize, staggered}){\r\n\t\teventEnable(this);\r\n\t\tstaggered=false;\r\n\t\tthis._element = element;\r\n\t\tthis._onResized= onResized;\r\n\t\tthis._onFirstResize= onFirstResize;\r\n\t\t\r\n\t\tthis.manual= this.manual.bind(this);\r\n\t\tthis.disposed= this.disposed.bind(this);\r\n\t\tthis._resizedCallbackNotInitial= this._resizedCallbackNotInitial.bind(this);\r\n\t\tthis._logSize= this._logSize.bind(this);\r\n\t\tthis._scheduleResize= this._scheduleResize.bind(this);\r\n\t\tthis._finishedResizing= this._finishedResizing.bind(this);\r\n\t\tthis._resized= this._resized.bind(this);\r\n\t\tthis._doStartIfRequired= this._doStartIfRequired.bind(this);\r\n\t\tthis.__resized= this.__resized.bind(this);\r\n\t\tthis._dispatchResized= this._dispatchResized.bind(this);\r\n\t\t\r\n\t\tthis._temporalCallback = staggered?new TemporalCallback({callback:this.__resized, delay:500, maxTotalDelay:800}):undefined;\r\n\t\tthis._timerFinishedResizing = new Timer({nTicks:1, delay:900, callback:this._finishedResizing});\r\n\t\tthis._startedResizing = false;\r\n\t\tthis._loggedSize=null;\r\n\t\tthis._resizeObserver= null;\r\n\t\tthis._hasResizeObserver=window['ResizeObserver']?true:false;\r\n\t\tthis._resizedCallback=staggered?this._scheduleResize: this._resized;\r\n\t\tif(this._hasResizeObserver)\r\n\t\t{\r\n\t\t\tthis._resizeObserver = new (window['ResizeObserver'])(this._resizedCallbackNotInitial);\r\n\t\t\tthis._resizeObserver['observe'](this._element);\r\n\t\t}\r\n\t\telse\r\n\t\t\twindow.addEventListener(\"resize\", this._resizedCallback);\r\n\r\n\t\tsetTimeout(()=>{\r\n\t\t\tthis._resizedCallbackForNotInitial=this._resizedCallback;\r\n\t\t\t}\r\n\t\t,0);\r\n\t\t\r\n\t}\r\n\tmanual(){\r\n\t\tthis._resized();\r\n\t}\r\n\tdisposed(){\r\n\t\tif(!this._hasResizeObserver)\r\n\t\t\twindow.removeEventListener(\"resize\", this._resizedCallback);\r\n\t\telse\r\n\t\t\tthis._resizeObserver['disconnect']();\r\n\t}\r\n\t_resizedCallbackNotInitial(){\r\n\t\tthis._resizedCallbackForNotInitial&&this._resizedCallbackForNotInitial();\r\n\t}\r\n\t_logSize(){this._loggedSize= this._element['getBoundingClientRect']();}\r\n\t_scheduleResize(){\r\n\t\tthis._temporalCallback.trigger();\r\n\t\tthis._doStartIfRequired();\r\n\t}\r\n\t_finishedResizing(){\r\n\t\tthis._startedResizing=false;\r\n\t}\r\n\t_resized(params){\r\n\t\tthis._doStartIfRequired();\r\n\t\tthis.__resized();\r\n\t}\r\n\t_doStartIfRequired(){\r\n\t\tif(!this._startedResizing){\r\n\t\t\tthis._onFirstResize&&this._onFirstResize();\r\n\t\t\tthis._timerFinishedResizing.start();\r\n\t\t\tthis._startedResizing = true;\r\n\t\t}else{\r\n\t\t\tthis._timerFinishedResizing.reset(true);\r\n\t\t}\r\n\t}\r\n\t__resized(params){\r\n\t\tif(!this._loggedSize){this._logSize(); return;}\r\n\t\tvar previousLoggedSize= this._loggedSize;\r\n\t\tthis._logSize();\r\n\t\tif(previousLoggedSize['height']==this._loggedSize['height']&&previousLoggedSize['width']==this._loggedSize['width'])return;\r\n\t\tthis._dispatchResized();\r\n\t}\r\n\t_dispatchResized(){\r\n\t\tthis.dispatchEvent({type:'resized'});\r\n\t\tthis._onResized&&this._onResized();\r\n\t}\r\n}","import React, { Component } from 'react';\r\nimport './BirdsEyeView.css';\r\nimport UrlHelper from '../core/UrlHelper';\r\nimport UnitMarker from './UnitMarker';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport Dialog from './Dialog';\r\nimport ZoomableDragable from './ZoomableDragable';\r\nimport DirectionalButtons from './DirectionalButtons';\r\nimport getAbsolute from '../ui_core/getAbsolute';\r\nimport Once from '../core/Once';\r\nimport FrequencyLimitedCallback from '../core/FrequencyLimitedCallback';\r\nimport Urls from '../urls/Urls';\r\nimport ResizeWatcher from '../ui_core/ResizeWatcher';\r\nimport HashSource from '../core/HashSource';\r\nconst{throwNotProvided}=ParameterErrors;\r\nexport default class BirdsEyeView extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {showPlotMoreInformation, updateExternalZoomSource, favouritesRef, zoomMax, zoomMin,\r\n\t\t addFavourite, removeFavourite, showOutside360, enterHouse, showBrochureGenerationDialog,\r\n\t\t plotMenuRef, showPlotDetailedInformation, getConfiguration}= props;\r\n\t\t this._getConfiguration = getConfiguration;\r\n\t\tif(!showPlotMoreInformation)throwNotProvided('showPlotMoreInformation');\r\n\t\tif(!updateExternalZoomSource)throwNotProvided('updateExternalZoomSource');\r\n\t\tif(!updateExternalZoomSource)throwNotProvided('updateExternalZoomSource');\r\n\t\tif(!favouritesRef)throwNotProvided('favouritesRef');\r\n\t\tif(zoomMax===undefined||zoomMax===null)throwNotProvided('zoomMax');\r\n\t\tif(zoomMin===undefined||zoomMin===null)throwNotProvided('zoomMin');\r\n\t\tthis._zoomMin = zoomMin;\r\n\t\tthis._zoomMax = zoomMax;\r\n\t\tthis._favouritesRef=favouritesRef;\r\n\t\tthis._showPlotDetailedInformation= showPlotDetailedInformation;\r\n\t\tthis._updateExternalZoomSource=updateExternalZoomSource;\r\n\t\tthis._callbackShowPlotMoreInformation = showPlotMoreInformation;\r\n\t\tthis._callbackAddFavourite = addFavourite;\r\n\t\tthis._callbackRemoveFavourite = removeFavourite;\r\n\t\tthis._callbackShowOutside360=showOutside360;\r\n\t\tthis._callbackEnterHouse = enterHouse;\r\n\t\tthis._callbackShowBrochureGenerationDialog = showBrochureGenerationDialog;\r\n\t\tthis.state ={siteJson:null};\r\n\t\tthis._birdsEyeViewAnglesAscending = [];\r\n\t\tthis.setVisible= this.setVisible.bind(this);\r\n\t\tthis._element = React.createRef();\r\n\t\tthis._plotMenuRef = plotMenuRef;\r\n\t\tthis._zoomableDragableRef=React.createRef();\r\n\t\tthis._markersRef=React.createRef();\r\n\t\tthis._dragDropMarkerRef=React.createRef();\r\n\t\tthis._createMarkers = this._createMarkers.bind(this);\r\n\t\tthis._clear= this._clear.bind(this);\r\n\t\tthis._clearPlotMarkers = this._clearPlotMarkers.bind(this);\r\n\t\tthis._handleClickPlotMarker = this._handleClickPlotMarker.bind(this);\r\n\t\tthis._setMarkersVisible = this._setMarkersVisible.bind(this);\r\n\t\tthis._handleHoverPlotMarker = this._handleHoverPlotMarker.bind(this);\r\n\t\tthis._handleShowPlotMoreInformation = this._handleShowPlotMoreInformation.bind(this);\r\n\t\tthis.resize = this.resize.bind(this);\r\n\t\tthis._handleClickLeft = this._handleClickLeft.bind(this);\r\n\t\tthis._handleClickRight = this._handleClickRight.bind(this);\r\n\t\tthis._handleEnterHouse = this._handleEnterHouse.bind(this);\r\n\t\tthis._showPlotMenu = this._showPlotMenu.bind(this);\r\n\t\tthis._handleShowBrochureGenerationDialog= this._handleShowBrochureGenerationDialog.bind(this);\r\n\t\tthis._getShouldFitToHeight= this._getShouldFitToHeight.bind(this);\r\n\t\tthis._getAspectRatio= this._getAspectRatio.bind(this);\r\n\t\tthis._getNearestSiteJsonOutside360 = this._getNearestSiteJsonOutside360.bind(this);\r\n\t\tthis._setDragDropMarkerPosition= this._setDragDropMarkerPosition.bind(this);\r\n\t\tthis.getMarkerPositionForPlotNumber= this.getMarkerPositionForPlotNumber.bind(this);\r\n\t\tthis._initializeNearestOutside360PixelMappingsIfNecessary= this._initializeNearestOutside360PixelMappingsIfNecessary.bind(this);\r\n\t\tthis._isDesktopAndShouldShowPlotDetailedInformationInstead= this._isDesktopAndShouldShowPlotDetailedInformationInstead.bind(this);\r\n\t\tthis._frequencyLimitedCallbackGetNearestSiteJsonOutside360= new FrequencyLimitedCallback({frequencyHz:6});\r\n\t\tthis._fittedToHeight = false;\r\n\t\tthis._zoomedOutOnFirstFilterAfterFittingToHeight = false;\r\n\t\tthis.load = this.load.bind(this);\r\n\t\tthis._load = this._load.bind(this);\r\n\t\tthis.setZoom= this.setZoom.bind(this);\t\r\n\t\tconst configuration = this._getConfiguration();\r\n\t\tthis._birdsEyeViewIndex = 0;//configuration.defaultAerialIndex!==undefined?configuration.defaultAerialIndex:0;\r\n\t\tthis._currentSiteJsonBirdsEyeViewsBirdsEyeView = null;\r\n\t\tthis._nearestOutside360UniqueId = null;\r\n\t\tthis._showPlotMenuOnce = new Once(this._showPlotMenu);\r\n\t\tthis.state={unitMarkers:[], visible:true, showPlotMarkers:false};\r\n\t}\r\n\tcomponentDidMount(){\r\n\t\tthis._resizeWatcherParentElement = new ResizeWatcher({element:this._element.current});\r\n\t\tthis._resizeWatcherParentElement.addEventListener('resized', this.resize);\r\n\t}\r\n\t\r\n\tsetVisible(value){\r\n\t\tthis.setState({visible:value});\r\n\t\tif(value){\r\n\t\t\tthis.resize();\r\n\t\t}\r\n\t}\r\n\tresize(){\r\n\t\t\tsetTimeout(()=>{\r\n\t\t\tthis._zoomableDragableRef.current?._resize();\r\n\t\t\t}, 0);\r\n\t}\r\n\tsetZoom(value){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tthis._zoomableDragableRef.current.setZoom(value).then(resolve).catch(reject);\r\n\t\t});\r\n\t}\t\r\n\tload(params){\r\n\t\tconst self = this;\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tconst {siteJson, unitsArray, showPlotMarkers, filtered}=params;\r\n\t\t\tif(siteJson===undefined||siteJson===null)throwNotProvided('siteJson');\r\n\t\t\tthis.setState({showPlotMarkers:showPlotMarkers||showPlotMarkers===undefined||showPlotMarkers===null});\r\n\t\t\tthis._siteJson = siteJson;\r\n\t\t\tthis._unitsArray = unitsArray; \r\n\t\t\tlet zoomOut = false;\r\n\t\t\tif(filtered){\r\n\t\t\t\tif(!this._zoomedOutOnFirstFilterAfterFittingToHeight &&this._fittedToHeight){\r\n\t\t\t\t\tthis._zoomedOutOnFirstFilterAfterFittingToHeight =true;\r\n\t\t\t\t\tzoomOut = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis._load(zoomOut).then(resolve).catch(reject);\r\n\t\t});\r\n\t}\r\n\tgetMarkerPositionForPlotNumber(plotNumber){\r\n\t\tlet markerPosition = this._siteJson.units.getPlotByNumber(plotNumber)?.unit.getBirdsEyeViewMarkerPositionForBirdsEyeViewWithIndex(this._birdsEyeViewIndex);\r\n\t\tconst positionAsPercentages = markerPosition?[markerPosition.x, markerPosition.y]:[50,50];\r\n\t\tconst element = this._markersRef.current;\r\n\t\tconst elementAbsolutePosition = getAbsolute(element);\r\n\t\tconst absolutePositionArray = [(positionAsPercentages[0]*element.offsetWidth/100)+elementAbsolutePosition.left, (positionAsPercentages[1]*element.offsetHeight/100)+elementAbsolutePosition.top];\r\n\t\treturn absolutePositionArray;\r\n\t}\r\n\t_load(zoomOut){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tthis._cancelCurrentLoadOperation&&this._cancelCurrentLoadOperation();\r\n\t\t\tlet cancelled = false;\r\n\t\t\tthis._cancelCurrentLoadOperation =()=>{cancelled = true;};\r\n\t\t\tconst birdsEyeViews = this._siteJson.birdsEyeViews.getArray();\r\n\t\t\t//birdsEyeViews.sort((a, b)=>a.angle{\r\n\t\t\t\tif(cancelled){\r\n\t\t\t\t\tresolve();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tconsole.log('siteJsonBirdsEyeViewsBirdsEyeView.angle '+siteJsonBirdsEyeViewsBirdsEyeView.angle);\r\n\t\t\t\tif(!this._createdMarkers)\r\n\t\t\t\t\tthis._createMarkers(this._siteJson, this._unitsArray, \r\n\t\t\t\t\tsiteJsonBirdsEyeViewsBirdsEyeView.angle);\r\n\t\t\t\tthis._setMarkersVisible(this._unitsArray);\r\n\t\t\t\tthis._cancelCurrentLoadOperation=null;\r\n\t\t\t\tif(zoomOut){\r\n\t\t\t\t\tthis.setZoom(1);\r\n\t\t\t\t}\r\n\t\t\t\tthis._initializeNearestOutside360PixelMappingsIfNecessary().then(resolve).catch(reject);\r\n\t\t\t};\r\n\t\t\tconst zoomableDragable = this._zoomableDragableRef.current;\r\n\t\t\tif(zoomableDragable.imgUrl ===imgUrl){\r\n\t\t\t\tafterLoadImg();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tconst fitToHeight = this._getShouldFitToHeight();\r\n\t\t\tthis._fittedToHeight = fitToHeight;\r\n\t\t\tzoomableDragable.load(imgUrl, fitToHeight).then(afterLoadImg).catch(reject);\r\n\t\t});\r\n\t}\r\n\t_initializeNearestOutside360PixelMappingsIfNecessary(){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tconst nearestOutside360PixelMappings = this._currentSiteJsonBirdsEyeViewsBirdsEyeView?.nearestOutside360PixelMappings;\r\n\t\t\tif((!nearestOutside360PixelMappings)||nearestOutside360PixelMappings.initialized){\r\n\t\t\t\tresolve();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tnearestOutside360PixelMappings.initialize().then(resolve).catch(reject);\r\n\t\t});\r\n\t}\r\n\t_getShouldFitToHeight(){\r\n\t\treturn (this._getAspectRatio()<0.9)||(this._element.current.offsetHeight<400);\r\n\t}\r\n\t_handleEnterHouse (plot){\r\n\t\tthis._callbackEnterHouse(plot);\r\n\t}\r\n\t_handleShowPlotMoreInformation(plot, plotMoreInformationType){\r\n\t\tthis._callbackShowPlotMoreInformation(plot, plotMoreInformationType);\r\n\t\tthis._plotMenuRef.current.hide();\r\n\t}\r\n\t_setMarkersVisible(){\r\n\t\tconst unitMarkers = this.state.unitMarkers;\r\n\t\tunitMarkers.forEach(unitMarker=>unitMarker.ref.current.filteredOut\r\n\t\t=this._unitsArray.indexOf(unitMarker.ref.current.unit)<0);\r\n\t}\r\n\t_clear(){\r\n\t\tthis._clearPlotMarkers();\r\n\t}\r\n\t_clearPlotMarkers(){\r\n\t\tthis.setState({unitMarkers:[]});\r\n\t\tthis._createdMarkers = false;\r\n\t}\r\n\t_getAspectRatio(){\r\n\t\tconst element = this._element.current;\r\n\t\tif(element===undefined||element=== null)return null;\r\n\t\treturn element.offsetWidth/element.offsetHeight;\r\n\t}\r\n\t_handleClickPlotMarker(e){\r\n\t\tthis._showPlotMenuOnce.trigger(e);\r\n\t}\r\n\t_handleHoverPlotMarker(e){\r\n\t\tif(!e.hovering)return;\r\n\t\tif(this._isDesktopAndShouldShowPlotDetailedInformationInstead()){\r\n\t\t\t\treturn;\r\n\t\t}\r\n\t\tthis._showPlotMenuOnce.trigger(e);\r\n\t}\r\n\t_isDesktopAndShouldShowPlotDetailedInformationInstead(){\r\n\t\treturn !window.isMobile &&this._getConfiguration().showPlotDetailedInformationOnDesktopClickInsteadOfHover;\r\n\t}\r\n\t_showPlotMenu(e){\r\n\t\tconst marker = e.marker;\r\n\t\tif(this._isDesktopAndShouldShowPlotDetailedInformationInstead()){\r\n\t\t\tconst plot = marker.unit.plots[0];\r\n\t\t\tthis._showPlotDetailedInformation(plot);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis._plotMenuRef.current.show({position:e.markerPosition, getMouseInSourceBounds:marker.getMouseInBounds, \r\n\t\t\tsiteJson:this._siteJson, unit:marker.unit, plot:marker.unit.plots[0] }).catch(console.error);\r\n\t}\r\n\t_createMarkers(siteJson, unitsArray, angle){\r\n\t\tconsole.log('create markers');\r\n\t\tconst unitMarkers = this.state.unitMarkers;\r\n\t\tfor(var i=0; i);\r\n\t\t\tunitMarkers.push(unitMarker);\r\n\t\t}\r\n\t\tthis._createdMarkers=true;\r\n\t\tthis.setState({unitMarkers:unitMarkers});\r\n\t}\r\n\t_handleClickLeft(){\r\n\t\tthis._birdsEyeViewIndex--;\r\n\t\tthis._load().catch(console.error);\r\n\t}\r\n\t_handleClickRight(){\r\n\t\tthis._birdsEyeViewIndex++;\r\n\t\tthis._load().catch(console.error);\r\n\t}\r\n\t_handleShowBrochureGenerationDialog(params){\r\n\t\tthis._callbackShowBrochureGenerationDialog(params);\r\n\t}\r\n\tonDrop(params){\r\n\t\tthis._setDragDropMarkerPosition(null);\r\n\t\tthis._callbackShowOutside360({outside360UniqueId:this._nearestOutside360UniqueId});\r\n\t}\r\n\tonDragging(params){\r\n\t\tthis._frequencyLimitedCallbackGetNearestSiteJsonOutside360.trigger(()=>{\r\n\t\t\tconst siteJsonOutside360 = this._getNearestSiteJsonOutside360(params.x, params.y);\r\n\t\t});\r\n\t}\r\n\t_setDragDropMarkerPosition(markerPosition){\r\n\t\tconst dragDropMarkerElement = this._dragDropMarkerRef.current;\r\n\t\tif(!markerPosition){\r\n\t\t\tdragDropMarkerElement.style.display=`none`;\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tdragDropMarkerElement.style.left=`${markerPosition.x*100}%`;\r\n\t\tdragDropMarkerElement.style.top=`${markerPosition.y*100}%`;\r\n\t\tdragDropMarkerElement.style.display=`block`;\r\n\t}\r\n\t_getNearestSiteJsonOutside360(x, y){\r\n\t\tconst nearestOutside360PixelMappings = this._currentSiteJsonBirdsEyeViewsBirdsEyeView?.nearestOutside360PixelMappings;\r\n\t\tif((!nearestOutside360PixelMappings)||(!nearestOutside360PixelMappings.initialized)){\r\n\t\t\tthis._nearestOutside360UniqueId=null;\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tconst unitMarkers = this._markersRef.current;\r\n\t\tif(!unitMarkers){\r\n\t\t\tthis._nearestOutside360UniqueId=null;\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst unitMarkersAbsolutePosition = getAbsolute(this._markersRef.current);\r\n\t\tx = x - unitMarkersAbsolutePosition.left;\r\n\t\ty = y-unitMarkersAbsolutePosition.top;\r\n\t\tconst xProportion = x/unitMarkers.offsetWidth;\r\n\t\tconst yProportion = y/unitMarkers.offsetHeight;\r\n\t\tthis._nearestOutside360UniqueId = nearestOutside360PixelMappings.getValueFromProportions(xProportion, yProportion);\r\n\t\tconst markerPosition = this._currentSiteJsonBirdsEyeViewsBirdsEyeView.getMarkerPositionForOutside360(this._nearestOutside360UniqueId);\r\n\t\tthis._setDragDropMarkerPosition(markerPosition);\r\n\t}\r\n\trender() {\r\n\t\tlet innerClassName = \"inner\";\r\n\t\tconst configuration = this._getConfiguration();\r\n\t\tconst birdsEyeViewMarkers = this._siteJson?.birdsEyeViews.getArray();\r\n\t\tconst hasMoreThanOneBirdsEyeView = birdsEyeViewMarkers!==undefined&&birdsEyeViewMarkers!==null&&(birdsEyeViewMarkers.length>1);\r\n\t\tconsole.log('hasMoreThanOneBirdsEyeView '+hasMoreThanOneBirdsEyeView);\r\n\t\tconst className = \"birds-eye-view \"+(this.state.visible?'visible ':'')+\r\n\t\t\t(this.state.showPlotMarkers?'show-unit-markers ':'')\r\n\t\t\t+(configuration.showFadedFilteredOutPlots?'show-filtered-out-plots':'hide-filtered-out-plots');\r\n\t\treturn (
\r\n\t\t\t\t{hasMoreThanOneBirdsEyeView?():null}\r\n\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{this.state.unitMarkers}\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t
)\r\n\t}\r\n}\r\n","const MenuType={\r\n\tMENU_BAR:'menuBar', MAIN_MENU:'mainMenu', FILTERS:'filters',\r\n\tAVAILABLE_PRICES_FILTER:'availablePricesFilter', STATUS_FILTER:'statusFilter',\r\n\tBEDROOMS_FILTER:'bedroomsFilter', HOUSE_TYPE_FILTER:'houseTypeFilter', PLOT_SEARCH:'plotSearch',\r\n\tSITE_PICKER:'sitePicker', PLOT_MORE_INFORMATION:'plotMoreInformation',\r\n\tBROCHURE_GENERATION:'brochureGeneration', FAVOURITES:'favourites', IMAGE_VIEWER:'imageViewer',\r\n\tPRIVACY_POLICY:'privacyPolicy', BROCHURES:'brochures',\r\n\tPLOT_DETAILED_INFORMATION:'plotDetailedInformation',\r\n\tFEATURES_FILTER:'featuresFilter'\r\n};\r\nexport default MenuType;","import React, { Component } from 'react';\r\nimport './UnitMarkerKey.css';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport PlotStatus from '../site/PlotStatus';\r\nimport HashSource from '../core/HashSource';\r\nconst{throwNotProvided} = ParameterErrors;\r\nexport default class UnitMarkerKey extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props)\r\n\t\tconst {hasKeyHeading}=props;\r\n\t\tthis._hasKeyHeading = hasKeyHeading;\r\n\t\tthis.load = this.load.bind(this);\r\n\t\tthis.state ={plotsArray:null};\r\n\t}\r\n\tload({siteJson}){\r\n\t\tthis.setState({plotsArray:siteJson.units.getPlotsArray()});\r\n\t}\r\n\trender() {\r\n\t\tconst plotStatusesForPlots = [];\r\n\t\tconst plotsArray = this.state.plotsArray;\r\n\t\tif(plotsArray){\r\n\t\t\tplotsArray.forEach(plot=>{\r\n\t\t\t\tif(plotStatusesForPlots.indexOf(plot.status)<0)\r\n\t\t\t\t\tplotStatusesForPlots.push(plot.status);\r\n\t\t\t});\r\n\t\t}\r\n\t\tplotStatusesForPlots.sort((firstPlotStatus, secondPlotStatus)=>{\r\n\t\t\tconst firstPlotStatusDescription = PlotStatus.getDescription(firstPlotStatus);\r\n\t\t\tconst secondPlotStatusDescription=PlotStatus.getDescription(secondPlotStatus);\r\n\t\t\tif(firstPlotStatusDescription===secondPlotStatusDescription)return 0;\r\n\t\t\treturn firstPlotStatusDescription>secondPlotStatusDescription?1:-1;\r\n\t\t});\r\n\t\tconst entries = plotStatusesForPlots.map((plotStatus)=>
  • \r\n\t\t\t{PlotStatus.getDescription(plotStatus)}
  • );\r\n\t\tconst heading = this._hasKeyHeading?'Key':null;\r\n\t\tconst className = \"unit-marker-key\"+(this._hasKeyHeading?' has-key-heading':'');\r\n\t\treturn (
    {heading}
      \r\n\t\t{entries}\r\n\t\t
    )\r\n\t}\r\n}\r\n","export default class ClickedOffHandle{\r\n\tconstructor(element, callbackHide, callbackDispose){\r\n\t\tthis._additionalElements =[];\r\n\t\tthis._disposed = false;\r\n\t\tthis._callbackHide = callbackHide;\r\n\t\tthis._element=element;\r\n\t\tthis._callbackDispose = callbackDispose;\r\n\t\tthis.addAdditionalElement = this.addAdditionalElement.bind(this);\r\n\t\tthis.removeAdditionalElement = this.removeAdditionalElement.bind(this);\r\n\t\tthis.getElements = this.getElements.bind(this);\r\n\t\tthis.getElement = this.getElement.bind(this);\r\n\t\tthis.hide = this.hide.bind(this);\r\n\t\tthis.dispose = this.dispose.bind(this);\r\n\t}\r\n\taddAdditionalElement(additionalElement){\r\n\t\tif(this._additionalElements.indexOf(additionalElement)<0)\r\n\t\t\tthis._additionalElements.push(additionalElement);\r\n\t}\r\n\tremoveAdditionalElement(element){\r\n\t\tvar index = this._additionalElements.indexOf(element);\r\n\t\tif(index<0)return;\r\n\t\tthis._additionalElements.splice(index, 1);\r\n\t}\r\n\tgetElements(){\r\n\t\tvar elements = [this._element];\r\n\t\treturn elements.concat(this._additionalElements);\r\n\t}\r\n\tgetElement(){\r\n\t\treturn this._element;\r\n\t}\r\n\tgetDisposed(){\r\n\t\treturn this._disposed;\r\n\t}\r\n\thide(){\r\n\t\tif(this._disposed)return;\r\n\t\tthis._disposed = true;\r\n\t\tthis._callbackDispose(this);\r\n\t\tthis._callbackHide();\r\n\t}\r\n\tdispose(){\r\n\t\tif(this._disposed)return;\r\n\t\tthis._disposed = true;\r\n\t\tthis._callbackDispose(this);\r\n\t}\r\n}","import ClickedOffHandle from './ClickedOffHandle';\r\nimport getAbsolute from './getAbsolute';\r\nimport EventNormalizer from '../core/EventNormalizer';\r\nimport Once from '../core/Once';\r\nexport default class ClickedOff {\r\n\tconstructor(props){\r\n\t\tthis._clicked = this._clicked.bind(this);\r\n\t\tthis._onceClicked = new Once(this._clicked);\r\n\t}\r\n static register (element, callbackHide) {\r\n\t\tvar handle = new ClickedOffHandle(element, callbackHide, ClickedOff._dispose);\r\n\t\tsetTimeout(function () {\r\n\t\t\tif (!ClickedOff._containsElement(element)) {\r\n\t\t\t\tif(handle.getDisposed())return;\r\n\t\t\t\tClickedOff._handles.push(handle);\r\n\t\t\t}\r\n\t\t},0);\r\n return handle;\r\n };\r\n\tstatic remove(element){\r\n\t\tconst handles = ClickedOff._handles;\r\n\t\tvar i=0;\r\n\t\twhile(i xRight || y < yTop || y > yBottom)) {\r\n\t\t\t\t\twithinOne=true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif(!withinOne)\r\n\t\t\t\thandle.hide();\r\n }\r\n\t}\r\n static _containsElement(element) {\r\n for (var i = 0, handle; handle = ClickedOff._handles[i]; i++) {\r\n if (handle.getElement() == element){\r\n return true;\r\n\t\t\t}\r\n }\r\n return false;\r\n }\r\n\r\n}\r\nClickedOff._onceClicked = new Once(ClickedOff._clicked);\r\nClickedOff._handles=[];\r\ndocument.addEventListener('mousedown', EventNormalizer.addFriendlyXYToMouse_LexicalClosure(ClickedOff._clickedDocument));\r\ndocument.addEventListener('touchstart', EventNormalizer.addFriendlyXYToTouch_LexicalClosure(ClickedOff._touchedDocument));","import ClickedOff from './ClickedOff';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class ClickedOffManager{\r\n\tconstructor(props){\r\n\t\tconst {elementRef, element, hide}=props;\r\n\t\tif((!elementRef)&&(!element))throwNotProvided('elementRef and element');\r\n\t\tif(!hide)throwNotProvided('hide');\r\n\t\tthis._elementRef = elementRef;\r\n\t\tthis._element = element;\r\n\t\tthis._hide = hide;\r\n\t\tthis.dispose = this.dispose.bind(this);\r\n\t\tthis.register = this.register.bind(this);\r\n\t\tthis._clickedOffHandle=null;\r\n\t}\r\n\tregister(){\r\n\t\tthis.dispose();\r\n\t\tthis._clickedOffHandle = ClickedOff.register(this._elementRef?\r\n\t\t\tthis._elementRef.current:this._element,this._hide);\r\n\t}\r\n\tdispose(){\r\n\t\tthis._clickedOffHandle&&this._clickedOffHandle.dispose();\r\n\t\tthis._clickedOffHandle=null;\r\n\t}\r\n}","import React, { Component } from 'react';\r\nimport './SubMenuHeader.css';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport IconButton from './IconButton';\r\nimport { faBackward, faTimes} from '@fortawesome/free-solid-svg-icons'\r\nimport Urls from '../urls/Urls';\r\nconst{throwNotProvided}=ParameterErrors;\r\nexport default class SubMenuHeader extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {title, children}=props;\r\n\t\tthis._children = children;\r\n\t\tthis._hasChildren=children?true:false;\r\n\t\tthis._handleClickButtonBack= this._handleClickButtonBack.bind(this);\r\n\t\tthis._handleClickButtonClose= this._handleClickButtonClose.bind(this);\r\n\t\tthis._iMenuManager = null;\r\n\t\tthis.state ={title:title};\r\n\t}\r\n\tcomponentDidUpdate(previousProps){\r\n\t\tif(this.props.title!=this.state.title)\r\n\t\t\tthis.setState({title:this.props.title});\r\n\t}\r\n\t_handleClickButtonBack(){\r\n\t\tif(this._iMenuManager)\r\n\t\t\tthis._iMenuManager.back();\r\n\t}\r\n\t_handleClickButtonClose(){\r\n\t\tif(this._iMenuManager)\r\n\t\t\tthis._iMenuManager.close();\r\n\t}\r\n\tsetIMenuManager(value){\r\n\t\tthis._iMenuManager = value;\r\n\t}\r\n\trender() {\r\n\t\tconst className = \"sub-menu-header\"+(this._hasChildren?' has-children':'');\r\n\t\treturn (
    \r\n\t\t\t
    {this._children}
    \r\n\t\t\t
    {this.state.title}
    \r\n\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t
    \r\n\t\t
    )\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport './Menu.css';\r\nimport './IconButton.css';\r\nimport './Filters.css';\r\nimport MenuType from '../enums/MenuType';\r\nimport IconButton from './IconButton';\r\nimport HashSource from '../core/HashSource';\r\nimport UnitMarkerKey from './UnitMarkerKey';\r\nimport ClickedOffManager from '../ui_core/ClickedOffManager';\r\nimport { faWalking, faMapMarker, faPoundSign, faHome, faBed, faBackspace} from '@fortawesome/free-solid-svg-icons';\r\nimport SubMenuHeader from './SubMenuHeader';\r\nimport Urls from '../urls/Urls';\r\nimport AssetsManager from '../assets_management/AssetsManager';//\r\nexport default class FiltersButtons extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props)\r\n\t\tconst {clickClear, clickShowForSale, getConfiguration, nextKey, singleRow, iMenuManager} = props;\r\n\t\tthis._getConfiguration = getConfiguration;\r\n\t\tthis._clickClear = clickClear;\r\n\t\tthis._clickShowForSale = clickShowForSale;\r\n\t\tthis._singleRow = singleRow;\r\n\t\tthis._uniqueKey = 0;\r\n\t\tthis._nextKey = nextKey?nextKey:()=>String(this._uniqueKey ++);\r\n\t\tthis._handleClickFeatures=this._handleClickFeatures.bind(this);\r\n\t\tthis._handleClickPlot=this._handleClickPlot.bind(this);\r\n\t\tthis._handleClickShowForSale=this._handleClickShowForSale.bind(this);\r\n\t\tthis._handleClickStatus=this._handleClickStatus.bind(this);\r\n\t\tthis._handleClickAvailablePrices=this._handleClickAvailablePrices.bind(this);\r\n\t\tthis._handleClickBedrooms=this._handleClickBedrooms.bind(this);\r\n\t\tthis._handleClickHouseType=this._handleClickHouseType.bind(this);\r\n\t\tthis._handleClickClear=this._handleClickClear.bind(this);\r\n\t\tthis._iMenuManager = iMenuManager;\r\n\t\tthis.load = this.load.bind(this);\r\n\t\tthis.state = {siteJson:null};\r\n\t}\r\n\tload({siteJson}){\r\n\t\tthis.setState({siteJson});\r\n\t}\r\n\tsetIMenuManager(value){\r\n\t\tthis._iMenuManager = value;\r\n\t}\r\n\t_handleClickPlot(){\r\n\t\tthis._iMenuManager.showMenuByType(MenuType.PLOT_SEARCH);\r\n\t}\r\n\t_handleClickShowForSale(){\r\n\t\tthis._clickShowForSale();\r\n\t}\r\n\t_handleClickStatus(){\r\n\t\tthis._iMenuManager.showMenuByType(MenuType.STATUS_FILTER);\r\n\t}\r\n\t_handleClickAvailablePrices(){\r\n\t\tthis._iMenuManager.showMenuByType(MenuType.AVAILABLE_PRICES_FILTER);\r\n\t}\r\n\t_handleClickBedrooms(){\r\n\t\tthis._iMenuManager.showMenuByType(MenuType.BEDROOMS_FILTER);\r\n\t}\r\n\t_handleClickHouseType(){\r\n\t\tthis._iMenuManager.showMenuByType(MenuType.HOUSE_TYPE_FILTER);\r\n\t}\r\n\t_handleClickClear(){\r\n\t\tthis._clickClear();\r\n\t}\r\n\t_handleClickFeatures(){\r\n\t\tthis._iMenuManager.showMenuByType(MenuType.FEATURES_FILTER);\r\n\t}\r\n\trender() {\r\n\t\tconst configuration = this._getConfiguration();\r\n\t\tconst rows =[];\r\n\t\tlet uniqueKey = 0;\r\n\t\tif(configuration.showShowForSaleButton){\r\n\t\t\trows.push((\r\n\t\t\t\t
    \r\n\t\t\t\t
    ));\r\n\t\t}\r\n\t\tconst featuresEnabled = configuration.featuresEnabled;\r\n\t\tconst features = !featuresEnabled\r\n\t\t\t?null\r\n\t\t\t:(\r\n\t\t\t);\r\n\t\tconst clearButton = ();\r\n\t\tconst iconButtonStatus = (\r\n\t\t\t\t\t);\r\n\t\tconst iconButtonPrice = (\r\n\t\t);\r\n\t\tconst iconButtonBedrooms = \r\n\t\t\t\t\t;\r\n\t\t\t\t\tconst iconButtonHouseType = (\r\n\t\t\t\t\t);\r\n\t\tconst iconButtonPlot = (\r\n\t\t\t\t\t);\r\n\t\tif(this._singleRow){\r\n\t\t\t\r\n\t\t\t\treturn [iconButtonStatus,\r\n\t\t\t\t\ticonButtonPrice,\r\n\t\t\t\t\ticonButtonBedrooms,\r\n\t\t\t\t\ticonButtonHouseType,\r\n\t\t\t\t\ticonButtonPlot,\r\n\t\t\t\t\tfeaturesEnabled?features:clearButton\r\n\t\t\t\t\t];\r\n\t\t}\r\n\t\telse{rows.push((\r\n\t\t\t\t
    \r\n\t\t\t\t\t{iconButtonStatus}\r\n\t\t\t\t\t{iconButtonPrice}\r\n\t\t\t\t\t{iconButtonBedrooms}\r\n\t\t\t\t
    ));\r\n\t\trows.push((
    \r\n\t\t\t\t\t{iconButtonHouseType}\r\n\t\t\t\t\t{iconButtonPlot}\r\n\t\t\t\t\t{featuresEnabled?features:clearButton}\r\n\t\t\t\t
    ));\r\n\t\tif(featuresEnabled){\r\n\t\t\trows.push((
    \r\n\t\t\t\t{clearButton}\r\n\t\t\t
    ));\r\n\t\t}\r\n\t\t}\r\n\t\treturn rows;\r\n\t}\r\n}","import React, { Component } from 'react';\r\nimport './Menu.css';\r\nimport './IconButton.css';\r\nimport './Filters.css';\r\nimport MenuType from '../enums/MenuType';\r\nimport IconButton from './IconButton';\r\nimport HashSource from '../core/HashSource';\r\nimport UnitMarkerKey from './UnitMarkerKey';\r\nimport ClickedOffManager from '../ui_core/ClickedOffManager';\r\nimport SubMenuHeader from './SubMenuHeader';\r\nimport FiltersButtons from './FiltersButtons';\r\nimport Urls from '../urls/Urls';\r\nimport AssetsManager from '../assets_management/AssetsManager';//\r\nexport default class Filters extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {clickClear, clickShowForSale, getConfiguration} = props;\r\n\t\tthis._uniqueKey=0;\r\n\t\tthis._nextKey = ()=>String(this._uniqueKey++);\r\n\t\tthis._getConfiguration = getConfiguration;\r\n\t\tthis._clickClear = clickClear;\r\n\t\tthis._clickShowForSale = clickShowForSale;\r\n\t\tthis._subMenuHeader = React.createRef();\r\n\t\tthis._element = React.createRef();\r\n\t\tthis._unitMarkerKeyRef = React.createRef();\r\n\t\tthis._iMenuManager = null;\r\n\t\tthis.load = this.load.bind(this);\r\n\t\tthis.show = this.show.bind(this);\r\n\t\tthis.hide= this.hide.bind(this);\r\n\t\tthis._clickedOffManager = new ClickedOffManager({elementRef:this._element, hide:this.hide});\r\n\t\tthis._filtersButtonsRef = React.createRef();\r\n\t\tthis.state = {visible:false, siteJson:null};\r\n\t}\r\n\tload({siteJson}){\r\n\t\tthis.setState({siteJson});\r\n\t\tthis._filtersButtonsRef.current.load({siteJson});\r\n\t\tthis._unitMarkerKeyRef.current?.load({siteJson});\r\n\t}\r\n\tshow(){\r\n\t\tthis.setState({visible:true});\r\n\t\tthis._clickedOffManager.register();\r\n\t\tthis._iMenuManager.showMe(this);\r\n\t}\r\n\thide(){\r\n\t\tthis._clickedOffManager.dispose();\r\n\t\tthis.setState({visible:false});\r\n\t\tthis._iMenuManager.close();\r\n\t}\t\r\n\tsetIMenuManager(value){\r\n\t\tthis._iMenuManager = value;\r\n\t\tthis._filtersButtonsRef.current.setIMenuManager(value);\r\n\t\tthis._subMenuHeader.current.setIMenuManager(value);\r\n\t}\r\n\tget menuType(){\r\n\t\treturn MenuType.FILTERS;\r\n\t}\r\n\trender() {\r\n\t\tconst configuration = this._getConfiguration();\r\n\t\tthis._uniqueKey=0\r\n\t\tlet className = \"filters menu\";\r\n\t\tif(this.state.visible)\r\n\t\t\tclassName+=\" visible\";\r\n\t\tlet title = null;\r\n\t\tif(configuration.unitMarkerKeyAtTop){\r\n\t\t\tconst unitMarkerKey = ();\r\n\t\t\ttitle = unitMarkerKey;\r\n\t\t}\r\n\t\tlet bottomUnitMarkerKey = null;\r\n\t\tif(!configuration.unitMarkerKeyAtTop){\r\n\t\t\tbottomUnitMarkerKey = ();\r\n\t\t}\r\n\t\treturn (
    \r\n\t\t\t\t{title}\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t{bottomUnitMarkerKey}\r\n\t\t\t
    )\r\n\t}\r\n}","import React, { Component } from 'react';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nconst { throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class ReactTypeChecking{\r\n\tstatic isClassComponent(component) {\r\n\t\treturn (\r\n\t\t\ttypeof component === 'function' && \r\n\t\t\t!!component.prototype.isReactComponent\r\n\t\t)\r\n\t}\r\n\r\n\tstatic isFunctionComponent(component) {\r\n\t\treturn (\r\n\t\t\ttypeof component === 'function' && \r\n\t\t\tString(component).includes('return React.createElement')\r\n\t\t)\r\n\t}\r\n\r\n\tstatic isReactComponent(component) {\r\n\t\treturn (\r\n\t\t\tReactTypeChecking.isClassComponent(component) || \r\n\t\t\tReactTypeChecking.isFunctionComponent(component)\r\n\t\t)\r\n\t}\r\n\r\n\tstatic isElement(element) {\r\n\t\treturn React.isValidElement(element);\r\n\t}\r\n\r\n\tstatic isDOMTypeElement(element) {\r\n\t\treturn ReactTypeChecking.isElement(element) && typeof element.type === 'string';\r\n\t}\r\n\r\n\tstatic isCompositeTypeElement(element) {\r\n\t\treturn ReactTypeChecking.isElement(element) && typeof element.type === 'function';\r\n\t}\r\n}","export default function stopEventPropagation(element, eventList) {\r\n\tif(!eventList)\r\n\t\teventList= [ 'touchstart', 'touchmove', 'touchend', 'touchcancel','wheel', 'mousewheel' ];\r\n\tfor (var i = 0; i < eventList.length; i++) {\r\n\t\telement.addEventListener(eventList[i], function(event) {\r\n\t\t\tevent.stopPropagation();\r\n\t\t});\r\n\t}\r\n}","import React, { Component } from 'react';\r\nimport './Checkbox.scss';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport CheckboxFilterOption from './CheckboxFilterOption';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport ReactTypeChecking from '../ui_core/ReactTypeChecking';\r\nimport Once from '../core/Once';\r\nimport HashSource from '../core/HashSource';\r\nimport stopEventPropagation from '../ui_core/stopEventPropagation';\r\nconst{throwNotProvided}=ParameterErrors;\r\nexport default class Checkbox extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props)\r\n\t\tconst {text, paths, toggleOnClick, onChange, stopEventsPropagating}=props;\r\n\t\tif(toggleOnClick===undefined)\r\n\t\t\tthis._toggleOnClick=true;\r\n\t\telse this._toggleOnClick = toggleOnClick;\r\n\t\tthis._stopEventsPropagating = stopEventsPropagating;\r\n\t\tthis._text = text;\r\n\t\tthis._paths = paths;\r\n\t\tthis._get_dispatchChange_lexicalClosure= this._get_dispatchChange_lexicalClosure.bind(this);\r\n\t\tthis._onCallbackChange = onChange?new Once(this._get_dispatchChange_lexicalClosure(onChange)):null;\r\n\t\tthis.toggle = this.toggle.bind(this);\r\n\t\tthis._stopEventPropagation = this._stopEventPropagation.bind(this);\r\n\t\tthis.state ={checked:false};\r\n\t\tthis._children = props.children;\r\n\t\tthis._checkboxRef = React.createRef();\r\n\t\tthis._elementRef = React.createRef();\r\n\t\tthis._checked = false;\r\n\t}\r\n\t_get_dispatchChange_lexicalClosure(onChange){\r\n\t\treturn ()=>{\r\n\t\t\tonChange({checked:this._checked})\r\n\t\t};\r\n\t}\r\n\t_stopEventPropagation(e){\r\n\t\tif(!e)e=window.event;\r\n\t\te.stopPropagation&&e.stopPropagation();\r\n\t\te.preventDefault&&e.preventDefault();\r\n\t}\r\n\tcomponentDidMount(){\r\n\t\tif(!this._toggleOnClick)return;\r\n\t\tconst onceToggle = new Once(this.toggle);\r\n\t\tconst element = this._elementRef.current;\r\n\t\telement.addEventListener('click', (e)=>{\r\n\t\t\tif(this._stopEventsPropagating)\r\n\t\t\t\tthis._stopEventPropagation(e);\r\n\t\t\tonceToggle.trigger();\r\n\t\t});\r\n\t}\r\n\tget checked(){\r\n\t\treturn this._checked;\r\n\t}\r\n\tset checked(value){\r\n\t\tthis._checked = value;\r\n\t\tthis.setState({checked:value})\r\n\t\tthis._onCallbackChange?.trigger();\r\n\t}\r\n\ttoggle(){\r\n\t\tthis.checked = !this._checked;\r\n\t\tthis.setState({checked:this.checked })\r\n\t\tthis._onCallbackChange?.trigger();\r\n\t\tsetTimeout(()=>{\r\n\t\t\tthis._checkboxRef.current.checked = this._checked;\r\n\t\t}, 0);\r\n\t}\r\n\trender() {\r\n\t\tconst paths = [];\r\n\t\tconst className = \"checkbox\"+(this.state.checked?' checked':'');\r\n\t\tif(!this._paths)\r\n\t\t\tpaths.push(());\r\n\t\telse\r\n\t\t\tthis._paths.forEach(p=>paths.push(ReactTypeChecking.isElement(p)?p:()));\r\n\t\treturn ();\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport './CheckboxFilterOption.css';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport Checkbox from './Checkbox';\r\nimport Once from '../core/Once';\r\nconst {throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class CheckboxFilterOption extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props)\r\n\t\tconst {option, onChange}=props;\r\n\t\tthis._inputCheckbox=React.createRef();\r\n\t\tif(!onChange)throwNotProvided('onChange');\r\n\t\tthis._callbackChange = onChange;\r\n\t\tif(!option)throwNotProvided('option');\r\n\t\tthis.clear = this.clear.bind(this);\r\n\t\tthis._option = option;\r\n\t\tthis._toggleChecked = this._toggleChecked.bind(this);\r\n\t\t/*this._handleInputCheckboxChange = this._handleInputCheckboxChange.bind(this);*/\r\n\t\tthis._handleClick = this._handleClick.bind(this);\r\n\t\tthis._handleClickOnce = this._handleClickOnce.bind(this);\r\n\t\tthis._onceHandleClick = new Once(this._handleClickOnce);\r\n\t\tthis.state={isChecked:false};\r\n\t}\r\n\tget valueString(){\r\n\t\treturn this._option.valueString;\r\n\t}\r\n\tget option(){\r\n\t\treturn this._option;\r\n\t}\r\n\tget value(){\r\n\t\treturn this._option.value;\r\n\t}\r\n\tclear(){\r\n\t\tthis._inputCheckbox.current.checked=false;\r\n\t\tthis.setState({isChecked:false});\r\n\t}\r\n\tget isChecked(){\r\n\t\treturn this._inputCheckbox.current.checked;\r\n\t}\r\n\tset isChecked(value){\r\n\t\tif(typeof(value) !== \"boolean\")\r\n\t\t\tthrowNotOfType('value', 'boolean');\r\n\t\tthis.setState({isChecked:value});\r\n\t\tthis._inputCheckbox.current.checked=value;\r\n\t}\r\n\t_toggleChecked(){\r\n\t\tconst isChecked =!this.state.isChecked;\r\n\t\tthis.setState({isChecked:isChecked});\r\n\t\tthis._inputCheckbox.current.checked=isChecked;\r\n\t\tthis._callbackChange();\r\n\t}/*\r\n\t_handleInputCheckboxChange(e){\r\n\t\tthis.state.isChecked = e.target.checked;\r\n\t\tthis._callbackChange();\r\n\t}*/\r\n\t_handleClick(){\r\n\t\tthis._onceHandleClick.trigger();\r\n\t}\r\n\t_handleClickOnce(){\r\n\t\tthis._toggleChecked();\r\n\t}\r\n\trender() {\r\n\t\tlet className =\"checkbox-filter-option\";\r\n\t\tif(this.state.isChecked)\r\n\t\t\tclassName+=\" checked\";\r\n\t\tconst classNameOption = this._option.className;\r\n\t\tif(classNameOption)\r\n\t\t\tclassName+=` ${classNameOption}`;\r\n\t\treturn (
    \r\n\t\t\t\r\n\t\t\t
    );\t\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport './CheckboxFilter.css';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport CheckboxFilterOption from './CheckboxFilterOption';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nconst{throwNotProvided}=ParameterErrors;\r\nexport default class CheckboxFilter extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props)\r\n\t\tconst {onSelectionChange}=props;\r\n\t\tif(!onSelectionChange)throwNotProvided('onSelectionChange');\r\n\t\tthis._onSelectionChange=onSelectionChange;\r\n\t\tthis.getCheckedValues = this.getCheckedValues.bind(this);\r\n\t\tthis.setOptions = this.setOptions.bind(this);\r\n\t\tthis.clear = this.clear.bind(this);\r\n\t\tthis.state = {entries:[]};\r\n\t}\r\n\tget isApplied(){\r\n\t\tconst entries = this.state.entries;\r\n\t\tfor(var i=0; i{\r\n\t\t\tmapValueStringToOption[newOption.valueString]=newOption;\r\n\t\t});\r\n\t\tconst checkboxFilterOptionsToRemove =[];\r\n\t\tentries.forEach((existingCheckboxFilterOption)=>{\r\n\t\t\tconst existingCheckboxFilterOptionValueString = existingCheckboxFilterOption.valueString;\r\n\t\t\tif(mapValueStringToOption.has(existingCheckboxFilterOptionValueString)){\r\n\t\t\t\tconst option = mapValueStringToOption.get(existingCheckboxFilterOptionValueString);\r\n\t\t\t\tnewOptions.splice(newOptions.indexOf(option), 1);\r\n\t\t\t\treturn;\r\n\t\t\t}\t\t\r\n\t\t\tcheckboxFilterOptionsToRemove.push(existingCheckboxFilterOption);\r\n\t\t});\r\n\t\tfor(var i=0; i{\r\n\t\t\tconst checkboxFilterOption = ();\r\n\t\t\tentries.push(checkboxFilterOption);\r\n\t\t});\r\n\t\tthis.setState({entries:entries});\r\n\t}\r\n\tclear(){\r\n\t\tthis.state.entries.forEach((entry)=>{\r\n\t\t\tentry.ref.current.clear();\r\n\t\t});\r\n\t}\r\n\tgetCheckedValues(){\r\n\t\tconst checkedValues=[];\r\n\t\tthis.state.entries.forEach((entry)=>{\r\n\t\t\tif(!entry.ref.current)return;\r\n\t\t\tentry = entry.ref.current;\r\n\t\t\tif(entry.isChecked)\r\n\t\t\t\tcheckedValues.push(entry.value);\r\n\t\t});\r\n\t\treturn checkedValues;\r\n\t}\r\n\trender() {\r\n\t\treturn (
    \r\n\t\t\t\t
    \r\n\t\t\t\t{this.state.entries}\r\n\t\t\t\t
    \r\n\t\t\t
    )\r\n\t}\r\n}\r\n","import ParameterErrors from '../errors/ParameterErrors';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class Option{\r\n\tconstructor(props){\r\n\t\tconst{text, value, className}=props;\r\n\t\tif(!text)throwNotProvided('text');\r\n\t\tif(value===undefined)throwNotProvided('value');\r\n\t\tthis._className = className;\r\n\t\tthis._text = text;\r\n\t\tthis._value = value;\r\n\t\tthis._valueString = typeof(value)==='string'?value:JSON.stringify(value);\r\n\t}\r\n\tget value(){\r\n\t\treturn this._value;\r\n\t}\r\n\tget valueString(){\r\n\t\treturn this._valueString;\r\n\t}\r\n\tget className(){\r\n\t\treturn this._className;\r\n\t}\r\n\tget text(){\r\n\t\treturn this._text;\r\n\t}\r\n}","import React, { Component } from 'react';\r\nimport './AvailablePricesFilter.css';\r\nimport CheckboxFilter from './CheckboxFilter';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport Option from '../choices/Option';\r\nimport MenuType from '../enums/MenuType';\r\nimport SubMenuHeader from './SubMenuHeader';\r\nimport ClickedOffManager from '../ui_core/ClickedOffManager';\r\nimport numberWithCommas from '../core/numberWithCommas';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class AvailablePricesFilter extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {onSelectedOptionsChange} = props;\r\n\t\tthis._callbackSelectedOptionsChange=onSelectedOptionsChange;\r\n\t\tthis._checkboxFilter = React.createRef();\r\n\t\tthis._subMenuHeader = React.createRef();\r\n\t\tthis._element = React.createRef();\r\n\t\tthis._dynamicallyGetFromPriceWithLowerRange = this._dynamicallyGetFromPriceWithLowerRange.bind(this);\r\n\t\tthis._roundDownToNearest100 = this._roundDownToNearest100.bind(this);\r\n\t\tthis._roundUpToNearest100=this._roundUpToNearest100.bind(this);\r\n\t\tthis._getAndUpdateOptions = this._getAndUpdateOptions.bind(this);\r\n\t\tthis._updateOptions = this._updateOptions.bind(this);\r\n\t\tthis._iMenuManager = null;\r\n\t\tthis._clickedOffHandle = null;\r\n\t\tthis.show = this.show.bind(this);\r\n\t\tthis.hide= this.hide.bind(this);\r\n\t\tthis.filterPlots = this.filterPlots.bind(this);\r\n\t\tthis.clear = this.clear.bind(this);\r\n\t\tthis._iMenuManager = null;\r\n\t\tthis.state = {options:[], visible:false};\r\n\t\tthis._clickedOffManager = new ClickedOffManager({elementRef:this._element, hide:this.hide});\r\n\t}\r\n\tsetFromWhatAreYouLookingForViewModel(whatAreYouLookingForViewModel){\r\n\t\tconst priceRange = whatAreYouLookingForViewModel.priceRange;\r\n\t\tif(priceRange===undefined||priceRange===null)return;\r\n\t\tconst from = priceRange[0], to =priceRange[1];\r\n\t\tconst hasFrom = from!==undefined&&from!==null;\r\n\t\tconst hasTo = to!==undefined&&to!==null;\r\n\t\tconst checkboxOption = this._checkboxFilter.current.getCheckboxOptions()\r\n\t\t\t.map(checkboxOption=>checkboxOption.ref.current)\r\n\t\t\t.forEach(checkboxOption=>{\r\n\t\t\t\tconst value= checkboxOption.value;\r\n\t\t\t\tconst hasFromAndFromIsInsideRangeForCheckbox = hasFrom&&(from>=value.from&&from<=value.to);\r\n\t\t\t\tconst hasToAndToIsInsideRangeForCheckbox = hasTo&&(to>=value.from&&to<=value.to);\r\n\t\t\t\tconst hasFromAndToAndConsumesEntireCheckboxRange = hasFrom&&hasTo&&(to>=value.to&&from<=value.from);\r\n\t\t\t\tcheckboxOption.isChecked =hasFromAndFromIsInsideRangeForCheckbox\r\n\t\t\t\t||hasToAndToIsInsideRangeForCheckbox\r\n\t\t\t\t||hasFromAndToAndConsumesEntireCheckboxRange;\r\n\t\t\t});\r\n\t\tthis._callbackSelectedOptionsChange();\r\n\t}\r\n\tshow(){\r\n\t\tthis.setState({visible:true});\r\n\t\tthis._clickedOffManager.register();\r\n\t\tthis._iMenuManager.showMe(this);\r\n\t}\r\n\thide(){\r\n\t\tthis.setState({visible:false});\r\n\t\tthis._clickedOffManager.dispose();\r\n\t\tthis._iMenuManager.close();\r\n\t}\r\n\tfilterPlots(plotsArray){\r\n\t\tconst priceRangesToShow = this._checkboxFilter.current.getCheckedValues();\r\n\t\tif(priceRangesToShow.length<1)return plotsArray;\r\n\t\tconst plotsToShow = [];\r\n\t\tfor(var i=0; i=priceRangeToShow.from&&price<=priceRangeToShow.to)\r\n\t\t\t\t{\r\n\t\t\t\t\tplotsToShow.push(plot);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn plotsToShow;\r\n\t}\r\n\tget isApplied(){\r\n\t\treturn this._checkboxFilter.current.isApplied;\r\n\t}\r\n\tclear(){\r\n\t\tthis._checkboxFilter.current.clear();\r\n\t}\r\n\tsetIMenuManager(value){\r\n\t\tthis._iMenuManager = value;\r\n\t\tthis._subMenuHeader.current.setIMenuManager(value);\r\n\t}\r\n\tget menuType(){\r\n\t\treturn MenuType.AVAILABLE_PRICES_FILTER;\r\n\t}\r\n\tload({plotsArray, availablePricesSettings, currencyConfiguration}){\r\n\t\tif(!availablePricesSettings)throwNotProvided('availablePricesSettings');\r\n\t\tif(!currencyConfiguration)throwNotProvided('currencyConfiguration');\r\n\t\tthis._getAndUpdateOptions(plotsArray, availablePricesSettings, currencyConfiguration);\r\n\t}\r\n\t_getAndUpdateOptions(plotsArray, availablePricesSettings, currencyConfiguration){\r\n\t\tconst plotsInPriceOrder = plotsArray.sort(function(plotA, plotB){return plotA.price - plotB.price});\r\n\t\tconst desiredPriceIntervalsPlusDynamicallyAddedPriceIntervalsPrice = availablePricesSettings.desiredIntervalsPrice;\r\n\t\tlet from = null;\r\n\t\tconst requiredRanges =[];\r\n\t\tlet previousPriceIntervalWithToLessThan = null;\r\n\t\tconst dynamicRangesSeen=[];\r\n\t\tplotsInPriceOrder.forEach((plot)=>{\r\n\t\t\tif(plot.price<=0)return;\r\n\t\t\tlet foundRange =false;\r\n\t\t\tvar i=0;\r\n\t\t\tfor(i=0; i=plot.price){\r\n\t\t\t\t\t\tif(requiredRanges.indexOf(priceInterval)<0){\r\n\t\t\t\t\t\t\trequiredRanges.push(priceInterval)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tfoundRange=true;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tpreviousPriceIntervalWithToLessThan = priceInterval;\r\n\t\t\t\t}\r\n\t\t\t\telse break;\r\n\t\t\t\t\r\n\t\t\t}\r\n\t\t\tif(!foundRange){\r\n\t\t\t\tconst nextPriceInterval=i=0)return;\r\n\t\t\t\tdynamicRangesSeen.push(dynamicRangeString);\r\n\t\t\t\trequiredRanges.push(range);\r\n\t\t\t}\r\n\t\t});\r\n\t\tthis._updateOptions(requiredRanges, currencyConfiguration.currencyPrefix, currencyConfiguration.currencySuffix);\r\n\t}\r\n\t_dynamicallyGetFromPriceWithLowerRange(previousPriceInterval, price, nextPriceInterval){\r\n\t\tconst priceRoundedDownToNearest100=this._roundDownToNearest100(price);\r\n\t\tlet from = priceRoundedDownToNearest100;\r\n\t\tif(from<0)\r\n\t\t\tfrom = 0;\r\n\t\tif(previousPriceInterval!=null){\r\n\t\t\tif(previousPriceInterval.to>priceRoundedDownToNearest100)\r\n\t\t\t\tfrom = previousPriceInterval.to;\r\n\t\t}\r\n\t\tlet to = this._roundUpToNearest100(price);\r\n\t\tif(nextPriceInterval!==null){\r\n\t\t\tif(nextPriceInterval.from0?*/price+100-mod/*:price*/;\r\n\t}\r\n\t_checkboxFilterOptionsChanged(){\r\n\t\t\r\n\t}\r\n\t_updateOptions(requiredRanges, currencyPrefix, currencySuffix){\r\n\t\tconst options = requiredRanges.map((requiredRange)=>new Option({text:`${currencyPrefix}${numberWithCommas(requiredRange.from)}${currencySuffix} to ${currencyPrefix}${numberWithCommas(requiredRange.to)}${currencySuffix}`,\r\n\t\t\tvalue:requiredRange}));\r\n\t\tthis._checkboxFilter.current.setOptions(options);\r\n\t}\r\n\trender() {\r\n\t\tlet className = \"available-prices-filter menu\";\r\n\t\tif(this.state.visible)\r\n\t\t\tclassName+=\" visible\";\r\n\t\treturn (
    \r\n\t\t\t\t\r\n\t\t\t\t
    )\r\n\t}\r\n}\r\n","import ParameterErrors from '../errors/ParameterErrors';\r\nconst {throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class Favourite{\r\n\tconstructor(props){\r\n\t\tconst {payload, description, hash, sortValue, imageUrl, onClick, onRemove}=props;\r\n\t\tif(!description)throwNotProvided('description');\r\n\t\tif(hash===undefined||hash===null)throwNotProvided('hash');\r\n\t\tif(sortValue===undefined||sortValue===null)throwNotProvided('sortValue');\r\n\t\tthis._description = description;\r\n\t\tthis._onClick = onClick;\r\n\t\tthis._onRemove = onRemove;\r\n\t\tthis._payload = payload;\r\n\t\tthis._hash = hash;\r\n\t\tthis._imageUrl = imageUrl;\r\n\t\tthis._sortValue = sortValue;\r\n\t}\r\n\tget payload(){\r\n\t\treturn this._payload;\r\n\t}\r\n\tget hash(){\r\n\t\treturn this._hash;\r\n\t}\r\n\tget sortValue(){\r\n\t\treturn this._sortValue;\r\n\t}\r\n\tget description(){\r\n\t\treturn this._description;\r\n\t}\r\n\tget imageUrl(){\r\n\t\treturn this._imageUrl;\r\n\t}\r\n\tonClick(){\r\n\t\tthis._onClick&&this._onClick();\r\n\t}\r\n\tget onRemove(){\r\n\t\treturn this._onRemove;\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport './StatusFilter.css';\r\nimport CheckboxFilter from './CheckboxFilter';\r\nimport MenuType from '../enums/MenuType';\r\nimport PlotStatus from '../site/PlotStatus';\r\nimport Option from '../choices/Option';\r\nimport SubMenuHeader from './SubMenuHeader';\r\nimport ClickedOffManager from '../ui_core/ClickedOffManager';\r\nexport default class StatusFilter extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props)\r\n\t\tconst {onSelectedOptionsChange} = props;\r\n\t\tthis._element = React.createRef();\r\n\t\tthis._callbackSelectedOptionsChange=onSelectedOptionsChange;\r\n\t\tthis._checkboxFilter=React.createRef();\r\n\t\tthis._subMenuHeader = React.createRef();\r\n\t\tthis.load = this.load.bind(this);\r\n\t\tthis.show = this.show.bind(this);\r\n\t\tthis.hide= this.hide.bind(this);\r\n\t\tthis.filterPlots = this.filterPlots.bind(this);\r\n\t\tthis.clear = this.clear.bind(this);\r\n\t\tthis._updateOptions= this._updateOptions.bind(this);\r\n\t\tthis._iMenuManager = null;\r\n\t\tthis.state = {options:[], visible:false};\r\n\t\tthis._clickedOffManager = new ClickedOffManager({elementRef:this._element, hide:this.hide});\r\n\t}\r\n\tshow(){\r\n\t\tthis.setState({visible:true});\r\n\t\tthis._clickedOffManager.register();\r\n\t}\r\n\thide(){\r\n\t\tthis.setState({visible:false});\r\n\t\tthis._clickedOffManager.dispose();\r\n\t\tthis._iMenuManager.close();\r\n\t}\r\n\tfilterPlots(plotsArray){\r\n\t\tconst plotStatusesToShow = this._checkboxFilter.current.getCheckedValues();\r\n\t\tif(plotStatusesToShow.length<1)return plotsArray;\r\n\t\treturn plotsArray.filter(plot=>plotStatusesToShow.indexOf(plot.status)>=0);\r\n\t}\r\n\tsetForSale(){\r\n\t\tthis._checkboxFilter.current.getCheckboxOptions().forEach(checkboxOption=>{\r\n\t\t\tcheckboxOption = checkboxOption.ref.current;\r\n\t\t\tconst checkboxOptionOption = checkboxOption.option;\r\n\t\t\tconst newChecked = checkboxOptionOption.value===PlotStatus.AVAILABLE;\r\n\t\t\tcheckboxOption.isChecked=newChecked;\r\n\t\t});\r\n\t\tthis._callbackSelectedOptionsChange();\r\n\t}\r\n\tclear(){\r\n\t\tthis._checkboxFilter.current.clear();\r\n\t}\r\n\tsetIMenuManager(value){\r\n\t\tthis._iMenuManager = value;\r\n\t\tthis._subMenuHeader.current.setIMenuManager(value);\r\n\t}\r\n\tget menuType(){\r\n\t\treturn MenuType.STATUS_FILTER;\r\n\t}\r\n\tget isApplied(){\r\n\t\treturn this._checkboxFilter.current.isApplied;\r\n\t}\r\n\tsetAvailableOnly(){\r\n\t\tconst checkboxOption = this._checkboxFilter.current.getCheckboxOptions()\r\n\t\t\t.map(checkboxOption=>checkboxOption.ref.current)\r\n\t\t\t.forEach(checkboxOption=>{\r\n\t\t\t\tconst plotStatus= checkboxOption.value;\r\n\t\t\t\tcheckboxOption.isChecked =plotStatus===PlotStatus.AVAILABLE;\r\n\t\t\t});\r\n\t}\r\n\tload(plotsArray){\r\n\t\tconst plotStatusesForPlots = [];\r\n\t\tfor(var i=0; i{\r\n\t\t\tconst option = new Option({text:`${PlotStatus.getDescription(plotStatus)}`,\r\n\t\t\tvalue:plotStatus,\r\n\t\t\tclassName:PlotStatus.getCssName(plotStatus)})\r\n\t\t\treturn option;\r\n\t\t});\r\n\t\tthis._checkboxFilter.current.setOptions(options);\r\n\t}\r\n\trender() {\r\n\t\tlet className =\"status-filter menu\";\r\n\t\tif(this.state.visible)\r\n\t\t\tclassName+=\" visible\";\r\n\t\treturn (
    \r\n\t\t\t\t\r\n\t\t\t\t
    )\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport './BedroomsFilter.css';\r\nimport CheckboxFilter from './CheckboxFilter';\r\nimport MenuType from '../enums/MenuType';\r\nimport Option from '../choices/Option';\r\nimport SubMenuHeader from './SubMenuHeader';\r\nimport ClickedOffManager from '../ui_core/ClickedOffManager';\r\nexport default class BedroomsFilter extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {bedroomsFilterSettings, onSelectedOptionsChange}=props;\r\n\t\tthis._callbackSelectedOptionsChange=onSelectedOptionsChange;\r\n\t\tthis._checkboxFilter=React.createRef();\r\n\t\tthis._subMenuHeader = React.createRef();\r\n\t\tthis._element = React.createRef();\r\n\t\tthis._options = [];\r\n\t\tthis.load = this.load.bind(this);\r\n\t\tthis._updateOptions = this._updateOptions.bind(this);\r\n\t\tthis._iMenuManager = null;\r\n\t\tthis.show = this.show.bind(this);\r\n\t\tthis.hide= this.hide.bind(this);\r\n\t\tthis.filterPlots = this.filterPlots.bind(this);\r\n\t\tthis.clear = this.clear.bind(this);\r\n\t\tthis._clickedOffManager = new ClickedOffManager({elementRef:this._element, hide:this.hide});\r\n\t\tthis.state = {options:[], visible:false};\r\n\t}\r\n\tsetFromWhatAreYouLookingForViewModel(whatAreYouLookingForViewModel){\r\n\t\tconst nBedrooms = whatAreYouLookingForViewModel.nBedrooms;\r\n\t\tif(nBedrooms===undefined||nBedrooms===null)return;\r\n\t\tconst checkboxOption = this._checkboxFilter.current.getCheckboxOptions()\r\n\t\t\t.map(checkboxOption=>checkboxOption.ref.current)\r\n\t\t\t.forEach(checkboxOption=>{\r\n\t\t\t\tconst value= checkboxOption.value;\r\n\t\t\t\tcheckboxOption.isChecked = value===nBedrooms;\r\n\t\t\t});\r\n\t\tthis._callbackSelectedOptionsChange();\r\n\t}\r\n\tshow(callbackClose){\r\n\t\tthis.setState({visible:true});\r\n\t\tthis._clickedOffManager.register();\r\n\t\tthis._iMenuManager.showMe(this);\r\n\t}\r\n\thide(){\r\n\t\tthis._clickedOffManager.dispose();\r\n\t\tthis.setState({visible:false});\r\n\t\tthis._iMenuManager.close();\r\n\t}\r\n\tfilterPlots(plotsArray){\r\n\t\tconst nBedroomssToShow = this._checkboxFilter.current.getCheckedValues();\r\n\t\tif(nBedroomssToShow.length<1)return plotsArray;\r\n\t\treturn plotsArray.filter(plot=>nBedroomssToShow.indexOf(plot.nBedrooms)>=0);\r\n\t}\r\n\tclear(){\r\n\t\tthis._checkboxFilter.current.clear();\r\n\t}\r\n\tsetIMenuManager(value){\r\n\t\tthis._iMenuManager = value;\r\n\t\tthis._subMenuHeader.current.setIMenuManager(value);\r\n\t}\r\n\tget menuType(){\r\n\t\treturn MenuType.BEDROOMS_FILTER;\r\n\t}\r\n\tget isApplied(){\r\n\t\treturn this._checkboxFilter.current.isApplied;\r\n\t}\r\n\tload(plotsArray){\r\n\t\tconst nBedroomssForPlots = [];\r\n\t\tfor(var i=0; inew Option({text:`${nBedrooms} ${(nBedrooms>1?\"bedrooms\":\"bedroom\")}`,\r\n\t\t\tvalue:nBedrooms}));\r\n\t\tthis._checkboxFilter.current.setOptions(options);\r\n\t}\r\n\trender() {\r\n\t\tlet className = \"bedrooms-filter menu\";\r\n\t\tif(this.state.visible)\r\n\t\t\tclassName+= \" visible\";\r\n\t\treturn (
    \r\n\t\t\t\t\r\n\t\t\t\t
    )\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport './HouseTypeFilter.css';\r\nimport CheckboxFilter from './CheckboxFilter';\r\nimport MenuType from '../enums/MenuType';\r\nimport Option from '../choices/Option';\r\nimport SubMenuHeader from './SubMenuHeader';\r\nimport PropertyBindingFactory from '../mvvm/PropertyBindingFactory';\r\nimport ClickedOffManager from '../ui_core/ClickedOffManager';\r\nimport Once from '../core/Once';\r\nexport default class FeaturesFilter extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {onSelectedOptionsChange} = props;\r\n\t\tthis._callbackSelectedOptionsChange=onSelectedOptionsChange;\r\n\t\tthis._checkboxFilter=React.createRef();\r\n\t\tthis._subMenuHeader = React.createRef();\r\n\t\tthis._element = React.createRef();\r\n\t\tthis.load = this.load.bind(this);\r\n\t\tthis.show = this.show.bind(this);\r\n\t\tthis.hide= this.hide.bind(this);\r\n\t\tthis.setFromWhatAreYouLookingForViewModel= this.setFromWhatAreYouLookingForViewModel.bind(this);\r\n\t\tthis._handleSelectedOptionsChanged= this._handleSelectedOptionsChanged.bind(this);;\r\n\t\tthis._setSelectedFeatures= this._setSelectedFeatures.bind(this);\r\n\t\tthis.filterPlots = this.filterPlots.bind(this);\r\n\t\tthis.clear = this.clear.bind(this);\r\n\t\tthis._updateOptions= this._updateOptions.bind(this);\r\n\t\tthis._selectedFeatures=[];\r\n\t\tthis._mapFeatureIdToOption = new Map();\r\n\t\tthis._iMenuManager = null;\r\n\t\tthis.state = {options:[], visible:false};\r\n\t\tthis._clickedOffManager = new ClickedOffManager({elementRef:this._element, hide:this.hide});\r\n\t\tthis._selectedOptionsChangedOnce = new Once(onSelectedOptionsChange);\r\n\t}\r\n\tshow(){\r\n\t\tthis.setState({visible:true});\r\n\t\tthis._clickedOffManager.register();\r\n\t\tthis._iMenuManager.showMe(this);\r\n\t}\r\n\thide(){\r\n\t\tthis._clickedOffManager.dispose();\r\n\t\tthis.setState({visible:false});\r\n\t\tthis._iMenuManager.close();\r\n\t}\r\n\tfilterPlots(plotsArray){\r\n\t\tconst selectedFeatures = this._checkboxFilter.current.getCheckedValues();\r\n\t\tif(selectedFeatures.length<1)\r\n\t\t\treturn plotsArray;\r\n\t\treturn plotsArray.filter(siteJsonUnitPlot=>{\r\n\t\t\tfor(var selectedFeature of selectedFeatures){\r\n\t\t\t\tif(siteJsonUnitPlot.features===undefined\r\n\t\t\t\t||siteJsonUnitPlot.features===null)\r\n\t\t\t\t\treturn false;\r\n\t\t\t\tif(siteJsonUnitPlot.features.indexOf(selectedFeature)<0)\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t});\r\n\t}\r\n\tclear(){\r\n\t\tthis._checkboxFilter.current.clear();\r\n\t}\r\n\tsetFromWhatAreYouLookingForViewModel(whatAreYouLookingForViewModel){\r\n\t\t/*const houseTypeViewModels = whatAreYouLookingForViewModel.houseTypes;\r\n\t\tif(!houseTypeViewModels)return;\r\n\t\tthis._setHouseTypeViewModelsToShow(houseTypeViewModels);*/\r\n\t}\r\n\tsetIMenuManager(value){\r\n\t\tthis._iMenuManager = value;\r\n\t\tthis._subMenuHeader.current.setIMenuManager(value);\r\n\t}\r\n\tget menuType(){\r\n\t\treturn MenuType.FEATURES_FILTER;\r\n\t}\r\n\tget isApplied(){\r\n\t\treturn this._checkboxFilter.current.isApplied;\r\n\t}\r\n\tload({siteJson}){\r\n\t\tthis._siteJson = siteJson;\r\n\t\tthis._propertyBindingAllFeatures = PropertyBindingFactory.standard(this, \r\n\t\t\tsiteJson, 'allFeatures', this._updateOptions);\r\n\t}\r\n\t_handleSelectedOptionsChanged(o){\r\n\t\tconst selectedFeatures = this._checkboxFilter.current.getCheckedValues();\r\n\t\tthis._setSelectedFeatures(selectedFeatures);\r\n\t\tthis._callbackSelectedOptionsChange();\r\n\t\tconsole.log('_callbackSelectedOptionsChange');\r\n\t}\r\n\t_setSelectedFeatures(selectedFeatures){\r\n\t\tthis._selectedFeatures = selectedFeatures;\r\n\t\tthis._siteJson.allFeatures?.forEach((feature)=>{\r\n\t\t\tconst option = this._mapFeatureIdToOption.get(feature.id);\r\n\t\t\toption.isChecked = this._selectedFeatures.indexOf(feature)>=0;\r\n\t\t});\r\n\t}\r\n\t_updateOptions(){\r\n\t\tthis._mapFeatureIdToOption.clear();\r\n\t\tif(!this._siteJson.allFeatures)return;\r\n\t\tconst options = this._siteJson.allFeatures.map((feature)=>{\r\n\t\t\tconst option = new Option({\r\n\t\t\t\ttext:feature.name,\r\n\t\t\t\tvalue:feature\r\n\t\t\t});\r\n\t\t\tthis._mapFeatureIdToOption.set(feature.id, option);\r\n\t\t\treturn option;\r\n\t\t});\r\n\t\tthis._checkboxFilter.current.setOptions(options);\r\n\t}\r\n\trender() {\r\n\t\tlet className =\"features-filter menu\";\r\n\t\tif(this.state.visible)\r\n\t\t\tclassName+=\" visible\";\r\n\t\treturn (
    \r\n\t\t\t\t\r\n\t\t\t\t
    )\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport EfficientMoveCycle from '../../ui_core/EfficientMoveCycle';\r\nimport ParameterErrors from '../../errors/ParameterErrors';\r\nconst { throwNotProvided } = ParameterErrors;\r\nexport default class SliderHandle extends Component{\r\n constructor(props) {\r\n super(props);\r\n const { callbackMoved } = props;\r\n if (!callbackMoved) throwNotProvided(\"callbackMoved\");\r\n this._callbackMoved = callbackMoved;\r\n this.setPosition = this.setPosition.bind(this);\r\n this._handleDragStart = this._handleDragStart.bind(this);\r\n this._handleDragMove = this._handleDragMove.bind(this);\r\n this._handleDragEnd = this._handleDragEnd.bind(this);\r\n this._element = React.createRef();\r\n this._startPosition = null;\r\n this._mouseStartPosition = null;\r\n this.state = {\r\n position: { x: 0, y: 0 },\r\n capturing: false\r\n };\r\n }\r\n\tget element(){\r\n\t\treturn this._element.current;\r\n\t}\r\n setPosition(position) {\r\n this.setState({ position: position });\r\n }\r\n get startPosition() {\r\n return this._startPosition;\r\n }\r\n _handleDragStart(e, isTouch) {\r\n\t\tif(isTouch)\r\n\t\t\te=e.touches[0];\r\n const element = this._element.current;\r\n this._startPosition = { x: element.offsetLeft+(element.offsetWidth/2), y: element.offsetTop+(element.offsetHeight/2) };\r\n this._mouseStartPosition = { x: e.clientX, y: e.clientY };\r\n this.setState({ capturing: true });\r\n }\r\n _handleDragMove(e, isTouch) {\r\n\t\tif(isTouch)\r\n\t\t\te=e.touches[0];\r\n const dX = e.clientX - this._mouseStartPosition.x;\r\n const dY = e.clientY - this._mouseStartPosition.y;\r\n this._callbackMoved(dX, dY);\r\n }\r\n _handleDragEnd(e) {\r\n this.setState({ capturing: false });\r\n }\r\n render() {\r\n const position = this.state.position;\r\n const className = \"handle\" + (this.state.capturing ? \" active\" : \"\");\r\n return (
    );\r\n }\r\n componentDidMount() {\r\n this._efficientMoveCycle = new EfficientMoveCycle({\r\n element: this._element.current,\r\n onStart: this._handleDragStart,\r\n onMove: this._handleDragMove,\r\n onEnd:this._handleDragEnd,\r\n\t\t\tstopPropagation:true,\r\n\t\t\tpreventDefault:true\r\n });\r\n }\r\n}","import React, { Component } from 'react';\r\nimport SliderHandle from './slider_components/SliderHandle';\r\nimport './Slider.css';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nconst { throwNotProvided } = ParameterErrors;\r\nexport default class Slider extends Component{\r\n constructor(props) {\r\n super(props);\r\n const { min, max, initial, onValueChanged, isHorizontal } = props;\r\n this._onValueChanged = onValueChanged;\r\n if (min === undefined) throwNotProvided(\"min\");\r\n if (max === undefined) throwNotProvided(\"max\");\r\n if (initial === undefined) throwNotProvided(\"initial\");\r\n this._min = min;\r\n this._max = max;\r\n this._initial = initial;\r\n this._isHorizontal = isHorizontal?true:false;\r\n\t\tthis._sliderHandle = React.createRef();\r\n this._inner = React.createRef();\r\n\t\tthis.setValue = this.setValue.bind(this);\r\n this._constrainValue = this._constrainValue.bind(this);\r\n this._sliderHandleMoved = this._sliderHandleMoved.bind(this);\r\n this.setMin = this.setMin.bind(this);\r\n this.setMax = this.setMax.bind(this);\r\n this._updateSliderHandlePosition = this._updateSliderHandlePosition.bind(this);\r\n this._calculateAndDispatchNewValue = this._calculateAndDispatchNewValue.bind(this);\r\n this._setSliderPositionFromValue = this._setSliderPositionFromValue.bind(this);\r\n this.setFromInitialValue = this.setFromInitialValue.bind(this);\r\n }\r\n\tget handle(){\r\n\t\treturn this._sliderHandle.current;\r\n\t}\r\n _sliderHandleMoved(dX, dY) {\r\n this._updateSliderHandlePosition(dX, dY);\r\n }\r\n _updateSliderHandlePosition(dX, dY) {\r\n const sliderHandle = this._sliderHandle.current;\r\n const inner = this._inner.current;\r\n const startPosition = sliderHandle.startPosition;\r\n\t\tif(this._isHorizontal){\r\n\t\t\tlet newX = startPosition.x + dX;\r\n\t\t\tconst innerWidth = inner.offsetWidth;\r\n\t\t\tif (newX < 0) newX = 0;\r\n\t\t\telse if (newX > inner.offsetWidth) newX = innerWidth;\r\n\t\t\tsliderHandle.setPosition({ x: newX, y: 0 });\r\n\t\t\tthis._calculateAndDispatchNewValue(newX, innerWidth);\r\n\t\t\treturn;\r\n\t\t}\r\n let newY = startPosition.y + dY;\r\n const innerHeight = inner.offsetHeight;\r\n if (newY < 0) newY = 0;\r\n else if (newY > inner.offsetHeight) newY = innerHeight;\r\n sliderHandle.setPosition({ x: 0, y: newY });\r\n this._calculateAndDispatchNewValue(newY, innerHeight);\r\n }\r\n\tsetMin(value){\r\n\t\tthis._min = value;\r\n\t\tthis._constrainValue(this._value);\r\n\t\tthis._setSliderPositionFromValue(this._value);\r\n\t}\r\n\tsetMax(value){\r\n\t\tthis._max = value;\r\n\t\tthis._constrainValue(this._value);\r\n\t\tthis._setSliderPositionFromValue(this._value);\r\n\t}\r\n\tsetFromInitialValue(){\r\n this._setSliderPositionFromValue(this._initial);\r\n\t}\r\n\tsetValue(value){\r\n\t\tthis._setSliderPositionFromValue(value);\r\n\t}\r\n _calculateAndDispatchNewValue(newDesired, innerLength) {\r\n\t\tthis._constrainValue(newDesired);\r\n this._onValueChanged(this._value);\r\n }\r\n\t_constrainValue(newDesired){\r\n\t\tconst inner = this._inner.current;\r\n\t\tconst innerLength = this._isHorizontal?inner.offsetWidth:inner.offsetHeight\r\n this._value = this._max - ((this._max - this._min) * (innerLength - newDesired) / innerLength) ;\r\n\t}\r\n _setSliderPositionFromValue(value) {\r\n\t\tif(this._isHorizontal){\r\n\t\t\tconst innerWidth = this._inner.current.offsetWidth;\r\n\t\t\tconst newX = innerWidth -((this._max - value) * innerWidth / (this._max - this._min));\r\n\t\t\tconst sliderHandle = this._sliderHandle.current;\r\n\t\t\tsliderHandle.setPosition({ x: newX, y: 0 });\r\n\t\t\treturn;\r\n\t\t}\r\n const innerHeight = this._inner.current.offsetHeight;\r\n const newY = innerHeight -((this._max - value) * innerHeight / (this._max - this._min));\r\n const sliderHandle = this._sliderHandle.current;\r\n sliderHandle.setPosition({ x: 0, y: newY });\r\n }\r\n componentDidMount() {\r\n this._setSliderPositionFromValue(this._initial);\r\n }\r\n render() {\r\n\t\tlet className = \"slider \"+(this._isHorizontal?\" horizontal\":\" vertical\");\r\n return (\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n );\r\n }\r\n}","import React, { Component } from 'react';\r\nimport './Star.css';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faStar} from '@fortawesome/free-solid-svg-icons';\r\nimport CheckboxFilterOption from './CheckboxFilterOption';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport Tooltip from './Tooltip';\r\nconst{throwNotProvided}=ParameterErrors;\r\nexport default class Star extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props)\r\n\t\tconst {tooltip}=props;\r\n\t\tthis._tooltip = tooltip;\r\n\t\tthis._elementRef = React.createRef();\r\n\t\tconst {onSelectedChange, stopEventsPropagating}=props;\r\n\t\tthis._stopEventsPropagating = stopEventsPropagating?true:false;\r\n\t\tif(!onSelectedChange)throwNotProvided('onSelectedChange');\r\n\t\tthis._onSelectedChange=onSelectedChange;\r\n\t\tthis._handleClick= this._handleClick.bind(this);\r\n\t\tthis._clicking = false;\r\n\t\tthis._handleMouseUp = this._handleMouseUp.bind(this);\r\n\t\tthis.state = {selected:false};\r\n\t}\r\n\tcomponentDidMount(){\r\n\t\tTooltip.register({element:this._elementRef.current, text:this._tooltip});\r\n\t}\r\n\t_stopEventPropagation(e){\r\n\t\tif(!e)e=window.event;\r\n\t\te.stopPropagation&&e.stopPropagation();\r\n\t\te.preventDefault&&e.preventDefault();\r\n\t}\r\n\t_handleClick(e){\r\n\t\tif(this._stopEventsPropagating){\r\n\t\t\tthis._stopEventPropagation(e);\r\n\t\t}\r\n\t\tthis._clicking = true;\r\n\t\tconst selected = !this.state.selected;\r\n\t\tconst allow = this._onSelectedChange(selected);\r\n\t\tif(allow===false)return;\r\n\t\tthis.setState({selected:selected});\r\n\t}\r\n\t_handleMouseUp(e){\r\n\t\tif(this._stopEventsPropagating){\r\n\t\t\tthis._stopEventPropagation(e);\r\n\t\t}\r\n\t\tthis._clicking = false;\r\n\t}\r\n\tget selected(){\r\n\t\treturn this.state.selected;\r\n\t}\r\n\tset selected(value){\r\n\t\tif(this._clicking){\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.setState({selected:value});\r\n\t}\r\n\trender() {\r\n\t\t/*\r\n\t\t
    \r\n\t\t\t\r\n\t\t
    */\r\n\t\tlet className = \"star\";\r\n\t\tif(this.state.selected)\r\n\t\t\tclassName+=\" selected\";\r\n\t\treturn (
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    )\r\n\t}\r\n}\r\n","import ParameterErrors from '../errors/ParameterErrors';\r\nconst { throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class InsertedMnuItemsRegistrationHandle{\r\n\tconstructor(props){\r\n\t\tconst {callbackRemove}=props;\r\n\t\tif(!callbackRemove)throwNotProvided('callbackRemove');\r\n\t\tthis._callbackRemove = callbackRemove;\r\n\t\tthis._disposed = false;\r\n\t\tthis.dispose= this.dispose.bind(this);\r\n\t}\r\n\tdispose(){\r\n\t\tif(this._disposed)return;\r\n\t\tthis._disposed = true;\r\n\t\tthis._callbackRemove();\r\n\t}\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport InsertedMenuItemsRegistrationHandle from './InsertedMenuItemsRegistrationHandle';\r\nconst { throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class InsertedMenuItemsHandler{\r\n\tconstructor(getInsertedMenuItems, setInservedMenuItems){\r\n\t\tif(!setInservedMenuItems)\r\n\t\t\tthrowNotProvided('setInservedMenuItems');\r\n\t\tif(!getInsertedMenuItems)\r\n\t\t\tthrowNotProvided('getInsertedMenuItems');\r\n\t\tthis._setInservedMenuItems = setInservedMenuItems;\r\n\t\tthis._getInsertedMenuItems = getInsertedMenuItems;\r\n\t\tthis._getCallbackRemoveLexicalClosure = this._getCallbackRemoveLexicalClosure.bind(this);\r\n\t\tthis.registerMenuItems = this.registerMenuItems.bind(this);\r\n\t}\r\n\tregisterMenuItems(menuItems){\r\n\t\tconst insertedMenuItems = this._getInsertedMenuItems();\r\n\t\tmenuItems.forEach(menuItem=>insertedMenuItems.push(menuItem));\r\n\t\tthis._setInservedMenuItems(insertedMenuItems);\r\n\t\tconst callbackRemove = this._getCallbackRemoveLexicalClosure(menuItems);\r\n\t\treturn new InsertedMenuItemsRegistrationHandle({callbackRemove:callbackRemove});\r\n\t}\r\n\t_getCallbackRemoveLexicalClosure(menuItems){\r\n\t\treturn ()=>{\r\n\t\t\tconst insertedMenuItems = this._getInsertedMenuItems();\r\n\t\t\tmenuItems.forEach(menuItem=>{\r\n\t\t\t\tconst index = insertedMenuItems.indexOf(menuItem);\r\n\t\t\t\tif(index<0)return;\r\n\t\t\t\tinsertedMenuItems.splice(index, 1);\r\n\t\t\t});\r\n\t\t\tthis._setInservedMenuItems(insertedMenuItems);\r\n\t\t};\r\n\t}\r\n}","import React, { Component } from 'react';\r\nimport './ZoomButtons.css';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faCaretRight, faCaretLeft, faCaretUp, faCaretDown} from '@fortawesome/free-solid-svg-icons';\r\nimport IconButton from './IconButton';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport HashSource from '../core/HashSource';\r\nimport Urls from '../urls/Urls';\r\nimport Tooltip from './Tooltip';\r\nconst { throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class ZoomButtons extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst { min, max, initial, interval, onValueChanged} = props;\r\n\t\tthis._value = initial;\r\n\t\tthis._min = min;\r\n\t\tthis._max = max;\r\n\t\tthis._interval = interval;\r\n\t\tthis._onValueChanged = onValueChanged;\r\n\t\tthis._handleClickDown= this._handleClickDown.bind(this);\r\n\t\tthis._handleClickUp= this._handleClickUp.bind(this);\r\n\t\tthis.state = {visible:true, disabled:false};\r\n\t}\r\n\tsetValue(value){\r\n\t\tthis._value = value;\r\n\t}\r\n\t_handleClickUp(){\r\n\t\tthis._value+=this._interval;\r\n\t\tif(this._value>this._max)\r\n\t\t\tthis._value = this._max;\r\n\t\tthis._onValueChanged(this._value);\r\n\t}\r\n\t_handleClickDown(){\r\n\t\tthis._value-=this._interval;\r\n\t\tif(this._value\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t
    \r\n\t\t)\r\n\t}\r\n}","const DragDropType={STREET_VIEW_BUTTON:'streetViewButton'};\r\nexport default DragDropType;\t\t","import ParameterErrors from '../errors/ParameterErrors';\r\nimport Validation from '../validation/Validation';\r\nconst{throwNotProvided, throwNotOfType}=ParameterErrors;\r\nexport default class IDragDropRecipient {\r\n\tstatic validate(obj){\r\n\t\tif(!obj)throwNotProvided('obj');\r\n\t\tconst objTypeName = obj.constructor.name;\r\n\t\tif(!obj.onDrop)throw new Error(`obj of type ${objTypeName} did not expose a method named onDrop`);\r\n\t\tif(typeof(obj.onDrop)!=='function')throw new Error(`${objTypeName}.onDrop was not a function`);\r\n\t\tif(!obj.onDragging)throw new Error(`obj of type ${objTypeName} did not expose a method named onDragging`);\r\n\t\tif(typeof(obj.onDragging)!=='function')throw new Error(`${objTypeName}.onDragging was not a function`);\r\n\t}\r\n}","import React, { Component } from 'react';\r\nimport Urls from '../urls/Urls';\r\nimport './DragDropStreetViewButton.css';\r\nimport EfficientMoveCycle from '../ui_core/EfficientMoveCycle';\r\nimport getAbsolute from '../ui_core/getAbsolute';\r\nimport DragDropType from '../enums/DragDropType';\r\nimport IDragDropRecipient from '../interfaces/IDragDropRecipient';\r\nimport Tooltip from './Tooltip';\r\n\r\nexport default class DragDropStreetViewButton extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props)\r\n\t\tconst {showDefaultOutside360, getDragDropRecipient} = props;\r\n\t\tthis._callbackShowDefaultOutside360= showDefaultOutside360;\r\n\t\tthis._getDragDropRecipient = getDragDropRecipient;\r\n\t\tthis._handleClick=this._handleClick.bind(this);\r\n\t\tthis._setElementPosition= this._setElementPosition.bind(this);\r\n\t\tthis._onDragStart = this._onDragStart.bind(this);\r\n\t\tthis._onDragMove = this._onDragMove.bind(this);\r\n\t\tthis._onDragEnd = this._onDragEnd.bind(this);\r\n\t\tthis._setImage = this._setImage.bind(this);\r\n\t\tthis._getImageUrl = this._getImageUrl.bind(this);\r\n\t\tthis._elementRef = React.createRef();\r\n\t\tthis._imgRef = React.createRef();\r\n\t\tthis._offsets = null;\r\n\t\tthis._moving = false;\r\n\t}\r\n\tcomponentDidMount(){\r\n\t\tthis._iDragDropRecipient = this._getDragDropRecipient();\r\n\t\tIDragDropRecipient.validate(this._iDragDropRecipient);\r\n\t\tthis._efficientMoveCycle = new EfficientMoveCycle({element:this._elementRef.current, stopPropagation:false, preventDefault:true,\r\n\t\tonStart:this._onDragStart, onMove:this._onDragMove, onEnd:this._onDragEnd, friendlyXY:true});\r\n\t\tTooltip.register({\r\n\t\t\telement:this._elementRef.current, \r\n\t\t\ttext:\"Drag & drop to view street scene\"\r\n\t\t});\r\n\t}\r\n\t_onDragStart(e){\r\n\t\tconst element = this._elementRef.current;\r\n\t\tif(!element)return;\r\n\t\tthis._moving = false;\r\n\t\tconst absolutePosition = getAbsolute(element);\r\n\t\telement.classList.add('dragging');\r\n\t\tthis._setImage(this._imgRef.current, true);\r\n\t\tthis._offsets = [-element.offsetWidth/2, -element.offsetHeight/2];\r\n\t\tthis._setElementPosition(element, absolutePosition.left, absolutePosition.top);\r\n\t}\r\n\t_setImage(img, dragging){\r\n\t\timg.src = this._getImageUrl(dragging);\r\n\t}\r\n\t_getImageUrl(dragging){\r\n\t\treturn Urls.assets+(dragging?'icons/UI_Button_Walkmode_Selected.png':'icons/UI_Button_Walkmode.png');\r\n\t}\r\n\t_setElementPosition(element, x, y){\r\n\t\telement.style.left=`${x}px`;\r\n\t\telement.style.top=`${y}px`;\r\n\t}\r\n\t_onDragMove(e){\r\n\t\tthis._moving = true;\r\n\t\tthis._setElementPosition(this._elementRef.current, e.x+this._offsets[0], e.y+this._offsets[1]);\r\n\t\tthis._iDragDropRecipient.onDragging({type:DragDropType.STREET_VIEW_BUTTON, x:e.x, y:e.y});\r\n\t}\r\n\t_onDragEnd(e){\r\n\t\tconst element = this._elementRef.current;\r\n\t\telement.classList.remove('dragging');\r\n\t\tthis._setImage(this._imgRef.current, false);\r\n\t\telement.style.left=`0px`;\r\n\t\telement.style.top=`0px`;\r\n\t\tthis._iDragDropRecipient.onDrop({type:DragDropType.STREET_VIEW_BUTTON, x:e.x, y:e.y});\r\n\t}\r\n\tcomponentDidUpdate(previousProps){\r\n\t\t\r\n\t}\r\n\t_handleClick(e){\r\n\t\tif(this._moving)return;\r\n\t\tthis._callbackShowDefaultOutside360();\r\n\t}\r\n\trender() {\r\n\t\tlet className = \"drag-drop-street-view-button\";\r\n\treturn ();\r\n\t}\r\n}\r\n","const WindowType={PLOT_DETAILED_INFORMATION:'plotDetailedInformation',\r\n\tPLOTS_SELECTION_MENU:'plotsSelectionMenu',\r\n\tHOUSE_TYPE_VIEWER:'houseTypeViewer',\r\n\tSITE_PLAN:'sitePlan'};\r\nexport default WindowType;\t\t","const WindowEventNames = {MAXIMIZED:'maximized', MINIMIZED:'minimized', FOCUSSED:'focussed',\r\n\tUNMINIMIZED:'unminimized', UNMAXIMIZED:'unmaximized', MOVED:'moved', CLOSED:'closed', \r\n\tWINDOW_CREATED:'windowcreated', WINDOW_DESTROYED:'windowdestroyed', DRAGGED:'dragged', \r\n\tDRAG_STARTED:'dragstarted', RESIZE_STARTED:'resizerstarted'};\r\nexport default WindowEventNames;","\r\nfunction styleFromObject(element, style)\r\n{\r\n for (var i in style)\r\n {\r\n var done = false;\r\n if (i.length > 2)\r\n {\r\n if (i.substring(0, 3) == '../')\r\n {\r\n var a = i.substring(3, i.length);\r\n element[a] = style[i];\r\n done = true;\r\n }\r\n }\r\n if (!done)\r\n element.style[i] = style[i];\r\n }\r\n}\r\nexport default styleFromObject;","import eventEnable from '../core/eventEnable';\r\nimport styleFromObject from '../ui_core/styleFromObject';\r\nimport EventNames from './WindowEventNames';\r\nimport './Windows.css';\r\nvar Windows = new (function () {\r\n const self = this;\r\n\tconst NEW_WINDOW_POSITION_OFFSET=20;\r\n this._instances = [];\r\n\tvar zIndexOffset=100;\r\n this.currentBounds = {minYPx: 0, maxYPx: 1200, minXPerc: 0, maxXPerc: 100};\r\n\teventEnable(this);\r\n this.getActive = function ()\r\n {\r\n\t\treturn self._instances.length<1?null:self._instances[self._instances.length-1];\r\n };\r\n this.getStartPosition = function (window)\r\n {\r\n\t\tlet mostActiveWindowNotThisWindow = null;\r\n\t\tconst parentElement = window.getParentElement();\r\n\t\tfor(var i = self._instances.length - 1; i>=0; i--){\r\n\t\t\tmostActiveWindowNotThisWindow = self._instances[i];\r\n\t\t\tif(parentElement!==undefined&&parentElement!==null){\r\n\t\t\t\tif(mostActiveWindowNotThisWindow.getParentElement()!==parentElement)\r\n\t\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\tif(mostActiveWindowNotThisWindow!==window)break;\r\n\t\t}\r\n\t\tif(!mostActiveWindowNotThisWindow)return [0,0];\r\n\t\tconst otherWindowPosition = mostActiveWindowNotThisWindow.getPosition();\r\n\t\treturn [otherWindowPosition[0]+NEW_WINDOW_POSITION_OFFSET, otherWindowPosition[1]+NEW_WINDOW_POSITION_OFFSET];\r\n\t};\r\n window.addEventListener(\"resize\", function () {\r\n for (var i = 0; i < self._instances.length; i++)\r\n {\r\n self._instances[i]._screenResized();\r\n }\r\n }, false);\r\n\t\r\n this.divDragHeightTaskBarPx = document.documentElement.clientHeight / 12;\r\n\tthis._updateZIndices = function (){\r\n\t\tvar zIndex = zIndexOffset;\r\n\t\tfor (var i = 0; i < self._instances.length; i++)\r\n\t\t{\r\n\t\t\tself._instances[i]._setZIndex(zIndex);\r\n\t\t\tzIndex++;//xxx not right and need to wrap window and internal object in object inside instances.\r\n\t\t}\r\n\t};\r\n function isWindow(obj)\r\n {\r\n\t\tfor(var i=0; i\r\n\t\t\t\tthis._element.classList.add(c));\r\n\t\t\telse\r\n\t\t\t\tthis._element.classList.add(className);\r\n\t\t}\r\n\t\tthis._element.classList.add('icon-button');\r\n\t\tthis._element.disabled = disabled?true:false;\r\n\t\tthis._innerElement = document.createElement('div');\r\n\t\tthis._innerElement.classList.add('inner');\r\n\t\tthis._innerElement.addEventListener('click', this._handleClick);\r\n\t\tthis._iconElement = document.createElement('div');\r\n\t\tthis._iconElement.classList.add('icon');\r\n\t\tthis._textElement= document.createElement('div');\r\n\t\tthis._textElement.classList.add('text');\r\n\t\t\r\n\t\tthis._element.appendChild(this._innerElement);\r\n\t\tthis._innerElement.appendChild(this._iconElement);\r\n\t\tthis._innerElement.appendChild(this._textElement);\r\n\t\t\r\n\t\tif(!faIcon){\r\n\t\t\tthis._imgElement = document.createElement('img');\r\n\t\t\tthis._imgElement.src = imgUrl;\r\n\t\t\tthis._iconElement.appendChild(this._imgElement);\r\n\t\t}\r\n\t\telse{\r\n\t\t\tconst fontAwesomeIconFactory = React.createFactory(FontAwesomeIcon);\r\n\t\t\tReactDOM.render(fontAwesomeIconFactory(\r\n\t\t\t\t{ \tclassName:\"icon\",\r\n\t\t\t\t\ticon:faIcon\r\n\t\t\t\t}),\r\n\t\t\t\tthis._iconElement);\r\n\t\t}\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n\t_handleClick(e){\r\n\t\tthis._callbackClick(e);\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport './MenuBar.css';\r\nimport WindowType from '../enums/WindowType';\r\nimport WindowEventNames from '../window/WindowEventNames';\r\nimport Windows from '../window/Windows';\r\nimport Urls from '../urls/Urls';\r\nimport IconButtonNonReact from '../components/IconButtonNonReact';\r\nimport { faCube, faHome, faBuilding} from '@fortawesome/free-solid-svg-icons'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\n\r\nexport default class MenuBarWindowEntries {\r\n\tconstructor({element}){\r\n\t\tthis._element= element;\r\n\t\tthis._element.classList.add('window-entries');\r\n\t\tthis._windowCreated = this._windowCreated.bind(this);\r\n\t\tthis._windowDestroyed = this._windowDestroyed.bind(this);\r\n\t\tWindows.addEventListener(WindowEventNames.WINDOW_CREATED,this._windowCreated);\r\n\t\tWindows.addEventListener(WindowEventNames.WINDOW_DESTROYED,this._windowDestroyed);\r\n\t\tthis._mapWindowHashToEntry = new Map();\r\n\t}\r\n\t_windowCreated({window}){\r\n\t\tif(this._mapWindowHashToEntry.has(window.getHash()))\r\n\t\t\treturn;\r\n\t\tlet imgUrl ;\r\n\t\tswitch(window.getType()){\r\n\t\t\tcase WindowType.PLOT_DETAILED_INFORMATION:\r\n\t\t\t\timgUrl = Urls.assets+'icons/UI_Button_EnterHouse.png';\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\treturn;\r\n\t\t}\r\n\t\tconst iconButton = new IconButtonNonReact({imgUrl:imgUrl, \r\n\t\t\t onClick:window.toggleMinimize, className:undefined, disabled:false});\r\n\t\tthis._element.appendChild(iconButton.element);\r\n\t\tthis._mapWindowHashToEntry.set(window.getHash(), {\r\n\t\t\ticonButton\r\n\t\t});\r\n\t}\r\n\t_windowDestroyed({window}){\r\n\t\tconst entry = this._mapWindowHashToEntry.get(window.getHash());\r\n\t\tif(!entry)return;\r\n\t\tconst {iconButton}=entry;\r\n\t\tthis._element.removeChild(iconButton.element);\r\n\t\tthis._mapWindowHashToEntry.delete(window.getHash());\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n}","import React, { Component } from 'react';\r\nimport './MenuBar.css';\r\nimport { faCube, faHome, faBuilding} from '@fortawesome/free-solid-svg-icons'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport MenuType from '../enums/MenuType';\r\nimport Slider from './Slider';\r\nimport Star from './Star';\r\nimport InsertedMenuItemsHandler from '../ui_core/InsertedMenuItemsHandler';\r\nimport IconButton from './IconButton';\r\nimport ZoomButtons from './ZoomButtons';\r\nimport Urls from '../urls/Urls';\r\nimport DragDropStreetViewButton from './DragDropStreetViewButton';\r\nimport MenuBarWindowEntries from './MenuBarWindowEntries';\r\nimport AssetsManager from '../assets_management/AssetsManager';\r\nimport eventEnable from '../core/eventEnable';\r\nimport FullScreen from '../ui_core/FullScreen';\r\nimport Handles from '../core/Handles';\r\nexport default class MenuBar extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {showMainMenu, onZoomChange, setFavouritesActive, zoomMin, zoomMax, showDefaultOutside360,\r\n\t\t\tgetDragDropRecipientForStreetViewButton, showDefault3d, showBrochures, showPlots, showHouseTypes,\r\n\t\t\tplaySiteVideo, showTwoDSitePlan, getConfiguration, showSuggestedSites} = props;\r\n\t\teventEnable(this);\r\n\t\tthis._getConfiguration = getConfiguration;\r\n\t\tthis._zoomMin=zoomMin;\r\n\t\tthis._zoomMax = zoomMax;\r\n\t\tthis._mapMenuTypeToHandles = new Map();\r\n\t\tthis._showMainMenu = showMainMenu;\r\n\t\tthis._callbackShowPlots = showPlots;\r\n\t\tthis._callbackShowDefaultOutside360 = showDefaultOutside360;\r\n\t\tthis._callbackShowDefault3d = showDefault3d;\r\n\t\tthis._callbackShowBrochures = showBrochures;\r\n\t\tthis._callbackShowHouseTypes= showHouseTypes;\r\n\t\tthis._callbackPlaySiteVideo= playSiteVideo;\r\n\t\tthis._callbackShowTwoDSitePlan= showTwoDSitePlan;\r\n\t\tthis._callbackShowSuggestedSites = showSuggestedSites;\r\n\t\tthis._zoomButtonsRef=React.createRef();\r\n\t\tthis._starRef=React.createRef();\r\n\t\tthis._callbackZoomChange = onZoomChange;\r\n\t\tthis._setFavouritesActive=setFavouritesActive;\r\n\t\tthis._getDragDropRecipientForStreetViewButton = getDragDropRecipientForStreetViewButton;\r\n\t\tthis.show = this.show.bind(this);\r\n\t\tthis.hide= this.hide.bind(this);\r\n\t\tthis._handleClickButtonSite = this._handleClickButtonSite.bind(this);\r\n\t\tthis._handleClickButton3d = this._handleClickButton3d.bind(this);\r\n\t\tthis._handleClickButtonBrochures = this._handleClickButtonBrochures .bind(this);\r\n\t\tthis._handleSliderZoomValueChanged = this._handleSliderZoomValueChanged.bind(this);\r\n\t\tthis.getHandlesActivateButton = this.getHandlesActivateButton.bind(this);\r\n\t\tthis._handleClickButtonTwoDSitePlan = this._handleClickButtonTwoDSitePlan.bind(this);\r\n\t\tthis._onStarSelectedChange = this._onStarSelectedChange.bind(this);\r\n\t\tthis.setFavouritesActive = this.setFavouritesActive.bind(this);\r\n\t\tthis._handleWindowResized= this._handleWindowResized.bind(this);\r\n\t\tthis._handleClickButtonPlots= this._handleClickButtonPlots.bind(this);\r\n\t\tthis._dispatchIsHorizontalChanged = this._dispatchIsHorizontalChanged.bind(this);\r\n\t\tthis._menuTypeActiveChanged = this._menuTypeActiveChanged.bind(this);\r\n\t\tthis._getIsPortrait = this._getIsPortrait.bind(this);\r\n\t\tthis._handleClickButtonHouseTypes = this._handleClickButtonHouseTypes.bind(this);\r\n\t\tthis._handleClickButtonPlaySiteVideo = this._handleClickButtonPlaySiteVideo.bind(this);\r\n\t\tthis._handleClickButtonSuggestedSites = this._handleClickButtonSuggestedSites.bind(this);\r\n\t\tthis._iMenuManager = null;\r\n\t\tthis._elementRef = React.createRef();\r\n\t\tthis._windowEntriesRef = React.createRef();\r\n\t\tconst isHorizontal = this._getIsPortrait();\r\n\t\tthis.state = {visible:false, horizontal:isHorizontal, insertedMenuItems:[], insertedMenuItemsAtEnd:[]};\r\n\t\tthis._insertedMenuItemsHandler = new InsertedMenuItemsHandler(()=>this.state.insertedMenuItems, (insertedMenuItems)=>this.setState({insertedMenuItems:insertedMenuItems}));\r\n\t\tthis._insertedMenuItemsAtEndHandler = new InsertedMenuItemsHandler(()=>this.state.insertedMenuItemsAtEnd, (insertedMenuItemsAtEnd)=>this.setState({insertedMenuItemsAtEnd:insertedMenuItemsAtEnd}));\r\n\t\twindow.addEventListener('resize', this._handleWindowResized);\r\n\t\tsetTimeout(()=>this._dispatchIsHorizontalChanged(isHorizontal), 0);\r\n\t}\r\n\tcomponentDidMount(){\r\n\t\tthis._menuBarWindowEntries = new MenuBarWindowEntries({element:this._windowEntriesRef.current});\r\n\t}\r\n\tgetHandlesActivateButton(menuType){\r\n\t\tlet handles = this._mapMenuTypeToHandles.get(menuType);\r\n\t\tif(!handles) {\r\n\t\t\thandles = new Handles();\r\n\t\t\tthis._mapMenuTypeToHandles.set(menuType, handles);\r\n\t\t\thandles.addEventListener('change', (e)=>{\r\n\t\t\t\tthis._menuTypeActiveChanged(menuType, e.hasHandles);\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn handles;\r\n\t}\r\n\t_menuTypeActiveChanged(menuType, isActive){\r\n\t\tconst className = menuType.toLowerCase()+'-active';\r\n\t\tconst element = this._elementRef.current;\r\n\t\tif(isActive)element.classList.add(className);\r\n\t\telse element.classList.remove(className);\r\n\t}\r\n\t_getIsPortrait(){\r\n\t\treturn (document.documentElement.clientHeight/document.documentElement.clientWidth)>1;\r\n\t}\r\n\tget insertedMenuItemsHandler(){\r\n\t\treturn this._insertedMenuItemsHandler;\r\n\t}\r\n\tget insertedMenuItemsAtEndHandler(){\r\n\t\treturn this._insertedMenuItemsAtEndHandler;\r\n\t}\r\n\tsetFavouritesActive(active){\r\n\t\tthis._starRef.current.selected=active;\r\n\t}\r\n\tshow(){\r\n\t\tthis.setState({visible:true});\r\n\t}\r\n\thide(){\r\n\t\tthis.setState({visible:false});\r\n\t}\r\n\t_handleWindowResized(){\r\n\t\tconst isHorizontal = this._getIsPortrait();\r\n\t\tconst changed = this.state.horizontal!==isHorizontal;\r\n\t\tthis._setHorizontal(isHorizontal);\r\n\t\t//if(changed)\r\n\t\t\tthis._dispatchIsHorizontalChanged(isHorizontal);\r\n\t}\r\n\t_dispatchIsHorizontalChanged(isHorizontal){\r\n\t\tthis.dispatchEvent({type:'isHorizontalChanged', isHorizontal:isHorizontal});\r\n\t}\r\n\t_setHorizontal(horizontal){\r\n\t\tthis.setState({horizontal:horizontal});\r\n\t}\r\n\tsetZoom(value){\r\n\t\tthis._zoomButtonsRef.current.setValue(value);\r\n\t}\r\n\tsetIMenuManager(value){\r\n\t\tthis._iMenuManager = value;\r\n\t}\r\n\tget menuType(){\r\n\t\treturn MenuType.MENU_BAR;\r\n\t}\r\n\t_handleClickButtonSite(){\r\n\t\tthis._showMainMenu();\r\n\t}\r\n\t_handleSliderZoomValueChanged(value){\r\n\t\tthis._callbackZoomChange(value);\r\n\t}\r\n\t_handleClickButtonFullscreen(){\r\n\t\tFullScreen.toggle(document.documentElement);\r\n\t}\r\n\t_handleClickButton3d(){\r\n\t\tthis._callbackShowDefault3d();\r\n\t}\r\n\t_handleClickButtonBrochures(){\r\n\t\tthis._callbackShowBrochures();\r\n\t}\r\n\t_handleClickButtonPlots(){\r\n\t\tthis._callbackShowPlots();\r\n\t}\r\n\t_handleClickButtonHouseTypes(){\r\n\t\tthis._callbackShowHouseTypes();\r\n\t}\r\n\t_handleClickButtonPlaySiteVideo(){\r\n\t\tthis._callbackPlaySiteVideo();\r\n\t}\r\n\t_handleClickButtonTwoDSitePlan(){\r\n\t\tthis._callbackShowTwoDSitePlan();\r\n\t}\r\n\t_handleClickButtonSuggestedSites(){\r\n\t\tthis._callbackShowSuggestedSites();\r\n\t}\r\n\t_onStarSelectedChange(selected){\r\n\t\tthis._setFavouritesActive(selected);\r\n\t}/*\r\n\t\t\t\t*/\r\n\trender() {\r\n\t\tconst configuration = this._getConfiguration();\r\n\t\tlet className = \"menu-bar\"+(this.state.horizontal?' horizontal':'');\r\n\t\tif(this.state.visible)\r\n\t\t\tclassName+=\" visible\";\r\n\t\tconst iconButtonFullScreen = FullScreen.isSupported?(\r\n\t\t\t\t):null;\r\n\t\t\t\tconst buttonPlots = configuration.plotSelectionMenuEnabled?():null;\r\n\t\tconst playSiteVideoButton = configuration.siteVideoEnabled?():null;\r\n\t\tconst brochureMenu = configuration.brochuresMenuEnabled?():null;\r\n\t\tconst twoDSitePlanButton = configuration.twoDSitePlanEnabled?():null;\r\n\t\tconst suggestedSitesButton = AssetsManager.configuration.suggestedSitesEnabled?():null;\r\n\t\tconst buttonHouseTypes = configuration.houseTypesViewerEnabled?(\r\n\t\t\t\t):null;\r\n\t\treturn (\r\n\t\t\t
    \r\n\t\t\t\t{iconButtonFullScreen}\r\n\t\t\t\t\r\n\t\t\t\t\t{suggestedSitesButton}\r\n\t\t\t\t\t\t{buttonHouseTypes}\r\n\t\t\t\t\t\t\t{buttonPlots}\r\n\t\t\t\t\t{playSiteVideoButton}\r\n\t\t\t\t\t{twoDSitePlanButton}\r\n\t\t\t\t\r\n\t\t\t\t\t{brochureMenu}\r\n\t\t\t\t\t\r\n\t\t\t\t
    {this.state.insertedMenuItems}
    \t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t
    {this.state.insertedMenuItemsAtEnd}
    \r\n\t\t\t
    \r\n\t\t)\r\n\t}\r\n}","import React, { Component } from 'react';\r\nimport './MainMenu.css';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faWalking, faFilter, faCity, faBook} from '@fortawesome/free-solid-svg-icons';\r\nimport IconButton from './IconButton';\r\nimport MenuType from '../enums/MenuType';\r\nimport SubMenuHeader from './SubMenuHeader';\r\nimport ClickedOffManager from '../ui_core/ClickedOffManager';\r\nexport default class MainMenu extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {showMainMenu} = props;\r\n\t\tthis._subMenuHeader = React.createRef();\r\n\t\tthis._element = React.createRef();\r\n\t\tthis._showMainMenu = showMainMenu;\r\n\t\tthis.show = this.show.bind(this);\r\n\t\tthis.hide= this.hide.bind(this);\r\n\t\tthis._handleClickFilter=this._handleClickFilter.bind(this);\r\n\t\tthis._handleClickSite = this._handleClickSite.bind(this);\r\n\t\tthis._handleClickBrochure = this._handleClickBrochure.bind(this);\r\n\t\tthis._iMenuManager = null;\r\n\t\tthis._clickedOffManager = new ClickedOffManager({elementRef:this._element, hide:this.hide});\r\n\t\tthis.state = {visible:false};\r\n\t}\r\n\tshow(){\r\n\t\tthis.setState({visible:true});\r\n\t\tthis._iMenuManager.showMe(this);\r\n\t\tthis._clickedOffManager.register();\r\n\t}\r\n\thide(){\r\n\t\tthis._clickedOffManager.dispose();\r\n\t\tthis.setState({visible:false});\r\n\t\tthis._iMenuManager.close();\r\n\t}\r\n\tsetIMenuManager(value){\r\n\t\tthis._iMenuManager = value;\r\n\t\tthis._subMenuHeader.current.setIMenuManager(value);\r\n\t}\r\n\tget menuType(){\r\n\t\treturn MenuType.MAIN_MENU;\r\n\t}\r\n\t_handleClickFilter(){\r\n\t\tthis._iMenuManager.showMenuByType(MenuType.FILTERS);\r\n\t}\r\n\t_handleClickSite(){\r\n\t\tthis._iMenuManager.showMenuByType(MenuType.SITE_PICKER);\r\n\t}\r\n\t_handleClickBrochure(){\r\n\t\tthis._iMenuManager.showMenuByType(MenuType.BROCHURE_GENERATION);\r\n\t}\r\n\trender() {\r\n\t\tlet className = \"main-menu menu\";\r\n\t\tif(this.state.visible)\r\n\t\t\tclassName+= \" visible\";\r\n\t\treturn (\r\n\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t)\r\n\t}\r\n}","import enableBindingToOthers from '../mvvm/enableBindingToOthers';\r\nimport PropertyBindingFactory from '../mvvm/PropertyBindingFactory';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport eventEnable from '../core/eventEnable';\r\nimport EfficientMoveCycle from '../ui_core/EfficientMoveCycle';\r\nimport FrequencyLimitedCallback from '../core/FrequencyLimitedCallback';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class ProgressBar{\r\n\tconstructor(props){\r\n\t\teventEnable(this);\r\n\t\tconst {propertyNameProgressProportion, propertyNameVisible, delayHide, model, clickEvent} = props;\r\n\t\tif(propertyNameProgressProportion===undefined||propertyNameProgressProportion===null)throwNotProvided('propertyNameProgressProportion');\r\n\t\tenableBindingToOthers(this);\r\n\t\tthis._handleProgressProportionChanged=this._handleProgressProportionChanged.bind(this);\r\n\t\tthis._handleVisibleChanged=this._handleVisibleChanged.bind(this);\r\n\t\tthis._touchedProgressBar=this._touchedProgressBar.bind(this);\r\n\t\t\r\n\t\tthis._startedTouchForwardReverse=this._startedTouchForwardReverse.bind(this);\r\n\t\tthis._moveTouchForwardReverse=this._moveTouchForwardReverse.bind(this);\r\n\t\tthis._endTouchForwardReverse=this._endTouchForwardReverse.bind(this);\r\n\t\tthis._updateProgressBarProportionFromTouch=this._updateProgressBarProportionFromTouch.bind(this);\r\n\t\t\r\n\t\tif(delayHide===undefined)this._delayHide = 2000;\r\n\t\telse if(delayHide==null) this._delayHide = 0;\r\n\t\telse this._delayHide =delayHide;\r\n\t\t\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add('progress-bar');\r\n\t\tthis._bar = document.createElement('div');\r\n\t\tthis._bar.classList.add('bar');\r\n\t\tthis._bar.style.width = '0px';\r\n\t\tthis._element.appendChild(this._bar);\r\n\t\tthis._timeoutHide = null;\r\n\t\tthis._reachedHundredPercentAt = null;\r\n\t\tthis._propertyBindingProgressProportion = PropertyBindingFactory.standard(this, model, propertyNameProgressProportion, this._handleProgressProportionChanged);\r\n\t\tthis._propertyBindingVisible = PropertyBindingFactory.standard(this, model, propertyNameVisible, this._handleVisibleChanged);\r\n\t\tif(clickEvent){\r\n\t\t\tthis._element.addEventListener('mousedown', this._touchedProgressBar);\r\n\t\t\tthis._efficientMoveCycleTouchForwardReverse = new EfficientMoveCycle({element:this._element, stopPropagation:true, preventDefault:true,\r\n\t\t\t\tonStart:this._startedTouchForwardReverse, onMove:this._moveTouchForwardReverse, onEnd:this._endTouchForwardReverse, friendlyXY:true});\r\n\t\t\tthis._frequencyLimitedCallbackTouchForwardReverse = new FrequencyLimitedCallback({frequencyHz:4});\r\n\t\t}\r\n\t}\r\n\t_startedTouchForwardReverse(e){\r\n\t\tthis._frequencyLimitedCallbackTouchForwardReverse.cancel();\r\n\t\tthis._updateProgressBarProportionFromTouch(e);\r\n\t}\r\n\t_moveTouchForwardReverse(e){\r\n\t\tthis._touchedProgressBar(e);\r\n\t}\r\n\t_endTouchForwardReverse(){\r\n\t\t\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n\tget barElement(){\r\n\t\treturn this._bar;\r\n\t}\r\n\t_handleProgressProportionChanged(value){\r\n\t\tif(value>=1)\r\n\t\t\tthis._reachedHundredPercentAt= new Date().getTime();\r\n\t\tthis._bar.style.width = (100*value)+'%';\r\n\t}\r\n\t_handleVisibleChanged(value){\r\n\t\tif(this._timeoutHide)\r\n\t\t\tclearTimeout(this._timeoutHide);\r\n\t\tif(value)\r\n\t\t\tthis._element.classList.add('visible');\r\n\t\telse {\r\n\t\t\tlet delayHide = this._reachedHundredPercentAt!==null? this._delayHide -(new Date().getTime() - this._reachedHundredPercentAt):0;\r\n\t\t\tif(delayHide<0)delayHide=0;\r\n\t\t\tthis._timeoutHide = setTimeout(()=>{\r\n\t\t\t\tthis._element.classList.remove('visible');\r\n\t\t\t}, delayHide);\r\n\t\t}\r\n\t}\r\n\t_touchedProgressBar(e){\r\n\t\tthis._frequencyLimitedCallbackTouchForwardReverse.trigger(()=>this._updateProgressBarProportionFromTouch(e));\r\n\t}\r\n\t_updateProgressBarProportionFromTouch(e){\r\n\t\tconst {x, y} = e;\r\n\t\tconst barX = this._bar.getBoundingClientRect().left;\r\n\t\tlet dX = x - barX;\r\n\t\tlet proportion = dX / this._element.clientWidth;\r\n\t\tif(proportion<0)proportion=0;else if (proportion>1)proportion=1;\r\n\t\tthis.dispatchEvent({type:'clicked', proportion})\r\n\t}\r\n}\r\n","import ReactDOM from 'react-dom';\r\nimport React, { Component } from 'react';\r\nimport Slider from './Slider';\r\nimport './VideoPlayer.css';\r\nimport Urls from '../urls/Urls';\r\nimport TemporalCallback from '../core/TemporalCallback';\r\nimport enableAcceptBindings from '../mvvm/enableAcceptBindings';\r\nimport exposeBinding from '../mvvm/exposeBinding';\r\nimport ProgressBar from '../views/ProgressBar';\r\nimport ResizeWatcher from '../ui_core/ResizeWatcher';\r\nimport EfficientMoveCycle from '../ui_core/EfficientMoveCycle';\r\nimport IconButtonNonReact from '../components/IconButtonNonReact';\r\nimport FrequencyLimitedCallback from '../core/FrequencyLimitedCallback';\r\nimport ClickedOffManager from '../ui_core/ClickedOffManager';\r\nimport ClickedOff from '../ui_core/ClickedOff';\r\nexport default class VideoPlayer {\r\n\tconstructor(props){\r\n\t\tconst {maximized, closeable, toggleMaximizeButton, forceFillWidth}=props;\r\n\t\tthis._forceFillWidth = forceFillWidth;\r\n\t\tthis._maximized = maximized;\r\n\t\tthis.load = this.load.bind(this);\r\n\t\tthis.play = this.play.bind(this);\r\n\t\tthis.stop = this.stop.bind(this);\r\n\t\tthis.hide = this.hide.bind(this);\r\n\t\tthis._setVisible = this._setVisible.bind(this);\r\n\t\tthis._setPlayButtonImage = this._setPlayButtonImage.bind(this);\t\r\n\t\tthis._clickedPlayStopButton = this._clickedPlayStopButton.bind(this);\r\n\t\tthis._updateFillWidthHeight = this._updateFillWidthHeight.bind(this);\r\n\t\tthis._startedTouchForwardReverse = this._startedTouchForwardReverse.bind(this);\r\n\t\tthis._moveTouchForwardReverse = this._moveTouchForwardReverse.bind(this);\r\n\t\tthis._onVolumeSliderValueChanged = this._onVolumeSliderValueChanged.bind(this);\r\n\t\tthis._setVolumeVisible = this._setVolumeVisible.bind(this);\r\n\t\tthis._hideVolume = this._hideVolume.bind(this);\r\n\t\tthis._mouseActive = this._mouseActive.bind(this);\r\n\t\tthis._showUI = this._showUI.bind(this);\r\n\t\tthis._hideUI = this._hideUI.bind(this);\r\n\t\tthis._onVideoTimeUpdate = this._onVideoTimeUpdate.bind(this);\r\n\t\tthis._handleClickButtonFullscreen = this._handleClickButtonFullscreen.bind(this);\r\n\t\tthis._videoEnded = this._videoEnded.bind(this);\r\n\t\tthis._setVideoTimeFromTouchForwardReverseDistance = this._setVideoTimeFromTouchForwardReverseDistance.bind(this);\r\n\t\tthis._endTouchForwardReverse = this._endTouchForwardReverse.bind(this);\r\n\t\tthis._clickedProgressBar = this._clickedProgressBar.bind(this);\r\n\t\tthis._updateMaximized = this._updateMaximized.bind(this);\r\n\t\tthis._setHasVideo = this._setHasVideo.bind(this);\r\n\t\tthis._showVolume = this._showVolume.bind(this);\r\n\t\tthis._toggleVolume = this._toggleVolume.bind(this);\r\n\t\t\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add('video-player');\r\n\t\tthis._videoElement = document.createElement('video');\r\n\t\tthis._volumeWrapperElement = document.createElement('div');\r\n\t\tthis._volumeWrapperElement.classList.add('volume-wrapper');\r\n\t\tthis._volumeWrapperInnerElement = document.createElement('div');\r\n\t\tthis._volumeWrapperInnerElement.classList.add('volume-wrapper-inner');\r\n\t\tthis._videoWrapperElement = document.createElement('div');\r\n\t\tthis._videoWrapperElement.appendChild(this._volumeWrapperElement);\r\n\t\tthis._videoWrapperElement.classList.add('video-wrapper');\r\n\t\tthis._element.appendChild(this._videoWrapperElement);\r\n\t\tthis._videoWrapperElement.appendChild(this._videoElement);\r\n\t\tthis._buttonPlayPause = document.createElement('button');\r\n\t\tthis._buttonPlayPause.classList.add('button-play-pause');\r\n\t\tthis._imgPlayPause = document.createElement('img');\r\n\t\tthis._buttonPlayPause.appendChild(this._imgPlayPause);\r\n\t\tthis._element.appendChild(this._buttonPlayPause);\r\n\t\tthis._playing = false;\r\n\t\tthis._buttonPlayPause.addEventListener('click', this._clickedPlayStopButton);\r\n\t\tthis._element.addEventListener('mousemove', this._mouseActive);\r\n\t\t\r\n\t\tif(closeable){\r\n\t\t\tthis._iconButtonNonReactClose = new IconButtonNonReact({imgUrl:Urls.assets+'icons/UI_Button_Exit.png', className:'button-close', onClick:this.hide});\r\n\t\t\tthis._element.appendChild(this._iconButtonNonReactClose.element);\r\n\t\t}\r\n\t\t\t\t\r\n\t\tthis.__uiVisible = false;\r\n\t\texposeBinding(this, '_uiVisible', ()=>this._uiVisible, (value)=>this._uiVisible = value);\r\n\t\texposeBinding(this, '_proportion', ()=>this._proportion, (value)=>this._proportion = value);\r\n\t\tthis._progressBar = new ProgressBar({propertyNameProgressProportion:'_proportion', propertyNameVisible:'_uiVisible', delayHide:false, model:this,\r\n\t\t\tclickEvent:true});\r\n\t\t\tthis._progressBar.addEventListener('clicked', this._clickedProgressBar);\r\n\t\tthis._temporalCallbackHideUI = new TemporalCallback({callback:this._hideUI, delay:2000});\r\n\t\tthis._videoWrapperElement.appendChild(this._progressBar.element);\r\n\t\tthis._resizeWatcher = new ResizeWatcher({element:this._element, onResized:this._updateFillWidthHeight});\r\n\t\tthis._videoElement.addEventListener('timeupdate', this._onVideoTimeUpdate, false);\r\n\t\tthis._videoElement.addEventListener('ended', this._videoEnded, false);\r\n\t\tthis._efficientMoveCycleTouchForwardReverse = new EfficientMoveCycle({\r\n\t\t\telement:this._videoElement, stopPropagation:false, preventDefault:true,\r\n\t\t\tonStart:this._startedTouchForwardReverse, onMove:this._moveTouchForwardReverse, \r\n\t\t\tonEnd:this._endTouchForwardReverse, friendlyXY:true});\r\n\t\tthis._frequencyLimitedCallbackTouchForwardReverse = new FrequencyLimitedCallback({frequencyHz:4});\r\n\t\tthis._updateMaximized();\r\n\t\tthis._setHasVideo(false);\r\n\t\tthis._iconButtonVolume = new IconButtonNonReact({\r\n\t\t\tclassName:\"button-volume\",\r\n\t\t\timgUrl:Urls.assets+'icons/Volume.png',\r\n\t\t\tonClick:this._toggleVolume});\r\n\t\tthis._videoWrapperElement.appendChild(this._iconButtonVolume.element);\r\n\t\tif(toggleMaximizeButton){\r\n\t\t\t\r\n\t\t\tthis._iconButtonFullScreen = new IconButtonNonReact({\r\n\t\t\t\tclassName:\"button-fullscreen\",\r\n\t\t\t\timgUrl:Urls.assets+'icons/UI_Fullscreen.png',\r\n\t\t\t\tonClick:this._handleClickButtonFullscreen});\r\n\t\t\tthis._videoWrapperElement.appendChild(this._iconButtonFullScreen.element);\r\n\t\t}\r\n\t\tthis._volumeSliderRef = React.createRef();\r\n\t\tconst sliderFactory = React.createFactory(Slider);\r\n\t\tthis._volumeWrapperElement.appendChild(this._volumeWrapperInnerElement);\r\n\t\tReactDOM.render(sliderFactory(\r\n\t\t\t{ \r\n\t\t\t\tref:this._volumeSliderRef, \r\n\t\t\t\tmin:0, max:1, initial:0, \r\n\t\t\t\tonValueChanged:this._onVolumeSliderValueChanged, \r\n\t\t\t\tisHorizontal:false\r\n\t\t\t}),\r\n\t\t\tthis._volumeWrapperInnerElement);\r\n\t\tthis._clickedOffManager = new ClickedOffManager({\r\n\t\t\telement:this._volumeWrapperElement, \r\n\t\t\thide:this._hideVolume});\r\n\t\t\r\n\t}\r\n\t_toggleVolume(){\r\n\t\tif(this._volumeShowing)\r\n\t\t\tthis._hideVolume();\r\n\t\telse \r\n\t\t\tthis._showVolume();\r\n\t}\r\n\t_showVolume(){\r\n\t\tthis._clickedOffVolumeHandle&&this._clickedOffVolumeHandle.dispose();\r\n\t\tthis._clickedOffVolumeHandle = this._clickedOffManager.register();\r\n\t\tthis._setVolumeVisible(true);\r\n\t}\r\n\t_hideVolume(){\r\n\t\tthis._clickedOffVolumeHandle&&this._clickedOffVolumeHandle.dispose();\r\n\t\tthis._setVolumeVisible(false);\r\n\t}\r\n\t_setVolumeVisible(value){\r\n\t\tif(value)\r\n\t\t\tthis._volumeWrapperElement.classList.add('visible');\r\n\t\telse \r\n\t\t\tthis._volumeWrapperElement.classList.remove('visible');\r\n\t\tthis._volumeShowing= value;\r\n\t}\r\n\t_onVolumeSliderValueChanged(e){\r\n\t\tconst proportionVolume = 1-e;\r\n\t\tthis._videoElement.volume=proportionVolume;\r\n\t}\r\n\t_setHasVideo(value){\r\n\t\tif(value)\r\n\t\t\tthis._element.classList.add('has-video');\r\n\t\telse \r\n\t\t\tthis._element.classList.remove('has-video');\r\n\t}\r\n\t_handleClickButtonFullscreen(){\r\n\t\tthis._maximized = !this._maximized;\r\n\t\tthis._updateMaximized();\r\n\t}\r\n\t_updateMaximized(){\r\n\t\t\r\n\t\tif(this._maximized)\r\n\t\t\tthis._element.classList.add('maximized');\r\n\t\telse \r\n\t\t\tthis._element.classList.remove('maximized');\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n\t_clickedProgressBar(e){\r\n\t\tthis._videoElement.currentTime = e.proportion*this._videoElement.duration\r\n\t}\r\n\t_startedTouchForwardReverse(e){\r\n\t\tthis._touchDownNotCancelledYet = true;\r\n\t\tthis._hideUISuspended = true;\r\n\t\tthis._startTouchPosition = [e.x, e.y];\r\n\t\tthis._videoProportionAtStartOfTouch = this._videoElement.currentTime/ this._videoElement.duration;\r\n\t}\r\n\t_moveTouchForwardReverse(e){\r\n\t\tthis._touchDownNotCancelledYet = false;\r\n\t\tconst distanceX = e.x - this._startTouchPosition[0];\r\n\t\tthis._frequencyLimitedCallbackTouchForwardReverse.trigger(()=>this._setVideoTimeFromTouchForwardReverseDistance(distanceX));\r\n\t}\r\n\t_setVideoTimeFromTouchForwardReverseDistance(distanceX){\r\n\t\tconst dProportion = distanceX / this._videoElement.offsetWidth;\r\n\t\tlet newProportion = (this._videoProportionAtStartOfTouch+dProportion);\r\n\t\tif(newProportion>1)newProportion = 1;\r\n\t\telse if(newProportion<0)newProportion = 0;\r\n\t\tthis._videoElement.currentTime = newProportion*this._videoElement.duration;\r\n\t}\r\n\t_endTouchForwardReverse(e){\r\n\t\tthis._hideUISuspended = false;\r\n\t\tif(this._touchDownNotCancelledYet){\r\n\t\t\tif(!this._volumeShowing)\r\n\t\t\t\tthis._clickedPlayStopButton();\r\n\t\t\tClickedOff.triggerClicked(e);\r\n\t\t}\r\n\t\tthis._temporalCallbackHideUI.trigger();\r\n\r\n\t}\r\n\t_updateFillWidthHeight(){\r\n\t\tconst videoAspectRatio = this._videoElement.videoWidth/this._videoElement.videoHeight;\r\n\t\tconst elementAspectRatio = this._element.offsetWidth/this._element.offsetHeight;\r\n\t\tconst fillHeight = (!this._forceFillWidth|this._maximized)&&videoAspectRatio<=elementAspectRatio;\r\n\t\tif(fillHeight)this._element.classList.add('fill-height');\r\n\t\telse this._element.classList.remove('fill-height');\r\n\t}\r\n\tget _uiVisible(){\r\n\t\treturn this.__uiVisible;\r\n\t}\r\n\tset _uiVisible(value){\r\n\t\tif(this.__uiVisible===value)return;\r\n\t\tthis.__uiVisible = value;\r\n\t\tthis.bindingsHandler.changed('_uiVisible', this.__uiVisible);\r\n\t\tif(value)this._element.classList.add('ui-visible');\r\n\t\telse this._element.classList.remove('ui-visible');\r\n\t}\r\n\tget _proportion(){\r\n\t\treturn this.__proportion;\r\n\t}\r\n\tset _proportion(value){\r\n\t\tif(this.__proportion===value)return;\r\n\t\tthis.__proportion = value;\r\n\t\tthis.bindingsHandler.changed('_proportion', this.__proportion);\r\n\t}\r\n\t_mouseActive(){\r\n\t\tthis._showUI();\r\n\t}\r\n\t_showUI(){\r\n\t\tthis._uiVisible = true;\r\n\t\tsetTimeout(this._updateFillWidthHeight, 0);\r\n\t\tthis._temporalCallbackHideUI.trigger();\r\n\t}\r\n\t_hideUI(){\r\n\t\tif(this._hideUISuspended)return;\r\n\t\tthis._uiVisible = false;\r\n\t}\r\n\t_clickedPlayStopButton(){\r\n\t\tif(!this._uiVisible)return;\r\n\t\tif(this._playing)\r\n\t\t\tthis.stop();\r\n\t\telse this._play();\r\n\t}\r\n\tplay({url}){\r\n\t\tthis._setVisible(true);\r\n\t\tthis._setHasVideo(url?true:false);\r\n\t\tthis._videoElement.src = url;\r\n\t\tthis._play();\r\n\t}\r\n\tload({url}){\r\n\t\tthis._setVisible(true);\r\n\t\tthis._setHasVideo(url?true:false);\r\n\t\tthis._videoElement.src = url;\r\n\t\tthis._setPlayButtonImage();\r\n\t}\r\n\t_play(){\r\n\t\tthis._videoElement.play();\r\n\t\tthis._playing = true;\r\n\t\tthis._setPlayButtonImage();\r\n\t}\r\n\tstop(){\r\n\t\tthis._videoElement.pause();\r\n\t\tthis._playing = false;\r\n\t\tthis._setPlayButtonImage();\r\n\t}\r\n\thide(){\r\n\t\tthis.stop();\r\n\t\tthis._setVisible(false);\r\n\t}\r\n\t_setPlayButtonImage(playing){\r\n\t\tthis._imgPlayPause.src= this._playing?(Urls.assets+'icons/UI_Button_Pause.png'):(\r\n\t\t\tUrls.assets+'icons/UI_Button_Play.png'\r\n\t\t);\r\n\t}\r\n\t_setVisible(value){\r\n\t\tif(value)\r\n\t\t\tthis._element.classList.add('visible');\r\n\t\telse\r\n\t\t\tthis._element.classList.remove('visible');\r\n\t}\r\n\t_onVideoTimeUpdate(e){\r\n\t\tconst video = this._videoElement;\r\n\t\tconst proportion = video.currentTime/ video.duration;\r\n\t\tthis._proportion= proportion;\r\n\t}\r\n _videoEnded(e) {\r\n\t\tthis.stop();\r\n\t\tthis._videoElement.currentTime=0;\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport Once from '../core/Once';\r\nimport ParameterError from '../errors/ParameterError';\r\nexport default class MenuManager extends Component {o\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {outerElementRef}=props;\r\n\t\tthis._outerElementRef = outerElementRef;\r\n\t\tconst seenMenuTypes =[];\r\n\t\tthis._currentMenusShowing= [];\r\n\t\tthis._mapMenuTypeToMenu = new Map();\r\n\t\tthis._menuHistory = [];\r\n\t\tthis.showMenuByType = this.showMenuByType.bind(this);\r\n\t\tthis._showMenuByType = this._showMenuByType.bind(this);\r\n\t\tthis._showMenuWithLoopBreak = this._showMenuWithLoopBreak.bind(this);\r\n\t\tthis._showMenu=this._showMenu.bind(this);\r\n\t\tthis.close = this.close.bind(this);\r\n\t\tthis._close = this._close.bind(this);\r\n\t\tthis.showMe= this.showMe.bind(this);\r\n\t\tthis.back = this.back.bind(this);\r\n\t\tthis._closeOnce = new Once(this._close);\r\n\t\tthis._showMenuOnce = new Once(this._showMenu);\r\n\t\tthis.state ={hasBacks:false};\r\n\t}\r\n\tback(){\r\n\t\tif(this._menuHistory.length<2){\r\n\t\t\tthis.close(true);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.showMe(this._menuHistory.splice(this._menuHistory.length-2, 2)[0]);\r\n\t}\r\n\tclose(keepHistory){\r\n\t\tthis._closeOnce.trigger(keepHistory);\r\n\t}\r\n\t_close(keepHistory){\r\n\t\tthis._currentMenusShowing.forEach((currentMenuShowing)=>currentMenuShowing.hide());\r\n\t\tthis._currentMenusShowing=[];\r\n\t\tif(!keepHistory){\r\n\t\t\tthis._menuHistory=[];\r\n\t\t\tthis._setHasBacks(false);\r\n\t\t}\r\n\t}\r\n\t_setHasBacks(value){\r\n\t\tconst classList = this._outerElementRef?.current?.classList;\r\n\t\tif(!classList)return;\r\n\t\tif(value)classList.add('back-visible');\r\n\t\telse classList.remove('back-visible');\r\n\t}\r\n\tshowMenuByType(menuType){\r\n\t\tthis._showMenuByType(menuType);\r\n\t}\r\n\tshowMe(menu){\r\n\t\tthis._showMenuWithLoopBreak(menu);\r\n\t}\r\n\t_showMenuByType(menuType){\r\n\t\tif(!this._mapMenuTypeToMenu.has(menuType))\r\n\t\t\tthrow new Error(`Has no child of menuType \"${menuType}\"`);\r\n\t\tconst menu = this._mapMenuTypeToMenu.get(menuType).ref.current;\r\n\t\tthis._showMenuWithLoopBreak(menu);\r\n\t}\r\n\t_showMenuWithLoopBreak(menu){\r\n\t\tthis._showMenuOnce.trigger(menu);\r\n\t}\r\n\t_showMenu(menu){\r\n\t\tif(this._currentMenusShowing.length>0)\r\n\t\t\tthis.close(true);\r\n\t\tmenu.show();\r\n\t\tthis._currentMenusShowing.push(menu);\t\r\n\t\tif(this._menuHistory.length<1){\r\n\t\t\tthis._setHasBacks(false);\r\n\t\t\tthis._menuHistory.push(menu);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst sameAsLast = this._menuHistory[this._menuHistory.length-1]===menu;\r\n\t\tif(!sameAsLast){\r\n\t\t\tthis._menuHistory.push(menu);\r\n\t\t}\r\n\t\tthis._setHasBacks(!sameAsLast);\r\n\t}\r\n\tcomponentDidMount() {\t\t\r\n\t\tlet index=0;\r\n\t\tthis.props.children.forEach((childMenu)=>{\r\n\t\t\tconst menuType = childMenu.ref.current.menuType;\r\n\t\t\tif(childMenu.ref===null)\r\n\t\t\t\tthrow new Error(`Child menu at index ${index} with type ${childMenu.type.name} had no ref`);\r\n\t\t\tif(menuType===undefined||menuType===null)\r\n\t\t\t\tthrow new Error(`Child menu with type ${childMenu.type.name} had no menuType property`);\r\n\t\t\tthis._mapMenuTypeToMenu.set(menuType, childMenu);\r\n\t\t\tindex++;\r\n\t\t\tconst childMenuInstance = childMenu.ref.current;\r\n\t\t\tconst setIMenuManager=childMenuInstance.setIMenuManager;\r\n\t\t\tif(setIMenuManager===undefined||setIMenuManager===null)\r\n\t\t\t\tthrow new Error(`Child menu with type ${childMenu.type.name} had no setIMenuManager method`);\r\n\t\t\tchildMenuInstance.setIMenuManager(this);\r\n\t\t });\r\n\t}\r\n\trender() {\r\n\t\tconst className = 'menu-manager '+(this.state.hasBacks?\"back-visible\":\"\");\r\n\t\treturn this.props.children;\r\n\t}\r\n}","import React, { Component } from 'react';\r\nimport './HouseTypeFilter.css';\r\nimport CheckboxFilter from './CheckboxFilter';\r\nimport MenuType from '../enums/MenuType';\r\nimport Option from '../choices/Option';\r\nimport SubMenuHeader from './SubMenuHeader';\r\nimport ClickedOffManager from '../ui_core/ClickedOffManager';\r\nimport Once from '../core/Once';\r\nexport default class HouseTypeFilter extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props)\r\n\t\tconst {onSelectedOptionsChange} = props;\r\n\t\tthis._checkboxFilter=React.createRef();\r\n\t\tthis._subMenuHeader = React.createRef();\r\n\t\tthis._element = React.createRef();\r\n\t\tthis.load = this.load.bind(this);\r\n\t\tthis.show = this.show.bind(this);\r\n\t\tthis.hide= this.hide.bind(this);\r\n\t\tthis.setFromWhatAreYouLookingForViewModel= this.setFromWhatAreYouLookingForViewModel.bind(this);\r\n\t\tthis._setHouseTypeViewModelsToShow= this._setHouseTypeViewModelsToShow.bind(this);\r\n\t\tthis.filterPlots = this.filterPlots.bind(this);\r\n\t\tthis.clear = this.clear.bind(this);\r\n\t\tthis._updateOptions= this._updateOptions.bind(this);\r\n\t\t\r\n\t\tthis._handleSelectedOptionsChanged=this._handleSelectedOptionsChanged.bind(this);\r\n\t\t\r\n\t\tthis._iMenuManager = null;\r\n\t\tthis.state = {options:[], visible:false, siteJson:null};\r\n\t\tthis._clickedOffManager = new ClickedOffManager({elementRef:this._element, hide:this.hide});\r\n\t\tthis._selectedOptionsChangedOnce = new Once(onSelectedOptionsChange);\r\n\t}\r\n\tshow(){\r\n\t\tthis.setState({visible:true});\r\n\t\tthis._clickedOffManager.register();\r\n\t\tthis._iMenuManager.showMe(this);\r\n\t}\r\n\thide(){\r\n\t\tthis._clickedOffManager.dispose();\r\n\t\tthis.setState({visible:false});\r\n\t\tthis._iMenuManager.close();\r\n\t}\r\n\tfilterPlots(plotsArray){\r\n\t\tconst houseTypeViewModelsToShow = this._checkboxFilter.current.getCheckedValues();\r\n\t\tconst houseTypesToShow= [];\r\n\t\thouseTypeViewModelsToShow.forEach(houseTypeViewModelToShow=>{\r\n\t\t\thouseTypeViewModelToShow.houseTypesWithSameName.forEach(houseType=>houseTypesToShow.push(houseType));\r\n\t\t});\r\n\t\tif(houseTypesToShow.length<1)return plotsArray;\r\n\t\treturn plotsArray.filter(plot=>houseTypesToShow.indexOf(plot.houseType)>=0);\r\n\t}\r\n\tclear(){\r\n\t\tthis._houseTypesViewModel?.entries.forEach(houseTypeViewModel=>houseTypeViewModel.selected = false);\r\n\t\tthis._checkboxFilter.current.clear();\r\n\t}\r\n\tsetFromWhatAreYouLookingForViewModel(whatAreYouLookingForViewModel){\r\n\t\tconst houseTypeViewModels = whatAreYouLookingForViewModel.houseTypes;\r\n\t\tif(!houseTypeViewModels)return;\r\n\t\tthis._setHouseTypeViewModelsToShow(houseTypeViewModels);\r\n\t}\r\n\tsetIMenuManager(value){\r\n\t\tthis._iMenuManager = value;\r\n\t\tthis._subMenuHeader.current.setIMenuManager(value);\r\n\t}\r\n\tget menuType(){\r\n\t\treturn MenuType.HOUSE_TYPE_FILTER;\r\n\t}\r\n\tget isApplied(){\r\n\t\treturn this._checkboxFilter.current.isApplied;\r\n\t}\r\n\tload(houseTypesViewModel, siteJson){\r\n\t\tthis.setState({siteJson});\r\n\t\tthis._houseTypesViewModel = houseTypesViewModel;\r\n\t\tthis._updateOptions();\r\n\t}\r\n\t_handleSelectedOptionsChanged(o){\r\n\t\tconst houseTypesToShow= [];\r\n\t\tconst houseTypeViewModelsToShow = this._checkboxFilter.current.getCheckedValues();\r\n\t\tthis._setHouseTypeViewModelsToShow(houseTypeViewModelsToShow);\r\n\t}\r\n\t_setHouseTypeViewModelsToShow(houseTypeViewModelsToShow){\r\n\t\thouseTypeViewModelsToShow.forEach(houseTypeViewModelToShow=>{\r\n\t\t\thouseTypeViewModelToShow.selected = true;\r\n\t\t});\r\n\t\tthis._houseTypesViewModel.entries\r\n\t\t\t.filter(houseTypeViewModel=>houseTypeViewModelsToShow.indexOf(houseTypeViewModel)<0)\r\n\t\t\t.forEach(houseTypeViewModel=>houseTypeViewModel.selected = false);\r\n\t}\r\n\t_updateOptions(){\r\n\t\tconst options = this._houseTypesViewModel.entries.map((houseTypeViewModel)=>{\r\n\t\t\tconst option = new Option({text:(
    {houseTypeViewModel.name} 
    ),\r\n\t\t\t\tvalue:houseTypeViewModel});\r\n\t\t\thouseTypeViewModel.addEventListener('selectedchanged', ()=>{\r\n\t\t\t\tconst checkboxOption = this._checkboxFilter.current.getCheckboxOptions()\r\n\t\t\t\t.map(checkboxOption=>checkboxOption.ref.current)\r\n\t\t\t\t.filter(checkboxOption=>{\r\n\t\t\t\t\tconst value= checkboxOption.value;\r\n\t\t\t\t\treturn value===houseTypeViewModel;\r\n\t\t\t\t})[0];\r\n\t\t\t\tcheckboxOption.isChecked = houseTypeViewModel.selected;\r\n\t\t\t\tthis._selectedOptionsChangedOnce.trigger();\r\n\t\t\t});\r\n\t\t\treturn option;\r\n\t\t});\r\n\t\tthis._checkboxFilter.current.setOptions(options);\r\n\t}\r\n\trender() {\r\n\t\tlet className =\"house-type-filter menu\";\r\n\t\tif(this.state.visible)\r\n\t\t\tclassName+=\" visible\";\r\n\t\treturn (
    \r\n\t\t\t\t\r\n\t\t\t\t
    )\r\n\t}\r\n}\r\n","import ExtendableError from './ExtendableError';\r\nexport default class TypeError extends ExtendableError {\r\n\r\n}","import TypeError from '../errors/TypeError';\r\nimport NotImplementedError from '../errors/NotImplementedError';\r\nexport default class PlotFilterer{\r\n\tconstructor(props){\r\n\t\tthis._filters = [];\r\n\t}\r\n\taddPlotFilter(plotFilter){\r\n\t\tconst filterPlots = plotFilter.filterPlots;\r\n\t\tif(filterPlots===undefined||filterPlots===null)\r\n\t\t\tthrow new NotImplementedError(`The object of type ${plotFilter.constructor.name} did not have a .filterPlots method`);\r\n\t\tif(typeof(filterPlots)!=='function')\r\n\t\t\tthrow new TypeError('${plotFilter.constructor.name}.filterPlots was not a function');\r\n\t\tthis._filters.push(plotFilter);\r\n\t}\r\n\tget filtersApplied(){\r\n\t\tconst filters = this._filters;\r\n\t\tfor(var i=0; ifilter.clear());\r\n\t}\r\n\tfilterPlots(plots){\r\n\t\tthis._filters.forEach((filter)=>{\r\n\t\t\tplots = filter.filterPlots(plots);\r\n\t\t});\r\n\t\treturn plots;\t\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport './CheckboxFilterOption.css';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nconst {throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class KeyboardButton extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {value, icon, imgUrl, text, onClick}=props;\r\n\t\tif(value===undefined)throwNotProvided('value');\r\n\t\tthis._value = value;\r\n\t\t\r\n\t\tconst textNotProvided=(text===undefined||text===null);\r\n\t\tconst iconNotProvided = (icon===undefined||icon===null);\r\n\t\tconst imgNotProvided = (imgUrl===undefined||imgUrl ===null);\r\n\t\tif(textNotProvided&&iconNotProvided&&imgNotProvided)throwNotProvided('text or icon or imgUrl');\r\n\t\tif(!textNotProvided){\r\n\t\t\tif(typeof(text)!=='string')throwNotOfType('text', 'string');\r\n\t\t}\r\n\t\tthis._text = text;\r\n\t\tthis._icon = icon;\r\n\t\tthis._imgUrl = imgUrl;\r\n\t\t\r\n\t\tif(onClick===undefined||onClick===null)\r\n\t\t\tthrowNotProvided('onClick');\r\n\t\t\r\n\t\tif(typeof(onClick)!=='function')\r\n\t\t\tthrowNotOfType('onClick', 'function');\r\n\t\tthis._callbackClick = onClick;\r\n\t\t\r\n\t\tthis._handleClick = this._handleClick.bind(this);\r\n\t}\r\n\t_handleClick(){\r\n\t\tthis._callbackClick(this._value);\r\n\t}\r\n\trender() {\r\n\t\tconst content = this._text?this._text:(\r\n\t\tthis._imgUrl? ():());\r\n\t\treturn ();\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport './NumericalKeyboard.css';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport {faBackspace} from '@fortawesome/free-solid-svg-icons';\r\nimport KeyboardButton from './KeyboardButton';\r\nimport HashSource from '../core/HashSource';\r\nimport Urls from '../urls/Urls';\r\nconst {throwNotProvided} = ParameterErrors;\r\nexport default class NumericalKeyboard extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {onKey}=props;\r\n\t\tif(onKey===undefined||onKey===null)throwNotProvided('onKey');\r\n\t\tthis._onKey=onKey;\r\n\t\tthis._handleClickKeyboardButton = this._handleClickKeyboardButton.bind(this);\r\n\t\tthis._createButton = this._createButton.bind(this);\r\n\t}\r\n\t_handleClickKeyboardButton(key){\r\n\t\tthis._onKey(key);\r\n\t}\r\n\t_createButton(text, imgUrl, value, additionalClasses){\r\n\t\tconst className = \"keyboard-button-wrapper\"+(additionalClasses?(' '+additionalClasses):'');\r\n\t\treturn (
    \r\n\t\t\t\t\t
    );\r\n\t}\r\n\trender() {\r\n\t\tconst keyboardButtons = [];\r\n\t\t/*\r\n\t\tfor(var i=7; i>0; i-=3){\r\n\t\t\tfor(var j=i; j));\r\n\t\tkeyboardButtons.push(this._createButton(String(0), null, 48));\r\n\t\t//keyboardButtons.push((
    ));\r\n\t\tkeyboardButtons.push(this._createButton(null, Urls.assets+'icons/UI_Button_Filter_Clear.png', 8, 'backspace'));\r\n\t\treturn (
    \r\n\t\t\t{keyboardButtons}\r\n\t\t
    );\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport './PlotSearch.css';\r\nimport CheckboxFilter from './CheckboxFilter';\r\nimport MenuType from '../enums/MenuType';\r\nimport Option from '../choices/Option';\r\nimport Once from '../core/Once';\r\nimport SubMenuHeader from './SubMenuHeader';\r\nimport NumericalKeyboard from './NumericalKeyboard';\r\nimport ClickedOffManager from '../ui_core/ClickedOffManager';\r\nexport default class PlotSearch extends Component {\r\n\tstatic get _MAX_LENGTH(){\r\n\t\treturn 5;\r\n\t}\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {bedroomsFilterSettings, selectedPlot, onSelectedOptionsChange}=props;\r\n\t\tthis._callbackSelectedPlot=selectedPlot;\r\n\t\tthis._selectedOptionsChangedOnce = new Once(onSelectedOptionsChange);\r\n\t\tthis._checkboxFilter=React.createRef();\r\n\t\tthis._subMenuHeader = React.createRef();\r\n\t\tthis._element = React.createRef();\r\n\t\tthis._input = React.createRef();\r\n\t\tthis._options = [];\r\n\t\tthis.load = this.load.bind(this);\r\n\t\tthis._iMenuManager = null;\r\n\t\tthis.show = this.show.bind(this);\r\n\t\tthis.clear = this.clear.bind(this);\r\n\t\tthis.hide= this.hide.bind(this);\r\n\t\tthis._clickedOffManager = new ClickedOffManager({elementRef:this._element, hide:this.hide});\r\n\t\tthis._iMenuManager = null;\r\n\t\tthis._handleInput = this._handleInput.bind(this);\r\n\t\tthis._handleKey= this._handleKey.bind(this);\r\n\t\tthis._allowedKeyCodes=[8, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57]\r\n\t\tthis._units = null;\r\n\t\tthis.state = {options:[], visible:false, plotNumberStr:'', numberValid:true};\r\n\t\tthis._clickedOffHandle=null;\r\n\t}\r\n\tfilterPlots(plotsArray){\r\n\t\tif(this._selectedPlot)\r\n\t\t\treturn plotsArray.filter(plot=>this._selectedPlot ===plot);\r\n\t\treturn plotsArray;\r\n\t}\r\n\tshow(){\r\n\t\tthis.setState({visible:true});\r\n\t\tthis._clickedOffManager.register();\r\n\t\tthis._iMenuManager.showMe(this);\r\n\t}\r\n\thide(){\r\n\t\tthis._clickedOffManager.dispose();\r\n\t\tthis.setState({visible:false});\r\n\t\tif(this._callbackClose){\r\n\t\t\tthis._callbackClose();\r\n\t\t\tthis._callbackClose=null;\r\n\t\t}\r\n\t}\r\n\tsetIMenuManager(value){\r\n\t\tthis._iMenuManager = value;\r\n\t\tthis._subMenuHeader.current.setIMenuManager(value);\r\n\t}\r\n\tget menuType(){\r\n\t\treturn MenuType.PLOT_SEARCH;\r\n\t}\r\n\tload(units){\r\n\t\tthis._units = units;\r\n\t\tthis.clear();\r\n\t}\r\n\tclear(){\r\n\t\tif(this._selectedOptionsChangedOnce.triggered)return;\r\n\t\tthis.setState({plotNumberStr:''});\r\n\t\tthis._selectedPlot = null;\r\n\t}\r\n\t_handleInput(e){\r\n\t\te=e.nativeEvent;\r\n\t\tswitch(e.inputType){\r\n\t\t\tcase 'deleteContentBackward':\r\n\t\t\t\tthis._handleKey(8);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'insertText':\r\n\t\t\t\tthis._handleKey(e.data.charCodeAt(0));\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\t_handleKey(keyCode){\r\n\t\tconst allowedKey = this._allowedKeyCodes.indexOf(keyCode)>=0;\r\n\t\tif(!allowedKey)\r\n\t\t\treturn;\r\n\t\tlet plotNumberStr=this.state.plotNumberStr;\r\n\t\tif(plotNumberStr===null)plotNumberStr='';\r\n\t\tif(keyCode===8){\r\n\t\t\tif(plotNumberStr.length<1)return;\r\n\t\t\tplotNumberStr = plotNumberStr.substring(0, plotNumberStr.length-1);\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tconst hasSpace = this.state.plotNumberStr.length0?parseInt(plotNumberStr):null;\r\n\t\tconst plot = plotNumber===null?null:this._units.getPlotByNumber(plotNumber);\r\n\t\tconst plotValidAndNotAffordable=(plot!==undefined&&plot!==null)&&(!plot.affordable);\r\n\t\tconst numberValid = (plotNumberStr==='')||plotValidAndNotAffordable;\r\n\t\tthis.setState({plotNumberStr:plotNumberStr, numberValid:numberValid});\r\n\t\tthis._callbackSelectedPlot(plotValidAndNotAffordable?plot:null);\r\n\t\tconst previousSelectedPlot = this._selectedPlot;\r\n\t\tif(plotValidAndNotAffordable){\r\n\t\t\tthis._selectedPlot = plot;\r\n\t\t}\r\n\t\telse{\r\n\t\t\tthis._selectedPlot = null;\r\n\t\t}\r\n\t\tif(previousSelectedPlot!==this._selectedPlot)\r\n\t\t\tthis._selectedOptionsChangedOnce.trigger();\r\n\t}\r\n\trender() {\r\n\t\tlet className = \"plot-search menu\";\r\n\t\tif(this.state.visible)\r\n\t\t\tclassName+= \" visible\";\r\n\t\tlet classNamePlotNumber ='plot-number';\r\n\t\tclassNamePlotNumber+=this.state.numberValid?\" valid\":\" invalid\";\r\n\t\treturn (
    \r\n\t\t\t\t\t\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t
    Plot
    \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    );\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport './MouseBlocker.css';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nconst {throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class MouseBlocker extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props)\r\n\t\tconst{spinnerHandles}=props;\r\n\t\tthis._spinnerHandles = spinnerHandles;\r\n\t\tthis._spinnerHandlesChanged = this._spinnerHandlesChanged.bind(this);\r\n\t\tspinnerHandles.addEventListener('change', this._spinnerHandlesChanged);\r\n\t\tthis._handleClick= this._handleClick.bind(this);\r\n\t\tthis.state={visible:false};\r\n\t}\r\n\t_spinnerHandlesChanged(e){\r\n\t\tthis.setState({visible:e.hasHandles});\r\n\t}\r\n\t_handleClick(e){\r\n\t\tif(!e)e=window.event;\r\n\t\te.stopPropagation&&e.stopPropagation();\r\n\t\te.preventDefault&&e.preventDefault();\r\n\t}\r\n\trender() {\r\n\t\tlet className =\"mouse-blocker\";\r\n\t\tif(this.state.visible)\r\n\t\t\tclassName+=\" visible\";\r\n\t\treturn (
    \r\n\t\t\t\t
    );\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport './Menu.css';\r\nimport './IconButton.css';\r\nimport './SitePicker.css';\r\nimport Select from 'react-select';\r\nimport MenuType from '../enums/MenuType';\r\nimport IconButton from './IconButton';\r\nimport SubMenuHeader from './SubMenuHeader';\r\nimport ClickedOffManager from '../ui_core/ClickedOffManager';\r\nexport default class SitePicker extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props)\r\n\t\tconst {\r\n\t\t\tsetSite\r\n\t\t} = props;\r\n\t\tthis._setSite = setSite;\r\n\t\tthis._subMenuHeader = React.createRef();\r\n\t\tthis._element = React.createRef();\r\n\t\tthis._iMenuManager = null;\r\n\t\tthis.show = this.show.bind(this);\r\n\t\tthis.hide= this.hide.bind(this);\r\n\t\tthis._handleChange = this._handleChange.bind(this);\r\n\t\tthis.setSelectedSiteName = this.setSelectedSiteName.bind(this);\r\n\t\tthis._options = null;\r\n\t\tthis.state = {selectedOption:null, visible:false, options:[]};\r\n\t\tthis._clickedOffManager = new ClickedOffManager({elementRef:this._element, hide:this.hide});\r\n\t}\r\n\tshow(){\r\n\t\tthis.setState({visible:true});\r\n\t\tthis._clickedOffManager.register();\r\n\t\tthis._iMenuManager.showMe(this);\r\n\t}\r\n\thide(){\r\n\t\tthis._clickedOffManager.dispose();\r\n\t\tthis.setState({visible:false});\r\n\t\tthis._iMenuManager.close();\r\n\t}\r\n\tsetSelectedSiteName(value){\r\n\t\tthis.setState({selectedOption:this._options.filter(option=>option.value===value)[0]});\r\n\t}\r\n\tload(sites){\r\n\t\tthis._options = sites.getArray().map((site)=>{return {value:site.name, label:site.name};});\r\n\t\tthis.setState({options:this._options});\r\n\t}\r\n\tsetIMenuManager(value){\r\n\t\tthis._iMenuManager = value;\r\n\t\tthis._subMenuHeader.current.setIMenuManager(value);\r\n\t}\r\n\tget menuType(){\r\n\t\treturn MenuType.SITE_PICKER;\r\n\t}\r\n\t_handleChange(e){\r\n\t\tconst {value }= e;\r\n\t\tthis._setSite(value);\r\n\t}\r\n\trender() {\r\n\t\tlet className = \"site-picker menu\";\r\n\t\tif(this.state.visible)\r\n\t\t\tclassName+=\" visible\";\r\n\t\treturn (
    \r\n\t\t\t\t\r\n\t\t\t
    \r\n\t\t\t
    )\r\n\t}\r\n}","function getViewportDimensions(){\r\n\tif(typeof document.documentElement !='undefined' &&\r\n\ttypeof document.documentElement.clientWidth !='undefined' &&\r\n\tdocument.documentElement.clientWidth!=0)\r\n\t\treturn [document.documentElement.clientWidth,document.documentElement.clientHeight];\r\n\tif(typeof window.innerWidth != 'undefined')\r\n\t\treturn [window.innerWidth,window.innerHeight];\r\n\tvar body = document.getElementsByTagName('body')[0];\r\n\treturn [body.clientWidth, body.clientHeight];\r\n}\r\nexport default getViewportDimensions;","const EdgeLocation={ TOP_LEFT:'top-left',TOP_CENTER:'top-center', TOP_RIGHT:'top-right', MIDDLE_RIGHT:'middle-right',\r\nBOTTOM_RIGHT:'bottom-right', BOTTOM_CENTER:'bottom-center', BOTTOM_LEFT:'bottom-lefft', MIDDLE_LEFT:'middle-left'};\r\nexport default EdgeLocation;","import React, { Component } from 'react';\r\nimport './PopupMenu.css';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport getAbsolute from '../ui_core/getAbsolute';\r\nimport Rect from '../geometry/Rect';\r\nimport Once from '../core/Once';\r\nimport EventNormalizer from '../core/EventNormalizer';\r\nimport getViewportDimensions from '../ui_core/getViewportDimensions';\r\nimport EdgeLocation from '../ui_core/EdgeLocation';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class PopupMenu extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props)\r\n\t\tconst {className, edgeLocation, onHide}=props;\r\n\t\tthis._callbackOnHide = onHide;\r\n\t\tthis._edgeLocation=edgeLocation;\r\n\t\tthis._className=className;\r\n\t\tthis._inner = React.createRef();\r\n\t\tthis._elementRef = React.createRef();\r\n\t\tthis.show = this.show.bind(this);\r\n\t\tthis.hide = this.hide.bind(this);\r\n\t\tthis._repositionVerticallySoOnPage = this._repositionVerticallySoOnPage.bind(this);\r\n\t\tthis._repositionHorizontallySoOnPage = this._repositionHorizontallySoOnPage.bind(this);\r\n\t\tthis._startWatchingForClickOff = this._startWatchingForClickOff.bind(this);\r\n\t\tthis._startWatchingMouseForLeave = this._startWatchingMouseForLeave.bind(this);\r\n\t\tthis._checkMouseWithinBoundsAndAct = this._checkMouseWithinBoundsAndAct.bind(this);\r\n\t\tthis._doResposition= this._doResposition.bind(this);\r\n\t\tthis._getCurrentRect= this._getCurrentRect.bind(this);\r\n\t\tthis._mouseMove = this._mouseMove.bind(this);\r\n\t\tthis._mouseDown = this._mouseDown.bind(this);\r\n\t\tthis._touchStart = this._touchStart.bind(this);\r\n\t\tthis._setVisible = this._setVisible.bind(this);\r\n\t\tthis._setLeft= this._setLeft.bind(this);\r\n\t\tthis._setTop= this._setTop.bind(this);\r\n\t\tthis._setRelocated= this._setRelocated.bind(this);\r\n\t\tthis._showing = false;\r\n\t\tthis._checkMouseWithinBoundsAndActOnce = new Once(this._checkMouseWithinBoundsAndAct);\r\n\t\tthis.state = {relocated:false};\r\n\t}\r\n\tshow({position, getMouseInSourceBounds, untilClickOff}){\r\n\t\tsetTimeout(()=>{\r\n\t\t\tthis._showing = true;\r\n\t\t\tthis._getMouseInSourceBounds=getMouseInSourceBounds;\r\n\t\t\tthis._dueReposition=true;\r\n\t\t\tthis._setLeft(position?position[0]:0);\r\n\t\t\tthis._setTop(position?position[1]:0);\r\n\t\t\tsetTimeout(this._doResposition, 0);\r\n\t\t\tthis._setVisible(true);\r\n\t\t\tthis._setRelocated(true);\r\n\t\t\tsetTimeout(untilClickOff?this._startWatchingForClickOff:this._startWatchingMouseForLeave,0);\r\n\t\t}, 0);\r\n\t}\r\n\t_setLeft(left){\r\n\t\tconst element = this._elementRef.current;\r\n\t\telement.style.left = `${left}px`;\r\n\t}\r\n\t_setTop(top){\r\n\t\tconst element = this._elementRef.current;\r\n\t\telement.style.top = `${top}px`;\r\n\t}\r\n\t_setVisible(visible){\r\n\t\tconst element = this._elementRef.current;\r\n\t\tif(visible)\r\n\t\t\telement.classList.add('visible');\r\n\t\telse \r\n\t\t\telement.classList.remove('visible');\r\n\t}\r\n\t_setRelocated(relocated){\r\n\t\tconst element = this._elementRef.current;\r\n\t\tif(relocated){\r\n\t\t\telement.classList.add('relocated');\r\n\t\t\telement.classList.remove('did-not-relocate');\r\n\t\t\treturn;\r\n\t\t}\r\n\t\telement.classList.add('did-not-relocate');\r\n\t\telement.classList.remove('relocated');\r\n\t}\r\n\t_startWatchingMouseForLeave(){\r\n\t\tdocument.documentElement.addEventListener('mousemove', this._mouseMove);\r\n\t\tdocument.documentElement.addEventListener('touchstart', this._touchStart);\r\n\t\tthis._currentRect = this._getCurrentRect();\r\n\t}\r\n\t_startWatchingForClickOff(){\r\n\t\tdocument.documentElement.addEventListener('mousedown', this._mouseDown);\r\n\t\tdocument.documentElement.addEventListener('touchstart', this._touchStart);\r\n\t\tthis._currentRect = this._getCurrentRect();\r\n\t}\r\n\t_getCurrentRect(){\r\n\t\tconst inner = this._inner.current;\r\n\t\tconst absolutePosition = getAbsolute(inner);\r\n\t\treturn new Rect({x:absolutePosition.left, y:absolutePosition.top, width:inner.offsetWidth, height:inner.offsetHeight});\r\n\t}\r\n\t_mouseMove(e){\r\n\t\tthis._checkMouseWithinBoundsAndAct(e);\r\n\t}\r\n\t_mouseDown(e){\r\n\t\tEventNormalizer.addFriendlyXYToMouse(e);\r\n\t\tthis._checkMouseWithinBoundsAndActOnce.trigger(e);\r\n\t}\r\n\t_touchStart(e){\r\n\t\tEventNormalizer.addFriendlyXYToTouch(e);\r\n\t\tthis._checkMouseWithinBoundsAndActOnce.trigger(e);\r\n\t}\r\n\t_checkMouseWithinBoundsAndAct(e){\r\n\t\tconst x = e.x;\r\n\t\tconst y = e.y;\r\n\t\tconst point = [x,y];\r\n\t\tif(this._getMouseInSourceBounds&&this._getMouseInSourceBounds(point))return;\r\n\t\tif(!this._currentRect.containsPoint(point))\r\n\t\t\tthis.hide();\r\n\t}\r\n\thide(){\r\n\t\tif(!this._showing)return;\r\n\t\tthis._showing = false;\r\n\t\tthis._setVisible(false);\r\n\t\tdocument.documentElement.removeEventListener('mousemove', this._mouseMove);\r\n\t\tdocument.documentElement.removeEventListener('mousedown', this._mouseDown);\r\n\t\tdocument.documentElement.removeEventListener('touchstart', this._touchStart);\r\n\t\tthis._callbackOnHide&&this._callbackOnHide();\r\n\t}\r\n\t_doResposition(){\r\n\t\tconst innerElement = this._inner.current;\r\n\t\tconst viewportDimensions = getViewportDimensions();\r\n\t\tconst currentRect = this._getCurrentRect();\r\n\t\tconst relocatedVertically = this._repositionVerticallySoOnPage(currentRect, viewportDimensions);\r\n\t\tconst relocatedHorizontally = this._repositionHorizontallySoOnPage(currentRect, viewportDimensions);\r\n\t\tconst relocated = relocatedVertically||relocatedHorizontally;\r\n\t\tthis._setRelocated(relocated);\r\n\t}\r\n\t_repositionVerticallySoOnPage(currentRect, viewportDimensions){\r\n\t\tconst height = currentRect.height;\r\n\t\tconst fromTopOfViewPort = currentRect.y;\r\n\t\tconst fromBottomOfViewPort = viewportDimensions[1]-(fromTopOfViewPort+height);\r\n\t\tlet newTop;\r\n\t\tif(fromTopOfViewPort<0){\r\n\t\t\tnewTop=0;\r\n\t\t\tif(fromTopOfViewPort+fromBottomOfViewPort<0){\r\n\t\t\t\tnewTop = -(height-viewportDimensions[1])/2;\r\n\t\t\t}\r\n\t\t}\r\n\t\telse if (fromBottomOfViewPort<0){\r\n\t\t\t newTop = viewportDimensions[1]-height;\r\n\t\t\tif(fromTopOfViewPort+fromBottomOfViewPort<0){\r\n\t\t\t\tnewTop = -(height-viewportDimensions[1])/2;\r\n\t\t\t}\r\n\t\t}\r\n\t\telse return false;\r\n\t\tlet correctionForEdgeLocation=0;\r\n\t\tswitch(this._edgeLocation){\r\n\t\t\tcase EdgeLocation.TOP_LEFT:\r\n\t\t\tcase EdgeLocation.TOP_RIGHT:\r\n\t\t\tcase EdgeLocation.TOP_CENTER:\r\n\t\t\t\tbreak;\r\n\t\t\tcase EdgeLocation.MIDDLE_RIGHT:\r\n\t\t\tcase EdgeLocation.MIDDLE_LEFT:\r\n\t\t\t\tcorrectionForEdgeLocation=height/2;\r\n\t\t\t\tbreak;\r\n\t\t\tcase EdgeLocation.BOTTOM_RIGHT:\r\n\t\t\tcase EdgeLocation.BOTTOM_LEFT:\r\n\t\t\tcase EdgeLocation.BOTTOM_CENTER:\r\n\t\t\t\tcorrectionForEdgeLocation=height;\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t\tnewTop+= correctionForEdgeLocation;\r\n\t\tthis._setTop(newTop);\r\n\t\treturn true;\r\n\t}\r\n\t_repositionHorizontallySoOnPage(currentRect, viewportDimensions){\t\r\n\t\tconst width = currentRect.width;\r\n\t\tconst fromLeftOfViewPort = currentRect.x;\r\n\t\tconst fromRightOfViewPort = viewportDimensions[0]-(fromLeftOfViewPort+width);\r\n\t\tlet newLeft;\r\n\t\tif(fromLeftOfViewPort<0){\r\n\t\t\tnewLeft=0;\r\n\t\t\tif(fromLeftOfViewPort+fromRightOfViewPort<0){\r\n\t\t\t\tnewLeft = -(width-viewportDimensions[0])/2;\r\n\t\t\t}\r\n\t\t}\r\n\t\telse if (fromRightOfViewPort<0){\r\n\t\t\tnewLeft = viewportDimensions[0]-width;\r\n\t\t\tif(fromLeftOfViewPort+fromRightOfViewPort<0){\r\n\t\t\t\tnewLeft = -(width-viewportDimensions[0])/2;\r\n\t\t\t}\r\n\t\t}\r\n\t\telse return false;\r\n\t\tlet correctionForEdgeLocation=0;\r\n\t\tswitch(this._edgeLocation){\r\n\t\t\tcase EdgeLocation.TOP_LEFT:\r\n\t\t\tcase EdgeLocation.BOTTOM_LEFT:\r\n\t\t\tcase EdgeLocation.MIDDLE_LEFT:\r\n\t\t\t\tbreak;\r\n\t\t\tcase EdgeLocation.TOP_CENTER:\r\n\t\t\tcase EdgeLocation.BOTTOM_CENTER:\r\n\t\t\t\tcorrectionForEdgeLocation=width/2;\r\n\t\t\t\tbreak;\r\n\t\t\tcase EdgeLocation.TOP_RIGHT:\r\n\t\t\tcase EdgeLocation.MIDDLE_RIGHT:\r\n\t\t\tcase EdgeLocation.BOTTOM_RIGHT:\r\n\t\t\t\tcorrectionForEdgeLocation=width;\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t\tnewLeft+=correctionForEdgeLocation;\r\n\t\tthis._setLeft(newLeft);\r\n\t\treturn true;\r\n\t}\r\n\trender() {\r\n\t\tlet className = `popup-menu`; \r\n\t\tconst innerClassName=`inner ${this._edgeLocation} ${this._className}`;\r\n\t\treturn (
    \r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t{this.props.children}\r\n\t\t\t\t\t
    \r\n\t\t\t\t
    )\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport ParameterErrors from '../../errors/ParameterErrors';\r\nimport ParameterError from '../../errors/ParameterError';\r\nconst{throwNotProvided}=ParameterErrors;\r\nexport default class TabPanel_Panel extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {active}=props;\r\n\t\tthis.state = {active:active?true:false};\r\n\t\tthis._child = props.children;\r\n\t\tif(this._child===undefined||this._child===null)\r\n\t\t\tthrowNotProvided('single children entry');\r\n\t\tif(Array.isArray(this._child))\r\n\t\t\tthrow ParameterError('Only one child is accepted');\r\n\t}\r\n\tget tabInfo(){\r\n\t\treturn this._tabInfo;\r\n\t}\r\n\tset active(value){\r\n\t\tthis.setState({active:value});\r\n\t}\r\n\tcomponentDidMount(){\r\n\t\tconst tabInfo = this.props.children.ref.current.tabInfo;\r\n\t\tthis.setState({tabInfo:tabInfo});\r\n\t\tthis._tabInfo = tabInfo;\r\n\t}\r\n\trender() {\r\n\t\tlet className = \"tab-panel-panel\";\r\n\t\tif(this.state.active)\r\n\t\t\tclassName+=\" active\";\r\n\t\treturn (
    \r\n\t\t\t{this.props.children}\r\n\t\t\t\t
    )\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nexport default class TabPanel_Tab extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {panel, tabInfo, setActive, active}=props;\r\n\t\tthis._setActive = setActive\r\n\t\tthis._panel = panel;\r\n\t\tthis._tabInfo = tabInfo;\r\n\t\tthis._handleSetActive = this._handleSetActive.bind(this);\r\n\t\tthis.state = {active:active?true:false};\r\n\t}\r\n\t_handleSetActive(){\r\n\t\tthis._setActive(this, this._panel.ref.current);\r\n\t}\r\n\tset active(value){\r\n\t\tthis.setState({active:value});\r\n\t}\r\n\trender() {\r\n\t\tlet className = \"tab-panel-tab\";\r\n\t\tif(this.state.active)\r\n\t\t\tclassName+=\" active\";\r\n\t\tconst tabInfoClassName = this._tabInfo?.className;\r\n\t\tif(tabInfoClassName)\r\n\t\t\tclassName+=' '+tabInfoClassName;\r\n\t\treturn (
    \r\n\t\t
    \r\n\t\t\t{this._tabInfo.title}\r\n\t\t\t
    \r\n\t\t\t\t
    )\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport ParameterError from '../errors/ParameterError';\r\nimport TabPanel_Panel from './tabs/TabPanel_Panel';\r\nimport TabPanel_Tab from './tabs/TabPanel_Tab';\r\nimport HashSource from '../core/HashSource';\r\nimport './TabPanel.css';\r\nconst{throwNotProvided}=ParameterErrors;\r\nexport default class TabPanel extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props)\r\n\t\tthis._element = React.createRef();\r\n\t\tconst {defaultActiveTabIndex, onSetActive}= props;\r\n\t\tthis.setActive= this.setActive.bind(this);\r\n\t\tthis._callbackSetActive= onSetActive;\r\n\t\tconst panels = [];\r\n\t\tlet index=0;\r\n\t\tthis._defaultActiveTabIndex = defaultActiveTabIndex;\r\n\t\tthis.props.children.forEach(child=>{\r\n\t\t\tconst panelRef=React.createRef();\r\n\t\t\tconst active = index===defaultActiveTabIndex;\r\n\t\t\tconst childTabKey = child?.props?.tabKey;\r\n\t\t\tconst tabKey = childTabKey!==undefined&&childTabKey!==null?childTabKey:HashSource.next();\r\n\t\t\tconst panel = ({child});\r\n\t\t\tpanels.push(panel);\r\n\t\t\tindex++;\r\n\t\t});\r\n\t\tthis.state={tabs:[], panels:panels}\r\n\t}\r\n\tsetActive(tabKey){\r\n\t\tthis.state.tabs.forEach(tab=>{\r\n\t\t\tconst tabElement = tab.ref.current;\r\n\t\t\tconst active = tab.key===tabKey;\r\n\t\t\ttabElement.active= active;\r\n\t\t});\r\n\t\tthis.state.panels.forEach(panel=>{\r\n\t\t\tconst panelElement = panel.ref.current;\r\n\t\t\tconst active = panel.key===tabKey;\r\n\t\t\tpanelElement.active= active;\r\n\t\t});\r\n\t\tthis._callbackSetActive&&this._callbackSetActive(tabKey);\r\n\t}\r\n\tcomponentDidMount(){\r\n\t\tlet index=0;\r\n\t\tconst tabs =[];\r\n\t\tthis.state.panels.forEach(panel=>{\r\n\t\t\tconst tabRef = React.createRef();\r\n\t\t\tconst active = index===this._defaultActiveTabIndex;\r\n\t\t\tconst tab = (this.setActive(panel.key)} key={panel.key}>);\r\n\t\t\ttabs.push(tab);\r\n\t\t\tindex++;\r\n\t\t});\r\n\t\tthis.setState({tabs:tabs});\r\n\t\t\r\n\t}\r\n\trender() {\r\n\t\treturn (
    \r\n\t\t\t
    {this.state.tabs}
    \r\n\t\t\t
    {this.state.panels}
    \r\n\t\t
    )\r\n\t}\r\n}\r\n","import eventEnable from '../core/eventEnable';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nconst{throwNotProvided}=ParameterErrors;\r\nexport default class TabInfo{\r\n\tconstructor(props){\r\n\t\tconst {title, className}=props;\r\n\t\tif(title===undefined||title===null)throwNotProvided('title');\r\n\t\tthis._title = title;\r\n\t\tthis._className = className;\r\n\t}\r\n\tget title(){\r\n\t\treturn this._title;\r\n\t}\r\n\tget className(){\r\n\t\treturn this._className;\r\n\t}\r\n}","import React, { Component } from 'react';\r\nimport './ImageCarousel.css';\r\nimport DynamicImageFitCriteria from '../images/DynamicImageFitCriteria';\r\nimport DynamicImage from '../images/DynamicImage';\r\nimport FitType from '../images/FitType';\r\nimport UrlHelper from '../core/UrlHelper';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport { faExpand} from '@fortawesome/free-solid-svg-icons';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class ImageCarousel extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props)\r\n\t\tconst {className, images, aspectRatioThreshold, getContainerViewPort, onExpandImage, rootUrl}=props;\r\n\t\tthis._rootUrl = rootUrl?UrlHelper.makeSureSlashOnEnd(rootUrl):null;\r\n\t\tthis._className = className;\r\n\t\tthis._callbackExpandImage = onExpandImage;\r\n\t\tif(getContainerViewPort===undefined||getContainerViewPort===null)throwNotProvided('getContainerViewPort');\r\n\t\tthis._getContainerViewPort = getContainerViewPort;\r\n\t\tthis._getContainerAspectRatio = this._getContainerAspectRatio.bind(this);\r\n\t\tthis._getVerticalElseHorizontal = this._getVerticalElseHorizontal.bind(this);\r\n\t\tthis.calculateAndUpdateVerticalOrHorizontal = this.calculateAndUpdateVerticalOrHorizontal.bind(this);\r\n\t\tthis._handleClickExpand= this._handleClickExpand.bind(this);\r\n\t\tthis._createImageElements= this._createImageElements.bind(this);\r\n\t\tthis._element = React.createRef();\r\n\t\tthis._dynamicImageFitCriteriaVertical = new DynamicImageFitCriteria({fitType:FitType.WIDTH});\r\n\t\tthis._dynamicImageFitCriteriaHorizontal = new DynamicImageFitCriteria({fitType:FitType.HEIGHT});\r\n\t\tthis.state ={imageElements:[], verticalElseHorizontal:false};\r\n\t}\r\n\tcomponentDidUpdate(previousProps){\r\n\t\tconst imagesChanged = previousProps.images!==this.props.images;\r\n\t\tconst rootUrlChanged = previousProps.rootUrl!==this.props.rootUrl;\r\n\t\tif(imagesChanged){\r\n\t\t\tthis._images = this.props.images;\r\n\t\t}\r\n\t\tif(rootUrlChanged){\r\n\t\t\tconst rootUrl = this.props.rootUrl;\r\n\t\t\tthis._rootUrl = rootUrl?UrlHelper.makeSureSlashOnEnd(rootUrl):null;\r\n\t\t}\r\n\t\tif(imagesChanged||rootUrlChanged){\r\n\t\t\tthis.calculateAndUpdateVerticalOrHorizontal();\r\n\t\t\tthis._createImageElements();\r\n\t\t}\r\n\t}\r\n\tcomponentDidMount(){\r\n\t\tthis.calculateAndUpdateVerticalOrHorizontal();\r\n\t}\r\n\tcalculateAndUpdateVerticalOrHorizontal(){\r\n\t\tconst verticalElseHorizontal = this._getVerticalElseHorizontal();\r\n\t\tif(this.state.verticalElseHorizontal===verticalElseHorizontal)return;\r\n\t\tthis.setState({verticalElseHorizontal:verticalElseHorizontal});\r\n\t}\r\n\t_createImageElements(){\r\n\t\tif(!this._images){\r\n\t\t\tthis.setState({imageElements:[]});\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst verticalElseHorizontal = this._getVerticalElseHorizontal();\r\n\t\tconst imageElements = [];\r\n\t\tthis._images.forEach((image)=>{\r\n\t\t\tlet relativeUrl;\r\n\t\t\tif(image instanceof DynamicImage){\r\n\t\t\t\tconst viewPort = this._getContainerViewPort();\r\n\t\t\t\tconst dynamicImageEntry = image.getBestEntryToFit(verticalElseHorizontal\r\n\t\t\t\t?{fitCriteria:this._dynamicImageFitCriteriaVertical, width:viewPort[0]}\r\n\t\t\t\t:{fitCriteria:this._dynamicImageFitCriteriaHorizontal, height:viewPort[1]});\r\n\t\t\t\tif(dynamicImageEntry===undefined||dynamicImageEntry===null)\r\n\t\t\t\t\tthrow new Error('No dynamicImageEntry was returned');\r\n\t\t\t\trelativeUrl = dynamicImageEntry.relativePath;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tif(typeof(image )!=='string')\r\n\t\t\t\t\tthrow new Error('Not implemented');\r\n\t\t\t\trelativeUrl = image;\r\n\t\t\t}\r\n\t\t\tconst url = (this._rootUrl===null?'':this._rootUrl)+UrlHelper.removeStartSlash(relativeUrl);\r\n\t\t\timageElements.push((
    {\r\n\t\t\t\tthis._handleClickExpand(image);\r\n\t\t\t}}/>
    ))\r\n\t\t});\r\n\t\tthis.setState({imageElements:imageElements});\r\n\t}\r\n\t_getContainerAspectRatio(){\r\n\t\tconst containerViewPortDimensions = this._getContainerViewPort();\r\n\t\t let aspectRatio = containerViewPortDimensions[0]/containerViewPortDimensions[1];\r\n\t\t if(isNaN(aspectRatio))return 1;\r\n\t\t return aspectRatio;\r\n\t}\r\n\t_getVerticalElseHorizontal(){\t\t\r\n\t\tconst containerAspectRatio = this._getContainerAspectRatio();\r\n\t\tconst verticalElseHorizontal = this._aspectRatioThreshold>containerAspectRatio;\r\n\t\treturn verticalElseHorizontal;\r\n\t}\r\n\t_handleClickExpand(image){\r\n\t\tlet largestImageUrl;\r\n\t\tif(image instanceof DynamicImage){\r\n\t\t\tlargestImageUrl = image.getLargestEntry().relativePath;\r\n\t\t}\r\n\t\telse{\r\n\t\t\tif(typeof(image)!=='string'){\r\n\t\t\t\tthrow new Error(`Not implemented for type ${typeof(image)}`);\r\n\t\t\t}\r\n\t\t\tlargestImageUrl = image;\r\n\t\t}\r\n\t\tthis._callbackExpandImage({image:largestImageUrl, rootUrl:this._rootUrl});\r\n\t}\r\n\trender() {\r\n\t\tlet className = 'image-carousel';\r\n\t\tif(this._className)\r\n\t\t\tclassName+=` ${this._className}`;\r\n\t\tclassName+=this.state.verticalElseHorizontal?' vertical':' horizontal';\r\n\t\treturn (
    \r\n\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t{this.state.imageElements}\r\n\t\t\t\t
    \r\n\t\t\t
    )\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport './JumpableZoomableDragable.css';\r\nimport TwoFingerTouch from '../ui_core/TwoFingerTouch';\r\nimport ZoomableDragable from './ZoomableDragable';\r\nimport IconButton from './IconButton';\r\nimport DynamicImage from '../images/DynamicImage';\r\nimport FitType from '../images/FitType';\r\nimport UrlHelper from '../core/UrlHelper';\r\nimport Urls from '../urls/Urls';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nconst{throwNotProvided}=ParameterErrors;\r\nexport default class JumpableZoomableDragable extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {className, images, updateExternalZoomSource, zoomMax, zoomMin, rootUrl}=props;\r\n\t\tthis._className=className;\r\n\t\tthis._zoomMax = zoomMax;\r\n\t\tthis._zoomMin = zoomMin;\r\n\t\tthis._updateExternalZoomSource=updateExternalZoomSource?updateExternalZoomSource:null;\r\n\t\tthis._loadImage= this._loadImage.bind(this);\r\n\t\tthis._rootUrl = rootUrl?UrlHelper.makeSureSlashOnEnd(rootUrl):null;\r\n\t\tthis._elementRef = React.createRef();\r\n\t\tthis._zoomableDragableRef = React.createRef();\r\n\t\tthis._getAspectRatio= this._getAspectRatio.bind(this);\r\n\t\tthis._handleClickLeft= this._handleClickLeft.bind(this);\r\n\t\tthis._handleClickRight= this._handleClickRight.bind(this);\r\n\t\tthis.state={noMoreLeft:true, noMoreRight:true};\r\n\t\tthis._index = 0;\r\n\t}\r\n\t_getAspectRatio(){\r\n\t\tconst element = this._elementRef.current;\r\n\t\tif(element===null)return 1;\r\n\t\treturn element.offsetWidth/element.offsetHeight;\r\n\t}\r\n\tcomponentDidUpdate(previousProps){\r\n\t\tconst imagesChanged = previousProps.images!==this.props.images;\r\n\t\tconst rootUrlChanged = previousProps.rootUrl!==this.props.rootUrl;\r\n\t\tif(imagesChanged){\r\n\t\t\tthis._images = this.props.images;\r\n\t\t\tthis.setState({noMoreLeft:true, noMoreRight:this._images.length<=1});\r\n\t\t}\r\n\t\tif(rootUrlChanged){\r\n\t\t\tconst rootUrl = this.props.rootUrl;\r\n\t\t\tthis._rootUrl = rootUrl?UrlHelper.makeSureSlashOnEnd(rootUrl):null;\r\n\t\t}\r\n\t\tif(imagesChanged||rootUrlChanged){\r\n\t\t\t\tthis._index=0;\r\n\t\t\t\tthis._loadImage();\r\n\t\t}\r\n\t}\r\n\t_loadImage(){\r\n\t\tconst hasAtLeastOneImage = this._images&&(this._images.length>0);\r\n\t\tif(!hasAtLeastOneImage)return;\r\n\t\tconst dynamicImageOrImagePathString = this._images[this._index];\r\n\t\tconst isImagePathString = typeof(dynamicImageOrImagePathString)==='string';\r\n\t\tconst relativeUrl = isImagePathString\r\n\t\t\t?dynamicImageOrImagePathString\r\n\t\t\t:dynamicImageOrImagePathString.getLargestEntry().relativePath;\r\n\t\tconst url = (this._rootUrl===null?'':this._rootUrl)+UrlHelper.removeStartSlash(relativeUrl);\r\n\t\tconst fitToHeight = false;\r\n\t\tthis._zoomableDragableRef.current.load(url, fitToHeight);\r\n\t}\r\n\t_handleClickLeft(){\r\n\t\tthis._index-=1;\r\n\t\tconst noMoreLeft = this._index<=0;\r\n\t\tif(noMoreLeft){\r\n\t\t\tthis._index=0;\r\n\t\t}\r\n\t\tthis.setState({noMoreLeft:noMoreLeft, noMoreRight:false});\r\n\t\tthis._loadImage();\r\n\t}\r\n\t_handleClickRight(){\r\n\t\tif(!this._images)return;\r\n\t\tthis._index+=1;\r\n\t\tconst noMoreRight = this._index>=this._images.length-1;\r\n\t\tif(noMoreRight){\r\n\t\t\tthis._index=this._images.length-1;\r\n\t\t}\r\n\t\tthis.setState({noMoreRight:noMoreRight, noMoreLeft:false});\r\n\t\tthis._loadImage();\r\n\t}\r\n\trender() {\r\n\t\tlet className = \"jumpable-zoomable-dragable\";\r\n\t\tif(this._className)\r\n\t\t\tclassName+=' '+this._className;\r\n\t\tif(this.state.noMoreLeft)\r\n\t\t\tclassName+=' no-more-left';\r\n\t\tif(this.state.noMoreRight)\r\n\t\t\tclassName+=' no-more-right';\r\n\t\treturn (\r\n\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t
    );\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport TabInfo from '../ui_core/TabInfo';\r\nimport ImageCarousel from './ImageCarousel';\r\nimport JumpableZoomableDragable from './JumpableZoomableDragable';\r\nimport AssetsManager from '../assets_management/AssetsManager';\r\nimport Urls from '../urls/Urls';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class PlotMoreInformationFloorPlans extends Component {\r\n\tstatic get _IMAGE_CAROUSEL_ASPECT_RATIO_THRESHOLD(){\r\n\t\treturn 1.5;\r\n\t}\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {getViewPort, onExpandImage, configuration}=props;\r\n\t\tthis._configuration = configuration;\r\n\t\tthis._callbackExpandImage = onExpandImage;\r\n\t\tthis._getContainerViewPort = getViewPort;\r\n\t\tthis._element = React.createRef();\r\n\t\tthis._tabInfo = new TabInfo({title:'Floor plans', className:'floor-plans-tab'});\r\n\t\tthis.state={site:null, plot:null, images:null};\r\n\t}\r\n\tget tabInfo(){\r\n\t\treturn this._tabInfo;\r\n\t}\r\n\tload(site, plot){\r\n\t\tthis.setState({site:site, plot:plot});\r\n\t\tthis._loadFloorPlanImages(site, plot);\r\n\t}\r\n\t_loadFloorPlanImages(site, plot){\r\n\t\tthis.setState({images:plot.floorPlanImages});\r\n\t}\r\n\trender(){\r\n\t\tconst rootUrl = Urls.getAssetsForSite(this._configuration.siteSlug);\r\n\t\t return this._configuration.scrollablePlotMoreInformationGalleryAndFloorPlansElseSingleJumpableZoomableDragableImages\r\n\t\t?(\r\n\t\t)\r\n\t\t:(\r\n\t\t\r\n\t\t);\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport TabInfo from '../ui_core/TabInfo';\r\nimport ImageCarousel from './ImageCarousel';\r\nimport Urls from '../urls/Urls';\r\nimport JumpableZoomableDragable from './JumpableZoomableDragable';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class PlotMoreInformationGallery extends Component {\r\n\tstatic get _IMAGE_CAROUSEL_ASPECT_RATIO_THRESHOLD(){\r\n\t\treturn 1.5;\r\n\t}\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {getViewPort, onExpandImage, configuration}=props;\r\n\t\tthis._configuration= configuration;\r\n\t\tthis._callbackExpandImage = onExpandImage;\r\n\t\tthis._getContainerViewPort = getViewPort;\r\n\t\tthis._element = React.createRef();\r\n\t\tthis._tabInfo = new TabInfo({title:'Gallery', className:'gallery-tab'});\r\n\t\tthis._loadRoomImages = this._loadRoomImages.bind(this);\r\n\t\tthis.state={site:null, plot:null, images:null};\r\n\t}\r\n\tget tabInfo(){\r\n\t\treturn this._tabInfo;\r\n\t}\r\n\tload(site, plot){\r\n\t\tthis.setState({site:site, plot:plot});\r\n\t\tthis._loadRoomImages(site, plot);\r\n\t}\r\n\t_loadRoomImages(site, plot){\r\n\t\tlet images = [];\r\n\t\tplot.rooms.getArray().forEach((room)=>{\r\n\t\t\tconst roomImages=room.images;\r\n\t\t\timages = images.concat(roomImages);\r\n\t\t});\r\n\t\tthis.setState({images:images});\r\n\t}\r\n\trender(){\r\n\t\tconst rootUrl = Urls.getAssetsForSite(this._configuration.siteSlug);\r\n\t\treturn this._configuration.scrollablePlotMoreInformationGalleryAndFloorPlansElseSingleJumpableZoomableDragableImages?\r\n\t\t(\r\n\t\t\r\n\t\t):\r\n\t\t(\r\n\t\t\r\n\t\t);\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport TabInfo from '../ui_core/TabInfo';\r\nimport Star from './Star';\r\nimport { faBed, faToilet} from '@fortawesome/free-solid-svg-icons'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport PropertyBindingFactory from '../mvvm/PropertyBindingFactory';\r\nimport enableBindingToOthers from '../mvvm/enableBindingToOthers';\r\nimport { faStreetView} from '@fortawesome/free-solid-svg-icons';\r\nimport IconButton from './IconButton';\r\nimport PlotStatus from '../site/PlotStatus';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class PlotMoreInformationOverview extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tenableBindingToOthers(this);\r\n\t\tconst {removeFavourite, addFavourite, showStreetView}=props;\r\n\t\tthis._star = React.createRef();\r\n\t\tthis._elementRef = React.createRef();\r\n\t\tthis._callbackAddFavourite = addFavourite;\r\n\t\tthis._callbackRemoveFavourite = removeFavourite;\r\n\t\tthis._callbackShowStreetView = showStreetView;\r\n\t\tthis._tabInfo = new TabInfo({title:'Overview', className:'overview-tab'});\r\n\t\tthis._handleStarSelectedChanged= this._handleStarSelectedChanged.bind(this);\r\n\t\tthis._handlePlotSelectedChanged= this._handlePlotSelectedChanged.bind(this);\r\n\t\tthis._ellipsisAbout= this._ellipsisAbout.bind(this);\r\n\t\tthis._handleClick= this._handleClick.bind(this);\r\n\t\tthis._handleClickShowStreetView = this._handleClickShowStreetView.bind(this);\r\n\t\tthis._workBackwardsThroughStringToFindLastCharacterBeforeSpaceIndex= this._workBackwardsThroughStringToFindLastCharacterBeforeSpaceIndex.bind(this);\r\n\t\tthis.state ={plot:null, showAll:false, aboutTruncated:null};\r\n\t}\r\n\tload(site, plot){\r\n\t\t\tthis._firstAboutTruncation=true;\t\r\n\t\tthis.setState({plot:plot, site:site, aboutTruncated:plot.about, showAll:false, aboutTruncatedWithEllipsisWithEllipsisIfRequired:plot.about});\r\n\t}\r\n\tget tabInfo(){\r\n\t\treturn this._tabInfo;\r\n\t}\r\n\t_handleStarSelectedChanged(selected){\r\n\t\tif(selected)this._callbackAddFavourite(this.state.plot);\r\n\t\telse this._callbackRemoveFavourite(this.state.plot);\r\n\t}\r\n\t_handlePlotSelectedChanged(value){\r\n\t\tthis._star.current.selected=value;\r\n\t}\r\n\t\r\n\tcomponentDidUpdate(previousProps, previousState){\r\n\t\tconst oldPlot = previousState.plot;\r\n\t\tconst newPlot = this.state.plot;\r\n\t\tif(!this.state.showAll)\r\n\t\t\tthis._ellipsisAbout();\r\n\t\tif(oldPlot===newPlot)return;\r\n\t\t//example of using mvvm framework\r\n\t\tthis.myBindings.reset();\r\n\t\tPropertyBindingFactory.standard(this, newPlot, 'selected', this._handlePlotSelectedChanged);\r\n\t}\r\n\t_handleClick(){\r\n\t\tconst currentShowAll = this.state.showAll;\r\n\t\tif(currentShowAll)return;\r\n\t\tthis.setState({showAll:true, aboutTruncatedWithEllipsisWithEllipsisIfRequired:this.state.plot.about});\r\n\t}\r\n\t_ellipsisAbout(){\r\n\t\tconst element = this._elementRef.current;\r\n\t\tconst pixelsOverflowing = element.scrollHeight - element.clientHeight ;\r\n\t\tconst isOverflowing = pixelsOverflowing>0;\r\n\t\tif(!isOverflowing)return;\r\n\t\tlet aboutTruncated = this.state.aboutTruncated;\r\n\t\tlet indexToChopRemainingWrodOffFrom=aboutTruncated.length-1;\r\n\t\tif(this._firstAboutTruncation){\r\n\t\t\tconst proportionToKeep = element.clientHeight / element.scrollHeight;\r\n\t\t\tindexToChopRemainingWrodOffFrom = Math.floor((aboutTruncated.length-1)*proportionToKeep);\r\n\t\t\tthis._firstAboutTruncation=false;\r\n\t\t}\r\n\t\tconst lastCharacterBeforeSpaceIndex = this._workBackwardsThroughStringToFindLastCharacterBeforeSpaceIndex(indexToChopRemainingWrodOffFrom, aboutTruncated);\r\n\t\taboutTruncated=aboutTruncated.substr(0, lastCharacterBeforeSpaceIndex+1);\r\n\t\tconst aboutTruncatedWithEllipsisWithEllipsisIfRequired=aboutTruncated+'...';\r\n\t\tthis.setState({aboutTruncated:aboutTruncated, aboutTruncatedWithEllipsisWithEllipsisIfRequired:aboutTruncatedWithEllipsisWithEllipsisIfRequired});\r\n\t}\r\n\t_workBackwardsThroughStringToFindLastCharacterBeforeSpaceIndex(index, str){\r\n\t\t\twhile(str[index]!==' '&&index>0){\r\n\t\t\t\tindex--;\r\n\t\t\t}\r\n\t\t\treturn index-1;\r\n\t}\r\n\t_handleClickShowStreetView(){\r\n\t\tthis._callbackShowStreetView({nearPlot:this.state.plot});\r\n\t}\r\n\t/*\r\n\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t{this.state.plot?.nBathrooms}\r\n\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t*/\r\n\trender(){\r\n\t\tlet className = \"plot-more-information-overview\";\r\n\t\tclassName+=this.state.showAll?\" show-all\":\" show-limited\";\r\n\t\tconst hasPrice = (this.state.plot)&&!this.state.plot.isSold;\r\n\t\treturn (\r\n\t\t\t\t\t\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t
    {this.state.plot?.name}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t
    Plot {this.state.plot?.number}
    \r\n\t\t\t\t\t\t\t
    {this.state.plot? ' - '+PlotStatus.getDescription(this.state.plot.status)+(hasPrice?' - ':''):' - '}
    \r\n\t\t\t\t\t\t\t
    {!hasPrice?'':this.state.plot.priceString}
    \r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t{this.state.plot?.nBedrooms}\r\n\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t
    \t\t\t\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t{this.state.aboutTruncatedWithEllipsisWithEllipsisIfRequired}\r\n\t\t\t\t
    \r\n\t\t)\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport PopupMenu from './PopupMenu';\r\nimport EdgeLocation from '../ui_core/EdgeLocation';\r\nimport './PlotMoreInformation.css';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport SubMenuHeader from './SubMenuHeader';\r\nimport ClickedOffManager from '../ui_core/ClickedOffManager';\r\nimport MenuType from '../enums/MenuType';\r\nimport TabPanel from './TabPanel';\r\nimport PlotMoreInformationFloorPlans from './PlotMoreInformationFloorPlans';\r\nimport PlotMoreInformationGallery from './PlotMoreInformationGallery';\r\nimport PlotMoreInformationOverview from './PlotMoreInformationOverview';\r\nimport PropertyBindingFactory from '../mvvm/PropertyBindingFactory';\r\nimport enableBindingToOthers from '../mvvm/enableBindingToOthers';\r\nimport PlotMoreInformationType from '../enums/PlotMoreInformationType';\r\nimport AssetsManager from '../assets_management/AssetsManager';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class PlotMoreInformation extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {onExpandImage, addFavourite, removeFavourite, showStreetView, configuration}=props;\r\n\t\tthis._configuration = configuration;\r\n\t\tthis._callbackExpandImage=onExpandImage;\r\n\t\tthis._callbackAddFavourite = addFavourite;\r\n\t\tthis._callbackRemoveFavourite = removeFavourite;\r\n\t\tthis._callbackShowStreetView = showStreetView;\r\n\t\tthis._subMenuHeader = React.createRef();\r\n\t\tthis._elementRef = React.createRef();\r\n\t\tthis._tabPanelRef= React.createRef();\r\n\t\tthis._overview = React.createRef();\r\n\t\tthis._gallery = React.createRef();\r\n\t\tthis._floorPlans = React.createRef();\r\n\t\tthis._callbackClose = null;\r\n\t\tthis.show = this.show.bind(this);\r\n\t\tthis.hide = this.hide.bind(this);\r\n\t\tthis._getTitle = this._getTitle.bind(this);\r\n\t\tthis._getPanelsViewPort = this._getPanelsViewPort.bind(this);\r\n\t\tthis._disposeClickedOffHandle=this._disposeClickedOffHandle.bind(this);\r\n\t\tthis._iMenuManager = null;\r\n\t\tthis._clickedOffManager = new ClickedOffManager({elementRef:this._elementRef, hide:this.hide});\r\n\t\tthis._releasePlotActiveHandle= this._releasePlotActiveHandle.bind(this);\r\n\t\tthis._handleShowStreetView = this._handleShowStreetView.bind(this);\r\n\t\tthis._handleTabSetActive = this._handleTabSetActive.bind(this);\r\n\t\tthis._currentPlotActiveHandle = null;\r\n\t\tthis._currentPlotMoreInformationType = PlotMoreInformationType.OVERVIEW;\r\n\t\tthis.state={plot:null, visible:false};\r\n\t}\r\n\tshow(site, plot, configuration, plotMoreInformationType){\r\n\t\tthis.setState({plot:this._plot, visible:true});\r\n\t\tthis._clickedOffManager.register();\r\n\t\tif(plot)this._plot = plot;\r\n\t\tif(site)this._site = site;\r\n\t\tif(this._plot){\r\n\t\t\tthis._releasePlotActiveHandle();\r\n\t\t\tthis._currentPlotActiveHandle = this._plot.unit.takeActiveHandle();\r\n\t\t}\r\n\t\tif(plotMoreInformationType){\r\n\t\t\tthis._tabPanelRef.current.setActive(plotMoreInformationType);\r\n\t\t}\r\n\t\telse \r\n\t\t{\r\n\t\t\tif(this._currentPlotMoreInformationType){\r\n\t\t\t\tthis._handleTabSetActive(this._currentPlotMoreInformationType);\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis._iMenuManager.showMe(this);\r\n\t}\r\n\thide(){\r\n\t\tthis._clickedOffManager.dispose();\r\n\t\tthis.setState({visible:false});\r\n\t\tthis._releasePlotActiveHandle();\r\n\t\tthis._iMenuManager.close();\r\n\t}\r\n\tget menuType(){\r\n\t\treturn MenuType.PLOT_MORE_INFORMATION;\r\n\t}\r\n\tsetIMenuManager(value){\r\n\t\tthis._iMenuManager = value;\r\n\t\tthis._subMenuHeader.current.setIMenuManager(value);\r\n\t}\r\n\t_releasePlotActiveHandle(){\r\n\t\tif(!this._currentPlotActiveHandle)return;\r\n\t\tthis._currentPlotActiveHandle.dispose();\r\n\t\tthis._currentPlotActiveHandle=null;\r\n\t}\r\n\t_getTitle(plot){\r\n\t\tif(this._configuration.fullScreenGalleryAndFloorPlans)return '';\r\n\t\treturn `More about Plot ${plot?.number}`;\r\n\t}\r\n\t_getPanelsViewPort(){\r\n\t\t const element = this._elementRef.current;\r\n\t\t if(element===undefined||element===null)return 1;\r\n\t\t return [element.offsetWidth, element.offsetHeight];\r\n\t}\r\n\t_disposeClickedOffHandle(){\r\n\t\tthis._clickedOffHandle&&this._clickedOffHandle.dispose();\r\n\t}\r\n\t_handleShowStreetView(e){\r\n\t\tthis._callbackShowStreetView();\r\n\t\tthis.hide();\r\n\t}\r\n\t_handleTabSetActive(tabKey){\r\n\t\tthis._currentPlotMoreInformationType =tabKey;\r\n\t\tswitch(tabKey){\r\n\t\t\tcase PlotMoreInformationType.GALLERY:\r\n\t\t\t\tthis._gallery.current.load(this._site, this._plot);\r\n\t\t\tbreak;\r\n\t\t\tcase PlotMoreInformationType.FLOOR_PLANS:\r\n\t\t\t\tthis._floorPlans.current.load(this._site, this._plot);\r\n\t\t\tbreak;\r\n\t\t\tcase PlotMoreInformationType.OVERVIEW:\r\n\t\t\t\tthis._overview.current.load(this._site, this._plot);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\trender(){\r\n\t\tlet className=\"plot-more-information menu\";\r\n\t\tif(this._configuration.fullScreenGalleryAndFloorPlans)\r\n\t\t\tclassName+=\" full-screen-gallery-and-floor-plans\";\r\n\t\tif(this.state.visible)\r\n\t\t\tclassName+=\" visible\";\r\n\t\treturn (\r\n\t
    \r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t
    )\r\n\t}\r\n}","export default class PhoneNumberValidation{\r\n\tstatic get REG_EXP_INTERNATIONAL_NUMBER(){\r\n\t\treturn new RegExp('^(?:(?:\\\\+[1-9]{1}[0-9]{3,14})|(?:[0-9]{4,15}))$');\r\n\t}\r\n\tstatic validateInternational(value){\r\n\t\treturn PhoneNumberValidation.REG_EXP_INTERNATIONAL_NUMBER.test(value);\r\n\t}\r\n}","export default class EmailValidation{\r\n\tstatic get REG_EXP_EMAIL_RFC_5322(){\r\n\t\treturn /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n\t}\r\n\tstatic emailRFC5322(value){\r\n\t\treturn EmailValidation.REG_EXP_EMAIL_RFC_5322.test(value);\r\n\t}\r\n}","const BrochureProgressStatus={\r\n\tQueued:1,\r\n\tGenerating:2,\r\n\tGenerated:3\r\n};\r\nBrochureProgressStatus.getClassName = function(brochureProgressStatus){\r\n\tswitch(brochureProgressStatus){\r\n\t\tcase BrochureProgressStatus.Queued:\r\n\t\t\treturn 'queued';\r\n\t\tcase BrochureProgressStatus.Generating:\r\n\t\t\treturn 'generating';\r\n\t\tcase BrochureProgressStatus.Generated:\r\n\t\t\treturn 'generated';\r\n\t\tdefault:\r\n\t\t\tthrow new Error('Not implemented');\r\n\t}\r\n};\r\nexport default BrochureProgressStatus;","import ParameterErrors from '../errors/ParameterErrors';\r\nimport BrochureProgressStatus from '../enums/BrochureProgressStatus';\r\nimport enableAcceptBindings from '../mvvm/enableAcceptBindings';\r\nimport exposeBinding from '../mvvm/exposeBinding';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class BrochureBeingGenerated{\r\n\tconstructor(params){\r\n\t\tenableAcceptBindings(this);\r\n\t\tlet {brochureGenerationIdentifier, brochureProgressStatus, plotNumbers, brochureUrl, brochureType} = params;\r\n\t\tif(brochureGenerationIdentifier===undefined||brochureGenerationIdentifier===null)\r\n\t\t\tthrowNotProvided('brochureGenerationIdentifier');\r\n\t\tthis._brochureGenerationIdentifier = brochureGenerationIdentifier;\r\n\t\tif(brochureProgressStatus===undefined||brochureProgressStatus===null)\r\n\t\t\tbrochureProgressStatus=BrochureProgressStatus.Queued;\r\n\t\tthis._brochureProgressStatus = brochureProgressStatus;\r\n\t\tthis._proportionProgress = 0;\r\n\t\tthis._brochureUrl=brochureUrl;\r\n\t\tthis._brochureType = brochureType;\r\n\t\tthis._plotNumbers = plotNumbers;\r\n\t\tthis.updateProgress= this.updateProgress.bind(this);\t\r\n\t\texposeBinding(this, 'brochureProgressStatus', ()=>this._brochureProgressStatus, (value)=>this._brochureProgressStatus = value);\r\n\t\texposeBinding(this, 'proportionProgress', ()=>this._proportionProgress, (value)=>this._proportionProgress = value);\r\n\t\texposeBinding(this, 'brochureUrl', ()=>this._brochureUrl, (value)=>this._brochureUrl = value);\r\n\t\r\n\t}\r\n\tget brochureProgressStatus(){\r\n\t\treturn this._brochureProgressStatus;\r\n\t}\r\n\tget brochureGenerationIdentifier(){\r\n\t\treturn this._brochureGenerationIdentifier;\r\n\t}\r\n\tget proportionProgress(){\r\n\t\treturn this._proportionProgress;\r\n\t}\r\n\tget brochureType(){\r\n\t\treturn this._brochureType;\r\n\t}\r\n\tget brochureUrl(){\r\n\t\treturn this._brochureUrl;\r\n\t}\r\n\tget plotNumbers(){\r\n\t\treturn this._plotNumbers;\r\n\t}\r\n\tupdateProgress(progress){\r\n\t\tif(this._brochureProgressStatus !== progress.brochureProgressStatus){\r\n\t\t\tthis._brochureProgressStatus = progress.brochureProgressStatus;\r\n\t\t\tthis.bindingsHandler.changed('brochureProgressStatus', this.brochureProgressStatus);\r\n\t\t}\r\n\t\t\r\n\t\tif(progress.proportionProgress!==undefined&&progress.proportionProgress!==null\r\n\t\t &&this._proportionProgress !== progress.proportionProgress){\r\n\t\t\tthis._proportionProgress = progress.proportionProgress;\r\n\t\t\tthis.bindingsHandler.changed('proportionProgress', this.proportionProgress);\r\n\t\t}\r\n\t\t\r\n\t\tif(progress.brochureUrl!==undefined&&progress.brochureUrl!==null\r\n\t\t\t&&this._brochureUrl !== progress.brochureUrl){\r\n\t\t\tthis._brochureUrl = progress.brochureUrl;\r\n\t\t\tif(this._brochureUrl)\r\n\t\t\t\tthis.bindingsHandler.changed('brochureUrl', this.brochureUrl);\r\n\t\t}\r\n\t}\r\n}","import React, {Component} from 'react';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nexport default class GoogleAnalytics{\r\n\tconstructor(props){\r\n\t\tconst {trackingCode, siteName}=props;\r\n\t\tconst script = document.createElement('script');\r\n\t\tscript.src = `https://www.googletagmanager.com/gtag/js?id=${this._trackingCode}`;\r\n\t\tdocument.body.appendChild(script);\r\n\t\tscript.addEventListener('load', ()=>{\r\n\t\t\twindow.dataLayer = window.dataLayer || [];\r\n\t\t\tGoogleAnalytics._gtag('js', new Date());\r\n\t\t\tGoogleAnalytics._gtag('config', 'UA-191995023-3');\r\n\t\t});\r\n\t\tscript.addEventListener('error', console.error);\r\n }\r\n\tstatic get instance(){\r\n\t\treturn GoogleAnalytics._instance;\r\n\t}\r\n\tstatic _gtag(){window.dataLayer?.push(arguments);}\r\n\tstatic logFavouritesBrochureRequest(siteName){\r\n\t\ttry{\r\n\t\t\tGoogleAnalytics._gtag('event', 'brochure_request', {\r\n\t\t\t 'event_category': 'Favourites Brochure',\r\n\t\t\t 'event_label': siteName\r\n\t\t\t});\r\n\t\t}\r\n\t\tcatch(err){\r\n\t\t\tconsole.error(err);\r\n\t\t}\r\n\t}\r\n\tstatic logPlotBrochureRequest(siteName, plotNumber){\r\n\t\ttry{\r\n\t\t\tGoogleAnalytics._gtag('event', 'brochure_request', {\r\n\t\t\t 'event_category': 'Plot Brochure',\r\n\t\t\t 'event_label': `${siteName} - Plot ${plotNumber}`\r\n\t\t\t});\r\n\t\t}\r\n\t\tcatch(err){\r\n\t\t\tconsole.error(err);\r\n\t\t}\r\n\t}\r\n}","export default class LocalStorageHelper{ \r\n\tstatic getObj(name)\r\n\t{\r\n\t\ttry\r\n\t\t{\r\n\t\t\tvar item = window.localStorage.getItem(name);\r\n\t\t\tif(item===undefined||item===null)return;\r\n\t\t\treturn JSON.parse(item);\r\n\t\t}\r\n\t\tcatch(ex)\r\n\t\t{\r\n\t\t\treturn undefined;\r\n\t\t}\r\n\t}\r\n\tstatic setObj(name, obj)\r\n\t{\r\n\t\ttry\r\n\t\t{\r\n\t\t\twindow.localStorage.setItem(name, JSON.stringify(obj));\r\n\t\t}\r\n\t\tcatch(ex)\r\n\t\t{\r\n\t\t\tconsole.error(ex);\r\n\t\t}\r\n\t}\r\n};","import ParameterErrors from '../errors/ParameterErrors';\r\nimport ParseError from '../errors/ParseError';\r\nimport LocalStorageHelper from '../storage/LocalStorageHelper';\r\nconst { throwNotProvided, throwNotOfType} = ParameterErrors;\r\nconst SESSION_TOKEN='sessionToken';\r\nexport default class SessionManager{\r\n\tstatic get instance(){\r\n\t\tif(!SessionManager._instance)\r\n\t\t\tSessionManager._instance = new SessionManager();\r\n\t\treturn SessionManager._instance;\r\n\t}\r\n\tconstructor(){\r\n\t\tthis._sessionToken = LocalStorageHelper.getObj(SESSION_TOKEN);\r\n\t}\r\n\tset sessionToken(value){\r\n\t\tthis._sessionToken = value;\r\n\t\tLocalStorageHelper.setObj(SESSION_TOKEN, value);\r\n\t}\r\n\tget sessionToken(){\r\n\t\treturn this._sessionToken;\r\n\t}\r\n\tget sessionTokenIsValid(){\r\n\t\treturn this._sessionToken!==undefined&&this._sessionToken!==null&&this._sessionToken!=='';\r\n\t}\r\n\tclearSessionToken(){\r\n\t\tthis.sessionToken = null;\r\n\t}\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport BrochureProgressStatus from '../enums/BrochureProgressStatus';\r\nimport BrochureBeingGenerated from './BrochureBeingGenerated';\r\nimport Urls from '../urls/Urls';\r\nimport GoogleAnalytics from '../google/GoogleAnalytics'; \r\nimport Timer from '../core/Timer';\r\nimport eventEnable from '../core/eventEnable';\r\nimport SessionManager from '../sessions/SessionManager';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class BrochuresManager{\r\n\tconstructor(params){\r\n\t\teventEnable(this);\r\n\t\tthis._brochuresBeingGenerated = [];\r\n\t\tthis._mapBrochureGenerationIdentifierToBrochureBeingGenerated = new Map();\r\n\t\tthis.setSessionTokenAndAddBrochureGenerationIdentifier_fromResponse_IfValid =\r\n\t\t\tthis.setSessionTokenAndAddBrochureGenerationIdentifier_fromResponse_IfValid.bind(this);\r\n\t\tthis._addBrochureBeingGenerated= this._addBrochureBeingGenerated.bind(this);\r\n\t\tthis._getUpdatesToBrochureBeingGenerateds= this._getUpdatesToBrochureBeingGenerateds.bind(this);\r\n\t\tthis._processUpdatesResponse= this._processUpdatesResponse.bind(this);\r\n\t\tthis._processBrochuresResponse= this._processBrochuresResponse.bind(this);\r\n\t\tthis._dispatchBrochuresBeingGeneratedChanged= this._dispatchBrochuresBeingGeneratedChanged.bind(this);\r\n\t\tthis._clearBrochuresBeingGeneratedWhichAreNotComplete = this._clearBrochuresBeingGeneratedWhichAreNotComplete.bind(this);\r\n\t\tthis._getBrochuresForSession= this._getBrochuresForSession.bind(this);\r\n\t\tthis._timerGetUpdatesToBrochureBeingGenerateds = new Timer({\r\n\t\t\tdelay:10000,\r\n\t\t\tcallback:this._getUpdatesToBrochureBeingGenerateds, \r\n\t\t\tnTicks:-1\r\n\t\t});\r\n\t\tthis._getBrochuresForSession();\r\n\t}\r\n\tstatic get instance(){\r\n\t\tif(!BrochuresManager._instance)\r\n\t\t\tBrochuresManager._instance = new BrochuresManager();\r\n\t\treturn BrochuresManager._instance;\r\n\t}\r\n\tgenerate({\r\n\t\tsiteName, siteSlug, plotNumbers, title, firstName, surname, email, phoneNumber, optInOptions, agreedToPrivacyNotice, singlePlotBrochure\r\n\t}){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tconst body = { \r\n\t\t\t\twaitForUrl:false,\r\n\t\t\t\tsiteName:siteSlug, \r\n\t\t\t\tplotNumbers:plotNumbers, \r\n\t\t\t\tdebug:false,\r\n\t\t\t\tuserInfo:{\r\n\t\t\t\t\ttitle,\r\n\t\t\t\t\tfirstName,\r\n\t\t\t\t\tsurname,\r\n\t\t\t\t\temail,\r\n\t\t\t\t\tphoneNumber,\r\n\t\t\t\t\toptInOptions,\r\n\t\t\t\t\tagreedToPrivacyNotice\r\n\t\t\t\t},\r\n\t\t\t\tsessionToken:SessionManager.instance.sessionToken\r\n\t\t\t};\r\n\t\t\tif(email&&email.toLowerCase().indexOf('@futurium.co.uk')<0){\r\n\t\t\t\tif(singlePlotBrochure)\r\n\t\t\t\t\tGoogleAnalytics.logPlotBrochureRequest(siteName, plotNumbers[0].number);\r\n\t\t\t\telse \r\n\t\t\t\t\tGoogleAnalytics.logFavouritesBrochureRequest(siteName);\r\n\t\t\t}\r\n\t\t\tfetch(Urls.getGeneratePDFBrochureSimple(this._configuration), {\r\n\t\t\t\t\tmethod: 'POST', \r\n\t\t\t\t\tcredentials: \"same-origin\",\r\n\t\t\t\t\tbody:JSON.stringify(body)\r\n\t\t\t}).then((response) => {\r\n\t\t\t\tresponse.text().then(res => {\r\n\t\t\t\t\tconst jObjectResponse = JSON.parse(res);\r\n\t\t\t\t\tthis.setSessionTokenAndAddBrochureGenerationIdentifier_fromResponse_IfValid(jObjectResponse);\r\n\t\t\t\t\tresolve(jObjectResponse);\r\n\t\t\t\t}).catch(reject);\r\n\t\t\t}).catch(reject);\r\n\t\t});\r\n\t}\r\n\tsetSessionTokenAndAddBrochureGenerationIdentifier_fromResponse_IfValid(jObjectResponse){\r\n\t\tif(jObjectResponse.sessionToken!==undefined&&jObjectResponse.sessionToken!==null){\r\n\t\t\tSessionManager.instance.sessionToken = jObjectResponse.sessionToken;\r\n\t\t}\r\n\t\tif(!jObjectResponse.brochureGenerationIdentifier)return;\r\n\t\tthis._addBrochureBeingGenerated(new BrochureBeingGenerated({\r\n\t\t\tbrochureGenerationIdentifier:jObjectResponse.brochureGenerationIdentifier,\r\n\t\t\tbrochureType:jObjectResponse.brochureType,\r\n\t\t\tstartedAt:jObjectResponse.startedAt,\r\n\t\t\tplotNumbers:jObjectResponse.plotNumbers,\r\n\t\t\tbrochureUrl:jObjectResponse.brochureUrl\r\n\t\t}));\r\n\t\tthis._timerGetUpdatesToBrochureBeingGenerateds.start();\r\n\t}\r\n\t_addBrochureBeingGenerated(brochureBeingGenerated){\r\n\t\tthis._brochuresBeingGenerated.push(brochureBeingGenerated);\r\n\t\tthis._mapBrochureGenerationIdentifierToBrochureBeingGenerated\r\n\t\t\t.set(brochureBeingGenerated.brochureGenerationIdentifier, brochureBeingGenerated);\r\n\t\tthis._dispatchBrochuresBeingGeneratedChanged();\r\n\t}\r\n\t_getBrochuresForSession(){\r\n\t\t\tif(!SessionManager.instance.sessionTokenIsValid){\r\n\t\t\t\tSessionManager.instance.clearSessionToken();\r\n\t\t\t\tthis._clearBrochuresBeingGeneratedWhichAreNotComplete();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tconst body = {\r\n\t\t\t\tsessionToken:SessionManager.instance.sessionToken\r\n\t\t\t};\r\n\t\t\tconst url = Urls.getBrochureGenerationGetBrochuresForSession();\r\n\t\t\tfetch(url, {\r\n\t\t\t\tmethod: 'POST', \r\n\t\t\t\tcredentials: \"same-origin\",\r\n\t\t\t\tbody:JSON.stringify(body)\r\n\t\t\t}).then((response) => {\r\n\t\t\t\tresponse.text().then(res => {\r\n\t\t\t\t\tconst jObjectResponse = JSON.parse(res);\r\n\t\t\t\t\tthis._processBrochuresResponse(jObjectResponse);\r\n\t\t\t\t}).catch(console.error);\r\n\t\t\t}).catch(console.error);\r\n\t}\r\n\t_getUpdatesToBrochureBeingGenerateds(){\r\n\t\ttry{\r\n\t\t\tconst brochureGenerationIdentifiersToGetUpdateFor = this._brochuresBeingGenerated\r\n\t\t\t\t.filter(brochureBeingGenerated=>brochureBeingGenerated.brochureProgressStatus!==BrochureProgressStatus.Generated)\r\n\t\t\t\t.map(brochureBeingGenerated=>brochureBeingGenerated.brochureGenerationIdentifier);\r\n\t\t\tif(brochureGenerationIdentifiersToGetUpdateFor.length<1){\r\n\t\t\t\tthis._timerGetUpdatesToBrochureBeingGenerateds.reset();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif(!SessionManager.instance.sessionTokenIsValid){\r\n\t\t\t\tSessionManager.instance.clearSessionToken();\r\n\t\t\t\tthis._clearBrochuresBeingGeneratedWhichAreNotComplete();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tconst body = {\r\n\t\t\t\tbrochureGenerationIdentifiers:brochureGenerationIdentifiersToGetUpdateFor,\r\n\t\t\t\tsessionToken:SessionManager.instance.sessionToken\r\n\t\t\t};\r\n\t\t\tconst url = Urls.getBrochureGenerationCheckProgress();\r\n\t\t\tfetch(url, {\r\n\t\t\t\tmethod: 'POST', \r\n\t\t\t\tcredentials: \"same-origin\",\r\n\t\t\t\tbody:JSON.stringify(body)\r\n\t\t\t}).then((response) => {\r\n\t\t\t\tresponse.text().then(res => {\r\n\t\t\t\t\tconst jObjectResponse = JSON.parse(res);\r\n\t\t\t\t\tthis._processUpdatesResponse(jObjectResponse);\r\n\t\t\t\t}).catch(console.error);\r\n\t\t\t}).catch(console.error);\r\n\t\t}\r\n\t\tcatch(err){\r\n\t\t\tconsole.error(err);\r\n\t\t}\t\t\r\n\t}\r\n\t_processBrochuresResponse(jObjectResponse){\r\n\t\tjObjectResponse.progresses?.forEach(progress=>{\r\n\t\t\tlet brochureBeingGenerated = this._mapBrochureGenerationIdentifierToBrochureBeingGenerated.get(\r\n\t\t\t\tprogress.brochureGenerationIdentifier);\r\n\t\t\tif(!brochureBeingGenerated){\r\n\t\t\t\tbrochureBeingGenerated = new BrochureBeingGenerated(progress);\r\n\t\t\t\tthis._addBrochureBeingGenerated(brochureBeingGenerated);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\tbrochureBeingGenerated.updateProgress(progress);\r\n\t\t});\r\n\t}\r\n\t_processUpdatesResponse(jObjectResponse){\r\n\t\tif(jObjectResponse.sessionTimedOut){\r\n\t\t\tthis._clearBrochuresBeingGeneratedWhichAreNotComplete();\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tjObjectResponse.progresses.forEach(progress=>{\r\n\t\t\tconst brochureBeingGenerated = this._mapBrochureGenerationIdentifierToBrochureBeingGenerated.get(progress.brochureGenerationIdentifier);\r\n\t\t\tif(!brochureBeingGenerated)return;\r\n\t\t\tbrochureBeingGenerated.updateProgress(progress);\r\n\t\t});\r\n\t}\r\n\t_clearBrochuresBeingGeneratedWhichAreNotComplete(){\r\n\t\tconst newBrochuresBeingGenerated =[];\r\n\t\tconst toRemove = [];\r\n\t\tthis._brochuresBeingGenerated.forEach(brochureBeingGenerated=> {\r\n\t\t\tif(brochureBeingGenerated.brochureProgressStatus===BrochureProgressStatus.Generated)\r\n\t\t\t\tnewBrochuresBeingGenerated.push(brochureBeingGenerated);\r\n\t\t\telse \r\n\t\t\t\ttoRemove.push(brochureBeingGenerated);\r\n\t\t});\r\n\t\ttoRemove.forEach(brochureBeingGenerated=>\r\n\t\t\tthis._mapBrochureGenerationIdentifierToBrochureBeingGenerated.delete(brochureBeingGenerated.brochureGenerationIdentifier)\r\n\t\t);\r\n\t\tthis._brochuresBeingGenerated = newBrochuresBeingGenerated;\r\n\t\tthis._dispatchBrochuresBeingGeneratedChanged();\r\n\t}\r\n\t_dispatchBrochuresBeingGeneratedChanged(){\r\n\t\tthis.dispatchEvent({type:'brochuresBeingGeneratedChanged', brochuresBeingGenerated:this._brochuresBeingGenerated});\r\n\t}\r\n}","import React, { Component } from 'react';\r\nimport './BrochureGeneration.css';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faCog} from '@fortawesome/free-solid-svg-icons';\r\nimport IconButton from './IconButton';\r\nimport MenuType from '../enums/MenuType';\r\nimport SubMenuHeader from './SubMenuHeader';\r\nimport ClickedOffManager from '../ui_core/ClickedOffManager';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport Urls from '../urls/Urls';\r\nimport UrlHelper from '../core/UrlHelper';\r\nimport PhoneNumberValidation from '../validation/PhoneNumberValidation';\r\nimport EmailValidation from '../validation/EmailValidation';\r\nimport Dialog from './Dialog';\r\nimport Checkbox from './Checkbox';\r\nimport Handles from '../core/Handles';\r\nimport Spinner from './Spinner';\r\nimport AssetsManager from '../assets_management/AssetsManager';\r\nimport HashSource from '../core/HashSource';\r\nimport BrochuresManager from '../brochures/BrochuresManager';\r\nimport SessionManager from '../sessions/SessionManager';\r\nconst { throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class BrochureGeneration extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {getSiteAndUnits, showBrochuresMenu, getSelectedFavourites, getConfiguration} = props;\r\n\t\tthis._getConfiguration = getConfiguration;\r\n\t\tif(!getSiteAndUnits)throwNotProvided('getSiteAndUnits');\r\n\t\tthis._getSiteAndUnits = getSiteAndUnits;\r\n\t\tthis._getSelectedFavourites = getSelectedFavourites;\r\n\t\tthis._showBrochuresMenu = showBrochuresMenu;\r\n\t\tthis._subMenuHeader = React.createRef();\r\n\t\tthis._element = React.createRef();\r\n\t\tthis._titleRef = React.createRef();\r\n\t\tthis._firstNameRef = React.createRef();\r\n\t\tthis._surnameRef = React.createRef();\r\n\t\tthis._phoneNumberRef = React.createRef();\r\n\t\tthis._checkboxOptInPhoneRef = React.createRef();\r\n\t\tthis._checkboxOptInEmailRef = React.createRef();\r\n\t\tthis._checkboxOptInTextRef = React.createRef();\r\n\t\tthis._emailRef = React.createRef();\r\n\t\tthis._privacyNoticeCheckboxRef = React.createRef();\r\n\t\tthis.show = this.show.bind(this);\r\n\t\tthis.hide= this.hide.bind(this);\r\n\t\tthis.load = this.load.bind(this);\r\n\t\tthis._iMenuManager = null;\r\n\t\tthis._clickedOffManager = new ClickedOffManager({elementRef:this._element, hide:this.hide});\r\n\t\tthis._currentDialog = null;\r\n\t\tthis._agreedToPrivacyNotice= false;\r\n\t\tthis._handleClickGenerate = this._handleClickGenerate.bind(this);\r\n\t\tthis._startPdfDownload= this._startPdfDownload.bind(this)\r\n\t\tthis._handleTitleChange = this._handleTitleChange.bind(this);\r\n\t\tthis._handleFirstNameChange = this._handleFirstNameChange.bind(this);\r\n\t\tthis._handleSurnameChange = this._handleSurnameChange.bind(this);\r\n\t\tthis._handleEmailChange = this._handleEmailChange.bind(this);\r\n\t\tthis._handlePhoneNumberChange = this._handlePhoneNumberChange.bind(this);\r\n\t\tthis._handleClickShowPrivacyPolicy = this._handleClickShowPrivacyPolicy.bind(this);\r\n\t\tthis._validateText = this._validateText.bind(this);\r\n\t\tthis._validatePhoneNumber = this._validatePhoneNumber.bind(this);\r\n\t\tthis._validateEmail=this._validateEmail.bind(this);\r\n\t\tthis._getClassNameField = this._getClassNameField.bind(this);\r\n\t\tthis._disposeCurrentDialog = this._disposeCurrentDialog.bind(this);\r\n\t\tthis._showHasNoPlotsFavouritedDialog = this._showHasNoPlotsFavouritedDialog.bind(this);\r\n\t\tthis._showYouMustAgreeToPrivacyNoticeDialog = this._showYouMustAgreeToPrivacyNoticeDialog.bind(this);\r\n\t\tthis._getOptInOptions= this._getOptInOptions.bind(this);\r\n\t\tthis._onClickBrochureGenerationResultDialog= this._onClickBrochureGenerationResultDialog.bind(this);\r\n\t\tthis._handleCheckboxAgreedToPrivacyNoticeChanged= this._handleCheckboxAgreedToPrivacyNoticeChanged.bind(this);\r\n\t\tthis._showResponseDialog = this._showResponseDialog.bind(this);\r\n\t\tthis._setGenerating = this._setGenerating.bind(this);\r\n\t\tthis.state = {generating:false, visible:false, titleValid:true, \r\n\t\t\temailValid:true, phoneNumberValid:true, firstNameValid:true,\r\n\t\t\tsurnameValid:true, agreedToPrivacyNotice:false};\r\n\t\tthis._spinnerHandles = new Handles();\r\n\t}\r\n\tload(props){\r\n\t\tconst {plots }=props||{};\r\n\t\tthis._plotsShownFor = plots;\r\n\t\tthis.show();\r\n\t}\r\n\tshow(){\r\n\t\tthis.setState({visible:true});\r\n\t\tthis._iMenuManager.showMe(this);\r\n\t\tthis._clickedOffManager.register();\r\n\t}\r\n\thide(){\r\n\t\tthis._plotsShownFor = null;\r\n\t\tthis._clickedOffManager.dispose();\r\n\t\tthis.setState({visible:false});\r\n\t\tthis._iMenuManager.close();\r\n\t\tthis._disposeCurrentDialog();\r\n\t}\r\n\tsetIMenuManager(value){\r\n\t\tthis._iMenuManager = value;\r\n\t\tthis._subMenuHeader.current.setIMenuManager(value);\r\n\t}\r\n\tget menuType(){\r\n\t\treturn MenuType.BROCHURE_GENERATION;\r\n\t}\r\n\t_disposeCurrentDialog(){\r\n\t\tif(this._currentDialog&&this._currentDialog.current)\t\r\n\t\t\tthis._currentDialog.current.dispose();\r\n\t\tthis._currentDialog= null;\r\n\t}\r\n\t_showHasNoPlotsFavouritedDialog(){\r\n\t\tthis._currentDialog = Dialog.create({\r\n\t\t\ttitle:'Error', \r\n\t\t\tclassName:'brochure-generation-result-dialog error',\r\n\t\t\tmessage:'No plots favourited. Please click on the plots you like and click the favourite star :(',\r\n\t\t\toptions:[{text:'OK', callback:this.hide}]}\r\n\t\t);\r\n\t}\r\n\t_showYouMustAgreeToPrivacyNoticeDialog(){\r\n\t\tthis._currentDialog = Dialog.create({\r\n\t\t\ttitle:'Error', \r\n\t\t\tclassName:'brochure-generation-result-dialog error',\r\n\t\t\tmessage:'You must agree to the privacy notice!',\r\n\t\t\toptions:[{text:'OK'}]}\r\n\t\t);\r\n\t}\r\n\t_handleClickGenerate(){\r\n\t\tif(this.state.generating)return;\r\n\t\tif(!this._validateOnSubmission())\r\n\t\t\t\treturn;\r\n\t\tconst [site, units] = this._getSiteAndUnits();\r\n\t\tconst selectedPlotsArray = this._getSelectedFavourites();\r\n\t\tconst hasNoPlots = (!this._plotsShownFor||this._plotsShownFor.length<1)&&(selectedPlotsArray.length<1);\r\n\t\tif(hasNoPlots)\r\n\t\t{\r\n\t\t\tthis._showHasNoPlotsFavouritedDialog();\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif(!this._agreedToPrivacyNotice)\r\n\t\t{\r\n\t\t\tthis._showYouMustAgreeToPrivacyNoticeDialog();\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst spinnerHandle = this._spinnerHandles.take();\r\n\t\ttry{\r\n\t\t\tconst plotNumbers = (this._plotsShownFor?this._plotsShownFor:selectedPlotsArray).map(selectedPlot=>selectedPlot.number);\r\n\t\t\tconst singlePlotBrochure = this._plotsShownFor?true:false;\r\n\t\t\tconst configuration = this._getConfiguration();\r\n\t\t\tconst { siteName, siteSlug}= configuration;\r\n\t\t\tthis._setGenerating(true);\r\n\t\t\tBrochuresManager.instance.generate({\r\n\t\t\t\tsiteName,\r\n\t\t\t\tsiteSlug,\r\n\t\t\t\tsinglePlotBrochure,\r\n\t\t\t\tplotNumbers,\r\n\t\t\t\ttitle:this._title,\r\n\t\t\t\tfirstName:this._firstName,\r\n\t\t\t\tsurname:this._surname,\r\n\t\t\t\temail:this._email,\r\n\t\t\t\tphoneNumber:this._phoneNumber,\r\n\t\t\t\toptInOptions:this._getOptInOptions(),\r\n\t\t\t\tagreedToPrivacyNotice:this._agreedToPrivacyNotice\r\n\t\t\t}).then((jObjectResponse)=>{\r\n\t\t\t\tthis._setGenerating(false);\r\n\t\t\t\tspinnerHandle.dispose();\r\n\t\t\t\tthis._showResponseDialog(jObjectResponse);\r\n\t\t\t}).catch((err)=>{\r\n\t\t\t\tthis._setGenerating(false);\r\n\t\t\t\tconsole.error(err);\r\n\t\t\t\tspinnerHandle.dispose();\r\n\t\t\t});\r\n\t\t}\r\n\t\tcatch{\r\n\t\t\tthis._setGenerating(false);\r\n\t\t\tspinnerHandle.dispose();\r\n\t\t}\r\n\t}\r\n\t_setGenerating(value){\r\n\t\tthis.setState({generating:value});\r\n\t}\r\n\t_showResponseDialog(jObjectResponse){\r\n\t\tthis._disposeCurrentDialog();\r\n\t\tif(!jObjectResponse.error){\r\n\t\t\tthis.hide();\r\n\t\t\tthis._currentDialog = Dialog.create({\r\n\t\t\t\ttitle:'Success', \r\n\t\t\t\tclassName:'brochure-generation-result-dialog',\r\n\t\t\t\tmessage:'You should receive an email shortly containing the brochure',\r\n\t\t\t\tonClickClose:this.hide,\r\n\t\t\t\toptions:[{text:'OK', callback:this._showBrochuresMenu}]}\r\n\t\t\t);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconsole.error(jObjectResponse.error);\r\n\t\tthis._currentDialog = Dialog.create({\r\n\t\t\ttitle:'Error', \r\n\t\t\tclassName:'brochure-generation-result-dialog error',\r\n\t\t\tmessage:'An error occured while generating the brochure :(',\r\n\t\t\toptions:[{text:'Retry', callback:this._handleClickGenerate}, {text:'OK', callback:this.hide}]}\r\n\t\t);\r\n\t}\r\n\t_getOptInOptions(){\r\n\t\tvar strs = [];\r\n\t\tif(this._checkboxOptInEmailRef.current.checked)\r\n\t\t\tstrs.push('email');\r\n\t\tif(this._checkboxOptInPhoneRef.current.checked)\r\n\t\t\tstrs.push('phone');\r\n\t\tif(this._checkboxOptInTextRef.current.checked)\r\n\t\t\tstrs.push('text');\r\n\t\treturn strs.join(',');\r\n\t}\r\n\t_onClickBrochureGenerationResultDialog(){\r\n\t\t\r\n\t}\r\n\t_startPdfDownload(url){\r\n\t\tconst link = document.createElement('a');\r\n\t\tlink.href = url;\r\n\t\tlink.target=\"_blank\";\r\n\t\tlink.download = 'brochure.pdf';\r\n\t\tlink.click();\r\n\t}\r\n\t_handleTitleChange(e){\r\n\t\tthis._title = e.target.value;\r\n\t\tthis.setState({titleValid:this._validateText(this._title)});\r\n\t}\r\n\t_handleFirstNameChange(e){\r\n\t\tthis._firstName = e.target.value;\r\n\t\tthis.setState({firstNameValid:this._validateText(this._firstName)});\r\n\t}\r\n\t_handleSurnameChange(e){\r\n\t\tthis._surname = e.target.value;\r\n\t\tthis.setState({surnameValid:this._validateText(this._surname)});\r\n\t}\r\n\t_handlePhoneNumberChange(e){\r\n\t\tthis._phoneNumber = e.target.value;\r\n\t\tthis.setState({phoneNumberValid:this._validateText(this._phoneNumber)});\r\n\t}\r\n\t_handleEmailChange(e){\r\n\t\tthis._email = e.target.value;\r\n\t\tthis.setState({emailValid:this._validateText(this._email)});\r\n\t}\r\n\t_validateText(text, allowEmpty){\r\n\t\tif(allowEmpty===undefined)allowEmpty=true;\r\n\t\treturn text!==undefined&&text!==null&&(allowEmpty||text.length>0);\r\n\t}\r\n\t_validatePhoneNumber(text, allowEmpty){\r\n\t\tlet valid = this._validateText(text, allowEmpty);\r\n\t\tif(!valid)return false;\r\n\t\tif(text.length<1&&allowEmpty)return true;\r\n\t\treturn PhoneNumberValidation.validateInternational(text);\r\n\t}\r\n\t_validateEmail(text, allowEmpty){\r\n\t\tlet valid = this._validateText(text, allowEmpty);\r\n\t\tif(!valid)return false;\r\n\t\tif(text.length<1&&allowEmpty)return true;\r\n\t\treturn EmailValidation.emailRFC5322(text);\r\n\t}\r\n\t_validateOnSubmission(){\r\n\t\tconst titleValid = this._validateText(this._title, false);\r\n\t\tconst firstNameValid= this._validateText(this._firstName, false);\r\n\t\tconst surnameValid= this._validateText(this._surname, false);\r\n\t\tconst emailValid= this._validateEmail(this._email, false);\r\n\t\tconst phoneNumberValid= this._validatePhoneNumber(this._phoneNumber, false);\r\n\t\tthis.setState({\r\n\t\t\ttitleValid:titleValid,\r\n\t\t\tfirstNameValid:firstNameValid,\r\n\t\t\tsurnameValid:surnameValid,\r\n\t\t\temailValid:emailValid,\r\n\t\t\tphoneNumberValid:phoneNumberValid\r\n\t\t});\r\n\t\treturn titleValid&&firstNameValid&&surnameValid&&emailValid&&phoneNumberValid;\r\n\t}\r\n\t_getClassNameField(name, valid){\r\n\t\treturn `${name} full-width field ${valid?\"valid\":\"invalid\"}`;\r\n\t}\r\n\t_handleClickShowPrivacyPolicy(){\r\n\t\tthis._iMenuManager.showMenuByType(MenuType.PRIVACY_POLICY);\r\n\t}\r\n\t_handleCheckboxAgreedToPrivacyNoticeChanged(e){\r\n\t\tthis._agreedToPrivacyNotice = e.checked\r\n\t\tthis.setState({agreedToPrivacyNotice:this._agreedToPrivacyNotice});\r\n\t}\r\n\trender() {\r\n\t\tlet className = \"brochure-generation menu\";\r\n\t\tif(this.state.visible)\r\n\t\t\tclassName+= \" visible\"\r\n\t\tconst classNameIconButtonGenerate= 'submit '+(this.state.generating?\"rotate\":null);\r\n\t\treturn (\r\n\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
    \r\n\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t

    Don't miss out on the latest information regarding our new homes, offers and purchase schemes at this and neighbouring developments.\r\n\t\t\t\t\t

    \r\n\t\t\t\t\tPlease tick all the ways you're happy to be contacted \r\n\t\t\t\t
      \r\n\t\t\t\t\t
    • \r\n\t\t\t\t\t\t)]\r\n\t\t\t\t\t\t\t}>\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
    • \r\n\t\t\t\t\t
    • \r\n\t\t\t\t\t\t)]\r\n\t\t\t\t\t\t\t}>\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
    • \r\n\t\t\t\t\t
    • \r\n\t\t\t\t\t\t)]\r\n\t\t\t\t\t\t\t}>\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
    • \r\n\t\t\t\t
    \r\n\t\t\t\t

    (Remember, you can opt out at any time if you change your mind)

    \r\n\t\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t
    In order for us to keep in touch, you need to select one or more of the options above
    \r\n\t\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tI have read and agree to the privacy policy\r\n\t\t\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t
    \r\n
    \t\t)\r\n\t}\r\n}","import React, { Component } from 'react';\r\nimport './ImageViewer.css';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport MenuType from '../enums/MenuType';\r\nimport ClickedOffManager from '../ui_core/ClickedOffManager';\r\nimport SubMenuHeader from './SubMenuHeader';\r\nimport Slider from './Slider';\r\nimport ZoomableDragable from './ZoomableDragable';\r\nimport DynamicImage from '../images/DynamicImage';\r\nimport UrlHelper from '../core/UrlHelper';\r\nconst {throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class ImageViewer extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props)\r\n\t\tthis._iMenuManager = null;\r\n\t\tthis._clickedOffHandle = null;\r\n\t\tthis._elementRef = React.createRef();\r\n\t\tthis._sliderRef = React.createRef();\r\n\t\tthis._pictureWrapperRef=React.createRef();\r\n\t\tthis._zoomableDragableRef = React.createRef();\r\n\t\tthis._subMenuHeaderRef = React.createRef();\r\n\t\tthis.show = this.show.bind(this);\r\n\t\tthis.hide= this.hide.bind(this);\r\n\t\tthis.load = this.load.bind(this);\r\n\t\tthis._handleSliderZoomValueChanged = this._handleSliderZoomValueChanged.bind(this);\r\n\t\tthis._getContainerAspectRatio= this._getContainerAspectRatio.bind(this);\r\n\t\tthis._updateZoomSlider= this._updateZoomSlider.bind(this);\r\n\t\tthis._clickedOffManager = new ClickedOffManager({elementRef:this._elementRef, hide:this.hide});\r\n\t\tthis.state={visible:false, url:null, zoom:1};\r\n\t\tthis._zoomMin = 1;\r\n\t\tthis._zoomMax = 5;\r\n\t}\r\n\tload(params){\r\n\t\tconst{image, rootUrl} = params;\r\n\t\tlet url;\r\n\t\tif(image instanceof DynamicImage){\r\n\t\t\tthrow new Error('Not implemented');\r\n\t\t}\r\n\t\telse {\r\n\t\t\tif(typeof(image)!=='string')\r\n\t\t\t\tthrow new Error('Not implemented');\r\n\t\t\turl = image;\r\n\t\t}\r\n\t\turl = (rootUrl?rootUrl:'')+UrlHelper.removeStartSlash(url);\r\n\t\tthis._zoomableDragableRef.current.load(url);\r\n\t\tthis.show();\r\n\t\tsetTimeout(()=>{\r\n\t\t\tthis._zoomableDragableRef.current.setZoom(this._zoomMin);\r\n\t\t},0);\r\n\t\t\r\n\t}\r\n\tget menuType(){\r\n\t\treturn MenuType.IMAGE_VIEWER;\r\n\t}\r\n\tshow(){\r\n\t\tthis.setState({visible:true});\r\n\t\tthis._clickedOffManager.register();\r\n\t\tthis._iMenuManager.showMe(this);\r\n\t}\r\n\thide(){\r\n\t\tthis._zoomableDragableRef.current.setZoom(this._zoomMin);\r\n\t\tthis._clickedOffManager.dispose();\r\n\t\tthis.setState({visible:false});\r\n\t\tthis._iMenuManager.close();\r\n\t}\r\n\tsetIMenuManager(value){\r\n\t\tthis._iMenuManager = value;\r\n\t\tthis._subMenuHeaderRef.current.setIMenuManager(value);\r\n\t}\r\n\t_handleSliderZoomValueChanged(value){\r\n\t\tthis._zoomableDragableRef.current.setZoom(value);\r\n\t}\r\n\t_getContainerAspectRatio(){\r\n\t\tconst imageWrapper = this._pictureWrapperRef.current;\r\n\t\tif(imageWrapper===null)return 1;\r\n\t\treturn imageWrapper.offsetWidth/imageWrapper.offsetHeight;\r\n\t}\r\n\t_updateZoomSlider(value){\r\n\t\tthis._sliderRef.current.setValue(value);\r\n\t}\r\n\trender() {\r\n\t\tlet className =\"image-viewer menu\";\r\n\t\tif(this.state.visible)\r\n\t\t\tclassName+=\" visible\";\r\n\t\tconst slider = (
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    );\r\n\t\treturn (
    \r\n\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t
    );\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport './FavouriteEntry.css';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport IconButton from './IconButton';\r\nimport Checkbox from './Checkbox';\r\nimport { faBackward, faTimes} from '@fortawesome/free-solid-svg-icons'\r\nimport Urls from '../urls/Urls';\r\nconst {throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class FavouriteEntry extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {favourite, onClickRemove, configuration}=props;\r\n\t\tthis._configuration = configuration;\r\n\t\tif(!favourite)throwNotProvided('favourite');\r\n\t\tthis._inputCheckbox = React.createRef();\r\n\t\tthis._callbackClickRemove = onClickRemove;\r\n\t\tthis._handleCheckboxChanged = this._handleCheckboxChanged.bind(this);\r\n\t\tthis._handleClickClose = this._handleClickClose.bind(this);\r\n\t\tthis._handleClick = this._handleClick.bind(this);\r\n\t\tthis._favourite = favourite;\r\n\t\tthis._selected = true;\r\n\t\tthis.state ={};\r\n\t}\r\n\tcomponentDidMount(){\r\n\t\tthis._inputCheckbox.current.checked=this._selected;\r\n\t}\r\n\tget sortValue(){\r\n\t\treturn this._favourite.sortValue;\r\n\t}\r\n\tget hash(){\r\n\t\treturn this._favourite.hash;\r\n\t}\r\n\tget favourite(){\r\n\t\treturn this._favourite;\r\n\t}\r\n\tget selected(){\r\n\t\treturn this._selected;\r\n\t}\r\n\t_handleCheckboxChanged(e){\r\n\t\tthis._selected = e.checked;\r\n\t}\r\n\t_handleClickClose(e){\r\n\t\tthis._callbackClickRemove(this._favourite);\r\n\t\te.stopPropagation&&e.stopPropagation();\r\n\t}\r\n\t_handleClick(e){\r\n\t\tthis._favourite.onClick();\r\n\t}\r\n\trender() {\r\n\t\tlet className =\"favourite-entry\";\r\n\t\tif(this.state.visible)\r\n\t\t\tclassName+=\" visible\";\r\n\t\treturn (
    \r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
    \r\n\t\t\t\t
    );\r\n\t}\r\n}\r\n","import EfficientMoveCycle from './EfficientMoveCycle';\r\nimport Timer from '../core/Timer';\r\nfunction Drag(element, handle, minX, maxX, minY, maxY, callback, callbackStarted) {\r\n var minXPercent;\r\n var maxXPercent;\r\n var self = this;\r\n if (minY == undefined) {\r\n minY = 0;\r\n }\r\n if (minX== undefined) {\r\n minX = 0;\r\n }\r\n if (maxY== undefined) {\r\n maxY = 2000;\r\n }\r\n if (maxX== undefined) {\r\n maxX = 100;\r\n }\r\n var state = 0;\r\n var start;\r\n var timer;\r\n this.setPosition = function (array) {\r\n self.drag(array[0], array[1]);\r\n };\r\n this.getPosition = function () {\r\n var array = [];\r\n array[0] = element.offsetLeft;\r\n array[1] = element.offsetTop;\r\n return array;\r\n };\r\n const efficientMovingCycle = new EfficientMoveCycle({ \r\n\t\telement, stopPropagation:false, preventDefault:true, onStart:onStart, onMove:onMove, onEnd:onEnd , friendlyXY:true});\r\n\t\r\n\tlet startedButNotMovedYet= false;\r\n\tthis.updateMinMax = function(){\r\n\t\tmaxXPercent = maxX - ((100 * element.offsetWidth) / document.documentElement.clientWidth);\r\n minXPercent = minX;\r\n if (maxXPercent < 0) {\r\n maxXPercent = 0;\r\n }\r\n else {\r\n if (maxXPercent > 100) {\r\n maxXPercent = 100;\r\n }\r\n }\r\n\t};\r\n function onStart(e)\r\n {\r\n\t\tstartedButNotMovedYet = true;\r\n\t\tconst {x, y}= e;\r\n if (element.style.display === \"none\")\r\n {\r\n return;\r\n }\r\n start = [element.offsetLeft - x, element.offsetTop - y];\r\n self.updateMinMax();\r\n timer = new Timer({callback:function () { if (callback != undefined) { callback(); } }, delay:1000, nTicks:1});\r\n state = 1;\r\n }\r\n function onMove(e)\r\n {\r\n\t\tif(startedButNotMovedYet){\r\n\t\t\tstartedButNotMovedYet = false;\r\n\t\t\tif(!Drag.cancel)\r\n\t\t\t\tif(callbackStarted)callbackStarted(e);\r\n\t\t}\r\n\t\tconst {x, y}= e;\r\n if(!Drag.cancel)\r\n if (state == 1) {\r\n self.drag((start[0] + x), (start[1] + y));\r\n timer.reset(true);\r\n }\r\n }\r\n this.drag=function(x, y)\r\n {\r\n\t\tvar left = 100 * x / document.documentElement.clientWidth;\r\n\t\tif (left < minXPercent) {\r\n\t\t\tleft = minXPercent;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tif (left > maxXPercent) {\r\n\t\t\t\tleft = maxXPercent;\r\n\t\t\t}\r\n\t\t}\r\n\t\telement.style.left = String(left) + '%';\r\n\t\tif (y < minY) {\r\n\t\t\ty = minY;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tif (y+element.offsetHeight > maxY) {\r\n\t\t\t\ty = maxY - element.offsetHeight;\r\n\t\t\t}\r\n\t\t}\r\n\t\telement.style.top = String(y) + 'px';\r\n };\r\n function onEnd(e) { \r\n Drag.cancel=false;\r\n state=0;\r\n };\r\n}\r\nexport default Drag;","function setText(element, text){\r\n\telement.innerHTML=text;\r\n}\r\nexport default setText;","import isMobile from '../core/isMobile';\r\nimport Timer from '../core/Timer';\r\nfunction Resizer({div, divInner, minWidth, minHeight, maxWidth, maxHeight, \r\n\t\tbounds, callbackResized, callbackInstantaneous, callbackStarted, \r\n\t\ttoInclude, fixedAspectRatio}) {\r\n var bounds = {maxYPx:2000,\r\n\tminYPx:0,\r\n\tmaxXPercentage:100,\r\n\tminXPercentage:0};\r\n\tif(toInclude===undefined||toInclude===null)toInclude = {top:true, left:true, bottom:true, right:true,\r\n\t\tleftTop:true, leftBottom:true, rightTop:true, rightBottom:true};\r\n\t\t\r\n\tvar divLeft, divTop , divRight, divBottom, divLeftTop, divLeftBottom, divRightTop, divRightBottom;\r\n\t\r\n\tthis.setFixedAspectRatio = function(value){\r\n\t\tfixedAspectRatio= value;\r\n\t};\r\n\tif(toInclude.leftTop){\r\n\t\tdivLeftTop = document.createElement('div');\r\n\t\tsetCornerGeneric(divLeftTop);\r\n\t\tdivLeftTop.style.top = '0px';\r\n\t\tdivLeftTop.style.left = '0px';\r\n\t\tdivLeftTop.style.cursor = 'nw-resize';\r\n\t}\r\n\tif(toInclude.leftBottom){\r\n\t\tdivLeftBottom = document.createElement('div');\r\n\t\tsetCornerGeneric(divLeftBottom);\r\n\t\tdivLeftBottom.style.bottom = '0px';\r\n\t\tdivLeftBottom.style.left = '0px';\r\n\t\tdivLeftBottom.style.cursor = 'sw-resize';\r\n\t}\r\n\t\r\n\tif(toInclude.rightTop){\r\n\t\tdivRightTop = document.createElement('div');\r\n\t\tsetCornerGeneric(divRightTop);\r\n\t\tdivRightTop.style.top = '0px';\r\n\t\tdivRightTop.style.right = '0px';\r\n\t\tdivRightTop.style.cursor = 'sw-resize';\r\n\t}\r\n\t\r\n\tif(toInclude.rightBottom){\r\n\t\tdivRightBottom = document.createElement('div');\r\n\t\tsetCornerGeneric(divRightBottom);\r\n\t\tdivRightBottom.style.bottom = '0px';\r\n\t\tdivRightBottom.style.right = '0px';\r\n\t\tdivRightBottom.style.cursor = 'nw-resize';\r\n\t}\r\n\tif(toInclude.left){\r\n\t\tdivLeft = document.createElement('div');\r\n\t\tdivLeft.style = `position:absolute;z-index:100;width:${Resizer.WIDTH}px;height:100%;left:0px;top:0px;cursor:e-resize;`;\r\n\t}\r\n\tif(toInclude.right){\r\n\t\tdivRight = document.createElement('div');\r\n\t\tdivRight.style = `position:absolute;z-index:100;width:${Resizer.WIDTH}px;height:100%;right:0px;top:0px;cursor:e-resize;`;\r\n }\r\n\tif(toInclude.top){\r\n\t\tdivTop = document.createElement('div');\r\n\t\tdivTop.style = `position:absolute;z-index:100;width:100%;height:${Resizer.WIDTH}px;top:0px;left:0px;cursor:n-resize;`;\r\n }\r\n\tif(toInclude.bottom){\r\n\t\tdivBottom = document.createElement('div');\r\n\t\tdivBottom.style = `position:absolute;z-index:100;width:100%;height:${Resizer.WIDTH}px;bottom:0px;left:0px;cursor:n-resize;`;\r\n }\r\n\tfunction setCornerGeneric(div)\r\n {\r\n div.style.position = 'absolute';\r\n div.style.width = '10px';\r\n div.style.height = '10px';\r\n div.style.zIndex = '102';\r\n }\r\n if(minWidth maxWidth)\r\n {\r\n return;\r\n }\r\n div.style.width = String(width) + 'px';\r\n div.style.left = String(left) + 'px';\r\n }\r\n function resizeRight(x, y, a) {\r\n var width = a + x;\r\n if (width < minWidth || width > maxWidth || 100 * ((width + div.offsetLeft) / document.documentElement.offsetWidth) > bounds.maxXPercentage) {\r\n return;\r\n }\r\n div.style.width = String(width) + 'px';\r\n }\r\n function resizeTop(x, y, a, b) {\r\n var height = a - y;\r\n var top = b + y;\r\n if (top < bounds.minYPx || height < minHeight || height > maxHeight) {\r\n return;\r\n }\r\n div.style.height = String(height) + 'px';\r\n div.style.top = String(top) + 'px';\r\n }\r\n function resizeBottom(x, y, a) {\r\n var height = a + y;\r\n if (height < minHeight || height > maxHeight || div.offsetTop + height > bounds.maxYPx) {\r\n return;\r\n }\r\n div.style.height = String(height) + 'px';\r\n }\r\n function doResize(e) {\r\n var x = e.pageX;\r\n var y = e.pageY;\r\n\t\t\r\n switch (state) {\r\n case \"up\":\r\n return;\r\n case \"down-left\":\r\n resizeLeft(x, y, startOffset[0], startOffset[1]);\r\n break;\r\n case \"down-right\":\r\n resizeRight(x, y, startOffset[0]);\r\n break;\r\n case \"down-top\":\r\n resizeTop(x, y, startOffset[0], startOffset[1]);\r\n break;\r\n case \"down-bottom\":\r\n resizeBottom(x, y, startOffset[0]);\r\n break;\r\n case \"down-left-top\":\r\n resizeLeft(x, y, startOffset[0], startOffset[1]);\r\n resizeTop(x, y, startOffset[2], startOffset[3]);\r\n break;\r\n case \"down-left-bottom\":\r\n resizeLeft(x, y, startOffset[0], startOffset[1]);\r\n resizeBottom(x, y, startOffset[2]);\r\n break;\r\n case \"down-right-top\":\r\n resizeRight(x, y, startOffset[0]);\r\n resizeTop(x, y, startOffset[1], startOffset[2]);\r\n break;\r\n case \"down-right-bottom\":\r\n resizeRight(x, y, startOffset[0]);\r\n resizeBottom(x, y, startOffset[1]);\r\n break;\r\n }\r\n timer.reset();\r\n if (callbackInstantaneous)\r\n {\r\n try\r\n {\r\n callbackInstantaneous();\r\n }\r\n catch(ex)\r\n {\r\n console.log(ex);\r\n }\r\n }\r\n }\r\n this.setBounds = function (boundsIn)//work in progress.\r\n {\r\n var previousBounds = bounds;\r\n bounds = boundsIn;\r\n if (previousBounds.minYpx < bounds.minYPx)\r\n {\r\n\r\n }\r\n if (previousBounds.maxYPx > bounds.maxYPx)\r\n {\r\n\r\n }\r\n if (previousBounds.minXPercent < bounds.minXPercentage)\r\n {\r\n\r\n }\r\n if (previousBounds.maxXPercent > bounds.maxXPercent)\r\n {\r\n\r\n }\r\n };\r\n}\r\nResizer.padding = 3;\r\nResizer.WIDTH=6;\r\nexport default Resizer;\r\n\r\n","var SelectHelper=new(function(){\r\nvar selectStrings =['webkitTouchCallout', 'webkitUserSelect', 'khtmlUserSelect', 'MozUserSelect', 'msUserSelect', 'userSelect', 'UserSelect'];\r\nthis.makeSelectable=function(element){\r\n setSelectable(element, \"element\");\r\n};\r\nthis.makeUnselectable=function(element){\r\n setSelectable(element, \"none\");\r\n};\r\nfunction setSelectable(element, selectableString)\r\n{\r\n if (element && element.type != 'text')//not text because this breaks internet explorer, stopping editing of text..\r\n {\r\n if (selectableString == \"none\")\r\n {\r\n if (element.nodeType == 1) {\r\n element.setAttribute(\"unselectable\", \"on\");\r\n\r\n }\r\n if (element.onselectstart != undefined)// if IE\r\n {\r\n element.onselectstart = function () {\r\n return false;\r\n };\r\n }\r\n }\r\n if (element.style)\r\n {\r\n var i = 0;\r\n selectStrings.forEach((selectString)=>{\r\n if (element.style[selectString] != undefined)// if Firefox\r\n {\r\n element.style[selectString] = selectableString;\r\n }\r\n i++;\r\n });\r\n }\r\n var child = element.firstChild;\r\n while (child) {\r\n setSelectable(child, selectableString);\r\n child = child.nextSibling;\r\n }\r\n }\r\n}\r\n})();\r\nexport default SelectHelper;","function Settings(settingsName, callbackReset)\r\n{\r\n this.get = function (name)\r\n {\r\n try\r\n {\r\n //return JSON.parse(getCookie(settingsName + '_' + name));\r\n return JSON.parse(localStorage.getItem(settingsName + '_' + name));\r\n\t\t}\r\n\t\tcatch(ex)\r\n\t\t{\r\n\t\t\treturn undefined;\r\n\t\t}\r\n };\r\n this.set = function (name, obj)\r\n {\r\n try\r\n {\r\n //setCookie(settingsName + '_' + name, JSON.stringify(obj));\r\n localStorage.setItem(settingsName + '_' + name, JSON.stringify(obj));\r\n }\r\n catch(ex)\r\n {\r\n console.log(ex);\r\n }\r\n };\r\n this.reset=callbackReset;\r\n Settings.instances.push(this);\r\n}\r\nSettings.getAll=function(){\r\n return localStorage;\r\n};\r\nSettings.addRange=function(obj)\r\n{\r\n for(var key in obj)\r\n {\r\n localStorage.setItem(key, JSON.stringify(obj[key]));\r\n }\r\n};\r\nSettings.instances=[];\r\nSettings.resetAll = function ()\r\n{\r\n \r\n};\r\nexport default Settings;","import Windows from './Windows';\r\nimport HashSource from '../core/HashSource';\r\nimport Urls from '../urls/Urls';\r\nimport Drag from '../ui_core/Drag';\r\nimport Hover from '../ui_core/Hover';\r\nimport IconButtonNonReact from '../components/IconButtonNonReact';\r\nimport stopEventPropagation from '../ui_core/stopEventPropagation';\r\nimport setText from '../ui_core/setText';\r\nimport Resizer from '../ui_core/Resizer';\r\nimport SelectHelper from '../ui_core/SelectHelper';\r\nimport verticallyCenter from '../ui_core/verticallyCenter';\r\nimport isMobile from '../core/isMobile';\r\nimport eventEnable from '../core/eventEnable';\r\nimport Timer from '../core/Timer';\r\nimport Settings from '../core/Settings';\r\nimport EventNames from './WindowEventNames';\r\n\t\r\nconst defaults = {\r\n\tminWidth:100,\r\n\tminHeight:100,\r\n\tmaxWidth:1000,\r\n\tmaxHeight:1000,\r\n\tminXPerc:0,\r\n\tminYPx:0,\r\n\tmaxXPerc:100,\r\n\tmaxYPx:10000,\r\n\tResizer:true,\r\n\tdragable:true,\r\n\tcloseable:true,\r\n\tminimizable:true,\r\n\tmaximizable:true,\r\n\tminimizeOnClose:false\r\n\t\r\n};\r\nvar defaultsOptional={};\r\nconst GenericWindow= function(params){\r\n\tvar self = this;\r\n\teventEnable(this);\r\n\tthis._hash = HashSource.next();\r\n\tfor(var i in Object.keys(defaults))\r\n\t{\r\n\t\tif(params[i]===undefined)\r\n\t\t\tparams[i]=defaults[i];\r\n\t}\r\n\t\r\n\tvar previousSizes, maximizedSizes, cancelBringToFront;\r\n\tvar buttonClose, buttonMinimize, buttonMaximize;\r\n\tvar timerFlash, flashing = false, flashCount=0;\r\n\t\r\n\tvar name = params.name?params.name:'default';\r\n\tvar tooltipMessage=params.tooltipMessage;\r\n\tlet{ iconPath, minWidth, maxWidth, minHeight, maxHeight, defaultWidth, defaultHeight,\r\n\t\tdefaultX, defaultY, minimized, maximized, minimizable, maximizable, closeable, \r\n\t\tminimizeOnClose, resizable, dragable, minXPerc, maxXPerc, maxYPx, minYPx, zIndexOffset, \r\n\t\ttype, parentElement, element, toggleMaximizeOnDoubleClick}= params;\r\n\tif(!element) element = document.createElement('div');\r\n\telement.classList.add('generic-window');\r\n\t\r\n\tconst divInner = document.createElement('div');\r\n\tdivInner.classList.add('inner');\r\n\t\r\n\tconst divTab = document.createElement('div');\r\n\tdivTab.classList.add('tab');\r\n\t\r\n\tconst divMain = document.createElement('div');\r\n\tdivMain.classList.add('main');\r\n\t\r\n\tvar divName = document.createElement('div');\r\n\tdivName.classList.add('name');\r\n\t\r\n\tsetText(divName, name);\r\n\telement.appendChild(divInner);\r\n\tdivInner.appendChild(divTab);\r\n\tdivTab.appendChild(divName);\r\n\tdivInner.appendChild(divMain);\r\n\t(parentElement?parentElement:document.documentElement).appendChild(element);\r\n\t\r\n\t\r\n\tthis.getType= function(){\r\n\t\treturn type;\r\n\t};\r\n\tvar saveName = params.saveName? params.saveName:name;\r\n\t\r\n\tvar settings = new Settings(saveName, function () {\r\n\t\tthis.set(\"position\");\r\n\t\tthis.set(\"size\");\r\n\t\tthis.set(\"zIndex\");\r\n\t});\r\n\tWindows._instances.push(this);\r\n\t\r\n\tthis.flash = flash;\r\n\t\r\n\tthis.getHash=function(){\r\n\t\treturn this._hash;\r\n\t};\r\n\tthis.setName = function(name){\r\n\t\tsetText(divName, name);\r\n\t};\r\n\tthis.setTooltipMessage = function(value){\r\n\t\ttooltipMessage = value;\r\n\t};\r\n\tthis.getIcon=function(){\r\n\t\treturn iconPath;\r\n\t};\r\n\tthis.getTooltip = function(){\r\n\t\treturn tooltipMessage;\r\n\t};\r\n\tthis._setZIndex=function(zIndex){\r\n\t\telement.style.zIndex=String(zIndex);\r\n\t\tsettings.set(\"zIndex\", zIndex);\r\n\t\tdispatchZIndexChangedEvent();\r\n\t};\r\n\tthis.getState=function(){\r\n\t\treturn {maximized:maximized, minimized:minimized};\r\n\t};\r\n\tthis.maximize = maximize;\r\n\tthis.unmaximize = unmaximize;\r\n\tthis.minimize = minimize;\r\n\tthis.toggleMinimize = toggleMinimize;\r\n\tthis.unminimize=unminimize;\r\n\tthis.close = close;\r\n\tthis.focus = focus;\r\n\tthis.bringToFront = bringToFront;\r\n\tthis.toggleMaximize = toggleMaximize;\r\n\t\r\n\tthis._screenResized=function(obj) {\r\n\t\tif (maximized&(resizable||!window.isMobile))setWindowSizePositionMaximized();\r\n\t}\r\n\t\r\n\tthis.getMinimizable=function(){\r\n\t\treturn minimizable;\r\n\t};\r\n\tthis.getElement = function(){\r\n\t\treturn element;\r\n\t};\r\n\tthis.getParentElement = function(){\r\n\t\treturn parentElement;\r\n\t};\r\n\tthis.getTabElement = function(){\r\n\t\treturn divTab;\r\n\t};\r\n\tthis.fillLeftHalf = function(){\r\n\t\tmaximized = false;\r\n\t\tunminimize();\r\n\t\t//previousSizes = getSizes();\r\n\t\tif(resizable||!window.isMobile){\r\n\t\t\tconst p = resizable?Resizer.padding:0;\r\n\t\t\tsetWindowSizePosition({\r\n\t\t\t\twidth:(parentElement?parentElement:document.documentElement).clientWidth/2, \r\n\t\t\t\theight:((parentElement?parentElement:document.documentElement).clientHeight - p),\r\n\t\t\t\ttop:-p,\r\n\t\t\t\tleft:-p\r\n\t\t\t});\r\n\t\t}\r\n\t\tbringToFront();\r\n\t};\r\n\tthis.fillRightHalf = function(){\r\n\t\tmaximized = false;\r\n\t\tunminimize();\r\n\t\t//previousSizes = getSizes();\r\n\t\tif(resizable||!window.isMobile){\r\n\t\t\tconst p = resizable?Resizer.padding:0;\r\n\t\t\tconst halfWidth = (parentElement?parentElement:document.documentElement).clientWidth/2;\r\n\t\t\tsetWindowSizePosition({\r\n\t\t\t\twidth:halfWidth, \r\n\t\t\t\theight:((parentElement?parentElement:document.documentElement).clientHeight - p),\r\n\t\t\t\ttop:-p,\r\n\t\t\t\tleft:halfWidth-p\r\n\t\t\t});\r\n\t\t}\r\n\t\tbringToFront();\r\n\t};\r\n\tstopEventPropagation(divMain, ['mousedown']);\r\n\tdivMain.addEventListener('mousedown',clickedOnMe);\r\n\tthis.getMainElement = function(){\r\n\t\treturn divMain;\r\n\t};\r\n\tthis.getPosition = function(){\r\n\t\treturn [element.offsetLeft, element.offsetTop];\r\n\t};\r\n\t(parentElement?parentElement:document.documentElement).classList.add('web-windows');\r\n\tSelectHelper.makeUnselectable(element);\r\n\t\r\n\tdocument.body.appendChild(element);\r\n\telement.addEventListener(\"mousedown\", clickedOnMe);\r\n\tif(toggleMaximizeOnDoubleClick===undefined||toggleMaximizeOnDoubleClick)\r\n\t\tdivTab.addEventListener('dblclick', toggleMaximize);\r\n\tinitializePadding();\r\n\tif (!window.isMobile)\r\n\t{\r\n\t\tif (resizable)\r\n\t\t{\r\n\t\t\tself._resizer = new Resizer({div:element, divInner, minWidth, minHeight, maxWidth, maxHeight,\r\n\t\t\t\tbounds:self.currentBounds, callbackResized:resized, callbackInstantaneous:null, \r\n\t\t\tcallbackStarted:resizerStarted});\r\n\t\t}\r\n\t\tif (dragable)\r\n\t\t{\r\n\t\t\tself._drag = new Drag(element, divTab, minXPerc, maxXPerc, minYPx,\r\n\t\t\t\tmaxYPx, dragged, dragStarted);\r\n\t\t}\r\n\t\t\r\n\t\tconst fillerElement = document.createElement('div');\r\n\t\tfillerElement.classList.add('filler');\r\n\t\tdivTab.appendChild(fillerElement);\r\n\t\tif (minimizable)\r\n\t\t{\r\n\t\t\tconst iconButonMinimize = new IconButtonNonReact({imgUrl:Urls.assets+'icons/UI_Button_Minimize.png', \r\n\t\t\tonClick:minimize});\r\n\t\t\tdivTab.appendChild(iconButonMinimize.element);\r\n\t\t\tstopEventPropagation(iconButonMinimize.element, ['touchstart', 'mousedown']);\r\n\t\t}\r\n\t\tif (maximizable)\r\n\t\t{\r\n\t\t\tconst iconButonMaximize = new IconButtonNonReact({imgUrl:Urls.assets+'icons/UI_Button_Maximize.png', \r\n\t\t\tonClick:toggleMaximize});\r\n\t\t\tdivTab.appendChild(iconButonMaximize.element);\r\n\t\t\tstopEventPropagation(iconButonMaximize.element, ['touchstart', 'mousedown']);\r\n\t\t}\r\n\t}\r\n\tif (closeable||minimizeOnClose)\r\n\t{\r\n\t\tconst iconButonClose = new IconButtonNonReact({imgUrl:Urls.assets+'icons/UI_Button_Exit.png', \r\n\t\t\tonClick:()=>{\r\n\t\t\t\tif (minimizeOnClose)\r\n\t\t\t\t\tminimize();\r\n\t\t\t\telse\r\n\t\t\t\t\tclose();\r\n\t\t\t\t}\r\n\t\t});\r\n\t\tdivTab.appendChild(iconButonClose.element);\r\n\t\tstopEventPropagation(iconButonClose.element, ['touchstart', 'mousedown']);\r\n\t}\r\n\tif(!window.isMobile){\r\n\t\tvar startPosition = settings.get(\"position\");\r\n\t\tif (!startPosition)\r\n\t\t{\r\n\t\t\tstartPosition = Windows.getStartPosition(this);\r\n\t\t} \r\n\t\tconsole.log('start position was ');\r\n\t\tconsole.log(startPosition);\r\n\t\telement.style.left = String(startPosition[0]) + 'px';\r\n\t\telement.style.top = String(startPosition[1]) + 'px';\r\n\r\n\t\tvar startSize = settings.get(\"size\");\r\n\t\tif (startSize)\r\n\t\t{\r\n\t\t\tif (startSize[0] < minWidth)\r\n\t\t\t\tstartSize[0] = minWidth;\r\n\t\t\tif (startSize[1] < minHeight)\r\n\t\t\t\tstartSize[1] = minHeight;\r\n\t\t\telement.style.width = String(startSize[0]) + 'px';\r\n\t\t\telement.style.height = String(startSize[1]) + 'px';\r\n\t\t} else\r\n\t\t{\r\n\t\t\telement.style.width = String(defaultWidth) + 'px';\r\n\t\t\telement.style.height = String(defaultHeight) + 'px';\r\n\t\t}\r\n\t}\r\n\r\n\tvar startZIndex = settings.get(\"zIndex\");\r\n\tif (startZIndex)\r\n\t{\r\n\t\telement.style.zIndex = String(startZIndex);\r\n\t}\r\n\telement.appendChild(divInner);\r\n\t\r\n\tthis.setWindowSizePosition = setWindowSizePositionConsideringResizers;\r\n\tif(!minimized)_unminimize();\r\n\tWindows._dispatchWindowCreatedEvent(self);\r\n\tif (bringToFront != false)self.bringToFront();\r\n\tfunction show()\r\n\t{\r\n\t\telement.classList.add('visible');\r\n\t}\r\n\tfunction hide()\r\n\t{\r\n\t\telement.classList.remove('visible');\r\n\t}\r\n\tfunction flash(){\r\n\t\tvar flashing = false;\r\n\t\tflashCount=0;\r\n\t\tif(!timerFlash)\r\n\t\t\ttimerFlash = new Timer({\r\n\t\t\t\tcallback:()=> {\r\n\t\t\t\tif (flashing) {\r\n\t\t\t\t\tdivInner.classList.remove('flashing');\r\n\t\t\t\t\tif(flashCount>=6)\r\n\t\t\t\t\t\ttimerFlash.stop();\r\n\t\t\t\t\tflashing = false;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdivInner.classList.add('flashing');\r\n\t\t\t\t\tflashing = true;\r\n\t\t\t\t}\r\n\t\t\t\tflashCount++;\r\n\t\t}, delay:50, nTicks:-1});\r\n\t\telse{\r\n\t\t\ttimerFlash.reset();\r\n\t\t\tflashCount=0;\r\n\t\t}\r\n\t}\r\n\tfunction setWindowSizePositionMaximized(){\r\n\t\tconst p = resizable?(Resizer.padding * 2):0;\r\n\t\tsetWindowSizePosition({\r\n\t\t\twidth:(parentElement?parentElement:document.documentElement).clientWidth, \r\n\t\t\theight:(parentElement?parentElement:document.documentElement).clientHeight - p ,\r\n\t\t\ttop:resizable?-Resizer.padding:0,\r\n\t\t\tleft:resizable?-Resizer.padding:0\r\n\t\t});\r\n\t}\r\n\tfunction setWindowSizePositionConsideringResizers({width, height, top, left}){\r\n\t\tsetWindowSizePosition({\r\n\t\t\twidth:width, \r\n\t\t\theight:height,\r\n\t\t\ttop:top-Resizer.WIDTH,\r\n\t\t\tleft:left-Resizer.WIDTH\r\n\t\t});\r\n\t}\r\n\tfunction clickedOnMe(){\r\n\t\tif(!cancelBringToFront)\r\n\t\t\tbringToFront();\r\n\t\tcancelBringToFront = false;\r\n\t\tdispatchFocussedEvent();\r\n\t}\r\n\tfunction initializePadding(){ \r\n\t\tvar padding=((!window.isMobile)&&resizable)?3:0;\r\n\t\tvar paddingString = String(padding) + 'px';\r\n\t\telement.style.padding = paddingString;\r\n\t\tdivInner.style.position = 'absolute';\r\n\t\tdivInner.style.left = paddingString;\r\n\t\tdivInner.style.top = paddingString;\r\n\t\tdivInner.style.right = paddingString;\r\n\t\tdivInner.style.bottom = paddingString;\r\n\t}\r\n\tfunction close()\r\n\t{\r\n\t\tWindows._instances.splice(Windows._instances.indexOf(this), 1);\r\n\t\telement.parentNode.removeChild(element);\r\n\t\tdispatchClosedEvent();\r\n\t\tWindows._dispatchWindowDestroyedEvent(self);\r\n\t}\r\n\tfunction resized(){\r\n\t\tif(maximized){\r\n\t\t\tif(!maximizedSizes.equals(getSizes())){\r\n\t\t\t\tmaximized=false;\r\n\t\t\t}\r\n\t\t}\r\n\t\tsettings.set(\"position\", [element.offsetLeft, element.offsetTop]);\r\n\t\tsettings.set(\"size\", [element.offsetWidth, element.offsetHeight]);\r\n\t\tdispatchResizedEvent();\r\n\t}\r\n\tfunction minimize() {\r\n\t\tmaximized = false;\r\n\t\tif(minimized) return;\r\n\t\thide();\r\n\t\tWindows.sendToBack(self);\r\n\t\tminimized=true;\r\n\t\tdispatchMinimizedEvent();\r\n\t}\r\n\tfunction unminimize(){\r\n\t\tif(!minimized)\r\n\t\t\treturn;\r\n\t\t_unminimize();\r\n\t}\r\n\tfunction _unminimize(){\r\n\t\tshow();\r\n\t\tminimized=false;\r\n\t\tdispatchUnminimizedEvent();\r\n\t\tbringToFront();\r\n\t}\r\n\tfunction toggleMinimize(){\r\n\t\t\r\n\t\tif(minimized) unminimize();\r\n\t\telse minimize();\r\n\t}\r\n\tfunction maximize()\r\n\t{\r\n\t\tif(maximized)return;\r\n\t\tunminimize();\r\n\t\tpreviousSizes = getSizes();\r\n\t\tif(resizable||!window.isMobile)\r\n\t\t\tsetWindowSizePositionMaximized();\r\n\t\tmaximizedSizes = getSizes();\r\n\t\tmaximized = true;\r\n\t\tdispatchMaximizedEvent();\r\n\t\tbringToFront();\r\n\t}\r\n\tfunction unmaximize(mouseDragPosition)\r\n\t{\r\n\t\tif(!maximized)return;\r\n\t\tif (previousSizes)\r\n\t\t{\r\n\t\t\tif (!mouseDragPosition)\r\n\t\t\t\tsetWindowSizePosition({\r\n\t\t\t\t\twidth:previousSizes.width,\r\n\t\t\t\t\theight:previousSizes.height,\r\n\t\t\t\t\ttop:previousSizes.top,\r\n\t\t\t\t\tleft:previousSizes.left\r\n\t\t\t\t});\r\n\t\t\telse {\r\n\t\t\t\tvar b = mouseDragPosition.left / (parentElement?parentElement:document.documentElement).clientWidth;\r\n\t\t\t\tvar leftOffset = (b * previousSizes.width);\r\n\t\t\t\tvar l = mouseDragPosition.left - leftOffset;\r\n\t\t\t\tsetWindowSizePosition({\r\n\t\t\t\t\twidth:previousSizes.width, \r\n\t\t\t\t\theight:previousSizes.height,\r\n\t\t\t\tleft:l\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t\tmaximized = false;\r\n\t\tself._drag?.updateMinMax();\r\n\t\tdispatchUnmaximizedEvent();\r\n\t}\r\n\tfunction toggleMaximize()\r\n\t{\r\n\t\tif (!maximized)\r\n\t\t{\r\n\t\t\tmaximize();\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tunmaximize();\r\n\t\t}\r\n\t}\r\n\tfunction bringToFront()\r\n\t{\r\n\t\tconst instances = Windows._instances;\r\n\t\tconst instance = instances.splice(instances.indexOf(self), 1)[0];\r\n\t\tinstances.push(instance);\r\n\t\tWindows._updateZIndices();\r\n\t};\r\n\tfunction focus(){\r\n\t\tbringToFront();\r\n\t\tdispatchFocussedEvent();\r\n\t}\r\n\tfunction dragged(){\r\n\t\tsettings.set(\"position\", [element.offsetLeft, element.offsetTop]);\r\n\t\tdispatchMovedEvent();\r\n\t\tdispatchDraggedEvent();\r\n\t}\r\n\tfunction dragStarted(e){\r\n\t\tconsole.log('dragStarted');\r\n\t\tif(maximized)\r\n\t\t\tunmaximize({left: e.screenX});\r\n\t\tdispatchDragStarted();\r\n\t}\r\n\tfunction getSizes()\r\n\t{\r\n\t\tvar p = Resizer.padding * 2;\r\n\t\treturn new (function(){\r\n\t\t\t\tvar self = this;\r\n\t\t\t\tthis.width=element.offsetWidth - p; \r\n\t\t\t\tthis.height= element.offsetHeight - p; \r\n\t\t\t\tthis.top= element.offsetTop;\r\n\t\t\t\tthis.left= element.offsetLeft;\r\n\t\t\t\tthis.equals=function(s){\r\n\t\t\t\t\treturn self.width==s.width&&self.height==s.height&&self.top==s.top&&self.left==s.left;\r\n\t\t\t\t};\r\n\t\t})();\r\n\t}\r\n\r\n\tfunction setWindowSizePosition(params)\r\n\t{\r\n\t\telement.style.height = String(params.height) + 'px';\r\n\t\telement.style.width = String(params.width) + 'px';\r\n\t\tif (params.top!==undefined)\r\n\t\t\telement.style.top = String(params.top) + 'px';\r\n\t\tif (params.left!==undefined)\r\n\t\t\telement.style.left = String(params.left) + 'px';\r\n\t}\r\n\tfunction resizerStarted(){\r\n\t\tconsole.log('resizerStarted');\r\n\t\tmaximized = false;\r\n\t\tdispatchResizerStartedEvent();\r\n\t}\r\n\tfunction dispatchResizedEvent(){\r\n\t\tself.dispatchEvent({type:EventNames.RESIZED});\r\n\t}\r\n\tfunction dispatchResizerStartedEvent(){\r\n\t\tself.dispatchEvent({type:EventNames.RESIZE_STARTED});\r\n\t}\r\n\tfunction dispatchMaximizedEvent(){\r\n\t\tself.dispatchEvent({type:EventNames.MAXIMIZED});\r\n\t}\r\n\tfunction dispatchMinimizedEvent(){\r\n\t\tself.dispatchEvent({type:EventNames.MINIMIZED});\r\n\t}\r\n\tfunction dispatchUnminimizedEvent(){\r\n\t\tself.dispatchEvent({type:EventNames.UNMINIMIZED});\r\n\t}\r\n\tfunction dispatchUnmaximizedEvent(){\r\n\t\tself.dispatchEvent({type:EventNames.UNMAXIMIZED});\r\n\t}\r\n\tfunction dispatchDragStarted(){\r\n\t\tself.dispatchEvent({type:EventNames.DRAG_STARTED});\r\n\t}\r\n\tfunction dispatchMovedEvent(){\r\n\t\tself.dispatchEvent({type:EventNames.MOVED});\r\n\t}\r\n\tfunction dispatchClosedEvent(){\r\n\t\tself.dispatchEvent({type:EventNames.CLOSED});\r\n\t}\r\n\tfunction dispatchFocussedEvent(){\r\n\t\tself.dispatchEvent({type:EventNames.FOCUSSED, window:self});\r\n\t}\r\n\tfunction dispatchDraggedEvent(){\r\n\t\tconsole.log('dispatchDraggedEvent');\r\n\t\tself.dispatchEvent({type:EventNames.DRAGGED});\r\n\t}\r\n\tfunction dispatchZIndexChangedEvent(){\r\n\t\tself.dispatchEvent({type:EventNames.Z_INDEX_CHANGED});\r\n\t}\r\n};\r\nGenericWindow.EventNames = EventNames;\r\nexport default GenericWindow;","import React, { Component } from 'react';\r\nimport './SubMenuHeader.css';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport IconButtonNonReact from './IconButtonNonReact';\r\nimport IconButton from './IconButton';\r\nimport { faBackward, faTimes} from '@fortawesome/free-solid-svg-icons'\r\nimport Urls from '../urls/Urls';\r\nconst{throwNotProvided}=ParameterErrors;\r\nexport default class SubMenuHeaderNonReact {\r\n\tconstructor(props){\r\n\t\tconst {title, children, menuManager}=props;\r\n\t\tthis._iMenuManager = menuManager;\r\n\t\tthis._children = children;\r\n\t\tthis._hasChildren=children?true:false;\r\n\t\tthis._handleClickButtonBack= this._handleClickButtonBack.bind(this);\r\n\t\tthis._handleClickButtonClose= this._handleClickButtonClose.bind(this);\r\n\t\tthis._iMenuManager = menuManager;\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add('sub-menu-header');\r\n\t\tif(this._hasChildren)\r\n\t\t\tthis._element.classList.add('has-children');\r\n\t\t\r\n\t\tconst childrenElement = document.createElement('div');\r\n\t\tchildrenElement.classList.add('children');\r\n\t\tif(this._children)\r\n\t\t\tthis._children.forEach(child=>childrenElement.appendChild(child));\r\n\t\tthis._element.appendChild(childrenElement);\r\n\t\tconst titleElement = document.createElement('div');\r\n\t\ttitleElement.classList.add('title');\r\n\t\ttitleElement.innerHTML = title;\r\n\t\tthis._element.appendChild(titleElement);\r\n\t\t\r\n\t\tconst backButtonWrapperElement = document.createElement('div');\r\n\t\tbackButtonWrapperElement.classList.add('button-back-wrapper');\r\n\t\tthis._element.appendChild(backButtonWrapperElement);\r\n\t\t\r\n\t\tconst closeButtonWrapperElement = document.createElement('div');\r\n\t\tcloseButtonWrapperElement.classList.add('button-close-wrapper');\r\n\t\tthis._element.appendChild(closeButtonWrapperElement);\r\n\t\t\r\n\t\tthis._iconButtonNonReactBack = new IconButtonNonReact({imgUrl:Urls.assets+'icons/UI_Button_Open.png', onClick:this._handleClickButtonBack});\r\n\t\tbackButtonWrapperElement.appendChild(this._iconButtonNonReactBack.element);\r\n\t\t\r\n\t\tthis._iconButtonNonReactClose = new IconButtonNonReact({imgUrl:Urls.assets+'icons/UI_Button_Exit.png', onClick:this._handleClickButtonClose});\r\n\t\tcloseButtonWrapperElement.appendChild(this._iconButtonNonReactClose.element);\r\n\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n\t_handleClickButtonBack(){\r\n\t\tif(this._iMenuManager)\r\n\t\t\tthis._iMenuManager.back();\r\n\t}\r\n\t_handleClickButtonClose(){\r\n\t\tif(this._iMenuManager)\r\n\t\t\tthis._iMenuManager.close();\r\n\t}\r\n}\r\n","const PlotDetailedInformationSectionType={\r\n\tFloorPlans:'floorPlans',\r\n\tStreetViewImage:'streetViewImage',\r\n\tFrontViewImage:'frontViewImage',\r\n\tGallery:'gallery',\r\n\tDescription:'description',\r\n\tTour:'tour',\r\n\tVideo:'video'\r\n};\r\nexport default PlotDetailedInformationSectionType;","import ReactDOM from 'react-dom';\r\nimport React, { Component } from 'react';\r\nimport Star from '../components/Star';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport IconButtonNonReact from '../components/IconButtonNonReact';\r\nimport PlotStatus from '../site/PlotStatus';\r\nimport AssetsManager from '../assets_management/AssetsManager';\r\nimport PropertyBindingFactory from '../mvvm/PropertyBindingFactory';\r\nimport Urls from '../urls/Urls';\r\nimport PlotDetailedInformationSectionType from './PlotDetailedInformationSectionType';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class PlotDetailedInformationSummary {\r\n\tconstructor(props){\r\n\t\tconst { siteJsonUnitPlot, addFavourite, removeFavourite, showStreetView, scrollToFloorPlans,\r\n\t\t\tscrollToGallery, configuration, showBrochureGenerationDialog, enterHouse}=props;\r\n\t\tthis._callbackShowBrochureGenerationDialog = showBrochureGenerationDialog;\r\n\t\tthis._callbackEnterHouse = enterHouse;\r\n\t\tthis._configuration=configuration;\r\n\t\tthis._selectedChanged = this._selectedChanged.bind(this);\r\n\t\tthis._handleClickSendBrochure = this._handleClickSendBrochure.bind(this);\r\n\t\tthis._handleClickEnterHouse = this._handleClickEnterHouse.bind(this);\r\n\t\tthis._setValuesFromSiteJsonUnitPlot = this._setValuesFromSiteJsonUnitPlot.bind(this);\r\n\t\tthis._siteJsonUnitPlot = siteJsonUnitPlot;\r\n\t\tthis._callbackAddFavourite = addFavourite;\r\n\t\tthis._callbackRemoveFavourite = removeFavourite;\r\n\t\tthis._callbackShowStreetView = showStreetView;\r\n\t\tthis._handleStarSelectedChanged = this._handleStarSelectedChanged.bind(this);\r\n\t\tthis._handleClickShowStreetView = this._handleClickShowStreetView.bind(this);\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add('summary');\r\n\t\tthis._plotNameElement = document.createElement('div');\r\n\t\tthis._plotNameElement.classList.add('plot-name');\r\n\t\tthis._plotNumberElement = document.createElement('div');\r\n\t\tthis._plotNumberElement.classList.add('plot-number');\r\n\t\tthis._plotStatusDescriptionElement = document.createElement('div');\r\n\t\tthis._plotStatusDescriptionElement.classList.add('plot-status');\r\n\t\tthis._plotPriceElement = document.createElement('div');\r\n\t\tthis._plotPriceElement.classList.add('plot-price');\r\n\t\tthis._nBedroomsElement = document.createElement('div');\r\n\t\tthis._nBedroomsElement.classList.add('n-bedrooms');\r\n\t\tthis._smallButtonsElement = document.createElement('div');\r\n\t\tthis._smallButtonsElement.classList.add('small-buttons');\r\n\t\t[this._plotNameElement, this._plotNumberElement, this._plotStatusDescriptionElement, this._plotPriceElement, \r\n\t\t\tthis._nBedroomsElement, this._smallButtonsElement]\r\n\t\t.forEach(childElement=>this._element.appendChild(childElement));\r\n\t\tthis._star = React.createRef();\r\n\t\tconst starFactory = React.createFactory(Star);\r\n\t\tReactDOM.render(starFactory(\r\n\t\t\t{ \r\n\t\t\t\tonSelectedChange:this._handleStarSelectedChanged, \r\n\t\t\t\tref:this._star,\r\n\t\t\t\tstopEventPropagation:true\r\n\t\t\t}),\r\n\t\t\tthis._smallButtonsElement);\r\n\t\tconst hasOneOrMoreRoomImages=siteJsonUnitPlot.hasOneOrMoreRoomImages;\r\n\t\t\r\n\t\tthis._iconButtonWalkmode = new IconButtonNonReact({ \t\r\n\t\t\t\tclassName:[\"button-show-street-view\", \"button-show\"], \r\n\t\t\t\timgUrl:Urls.assets+'icons/UI_Button_Walkmode.png',\r\n\t\t\t\tonClick:this._handleClickShowStreetView\r\n\t\t\t});\r\n\t\tthis._smallButtonsElement.appendChild(this._iconButtonWalkmode.element);\r\n\t\t\t\r\n\t\t\r\n\t\tthis._iconButtonShowGallery = new IconButtonNonReact({\r\n\t\t\t\tclassName:[\"button-show-gallery\", \"button-show\"], \r\n\t\t\t\timgUrl:hasOneOrMoreRoomImages?(Urls.assets+'icons/UI_Button_Gallery.png'):(Urls.assets+'icons/UI_Button_Gallery_Disabled.png'),\r\n\t\t\t\tonClick:scrollToGallery\r\n\t\t\t});\r\n\t\tthis._smallButtonsElement.appendChild(this._iconButtonShowGallery.element);\r\n\t\t\t\r\n\t\t\r\n\t\tthis._iconButtonShowGallery = new IconButtonNonReact({\r\n\t\t\t\tclassName:[\"button-show-floor-plan\", \"button-show\"], \r\n\t\t\t\timgUrl:Urls.assets+'icons/UI_Button_Floorplan.png',\r\n\t\t\t\tonClick:scrollToFloorPlans\r\n\t\t\t});\r\n\t\tthis._smallButtonsElement.appendChild(this._iconButtonShowGallery.element);\r\n\t\t\r\n\t\tthis._buttonEnterHouse = document.createElement('button');\r\n\t\tthis._buttonEnterHouse.classList.add(\"button-enter-house\");\r\n\t\tthis._buttonEnterHouse.addEventListener('click', this._handleClickEnterHouse);\r\n\t\tthis._buttonEnterHouse.innerHTML = 'Enter Plot';\r\n\t\tthis._smallButtonsElement.appendChild(this._buttonEnterHouse);\r\n\t\t\r\n\t\tconst buttonSendBrochure = document.createElement('button');\r\n\t\tbuttonSendBrochure.classList.add(\"button-send-brochure\");\r\n\t\tbuttonSendBrochure.addEventListener('click', this._handleClickSendBrochure);\r\n\t\tbuttonSendBrochure.innerHTML = 'Send Brochure';\r\n\t\tthis._smallButtonsElement.appendChild(buttonSendBrochure);\r\n\t\t\r\n\t\tthis._setValuesFromSiteJsonUnitPlot(siteJsonUnitPlot);\r\n\t}\r\n\tset plot(siteJsonUnitPlot){\r\n\t\tthis._siteJsonUnitPlot = siteJsonUnitPlot;\r\n\t\tthis._setValuesFromSiteJsonUnitPlot(siteJsonUnitPlot);\r\n\t}\r\n\t_setValuesFromSiteJsonUnitPlot(siteJsonUnitPlot){\r\n\t\tthis._propertyBindingSelected?.dispose();\r\n\t\tthis._propertyBindingSelected = PropertyBindingFactory.standard(this, siteJsonUnitPlot, 'selected', this._selectedChanged);\r\n\t\tthis._plotNameElement.innerHTML = siteJsonUnitPlot.name;\r\n\t\tthis._plotNumberElement.innerHTML = 'Plot '+String(siteJsonUnitPlot.number);\r\n\t\tthis._plotStatusDescriptionElement.innerHTML = siteJsonUnitPlot?PlotStatus.getDescription(siteJsonUnitPlot.status):' ';\r\n\t\tconst showPrice = (siteJsonUnitPlot)&&(!siteJsonUnitPlot.isSold)&&(!siteJsonUnitPlot.isReserved);\r\n\t\tthis._plotPriceElement.innerHTML = (!showPrice)||(siteJsonUnitPlot.price<=0)?' ':siteJsonUnitPlot.priceString;\r\n\t\tconst nBathroomString = this._configuration.showNBathrooms?` and ${siteJsonUnitPlot.nBathrooms} Bathrooms`:'';\r\n\t\tthis._nBedroomsElement.innerHTML = ' - '+String(siteJsonUnitPlot.nBedrooms)+' Bedrooms'+nBathroomString;\r\n\t\tconst hasConfiguratorOrTour=siteJsonUnitPlot&&Urls.getConfiguratorUrlForPlot(siteJsonUnitPlot, this._configuration);\r\n\t\tif(hasConfiguratorOrTour)\r\n\t\t\tthis._buttonEnterHouse.classList.add('visible');\r\n\t\telse\r\n\t\t\tthis._buttonEnterHouse.classList.remove('visible');\r\n\t}\r\n\t_selectedChanged(value){\r\n\t\tthis._star.current.selected=value;\r\n\t}\r\n\t_handleClickSendBrochure(){\r\n\t\tthis._callbackShowBrochureGenerationDialog({plot:this._siteJsonUnitPlot});\r\n\t}\r\n\t_handleClickEnterHouse(){\r\n\t\tthis._callbackEnterHouse(this._siteJsonUnitPlot);\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n\tget sectionType(){\r\n\t\treturn PlotDetailedInformationSectionType.Gallery;\r\n\t}\r\n\t_handleStarSelectedChanged(selected){\r\n\t\tif(selected)this._callbackAddFavourite(this._siteJsonUnitPlot);\r\n\t\telse this._callbackRemoveFavourite(this._siteJsonUnitPlot);\r\n\t}\r\n\t_handleClickShowStreetView(e){\r\n\t\tthis._callbackShowStreetView({nearPlot:this._siteJsonUnitPlot});\r\n\t}\r\n}","import ResizeWatcher from './ResizeWatcher';\r\nimport eventEnable from '../core/eventEnable';\r\nexport default class ResizeWatchers{\r\n\tstatic add({element, onResized, onFirstResize, staggered}){\r\n\t\treturn new ResizeWatcher({element, onResized, onFirstResize, staggered});\r\n\t}\r\n}\t\r\neventEnable(ResizeWatcher);\r\n\t","import ParameterErrors from '../errors/ParameterErrors';\r\nimport Validation from '../validation/Validation';\r\nimport DynamicImageFitCriteria from './DynamicImageFitCriteria';\r\nimport DynamicImageEntry from './DynamicImageEntry';\r\nimport ResizeWatchers from '../ui_core/ResizeWatchers';\r\nimport Urls from '../urls/Urls';\r\nimport UrlHelper from '../core/UrlHelper';\r\nconst{throwNotProvided, throwNotOfType}=ParameterErrors;\r\nexport default class DynamicImageDisplayer {\r\n\tconstructor({dynamicImage, parentElement, resizeWatcherParentElement, className,\r\n\tfitWidthElseHeight, allowDowngradeResolution, onClick, resolutionMultiplier, onLoaded,\r\n\tconfiguration}){\r\n\t\tthis._configuration = configuration;\r\n\t\tthis._allowDowngradeResolution = allowDowngradeResolution===true?true:false;\r\n\t\tthis._resolutionMultiplier = resolutionMultiplier===undefined?1:resolutionMultiplier;\r\n\t\tthis._dynamicImage = dynamicImage;\r\n\t\tthis._parentElement = parentElement;\r\n\t\tthis._element = document.createElement('img');\r\n\t\tthis._element.classList.add('dynamic-image');\r\n\t\tif(onLoaded)\r\n\t\t\tthis._element.addEventListener('load', onLoaded);\r\n\t\tparentElement.appendChild(this._element);\r\n\t\tif(className)\r\n\t\t\tthis._element.classList.add(className);\r\n\t\tthis._onParentElementResize= this._onParentElementResize.bind(this);\r\n\t\tthis._fitImageToWidth = this._fitImageToWidth.bind(this);\r\n\t\tthis._fitImageToHeight = this._fitImageToHeight.bind(this);\r\n\t\tthis._shouldSkipUpdateCosIsDowngrade= this._shouldSkipUpdateCosIsDowngrade.bind(this);\r\n\t\tthis._setSrc = this._setSrc.bind(this);\r\n\t\tthis._fitImage = fitWidthElseHeight?this._fitImageToWidth:this._fitImageToHeight;\r\n\t\tif(resizeWatcherParentElement)\r\n\t\t\tthis._resizeWatcherParentElement = resizeWatcherParentElement;\r\n\t\telse \r\n\t\t\tthis._resizeWatcherParentElement = ResizeWatchers.add({element:parentElement, staggered:false});\r\n\t\tthis._resizeWatcherParentElement .addEventListener('resized', this._onParentElementResize);\r\n\t\tsetTimeout(this._fitImage, 0);\r\n\t\tif(onClick)\r\n\t\t\tthis._element.addEventListener('click', ()=>onClick(dynamicImage));\r\n\t}\r\n\t_onParentElementResize(e){\r\n\t\tthis._fitImage();\r\n\t}\r\n\t_fitImageToWidth(){\r\n\t\tconst newDynamicImageEntry = this._dynamicImage.getBestEntryToFitWidth(this._resolutionMultiplier*this._element.clientWidth);\r\n\t\tconst shouldSkip = this._shouldSkipUpdateCosIsDowngrade(newDynamicImageEntry);\r\n\t\tif(shouldSkip)\r\n\t\t\treturn;\r\n\t\tthis._currentDynamicImageEntry = newDynamicImageEntry;\r\n\t\tthis._setSrc(newDynamicImageEntry);\r\n\t}\r\n\t_fitImageToHeight(){\r\n\t\tconst newDynamicImageEntry = this._dynamicImage.getBestEntryToFitWidth(this._resolutionMultiplier*this._element.clientHeight);\r\n\t\tconst shouldSkip = this._shouldSkipUpdateCosIsDowngrade(newDynamicImageEntry);\r\n\t\tif(shouldSkip)\r\n\t\t\treturn;\r\n\t\tthis._currentDynamicImageEntry = newDynamicImageEntry;\r\n\t\tthis._setSrc(newDynamicImageEntry);\r\n\t}\r\n\t_shouldSkipUpdateCosIsDowngrade(newDynamicImageEntry){\r\n\t\tif(this._allowDowngradeResolution||!this._currentDynamicImageEntry) \r\n\t\t\treturn false;\r\n\t\tconst isIncrease = (\r\n\t\t\t\t(newDynamicImageEntry.width>this._currentDynamicImageEntry.width)\r\n\t\t\t\t||\r\n\t\t\t\t(newDynamicImageEntry.height>this._currentDynamicImageEntry.height)\r\n\t\t\t);\r\n\t\treturn !isIncrease;\r\n\t}\r\n\t_setSrc(dynamicImageEntry){\r\n\t\tthis._element.src = `${Urls.getAssetsForSite(this._configuration.siteSlug)}${UrlHelper.removeStartSlash(dynamicImageEntry.relativePath)}`;\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n}","import ReactDOM from 'react-dom';\r\nimport React, { Component } from 'react';\r\nimport Star from '../components/Star';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport IconButtonNonReact from '../components/IconButtonNonReact';\r\nimport PlotStatus from '../site/PlotStatus';\r\nimport AssetsManager from '../assets_management/AssetsManager';\r\nimport Urls from '../urls/Urls';\r\nimport UrlHelper from '../core/UrlHelper';\r\nimport ResizeWatcher from '../ui_core/ResizeWatcher';\r\nimport DynamicImageDisplayer from '../images/DynamicImageDisplayer';\r\nimport Once from '../core/Once';\r\nimport PlotDetailedInformationSectionType from './PlotDetailedInformationSectionType';\r\nimport eventEnable from '../core/eventEnable';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class PlotDetailedInformationGallery {\r\n\tconstructor(props){\r\n\t\tconst { siteJsonUnitPlot, showImagesFullScreen, configuration}=props;\r\n\t\tthis._configuration = configuration;\r\n\t\teventEnable(this);\r\n\t\tthis._siteJsonUnitPlot = siteJsonUnitPlot;\r\n\t\tthis._showImagesFullScreen = showImagesFullScreen;\r\n\t\tthis._setupFromSiteJsonUnitPlot = this._setupFromSiteJsonUnitPlot.bind(this);\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add('gallery');\r\n\t\tthis._loadImages= this._loadImages.bind(this);\r\n\t\tthis._resized = this._resized.bind(this);\r\n\t\tthis._setRoomImageClass = this._setRoomImageClass.bind(this);\r\n\t\tthis._dispatchLoaded = this._dispatchLoaded.bind(this);\r\n\t\tthis._resizeWatcherParentElement = new ResizeWatcher({element:this._element});\r\n\t\tthis._resizeWatcherParentElement.addEventListener('resized', this._resized);\r\n\t\tthis._loadedOnce = new Once(this._dispatchLoaded);\r\n\t\tthis._imgWrapperElement = document.createElement('div');\r\n\t\tthis._imgWrapperElement.classList.add('room-image-wrapper');\r\n\t\tthis._element.appendChild(this._imgWrapperElement);\r\n\t\tthis._setupFromSiteJsonUnitPlot();\r\n\t}\r\n\tset plot(siteJsonUnitPlot){\r\n\t\tthis._siteJsonUnitPlot = siteJsonUnitPlot;\r\n\t\tthis._setupFromSiteJsonUnitPlot();\r\n\t}\r\n\t_setupFromSiteJsonUnitPlot(){\r\n\t\tthis._dynamicRoomImages = [];\r\n\t\tthis._siteJsonUnitPlot.rooms.getArray().forEach((room)=>{\r\n\t\t\tthis._dynamicRoomImages = this._dynamicRoomImages.concat(room.images);\r\n\t\t});\r\n\t\tsetTimeout(this._loadImages, 0);\r\n\t}\r\n\t_resized(){\r\n\t\tconst width = this._element.clientWidth;\r\n\t\tif(width<400){\r\n\t\t\tthis._setRoomImageClass('room-images-one-per-row');\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif(width<600){\r\n\t\t\tthis._setRoomImageClass('room-images-two-per-row');\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif(width<800){\r\n\t\t\tthis._setRoomImageClass('room-images-three-per-row');\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif(width<1000){\r\n\t\t\tthis._setRoomImageClass('room-images-four-per-row');\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis._setRoomImageClass('room-images-five-per-row');\r\n\t\t\r\n\t}\r\n\t_setRoomImageClass(newClassName){\r\n\t\tif(this._currentRoomImageClassName){\r\n\t\t\tthis._element.classList.remove(this._currentRoomImageClassName);\r\n\t\t}\r\n\t\tthis._currentRoomImageClassName = newClassName;\r\n\t\t\tthis._element.classList.add(newClassName);\r\n\t}\r\n\t_loadImages(){\r\n\t\tthis._element.innerHTML='';\r\n\t\tlet dynamicImageDisplayer = new DynamicImageDisplayer({\r\n\t\t\tdynamicImage:this._siteJsonUnitPlot.unit.frontViewImage, \r\n\t\t\tparentElement:this._element, \r\n\t\t\tresizeWatcherParentElement:this._resizeWatcherParentElement,\r\n\t\t\tclassName:'plot-image',\r\n\t\t\tfitWidthElseHeight:true,\r\n\t\t\tonClick:()=>this._showImagesFullScreen([this._siteJsonUnitPlot.unit.frontViewImage]),\r\n\t\t\tonLoaded:this._loadedOnce.trigger,\r\n\t\t\tconfiguration:this._configuration\r\n\t\t});\r\n\t\tconst streetViewImage = this._siteJsonUnitPlot.unit.streetViewImage;\r\n\t\tif(streetViewImage){\r\n\t\t\tnew DynamicImageDisplayer({\r\n\t\t\t\t\tdynamicImage:streetViewImage, \r\n\t\t\t\t\tparentElement:this._element, \r\n\t\t\t\t\tresizeWatcherParentElement:this._resizeWatcherParentElement,\r\n\t\t\t\t\tclassName:'plot-image',\r\n\t\t\t\t\tfitWidthElseHeight:true,\r\n\t\t\t\t\tonClick:()=>this._showImagesFullScreen([streetViewImage]),\r\n\t\t\t\t\tconfiguration:this._configuration\r\n\t\t\t});\r\n\t\t}\r\n\t\tthis._imgWrapperElement.innerHTML='';\r\n\t\tthis._dynamicRoomImages.forEach(dynamicImage=>{\r\n\t\t\tnew DynamicImageDisplayer({\r\n\t\t\t\tdynamicImage, \r\n\t\t\t\tparentElement: this._imgWrapperElement,\r\n\t\t\t\tresizeWatcherParentElement:this._resizeWatcherParentElement,\r\n\t\t\t\tclassName:'room-image',\r\n\t\t\t\tfitWidthElseHeight:false,\r\n\t\t\t\tonClick:()=>this._showImagesFullScreen([dynamicImage]),\r\n\t\t\t\tconfiguration:this._configuration\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n\tget sectionType(){\r\n\t\treturn PlotDetailedInformationSectionType.Gallery;\r\n\t}\r\n\t_dispatchLoaded(){\r\n\t\tthis.dispatchEvent({type:'loaded'});\r\n\t}\r\n}","import ReactDOM from 'react-dom';\r\nimport React, { Component } from 'react';\r\nimport Star from '../components/Star';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport IconButtonNonReact from '../components/IconButtonNonReact';\r\nimport PlotStatus from '../site/PlotStatus';\r\nimport AssetsManager from '../assets_management/AssetsManager';\r\nimport Urls from '../urls/Urls';\r\nimport UrlHelper from '../core/UrlHelper';\r\nimport ResizeWatcher from '../ui_core/ResizeWatcher';\r\nimport PlotDetailedInformationSectionType from './PlotDetailedInformationSectionType';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class PlotDetailedInformationDescription {\r\n\tconstructor(props){\r\n\t\tconst { siteJsonUnitPlot}=props;\r\n\t\tthis._siteJsonUnitPlot = siteJsonUnitPlot;\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add('description');\r\n\t\tthis._innerElement = document.createElement('div');\r\n\t\tthis._innerElement.classList.add('inner');\r\n\t\tthis._element.appendChild(this._innerElement);\r\n\t\tthis._innerElement.innerHTML = siteJsonUnitPlot.about;\r\n\t}\r\n\tset plot(siteJsonUnitPlot){\r\n\t\tthis._siteJsonUnitPlot = siteJsonUnitPlot;\r\n\t\tthis._innerElement.innerHTML = siteJsonUnitPlot.about;\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n\tget sectionType(){\r\n\t\treturn PlotDetailedInformationSectionType.Description;\r\n\t}\r\n}","import ReactDOM from 'react-dom';\r\nimport React, { Component } from 'react';\r\nimport Star from '../components/Star';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport IconButtonNonReact from '../components/IconButtonNonReact';\r\nimport PlotStatus from '../site/PlotStatus';\r\nimport AssetsManager from '../assets_management/AssetsManager';\r\nimport Urls from '../urls/Urls';\r\nimport UrlHelper from '../core/UrlHelper';\r\nimport Once from '../core/Once';\r\nimport eventEnable from '../core/eventEnable';\r\nimport ResizeWatcher from '../ui_core/ResizeWatcher';\r\nimport DynamicImageDisplayer from '../images/DynamicImageDisplayer';\r\nimport PlotDetailedInformationSectionType from './PlotDetailedInformationSectionType';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class PlotDetailedInformationFloorPlans {\r\n\tconstructor(props){\r\n\t\tconst { siteJsonUnitPlot, showImagesFullScreen, configuration}=props;\r\n\t\tthis._configuration = configuration;\r\n\t\tthis._siteJsonUnitPlot = siteJsonUnitPlot;\r\n\t\tthis._showImagesFullScreen=showImagesFullScreen;\r\n\t\teventEnable(this);\r\n\t\tthis._element = document.createElement('div');\r\n\t\tif(!this._siteJsonUnitPlot.floorPlanImages)return;\r\n\t\tthis._element.classList.add('floor-plans');\r\n\t\tthis._resized = this._resized.bind(this);\r\n\t\tthis._setFloorPlanImageClass = this._setFloorPlanImageClass.bind(this);\r\n\t\tthis._setupFromSiteJsonUnitPlot = this._setupFromSiteJsonUnitPlot.bind(this);\r\n\t\tthis._dispatchLoaded = this._dispatchLoaded.bind(this);\r\n\t\tthis._resizeWatcherParentElement = new ResizeWatcher({element:this._element});\r\n\t\tthis._resizeWatcherParentElement.addEventListener('resized', this._resized);\r\n\t\tthis._loadedOnce = new Once(this._dispatchLoaded);\r\n\t\tthis._imgWrapperElement = document.createElement('div');\r\n\t\tthis._imgWrapperElement.classList.add('floor-plan-image-wrapper');\r\n\t\tthis._element.appendChild(this._imgWrapperElement);\r\n\t\tthis._setupFromSiteJsonUnitPlot();\r\n\t}\r\n\t_setupFromSiteJsonUnitPlot(){\r\n\t\tthis._dynamnicImageDisplayers = [];\r\n\t\tsetTimeout(()=>{\r\n\t\t\tthis._imgWrapperElement.innerHTML='';\r\n\t\t\tthis._siteJsonUnitPlot.floorPlanImages.forEach(dynamicImage=>{\r\n\t\t\t\tconst dynamicImageDisplayer = new DynamicImageDisplayer({\r\n\t\t\t\t\tdynamicImage, \r\n\t\t\t\t\tparentElement: this._imgWrapperElement,\r\n\t\t\t\t\tresizeWatcherParentElement:this._resizeWatcherParentElement,\r\n\t\t\t\t\tclassName:'floor-plan-image',\r\n\t\t\t\t\tfitWidthElseHeight:true,\r\n\t\t\t\t\tonClick:()=>this._showImagesFullScreen([dynamicImage]),\r\n\t\t\t\t\tonLoaded:this._loadedOnce.trigger,\r\n\t\t\t\t\tconfiguration:this._configuration\r\n\t\t\t\t});\r\n\t\t\t\tthis._dynamnicImageDisplayers.push(dynamicImageDisplayer);\r\n\t\t\t});\r\n\t\t}, 0);\r\n\t}\r\n\t_resized(){\r\n\t\tconst width = this._element.clientWidth;\r\n\t\tif(this._siteJsonUnitPlot.floorPlanImages&&this._siteJsonUnitPlot.floorPlanImages.length>2){\r\n\t\t\tif(width>600){\r\n\t\t\t\tthis._setFloorPlanImageClass('floor-plan-images-two-per-row');\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis._setFloorPlanImageClass('floor-plan-images-one-per-row');\r\n\t}\r\n\t_setFloorPlanImageClass(newClassName){\r\n\t\tif(this._currentRoomImageClassName){\r\n\t\t\tthis._element.classList.remove(this._currentRoomImageClassName);\r\n\t\t}\r\n\t\tthis._currentRoomImageClassName = newClassName;\r\n\t\t\tthis._element.classList.add(newClassName);\r\n\t}\r\n\tset plot(siteJsonUnitPlot){\r\n\t\tthis._siteJsonUnitPlot = siteJsonUnitPlot;\r\n\t\tthis._setupFromSiteJsonUnitPlot(siteJsonUnitPlot);\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n\tget sectionType(){\r\n\t\treturn PlotDetailedInformationSectionType.FloorPlans;\r\n\t}\r\n\t_dispatchLoaded(){\r\n\t\tthis.dispatchEvent({type:'loaded'});\r\n\t}\r\n}","import ReactDOM from 'react-dom';\r\nimport React, { Component } from 'react';\r\nimport Star from '../components/Star';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport IconButtonNonReact from '../components/IconButtonNonReact';\r\nimport PlotStatus from '../site/PlotStatus';\r\nimport AssetsManager from '../assets_management/AssetsManager';\r\nimport Urls from '../urls/Urls';\r\nimport UrlHelper from '../core/UrlHelper';\r\nimport ResizeWatcher from '../ui_core/ResizeWatcher';\r\nimport VideoPlayer from '../components/VideoPlayer';\r\nimport Once from '../core/Once';\r\nimport PropertyBindingFactory from '../mvvm/PropertyBindingFactory';\r\nimport FullScreen from '../ui_core/FullScreen';\r\nimport PlotDetailedInformationSectionType from './PlotDetailedInformationSectionType';\r\nimport eventEnable from '../core/eventEnable';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class PlotDetailedInformationVideo {\r\n\tconstructor(props){\r\n\t\tconst { siteJsonUnitPlot, showImagesFullScreen, configuration}=props;\r\n\t\teventEnable(this);\r\n\t\tthis._configuration = configuration;\r\n\t\tthis._siteJsonUnitPlot = siteJsonUnitPlot;\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add('video');\r\n\t\tthis._dispatchLoaded = this._dispatchLoaded.bind(this);\r\n\t\tthis._videoUrlChanged = this._videoUrlChanged.bind(this);\r\n\t\tthis._videoPlayer = new VideoPlayer({\r\n\t\t\tmaximized:false,\r\n\t\t\tforceFillWidth:true,\r\n\t\t\ttoggleMaximizeButton:true\r\n\t\t});\r\n\t\tthis._element.appendChild(this._videoPlayer.element);\r\n\t\tthis._setupFromSiteJsonUnitPlot();\r\n\t}\r\n\tset plot(siteJsonUnitPlot){\r\n\t\tthis._siteJsonUnitPlot = siteJsonUnitPlot;\r\n\t\tthis._setupFromSiteJsonUnitPlot();\r\n\t}\r\n\t_setupFromSiteJsonUnitPlot(){\r\n\t\tthis._propertyBindingTourUrl?.dispose();\r\n\t\tthis._propertyBindingTourUrl = PropertyBindingFactory.standard(this, this._siteJsonUnitPlot.houseType, 'videoUrl', this._videoUrlChanged);\r\n\t}\r\n\t_videoUrlChanged(value){\r\n\t\tconst noUrl = value===undefined||value===null;\r\n\t\tconst url =noUrl?null:\r\n\t\t(value.indexOf('http')>=0?value:(Urls.getAssetsForSite(this._configuration.siteSlug)+value));\r\n\t\tthis._videoPlayer.load({url:url});\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n\tget sectionType(){\r\n\t\treturn PlotDetailedInformationSectionType.Video;\r\n\t}\r\n\t_dispatchLoaded(){\r\n\t\tthis.dispatchEvent({type:'loaded'});\r\n\t}\r\n}","import ReactDOM from 'react-dom';\r\nimport React, { Component } from 'react';\r\nimport Star from '../components/Star';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport IconButtonNonReact from '../components/IconButtonNonReact';\r\nimport PlotStatus from '../site/PlotStatus';\r\nimport AssetsManager from '../assets_management/AssetsManager';\r\nimport Urls from '../urls/Urls';\r\nimport UrlHelper from '../core/UrlHelper';\r\nimport ResizeWatcher from '../ui_core/ResizeWatcher';\r\nimport PropertyBindingFactory from '../mvvm/PropertyBindingFactory';\r\nimport FullScreen from '../ui_core/FullScreen';\r\nimport PlotDetailedInformationSectionType from './PlotDetailedInformationSectionType';\r\nimport eventEnable from '../core/eventEnable';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class PlotDetailedInformationTour {\r\n\tconstructor(props){\r\n\t\tconst { siteJsonUnitPlot}=props;\r\n\t\teventEnable(this);\r\n\t\tthis._setVisible = this._setVisible.bind(this);\r\n\t\tthis._siteJsonUnitPlot = siteJsonUnitPlot;\r\n\t\tthis._houseType = siteJsonUnitPlot.houseType;\r\n\t\tif(!this._houseType)return;\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add('tour');\r\n\t\tthis._iframeElement = document.createElement('iframe');\r\n\t\tthis._dispatchLoaded = this._dispatchLoaded.bind(this);\r\n\t\tthis._iframeElement.addEventListener('load', this._dispatchLoaded);\r\n\t\tthis._tourUrlChanged = this._tourUrlChanged.bind(this);\r\n\t\tthis._handleClickButtonFullscreen = this._handleClickButtonFullscreen.bind(this);\r\n\t\tthis._element.appendChild(this._iframeElement);\r\n\t\tthis._propertyBindingTourUrl = PropertyBindingFactory.standard(this, this._houseType, 'tourUrl', this._tourUrlChanged);\r\n\t\tthis._iconButtonFullScreen = new IconButtonNonReact({\r\n\t\t\tclassName:\"button-fullscreen\",\r\n\t\t\timgUrl:Urls.assets+'icons/UI_Fullscreen.png',\r\n\t\t\tonClick:this._handleClickButtonFullscreen});\r\n\t\tthis._element.appendChild(this._iconButtonFullScreen.element);\r\n\t}\r\n\t_handleClickButtonFullscreen(){\r\n\t\t\r\n\t\tFullScreen.toggle(this._element);\r\n\t}\r\n\t_tourUrlChanged(value){\r\n\t\tif(value===null||value===undefined){\r\n\t\t\tthis._setVisible(false);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis._setVisible(true);\r\n\t\tthis._iframeElement.src = value;\r\n\t}\r\n\t_setVisible(value){\r\n\t\tif(value)this._element.classList.add('visible');\r\n\t\telse this._element.classList.remove('visible');\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n\tget sectionType(){\r\n\t\treturn PlotDetailedInformationSectionType.Tour;\r\n\t}\r\n\t_dispatchLoaded(){\r\n\t\tthis.dispatchEvent({type:'loaded'});\r\n\t}\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport ClickedOffManager from '../ui_core/ClickedOffManager';\r\nimport SubMenuHeaderNonReact from '../components/SubMenuHeaderNonReact';\r\nimport GenericWindow from '../window/GenericWindow';\r\nimport Windows from '../window/Windows';\r\nimport WindowType from '../enums/WindowType';\r\nimport PlotDetailedInformationSummary from './PlotDetailedInformationSummary';\r\nimport PlotDetailedInformationGallery from './PlotDetailedInformationGallery';\r\nimport PlotDetailedInformationDescription from './PlotDetailedInformationDescription';\r\nimport PlotDetailedInformationFloorPlans from './PlotDetailedInformationFloorPlans';\r\nimport PlotDetailedInformationVideo from './PlotDetailedInformationVideo';\r\nimport PlotDetailedInformationTour from './PlotDetailedInformationTour';\r\nimport IconButton from '../components/IconButtonNonReact';\r\nimport eventEnable from '../core/eventEnable';\r\nimport getAbsolute from '../ui_core/getAbsolute';\r\nimport './PlotDetailedInformation.css';\r\nimport { faAngleLeft, faAngleRight} from '@fortawesome/free-solid-svg-icons'\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class PlotDetailedInformation {\r\n\tconstructor(props){\r\n\t\tconst {parentElement, siteJsonUnitPlot, callbackDispose,\r\n\t\t\taddFavourite, removeFavourite, showStreetView,\r\n\t\t\tshowImagesFullScreen, configuration, showPlot, showBrochureGenerationDialog,\r\n\t\t\tenterHouse, callbackPlotNumberChanged}=props;\r\n\t\tthis._enterHouse = enterHouse;\r\n\t\teventEnable(this);\r\n\t\tthis._showPlot= showPlot;\r\n\t\tthis._siteJsonUnitPlot = siteJsonUnitPlot;\r\n\t\tthis._callbackDispose = callbackDispose;\r\n\t\tthis._callbackShowStreetView= showStreetView;\r\n\t\tthis._callbackShowImagesFullScreen = showImagesFullScreen;\r\n\t\tthis._callbackPlotNumberChanged = callbackPlotNumberChanged;\r\n\t\tif(!parentElement)throwNotProvided('parentElement');\r\n\t\tthis._parentElement = parentElement;\r\n\t\tthis._currentPlotActiveHandle = null;\r\n\t\tthis.show = this.show.bind(this);\r\n\t\tthis.hide = this.hide.bind(this);\r\n\t\tthis._setVisible = this._setVisible.bind(this);\r\n\t\tthis.close = this.close.bind(this);\r\n\t\tthis.dispose = this.dispose.bind(this);\r\n\t\tthis._scrollToFloorPlans = this._scrollToFloorPlans.bind(this);\r\n\t\tthis._scrollToGallery = this._scrollToGallery.bind(this);\r\n\t\tthis._handleEnterHouse = this._handleEnterHouse.bind(this);\r\n\t\tthis._scrollToElement = this._scrollToElement.bind(this);\r\n\t\tthis.scrollToTop = this.scrollToTop.bind(this);\r\n\t\tthis._onClose = this._onClose.bind(this);\r\n\t\tthis._handleShowStreetView = this._handleShowStreetView.bind(this);\r\n\t\tthis.scrollToSectionWithProportion = this.scrollToSectionWithProportion.bind(this);\r\n\t\tthis.setSectionProportionRanges = this.setSectionProportionRanges.bind(this);\r\n\t\tthis._dispatchScrolled = this._dispatchScrolled.bind(this);\r\n\t\tlet title;\r\n\t\tconst moreThanOnePlotInUnit = this._siteJsonUnitPlot.unit.plots.length>1;\r\n\t\tif(moreThanOnePlotInUnit){\r\n\t\t\ttitle = \"More details\";\r\n\t\t}\r\n\t\telse \r\n\t\t\ttitle = \"More details for plot \"+siteJsonUnitPlot.number;\r\n\t\tthis._window = new GenericWindow({tooltipMessage:title, name:title, minWidth:250, maxWidth:1700, minHeight:100, maxHeight:1000,\r\n\t\t\tdefaultWidth:600, defaultHeight:600, defaultX:10, defaultY:10, minimized:false, maximized:false, minimizable:true,\r\n\t\t\tmaximizable:true, closeable:true, minimizeOnClose:false, resizable:true, dragable:true, toggleMaximizeOnDoubleClick:false,\r\n\t\t\ttype:WindowType.PLOT_DETAILED_INFORMATION\r\n\t\t});\r\n\t\tif(moreThanOnePlotInUnit){\r\n\t\t\tthis._createNextPreviousPlotButtons();\r\n\t\t}\r\n\t\tthis._window.addEventListener(GenericWindow.EventNames.CLOSED, this._onClose);\r\n\t\tthis._element = this._window.getElement();\r\n\t\tthis._element.classList.add('plot-detailed-information');\r\n\t\tthis._mainElement = this._window.getMainElement();\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\tthis._summary = new PlotDetailedInformationSummary({siteJsonUnitPlot, addFavourite, \r\n\t\t\tremoveFavourite, showStreetView:this._handleShowStreetView, \r\n\t\t\tscrollToFloorPlans:this._scrollToFloorPlans, \r\n\t\t\tscrollToGallery:this._scrollToGallery,\r\n\t\t\tconfiguration, showBrochureGenerationDialog, enterHouse:this._handleEnterHouse});\r\n\t\tthis._gallery = new PlotDetailedInformationGallery({\r\n\t\t\tsiteJsonUnitPlot:siteJsonUnitPlot,\r\n\t\t\tshowImagesFullScreen,\r\n\t\t\tconfiguration\r\n\t\t});\r\n\t\tthis._floorPlans = new PlotDetailedInformationFloorPlans({\r\n\t\t\tsiteJsonUnitPlot:siteJsonUnitPlot,\r\n\t\t\tshowImagesFullScreen,\r\n\t\t\tconfiguration\r\n\t\t});\r\n\t\tthis._description = new PlotDetailedInformationDescription({\r\n\t\t\tsiteJsonUnitPlot:siteJsonUnitPlot\r\n\t\t});\r\n\t\tthis._video = new PlotDetailedInformationVideo({\r\n\t\t\tsiteJsonUnitPlot:siteJsonUnitPlot,\r\n\t\t\tconfiguration\r\n\t\t});\r\n\t\tthis._tour = new PlotDetailedInformationTour({\r\n\t\t\tsiteJsonUnitPlot:siteJsonUnitPlot,\r\n\t\t\tconfiguration\r\n\t\t});\r\n\t\tthis._mainElement.appendChild(this._summary.element);\r\n\t\tthis._scrollableElement = document.createElement('div');\r\n\t\tthis._mainElement.appendChild(this._scrollableElement);\r\n\t\tthis._scrollableElement.classList.add('scrollable');\r\n\t\tthis._sections = [this._gallery, this._floorPlans, this._description, this._video, this._tour];\r\n\t\tthis._sections.forEach(section=>\r\n\t\t\tthis._scrollableElement.appendChild(section.element));\r\n\t\tthis._scrollableElement.addEventListener('scroll', this._dispatchScrolled);\r\n\t\t//this._scrollableElement.addEventListener('touchmove', this._dispatchScrolled);\r\n\t\tthis._parentElement.appendChild(this._element);\r\n\t\tthis._tour.addEventListener('loaded', this.setSectionProportionRanges);\r\n\t\tthis._gallery.addEventListener('loaded', this.setSectionProportionRanges);\r\n\t\tthis._floorPlans.addEventListener('loaded', this.setSectionProportionRanges);\r\n\t\tthis.show();\r\n\t\tthis.window.addEventListener(GenericWindow.EventNames.UNMINIMIZED, this.setSectionProportionRanges);\r\n\t\tthis.window.addEventListener(GenericWindow.EventNames.FOCUSSED, this.setSectionProportionRanges);\r\n\t\tthis.window.getElement().addEventListener('mouseenter', this.setSectionProportionRanges);\r\n\t}\r\n\tscrollToTop(){\r\n\t\tthis._scrollableElement.scrollTop=0;\r\n\t}\r\n\t_handleEnterHouse(plot){\r\n\t\tthis._enterHouse(plot);\r\n\t\tthis.window.minimize();\r\n\t}\r\n\t_createNextPreviousPlotButtons(){\r\n\t\tconst tabElement = this.window.getTabElement();\r\n\t\tconst nextPreviousElement = document.createElement('div');\r\n\t\tnextPreviousElement.classList.add('next-previous');\r\n\t\tconst setNewPlotFromIndex=(plot)=>{\r\n\t\t\tthis._siteJsonUnitPlot = plot;\r\n\t\t\tthis._callbackPlotNumberChanged(this, this._siteJsonUnitPlot);\r\n\t\t\tthis._setupSiteJsonUnitPlot();\r\n\t\t};\r\n\t\tconst previous = (e)=>{\r\n\t\t\tconst plots = this._siteJsonUnitPlot.unit.plots;\r\n\t\t\tconst indexOfThisPlot = plots.indexOf(this._siteJsonUnitPlot);\r\n\t\t\tconst newIndex = indexOfThisPlot<1?plots.length-1:indexOfThisPlot-1;\r\n\t\t\tsetNewPlotFromIndex(plots[newIndex]);\r\n\t\t};\r\n\t\tconst next = (e)=>{\r\n\t\t\tconst plots = this._siteJsonUnitPlot.unit.plots;\r\n\t\t\tconst indexOfThisPlot = plots.indexOf(this._siteJsonUnitPlot);\r\n\t\t\tconst newIndex = indexOfThisPlot>=plots.length-1?0:indexOfThisPlot+1;\r\n\t\t\tsetNewPlotFromIndex(plots[newIndex]);\r\n\t\t};\r\n\t\tconst previousButton = new IconButton({faIcon:faAngleLeft, onClick:previous, className:'next'});\r\n\t\tconst nextButton = new IconButton({faIcon:faAngleRight, onClick:next, className:'previous'});\r\n\t\tnextPreviousElement.appendChild(previousButton.element);\r\n\t\tconst textElement = document.createElement('div');\r\n\t\ttextElement.classList.add('text');\r\n\t\ttextElement.innerHTML = 'Apartment Plot';\r\n\t\tnextPreviousElement.appendChild(textElement);\r\n\t\tnextPreviousElement.appendChild(nextButton.element);\r\n\t\ttabElement.insertBefore(nextPreviousElement, tabElement.childNodes[1]);\r\n\t}\r\n\t_setupSiteJsonUnitPlot(){\r\n\t\tthis._summary.plot = this._siteJsonUnitPlot;\r\n\t\tthis._gallery.plot = this._siteJsonUnitPlot;\r\n\t\tthis._floorPlans.plot = this._siteJsonUnitPlot;\r\n\t\tthis._description.plot = this._siteJsonUnitPlot;\r\n\t\tthis._video.plot = this._siteJsonUnitPlot;\r\n\t\tthis._tour.plot = this._siteJsonUnitPlot;\r\n\t}\r\n\t_handleShowStreetView(e){\r\n\t\tthis.hide();\r\n\t\tthis._callbackShowStreetView(e);\r\n\t}\r\n\t_scrollToFloorPlans(){\r\n\t\tthis._scrollToElement(this._floorPlans.element);\r\n\t}\r\n\t_scrollToGallery(){\r\n\t\tthis._scrollToElement(this._gallery.element);\r\n\t}\r\n\t_scrollToElement(element){\r\n\t\tthis._scrollableElement.scrollTop = element.getBoundingClientRect().top + this._scrollableElement.scrollTop - (this._scrollableElement.clientHeight/2);\r\n\t}\r\n\tget sectionTypeAndProportionScrolled(){\r\n\t\tconst scrollableElementBounds = this._scrollableElement.getBoundingClientRect();\r\n\t\tconst scrollableElementHeight = this._scrollableElement.scrollHeight;\r\n\t\tconst currentProportion = (this._scrollableElement.scrollTop/scrollableElementHeight);\r\n\t\tlet currentSection = null;\r\n\t\tlet proportion = 0;\r\n\t\tfor(const sectionProportionRange of this._sectionProportionRanges){\r\n\t\t\tif((sectionProportionRange.proportionFrom<=currentProportion)&&(sectionProportionRange.proportionTo>=currentProportion)){\r\n\t\t\t\tcurrentSection = sectionProportionRange.section;\r\n\t\t\t\tproportion = (currentProportion - sectionProportionRange.proportionFrom)\r\n\t\t\t\t\t/(sectionProportionRange.proportionTo - sectionProportionRange.proportionFrom);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn currentSection?{\r\n\t\t\tsectionType:currentSection.sectionType,\r\n\t\t\tproportion:proportion\r\n\t\t}:null;\r\n\t}\r\n\tsetSectionProportionRanges(){\r\n\t\tconst scrollableElementBounds = this._scrollableElement.getBoundingClientRect();\r\n\t\tconst scrollableElementHeight = this._scrollableElement.scrollHeight;\r\n\t\tthis._sectionProportionRanges = this._sections.map(section=>{\r\n\t\t\tconst sectionElementBounds = section.element.getBoundingClientRect();\r\n\t\t\tconst proportionFrom = (section.element.offsetTop)/scrollableElementHeight;\r\n\t\t\tconst proportionTo = (section.element.offsetTop+section.element.offsetHeight )/scrollableElementHeight;\r\n\t\t\treturn {proportionFrom, proportionTo, section};\r\n\t\t});\r\n\t}\r\n\tscrollToSectionWithProportion(plotDetailedInformationSectionType, proportion){\r\n\t\tif(!this._sectionProportionRanges)this.setSectionProportionRanges();\r\n\t\tconst sectionProportionRange = this._sectionProportionRanges.filter(sectionProportionRange=>sectionProportionRange.section.sectionType===plotDetailedInformationSectionType)[0];\r\n\t\tif(!sectionProportionRange)return;\r\n\t\tconst proportionForStartSection = sectionProportionRange.proportionFrom;\r\n\t\tconst proportionForProportionThroughSection = (sectionProportionRange.proportionTo - sectionProportionRange.proportionFrom)*proportion;\r\n\t\tconst totalProportionToScrollTo = proportionForStartSection +proportionForProportionThroughSection;\r\n\t\tconst pxToScrollTo = this._scrollableElement.scrollHeight*totalProportionToScrollTo;\r\n\t\tthis._scrollableElement.scrollTop = pxToScrollTo;\r\n\t}\r\n\tget window(){\r\n\t\treturn this._window;\r\n\t}\r\n\tget number(){\r\n\t\treturn this._siteJsonUnitPlot.number;\r\n\t}\r\n\tshow(){\r\n\t\tthis._window.unminimize();\r\n\t}\r\n\thide(){\r\n\t\tthis._window.minimize();\r\n\t}\r\n\t_setVisible(value){\r\n\t\tif(value)\r\n\t\t\tthis._element.classList.add('visible');\r\n\t\telse\r\n\t\t\tthis._element.classList.remove('visible');\r\n\t}\r\n\tclose(){\r\n\t\tthis._window.close();\r\n\t\tthis.dispose();\t\r\n\t}\r\n\t_onClose(){\r\n\t\tthis.dispose();\r\n\t}\r\n\tdispose(){\r\n\t\tconsole.log('dispose called');\r\n\t\tthis._callbackDispose(this);\r\n\t}\r\n\tbringIntoFocus(){\r\n\t\tthis.show();\r\n\t}\r\n\t_dispatchScrolled(){\r\n\t\tthis.dispatchEvent({type:'scrolled', plotDetailedInformation:this});\r\n\t}\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport PlotDetailedInformation from './PlotDetailedInformation';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class PlotDetailedInformationsManager {\r\n\tstatic get instance(){\r\n\t\tif(!PlotDetailedInformationsManager._instance)\r\n\t\t\tthrow new Error('Not initialized');\r\n\t\treturn PlotDetailedInformationsManager._instance;\r\n\t}/*\r\n\tstatic initialize({parentElement, addFavourite, removeFavourite}){\r\n\t\tif(PlotDetailedInformationsManager._instance)\r\n\t\t\tthrow new Error('Already initialized');\r\n\t\tPlotDetailedInformationsManager._instance = new PlotDetailedInformationsManager({\r\n\t\t\tparentElement:parentElement, addFavourite:addFavourite, removeFavourite:removeFavourite\r\n\t\t});\r\n\t}*/\r\n\tconstructor({parentElement, addFavourite, removeFavourite, showStreetView, showImagesFullScreen, configuration, showBrochureGenerationDialog, enterHouse}){\r\n\t\tthis._parentElement = parentElement;\r\n\t\tthis._callbackAddFavourite = addFavourite;\r\n\t\tthis._callbackRemoveFavourite = removeFavourite;\r\n\t\tthis._callbackShowStreetView = showStreetView;\r\n\t\tthis._callbackShowImagesFullScreen = showImagesFullScreen;\r\n\t\tthis._callbackShowBrochureGenerationDialog = showBrochureGenerationDialog;\r\n\t\tthis._callbackEnterHouse = enterHouse;\r\n\t\tthis._callbackDisposePlotDetailedInformation = this._callbackDisposePlotDetailedInformation.bind(this);\r\n\t\tthis._plotNumberChanged = this._plotNumberChanged.bind(this);\r\n\t\tthis.show = this.show.bind(this);\r\n\t\tthis._plotDetailedInformations = [];\r\n\t\tthis._configuration = configuration;\r\n\t\tconsole.log(configuration);\r\n\t}\r\n\tshow(siteJsonUnitPlot){\r\n\t\tlet plotDetailedInformation = this._plotDetailedInformations.filter(plotDetailedInformation=>plotDetailedInformation.number===siteJsonUnitPlot.number)[0];\r\n\t\tif(plotDetailedInformation){\r\n\t\t\tconsole.log('bring into focus');\r\n\t\t\tplotDetailedInformation.bringIntoFocus();\r\n\t\t\treturn plotDetailedInformation;\r\n\t\t}\r\n\t\tplotDetailedInformation = new PlotDetailedInformation({\r\n\t\t\tsiteJsonUnitPlot:siteJsonUnitPlot, \r\n\t\t\tparentElement:this._parentElement,\r\n\t\t\tcallbackDispose:this._callbackDisposePlotDetailedInformation,\r\n\t\t\taddFavourite:this._callbackAddFavourite,\r\n\t\t\tremoveFavourite:this._callbackRemoveFavourite,\r\n\t\t\tshowStreetView:this._callbackShowStreetView,\r\n\t\t\tshowImagesFullScreen:this._callbackShowImagesFullScreen,\r\n\t\t\tconfiguration:this._configuration,\r\n\t\t\tshowPlot:this.show,\r\n\t\t\tshowBrochureGenerationDialog:this._callbackShowBrochureGenerationDialog,\r\n\t\t\tcallbackPlotNumberChanged:this._plotNumberChanged,\r\n\t\t\tenterHouse:this._callbackEnterHouse\r\n\t\t});\r\n\t\tthis._plotDetailedInformations.push(plotDetailedInformation);\r\n\t\treturn plotDetailedInformation;\r\n\t}\r\n\t_plotNumberChanged(plotDetailedInformation, siteJsonUnitPlot){\r\n\t\t\r\n\t}\r\n\t_callbackDisposePlotDetailedInformation(plotDetailedInformation){\r\n\t\tconst index = this._plotDetailedInformations.indexOf(plotDetailedInformation);\r\n\t\tif(index<0)return;\r\n\t\tthis._plotDetailedInformations.splice(index, 1);\r\n\t}\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport GenericWindow from '../window/GenericWindow';\r\nimport Dialog from '../components/Dialog';\r\nimport WindowType from '../enums/WindowType';\r\nimport getViewportDimensions from '../ui_core/getViewportDimensions';\r\nimport PlotDetailedInformationsManager from './PlotDetailedInformationsManager';\r\nimport PlotDetailedInformationSectionType from './PlotDetailedInformationSectionType';\r\nimport './PlotComparisonManager.css';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class PlotComparisonScrollManager {\r\n\tconstructor({plotDetailedInformations}){\r\n\t\tthis.dispose= this.dispose.bind(this);\r\n\t\tthis._plotDetailedInformations = plotDetailedInformations;\r\n\t\tthis._onPlotDetailedInformationWindowFocused = this._onPlotDetailedInformationWindowFocused.bind(this);\r\n\t\tthis._releasePreviouslyFocusedPlotDetailedInformation = this._releasePreviouslyFocusedPlotDetailedInformation.bind(this);\r\n\t\tthis._setFocusedPlotDetailedInformation = this._setFocusedPlotDetailedInformation.bind(this);\r\n\t\tthis._currentlyFocusedPlotDetailedInformationScrolled = this._currentlyFocusedPlotDetailedInformationScrolled.bind(this);\r\n\t\tthis.dispose = this.dispose.bind(this);\r\n\t\tthis._currentlyFocusedPlotDetailedInformation = null;\r\n\t\tplotDetailedInformations.forEach(plotDetailedInformation=>{\r\n\t\t\tplotDetailedInformation.window.addEventListener(GenericWindow.EventNames.FOCUSSED,\r\n\t\t\t\tthis._onPlotDetailedInformationWindowFocused);\r\n\t\t\tplotDetailedInformation.window.getElement().addEventListener('mouseenter', ()=>\r\n\t\t\t\tthis._onPlotDetailedInformationWindowFocused({window:plotDetailedInformation.window}));\r\n\t\t\tplotDetailedInformation.window.getElement().addEventListener('touchstart', ()=>\r\n\t\t\t\tthis._onPlotDetailedInformationWindowFocused({window:plotDetailedInformation.window}));\r\n\t\t});\r\n\t}\r\n\t_onPlotDetailedInformationWindowFocused(e){\r\n\t\tthis._focussed = true;\r\n\t\tconst windowHash = e.window.getHash();\r\n\t\tconst plotDetailedInformation = this._plotDetailedInformations.filter(plotDetailedInformation=>plotDetailedInformation.window.getHash()===windowHash)[0];\r\n\t\tif(plotDetailedInformation===undefined)return;\r\n\t\tthis._setFocusedPlotDetailedInformation(plotDetailedInformation);\r\n\t}\r\n\t_setFocusedPlotDetailedInformation(plotDetailedInformation){\r\n\t\tif(this._currentlyFocusedPlotDetailedInformation===plotDetailedInformation)return;\r\n\t\tthis._releasePreviouslyFocusedPlotDetailedInformation();\r\n\t\tthis._currentlyFocusedPlotDetailedInformation = plotDetailedInformation;\r\n\t\tthis._currentlyFocusedPlotDetailedInformation.addEventListener('scrolled', this._currentlyFocusedPlotDetailedInformationScrolled);\r\n\t}\r\n\t_releasePreviouslyFocusedPlotDetailedInformation(){\r\n\t\tif(this._currentlyFocusedPlotDetailedInformation===null)return;\r\n\t\tthis._currentlyFocusedPlotDetailedInformation.removeEventListener('scrolled', this._currentlyFocusedPlotDetailedInformationScrolled);\r\n\t\tthis._currentlyFocusedPlotDetailedInformation = null;\r\n\t}\r\n\t_currentlyFocusedPlotDetailedInformationScrolled(e){\r\n\t\tconst plotDetailedInformation = e.plotDetailedInformation;\r\n\t\tconst sectionTypeAndProportion =plotDetailedInformation.sectionTypeAndProportionScrolled;\r\n\t\tif(!sectionTypeAndProportion)return;\r\n\t\tconst {sectionType, proportion} = sectionTypeAndProportion;\r\n\t\tthis._plotDetailedInformations.forEach(plotDetailedInformationToScroll=>{\r\n\t\t\tif(plotDetailedInformationToScroll===plotDetailedInformation)return;\r\n\t\t\tplotDetailedInformationToScroll.scrollToSectionWithProportion(sectionType, proportion);\r\n\t\t});\r\n\t}\r\n\tdispose(){\r\n\t\tthis._plotDetailedInformations.forEach(plotDetailedInformation=>{\r\n\t\t\tplotDetailedInformation.window.removeEventListener(GenericWindow.EventNames.FOCUSSED,\r\n\t\t\t\tthis._onPlotDetailedInformationWindowFocused);\r\n\t\t});\r\n\t\tthis._releasePreviouslyFocusedPlotDetailedInformation();\r\n\t}\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport GenericWindow from '../window/GenericWindow';\r\nimport Dialog from '../components/Dialog';\r\nimport WindowType from '../enums/WindowType';\r\nimport getViewportDimensions from '../ui_core/getViewportDimensions';\r\nimport PlotDetailedInformationsManager from './PlotDetailedInformationsManager';\r\nimport PlotComparisonScrollManager from './PlotComparisonScrollManager';\r\nimport './PlotComparisonManager.css';\r\nconst {throwNotProvided}=ParameterErrors;\r\nconst eventNamesToDetectWhenToExitComparison = [GenericWindow.EventNames.DRAG_STARTED, \r\nGenericWindow.EventNames.MAXIMIZED, GenericWindow.EventNames.UNMAXIMIZED, GenericWindow.EventNames.MINIMIZED, \r\n\tGenericWindow.EventNames.CLOSED, GenericWindow.EventNames.WINDOW_DESTROYED, GenericWindow.EventNames.RESIZE_STARTED];\r\nexport default class PlotComparisonManager {\r\n\tstatic get instance(){\r\n\t\tif(!PlotComparisonManager._instance){\r\n\t\t\tthrow new Error('Not initialized');\r\n\t\t}\r\n\t\treturn PlotComparisonManager._instance;\r\n\t}\r\n\tstatic initialize({plotDetailedInformationsManager, sitePlanElement}){\r\n\t\tPlotComparisonManager._instance = new PlotComparisonManager({plotDetailedInformationsManager, sitePlanElement});\r\n\t}\r\n\tconstructor({plotDetailedInformationsManager, sitePlanElement}){\r\n\t\tthis._plotDetailedInformationsManager=plotDetailedInformationsManager;\r\n\t\tthis.compare = this.compare.bind(this);\r\n\t\tthis._sitePlanElement = sitePlanElement;\r\n\t\tthis._plotComparisonElement = document.createElement('div');\r\n\t\tthis._plotComparisonElement.classList.add('plot-comparison');\r\n\t\tthis._plotComparisonTextElement = document.createElement('div');\r\n\t\tthis._plotComparisonTextElement.classList.add('text');\r\n\t\tthis._plotComparisonElement.appendChild(this._plotComparisonTextElement);\r\n\t\tthis._plotComparisonTextElement.innerHTML='';\r\n\t\tthis._sitePlanElement.appendChild(this._plotComparisonElement);\r\n\t\tthis._showTooManyPlotsSelectedToDoComparison = this._showTooManyPlotsSelectedToDoComparison.bind(this);\r\n\t\tthis._showAtLeastTwoPlotsMustBeSelectedDialog = this._showAtLeastTwoPlotsMustBeSelectedDialog.bind(this);\r\n\t\tthis._setComparingClassOnSitePlan= this._setComparingClassOnSitePlan.bind(this);\r\n\t\tthis._getNPlotDetailedInformationWindowsInEachDirection = this._getNPlotDetailedInformationWindowsInEachDirection.bind(this);\r\n\t\tthis._getPositionNextWindow = this._getPositionNextWindow.bind(this);\r\n\t\tthis._registerEventsToDetermineWhenToExit = this._registerEventsToDetermineWhenToExit.bind(this);\r\n\t\tthis._exitComparisonMode = this._exitComparisonMode.bind(this);\r\n\t}\r\n\tcompare(siteJsonUnitPlots){\r\n\t\tif(siteJsonUnitPlots.length<2){\r\n\t\t\tthis._showAtLeastTwoPlotsMustBeSelectedDialog();\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif(siteJsonUnitPlots.length>9){\r\n\t\t\tthis._showTooManyPlotsSelectedToDoComparison();\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst plotDetailedInformations = siteJsonUnitPlots.map(siteJsonUnitPlot=>\r\n\t\t\tthis._plotDetailedInformationsManager.show(siteJsonUnitPlot)\r\n\t\t);\r\n\t\tconst positionNextWindow = this._getPositionNextWindow(plotDetailedInformations.length);\r\n\t\tplotDetailedInformations.forEach(plotDetailedInformation=>{\r\n\t\t\tpositionNextWindow(plotDetailedInformation);\r\n\t\t\tplotDetailedInformation.scrollToTop();\r\n\t\t\tplotDetailedInformation.window.bringToFront();\r\n\t\t});\r\n\t\tthis._registerEventsToDetermineWhenToExit(plotDetailedInformations);\r\n\t\tthis._setComparingClassOnSitePlan(true);\r\n\t\tthis._PlotComparisonScrollManager&&this._PlotComparisonScrollManager.dispose();\r\n\t\tthis._PlotComparisonScrollManager = new PlotComparisonScrollManager({plotDetailedInformations});\r\n\t}\r\n\t_registerEventsToDetermineWhenToExit(plotDetailedInformations){\r\n\t\tthis._unregisterEventsToDetermineWhenToExit&&this._unregisterEventsToDetermineWhenToExit();\r\n\t\tthis._unregisterEventsToDetermineWhenToExit=()=>{\r\n\t\t\tplotDetailedInformations.forEach(plotDetailedInformation=>{\r\n\t\t\t\teventNamesToDetectWhenToExitComparison.forEach(eventName=>\r\n\t\t\t\t\tplotDetailedInformation.window.removeEventListener(eventName, this._exitComparisonMode)\r\n\t\t\t\t);\r\n\t\t\t});\r\n\t\t\twindow.removeEventListener('resize', this._exitComparisonMode);\r\n\t\t};\r\n\t\tplotDetailedInformations.forEach(plotDetailedInformation=>{\r\n\t\t\teventNamesToDetectWhenToExitComparison.forEach(eventName=>\r\n\t\t\t\tplotDetailedInformation.window.addEventListener(eventName, this._exitComparisonMode)\r\n\t\t\t);\r\n\t\t});\r\n\t\twindow.addEventListener('resize', this._exitComparisonMode);\r\n\t}\r\n\t_exitComparisonMode(e){\r\n\t\tthis._unregisterEventsToDetermineWhenToExit&&this._unregisterEventsToDetermineWhenToExit();\r\n\t\tthis._unregisterEventsToDetermineWhenToExit= null;\r\n\t\tthis._setComparingClassOnSitePlan(false);\r\n\t\tthis._PlotComparisonScrollManager&&this._PlotComparisonScrollManager.dispose();\r\n\t\tthis._plotComparisonScrollManager = null;\r\n\t}\r\n\t_getPositionNextWindow(nPlotDetailedInformations){\r\n\t\tconst nPlotDetailedInformationWindowsInEachDirection = this._getNPlotDetailedInformationWindowsInEachDirection(nPlotDetailedInformations);\r\n\t\tconst viewportDimensions = getViewportDimensions();\r\n\t\tconst windowDimensionsPx = [\r\n\t\t\tviewportDimensions[0]/nPlotDetailedInformationWindowsInEachDirection[0],\r\n\t\t\tviewportDimensions[1]/nPlotDetailedInformationWindowsInEachDirection[1]\r\n\t\t];\r\n\t\tlet nX = 0;\r\n\t\tlet nY = 0;\r\n\t\tconst width = windowDimensionsPx[0];\r\n\t\tconst height = windowDimensionsPx[1];\r\n\t\treturn (plotDetailedInformation)=>{\r\n\t\tif(nX>=nPlotDetailedInformationWindowsInEachDirection[0]){\r\n\t\t\t\tnX=0;\r\n\t\t\t\tnY++;\r\n\t\t\t}\r\n\t\t\tconst left = width*nX;\r\n\t\t\tconst top = height*nY;\r\n\t\t\tplotDetailedInformation.window.setWindowSizePosition({\r\n\t\t\t\twidth:width, \r\n\t\t\t\theight:height,\r\n\t\t\t\ttop:top,\r\n\t\t\t\tleft:left\r\n\t\t\t});\r\n\t\t\tnX++;\r\n\t\t};\r\n\t}\r\n\t_setComparingClassOnSitePlan(value){\r\n\t\tif(value)\r\n\t\t\tthis._sitePlanElement.classList.add('comparing-plots');\r\n\t\telse\r\n\t\t\tthis._sitePlanElement.classList.remove('comparing-plots');\r\n\t}\r\n\t_showAtLeastTwoPlotsMustBeSelectedDialog(){\r\n\t\tthis._currentDialog = Dialog.create({\r\n\t\t\ttitle:'Error', \r\n\t\t\tclassName:'brochure-generation-result-dialog error',\r\n\t\t\tmessage:'You must select at least two plots to do comparison!',\r\n\t\t\toptions:[{text:'OK'}]}\r\n\t\t);\r\n\t}\r\n\t_showTooManyPlotsSelectedToDoComparison(){\r\n\t\tthis._currentDialog = Dialog.create({\r\n\t\t\ttitle:'Error', \r\n\t\t\tclassName:'brochure-generation-result-dialog error',\r\n\t\t\tmessage:'Too many plots are selected to do comparison!',\r\n\t\t\toptions:[{text:'OK'}]}\r\n\t\t);\r\n\t}\r\n\t_getNPlotDetailedInformationWindowsInEachDirection(nPlotDetailedInformations){\r\n\t\tconst aspectRatio = this._sitePlanElement.offsetWidth/this._sitePlanElement.offsetHeight;\r\n\t\tswitch(nPlotDetailedInformations){\r\n\t\t\tcase 2:\r\n\t\t\tcase 3:\r\n\t\t\t\tif(aspectRatio>1)\r\n\t\t\t\t\treturn [nPlotDetailedInformations, 1];\r\n\t\t\t\treturn [1, nPlotDetailedInformations];\r\n\t\t\tcase 4:\r\n\t\t\t\treturn [2,2];\r\n\t\t\tcase 5:\r\n\t\t\tcase 6:\r\n\t\t\t\tif(aspectRatio>1)\r\n\t\t\t\t\treturn [3, 2];\r\n\t\t\t\treturn [2, 3];\r\n\t\t\tcase 7:\r\n\t\t\tcase 8:\r\n\t\t\t\tif(aspectRatio>1)\r\n\t\t\t\t\treturn [4, 2];\r\n\t\t\t\treturn [2, 4];\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error('Not implemented');\r\n\t\t}\r\n\t}\r\n}","import React, { Component } from 'react';\r\nimport './Favourites.css';\r\nimport FavouriteEntry from './FavouriteEntry';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport MenuType from '../enums/MenuType';\r\nimport isMobile from '../core/isMobile';\r\nimport ClickedOffManager from '../ui_core/ClickedOffManager';\r\nimport PlotComparisonManager from '../plot_detailed_information/PlotComparisonManager';\r\nimport SubMenuHeader from './SubMenuHeader';\r\nimport AssetsManager from '../assets_management/AssetsManager';\r\nconst {throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class Favourites extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {onHide, onShowSendFavouritesBrochure, getConfiguration}=props;\r\n\t\tthis._getConfiguration = getConfiguration;\r\n\t\tthis._callbackHide = onHide;\r\n\t\tthis._subMenuHeader = React.createRef();\r\n\t\tthis._element = React.createRef();\r\n\t\tthis._callbackShowSendFavouritesBrochure = onShowSendFavouritesBrochure;\r\n\t\tthis._iMenuManager = null;\r\n\t\tthis.show = this.show.bind(this);\r\n\t\tthis.hide= this.hide.bind(this);\r\n\t\tthis._clickedOffManager = new ClickedOffManager({elementRef:this._element, hide:this.hide});\r\n\t\tthis._onClickFavouriteEntryRemove = this._onClickFavouriteEntryRemove.bind(this);\r\n\t\tthis._handleClickSendMyFavouritesBrochure= this._handleClickSendMyFavouritesBrochure.bind(this);\r\n\t\tthis._handleClickCompare = this._handleClickCompare.bind(this);\r\n\t\tthis.state={visible:false, entries:[]};\r\n\t}\r\n\tget count(){\r\n\t\treturn this.state.entries.length;\r\n\t}\r\n\tadd(favourite){\r\n\t\tconst hash = favourite.hash;\r\n\t\tif(this._getEntryByHash(hash)!==null)return;\r\n\t\tconst favouriteEntryRef = React.createRef();\r\n\t\tconst favouriteEntry = ();\r\n\t\tconst entries = this.state.entries;\r\n\t\tentries.push(favouriteEntry);\r\n\t\tthis.setState({entries:entries});\r\n\t}\r\n\tget selectedFavourites(){\r\n\t\tconst selectedEntries = this.state.entries\r\n\t\t\t.map(entry=>entry.ref.current)\r\n\t\t\t.filter(entry=>entry.selected)\r\n\t\t\t.map(entry=>entry.favourite);\r\n\t\tif(selectedEntries.length>0)\r\n\t\t\treturn selectedEntries;\r\n\t\treturn this.state.entries.map(entry=>entry.ref.current.favourite);\r\n\t}\r\n\tremove(hash){\r\n\t\tconst entries = this.state.entries;\r\n\t\tconst favouriteEntry = this._getEntryByHash(hash);\r\n\t\tif(favouriteEntry===null)return;\r\n\t\tconst index = entries.indexOf(favouriteEntry);\r\n\t\tif(index<0)return;\r\n\t\tentries.splice(index, 1);\r\n\t\tthis.setState({entries:entries});\r\n\t\tfavouriteEntry.onRemove&&favouriteEntry.onRemove();\r\n\t}\r\n\t_onClickFavouriteEntryRemove(favourite){\r\n\t\tthis.remove(favourite.hash);\r\n\t\tfavourite.onRemove();\r\n\t}\r\n\t_getEntryByHash(hash){\r\n\t\tconst entries = this.state.entries;\r\n\t\tfor(var i=0; ifavourite.payload));\r\n\t}\r\n\tget menuType(){\r\n\t\treturn MenuType.FAVOURITES;\r\n\t}\r\n\tshow(){\r\n\t\tthis.setState({visible:true});\r\n\t\tthis._clickedOffManager.register();\r\n\t\tthis._iMenuManager.showMe(this);\r\n\t}\r\n\thide(){\r\n\t\tthis._clickedOffManager.dispose();\r\n\t\tthis.setState({visible:false});\r\n\t\tthis._iMenuManager.close();\r\n\t\tthis._callbackHide&&this._callbackHide();\r\n\t}\t\r\n\tsetIMenuManager(value){\r\n\t\tthis._iMenuManager = value;\r\n\t\tthis._subMenuHeader.current.setIMenuManager(value);\r\n\t}\r\n\trender() {\r\n\t\tlet className =\"favourites menu\";\r\n\t\tif(this.state.visible)\r\n\t\t\tclassName+=\" visible\";\r\n\t\tconst comparisonButton = (!isMobile)&&this._getConfiguration().plotComparisonEnabled?():null;\r\n\t\tconst entries = this.state.entries.length>0?(\r\n\t\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t{this.state.entries}\r\n\t\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t\t\t{comparisonButton}\r\n\t\t\t\t
    \r\n\t\t\t\t):(
    No favourites. Click the star icon on a plot menu to favourite it!
    );\r\n\t\treturn (
    \r\n\t\t\t\t\r\n\t\t\t\t\t{entries}\r\n\t\t\t\t
    );\r\n\t}\r\n}\r\n","import ParameterErrors from '../errors/ParameterErrors';\r\nimport Handle from '../core/Handle';\r\n\r\nconst { throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class StylesHelper{\r\n\tstatic appendCssToPage(cssString){\r\n\t\tconst head = document.head || document.getElementsByTagName('head')[0];\r\n\t\tconst style = document.createElement('style');\r\n\t\thead.appendChild(style);\r\n\t\tstyle.type = 'text/css';\r\n\t\tif (style.styleSheet){\r\n\t\t\t// This is required for IE8 and below.\r\n\t\t\tstyle.styleSheet.cssText = cssString;\r\n\t\t} else {\r\n\t\t\tstyle.appendChild(document.createTextNode(cssString));\r\n\t\t}\r\n\t\tlet disposed = false;\r\n\t\treturn new Handle({dispose:()=>{\r\n\t\t\tif(disposed)return;\r\n\t\t\thead.removeChild(style);\r\n\t\t\tdisposed = true;\r\n\t\t}});\r\n\t}\r\n}","import React, { Component } from 'react';\r\nimport './ImageViewer.css';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport MenuType from '../enums/MenuType';\r\nimport ClickedOffManager from '../ui_core/ClickedOffManager';\r\nimport SubMenuHeader from './SubMenuHeader';\r\nconst {throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class PrivacyPolicy extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props)\r\n\t\tthis._iMenuManager = null;\r\n\t\tthis._clickedOffHandle = null;\r\n\t\tthis._elementRef = React.createRef();\r\n\t\tthis._sliderRef = React.createRef();\r\n\t\tthis._subMenuHeaderRef = React.createRef();\r\n\t\tthis.show = this.show.bind(this);\r\n\t\tthis.hide= this.hide.bind(this);\r\n\t\tthis._clickedOffManager = new ClickedOffManager({elementRef:this._elementRef, hide:this.hide});\r\n\t\tthis.state={visible:false};\r\n\t}\r\n\tget menuType(){\r\n\t\treturn MenuType.PRIVACY_POLICY;\r\n\t}\r\n\tshow(){\r\n\t\tthis.setState({visible:true});\r\n\t\tthis._clickedOffManager.register();\r\n\t\tthis._iMenuManager.showMe(this);\r\n\t}\r\n\thide(){\r\n\t\tthis._clickedOffManager.dispose();\r\n\t\tthis.setState({visible:false});\r\n\t\tthis._iMenuManager.close();\r\n\t}\r\n\tsetIMenuManager(value){\r\n\t\tthis._iMenuManager = value;\r\n\t\tthis._subMenuHeaderRef.current.setIMenuManager(value);\r\n\t}\r\n\trender() {\r\n\t\tlet className =\"privacy-policy menu\";\r\n\t\tif(this.state.visible)\r\n\t\t\tclassName+=\" visible\";\r\n\t\treturn (
    \r\n\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t\tThis is a privacy policy to go here!\r\n\t\t\t\t
    \r\n\t\t\t
    );\r\n\t}\r\n}\r\n","export default class ViewModelBase{\r\n\tconstructor(props){\r\n\t\t\r\n\t}\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport eventEnable from '../core/eventEnable';\r\nconst { throwNotProvided } = ParameterErrors;\r\nexport default class Models {\r\n constructor(props) {\r\n\t\teventEnable(this);\r\n\t\tthis._set =new Set();\r\n\t\tthis.add = this.add.bind(this);\r\n\t\tthis.remove = this.remove.bind(this);\r\n\t\tthis._dispatchAdded = this._dispatchAdded.bind(this);\r\n\t\tthis._dispatchRemoved = this._dispatchRemoved.bind(this);\r\n }\r\n\tadd(modelRef){\r\n\t\tif(this._set.has(modelRef))return;\r\n\t\tthis._set.add(modelRef);\r\n\t\tthis._dispatchAdded(modelRef);\r\n\t}\r\n\tremove(modelRef){\r\n\t\tif(!this._set.has(modelRef))return;\r\n\t\tthis._set.delete(modelRef);\r\n\t\tthis._dispatchRemoved(modelRef);\r\n\t}\r\n\t_dispatchAdded(modelRef){\r\n\t\tthis.dispatchEvent({type:'added', modelRef:modelRef});\r\n\t}\r\n\t_dispatchRemoved(modelRef){\r\n\t\tthis.dispatchEvent({type:'removed', modelRef:modelRef});\r\n\t}\r\n}\r\n","import ViewModelBase from './ViewModelBase';\r\nimport enableAcceptBindings from '../mvvm/enableAcceptBindings';\r\nimport exposeBinding from '../mvvm/exposeBinding';\r\nexport default class UnitViewModel extends ViewModelBase{\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {siteJsonUnit}=props;\r\n\t\tthis._siteJsonUnit = siteJsonUnit;\r\n\t\tenableAcceptBindings(this);\r\n\t\t//exposeBinding(this, 'position', ()=>siteJsonPlotsPlot.position, (value)=>siteJsonPlotsPlot.position = value);\r\n\t}\r\n\tget location(){\r\n\t\treturn this._siteJsonUnit.location;\r\n\t}\r\n\tget code(){\r\n\t\treturn this._siteJsonUnit.code;\r\n\t}\r\n}","import eventEnable from '../core/eventEnable';\r\nexport default class CompositeProgressSource \r\n{\r\n\tconstructor(props){\r\n\t\tconst {weightingFactor, progressSources}=props||{};\r\n\t\teventEnable(this);\r\n\t\t\r\n\t\tthis.add= this.add.bind(this);\r\n\t\tthis._add= this._add.bind(this);\r\n\t\tthis.clear= this.clear.bind(this);\r\n\t\tthis.remove= this.remove.bind(this);\r\n\t\tthis._onProgressSourceProgressChanged= this._onProgressSourceProgressChanged.bind(this);\r\n\t\tthis._update= this._update.bind(this);\r\n\t\tthis.done= this.done.bind(this);\r\n\t\tthis._dispatchProgressChanged= this._dispatchProgressChanged.bind(this);\r\n\t\tthis._sum= this._sum.bind(this);\r\n\t\t\r\n\t\tthis._proportion = 0;\r\n\t\tthis._isDone = false;\r\n\t\tthis._weightingFactor = weightingFactor===undefined?null:weightingFactor;\r\n\t\tthis._progressSources =[];\r\n\t\t\r\n\t\tif(progressSources!==undefined&&progressSources!==null){\r\n\t\t\tthis.add(progressSources);\r\n\t\t}\r\n\t}\r\n\tget progressProportion(){\r\n\t\treturn this._isDone?1: this._proportion; \r\n\t}\r\n\tget weightingFactor()\r\n\t{\r\n\t\tif (this._weightingFactor !== null) return this._weightingFactor;\r\n\t\tvar weightingFactorSum=0;\r\n\t\tthis._progressSources.forEach(progressSource => weightingFactorSum +=progressSource.weightingFactor);\r\n\t\treturn weightingFactorSum;\r\n\t}\r\n\tadd(progressSource_s)\r\n\t{\r\n\t\tif(Array.isArray(progressSource_s)){\r\n\t\t\tif (progressSource_s.length < 1) return;\r\n\t\t}\r\n\t\telse{\r\n\t\t\tprogressSource_s=[progressSource_s];\r\n\t\t}\r\n\t\tvar added = false;\r\n\t\t\tprogressSource_s.forEach (progressSource => added |= this._add(progressSource));\r\n\t\tif (added)\r\n\t\t\tthis._update();\r\n\t}\r\n\tclear()\r\n\t{\r\n\t\tthis._progressSources.forEach(progressSource=>this.remove(progressSource));\r\n\t\tthis._isDone = false;\r\n\t\tthis._update();\r\n\t}\r\n\tremove(progressSource)\r\n\t{\r\n\t\tconst index = this._progressSources.indexOf(progressSource);\r\n\t\tif(index<0)return;\r\n\t\tprogressSource.removeEventListener('progresschanged', this._onProgressSourceProgressChanged);\r\n\t\tthis._progressSources.splice(index, 1);\r\n\t}\r\n\tdone()\r\n\t{ \r\n\t\tthis._isDone = true;\r\n\t\tthis._update();\r\n\t}\r\n\t_add(progressSource)\r\n\t{\r\n\t\tif (this._progressSources.indexOf(progressSource)>=0) return false;\r\n\t\tthis._progressSources.push(progressSource);\r\n\t\tprogressSource.addEventListener('progresschanged', this._onProgressSourceProgressChanged);\r\n\t\treturn true;\r\n\t}\r\n\t_onProgressSourceProgressChanged(e)\r\n\t{\r\n\t\tthis._update();\r\n\t}\r\n\t_update()\r\n\t{\r\n\t\tconst oldProportion = this._proportion;\r\n\t\tif (this._sum() !== oldProportion)\r\n\t\t\tthis._dispatchProgressChanged();\r\n\t}\r\n\t_dispatchProgressChanged()\r\n\t{\r\n\t\tthis.dispatchEvent({type:'progresschanged', progressProportion:this.progressProportion});\r\n\t}\r\n\t_sum()\r\n\t{\r\n\t\tif (this._isDone) return 1;\r\n\t\tconst count = this._progressSources.length;\r\n\t\tif (count < 1)\r\n\t\t{\r\n\t\t\tthis._proportion = 0;\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\tlet sumProgressTimesWeight = 0;\r\n\t\tlet sumWeights = 0;\r\n\t\tthis._progressSources.forEach(progressSource=>{\r\n\t\t\tsumProgressTimesWeight += progressSource.weightingFactor * (\r\n\t\t\t\tprogressSource.progressProportion > 1 ? 1 : (\r\n\t\t\t\t\tprogressSource.progressProportion < 0 ? 0 : progressSource.progressProportion\r\n\t\t\t\t)\r\n\t\t\t);\r\n\t\t\tsumWeights += progressSource.weightingFactor;\r\n\t\t});\r\n\t\treturn (this._proportion = (sumProgressTimesWeight / sumWeights));\r\n\t}\r\n}","import ViewModelBase from './ViewModelBase';\r\nimport enableAcceptBindings from '../mvvm/enableAcceptBindings';\r\nimport exposeBinding from '../mvvm/exposeBinding';\r\nimport UnitViewModel from './UnitViewModel';\r\nimport GenericModelViewModel from './GenericModelViewModel';\r\nimport CompositeProgressSource from '../progress/CompositeProgressSource';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nconst { throwNotProvided } = ParameterErrors;\r\nexport default class SitePlan3DViewModel extends ViewModelBase{\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {siteJson, configuration}=props;\r\n\t\tif(!configuration)throwNotProvided('configuration');\r\n\t\tthis._configuration = configuration;\r\n\t\tthis._loadingProgressProportionChanged= this._loadingProgressProportionChanged.bind(this);\r\n\t\tthis._unitViewModels = siteJson.units.getArray().map(unit=>new UnitViewModel({siteJsonUnit:unit}));\r\n\t\tthis._siteJson = siteJson;\r\n\t\tthis._progressSourceLoading = new CompositeProgressSource();\r\n\t\tthis._progressSourceLoading.addEventListener('progresschanged', this._loadingProgressProportionChanged);\r\n\t\tenableAcceptBindings(this);\r\n\t\texposeBinding(this, 'zoom', ()=>this.zoom, (value)=>this.zoom = value);\r\n\t\texposeBinding(this, 'loadProgressProportion', ()=>this.loadProgressProportion, (value)=>this.loadProgressProportion = value);\r\n\t\texposeBinding(this, 'progressBarVisible', ()=>this.progressBarVisible);\r\n\t}\r\n\tget siteModels(){\r\n\t\treturn this._siteJson.models.getModelsByGroupCode('site');\r\n\t}\r\n\tget configuration(){\r\n\t\treturn this._configuration;\r\n\t}\r\n\tget progressSourceLoading(){\r\n\t\treturn this._progressSourceLoading;\r\n\t}\r\n\tget units(){\r\n\t\treturn this._unitViewModels;\r\n\t}\r\n\tget zoom(){\r\n\t\treturn this._zoom;\r\n\t}\r\n\tset zoom(value){\r\n\t\tthis._zoom = value;\r\n\t}\r\n\tget loadProgressProportion(){\r\n\t\treturn this._progressSourceLoading.progressProportion;\r\n\t}\r\n\tget progressBarVisible(){\r\n\t\treturn this._progressSourceLoading.progressProportion<1;\r\n\t}\r\n\t_loadingProgressProportionChanged(e){\r\n\t\tthis.bindingsHandler.changed('loadProgressProportion', e.progressProportion);\r\n\t\tthis.bindingsHandler.changed('progressBarVisible', e.progressProportion<1);\r\n\t}\r\n}","import enableBindingToOthers from '../../mvvm/enableBindingToOthers';\r\nimport PropertyBindingFactory from '../../mvvm/PropertyBindingFactory';\r\nexport default class BabylonViewBase{\r\n\tconstructor(props){\r\n\t\tconst {model}=props;\r\n\t}\r\n}\r\n","import React, { Component } from \"react\";\r\nimport * as BABYLON from '@babylonjs/core';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nconst { throwNotProvided } = ParameterErrors;\r\nclass BabylonCameraPan {\r\n\tconstructor(params){\r\n\t\tconst {babylonScene, inertiaDecayFactor, inertiaNegligibleThreshold}=params||{};\r\n\t\tif(!babylonScene)throwNotProvided('babylonScene');\r\n\t\tthis._inertiaDecayFactor = inertiaDecayFactor===undefined?0.9:inertiaDecayFactor;\r\n\t\tthis._inertiaNegligibleThreshold = inertiaNegligibleThreshold===undefined?0.5:inertiaNegligibleThreshold;\r\n\t\tthis._babylonScene = babylonScene;\r\n\t\tthis._isNewForwardVectorTooCloseToSingularity= this._isNewForwardVectorTooCloseToSingularity.bind(this);\r\n\t\tthis._pan= this._pan.bind(this);\r\n\t\tthis._sphericalPan= this._sphericalPan.bind(this);\r\n\t\tthis._inertialPan= this._inertialPan.bind(this);\r\n\t\tthis._getPointerViewSpaceDirectionToRef= this._getPointerViewSpaceDirectionToRef.bind(this);\r\n\t\tthis._mouseLeft = this._mouseLeft.bind(this);\r\n\t\tthis._onPointerUp= this._onPointerUp.bind(this);\r\n\t\tthis._onPointerDown= this._onPointerDown.bind(this);\r\n\t\tthis._setMouseButtonStates = this._setMouseButtonStates.bind(this);\r\n\t\tthis._stopPanningIfPanning = this._stopPanningIfPanning.bind(this);\r\n\t\t\r\n\t\tbabylonScene.scene.defaultCursor = \"grab\";\r\n\r\n\t\tbabylonScene.camera.rotationQuaternion = BABYLON.Quaternion.Identity();\r\n\t\t\r\n\t\tthis._leftButtonDown=false;\r\n\t\tthis._rightButtonDown=false;\r\n\t\tthis._ptrX = 0;\r\n\t\tthis._ptrY = 0;\r\n\t\tthis._inertiaX = 0;\r\n\t\tthis._inertiaY = 0;\r\n\r\n\t\tthis._priorDir = new BABYLON.Vector3();\r\n\t\tthis._currentDir = new BABYLON.Vector3();\r\n\t\tthis._rotationAxis = new BABYLON.Vector3();\r\n\t\tthis._rotationAngle = 0;\r\n\t\tthis._rotation = new BABYLON.Quaternion();\r\n\t\tthis._newForward = new BABYLON.Vector3();\r\n\t\tthis._newRight = new BABYLON.Vector3();\r\n\t\tthis._newUp = new BABYLON.Vector3();\r\n\t\tthis._matrix = new BABYLON.Matrix.Identity();\r\n\t\t\r\n\t\tthis._inertialPanObserver = null;\r\n\t\tthis._sphericalPanObserver = null;\r\n\t\tthis._leftButtonDown = false;\r\n\t\tbabylonScene.scene.onPointerDown = this._onPointerDown;\r\n\t\tbabylonScene.scene.onPointerUp = this._onPointerUp;\r\n\t\tdocument.addEventListener(\"mouseleave\", this._mouseLeft);\r\n\t}\r\n\t_setMouseButtonStates(e) {\r\n\t\tconst isLeftButton = e.button===0||e.which===1;\r\n\t\tconst isRightButton = e.button===2||e.which===3;\r\n\t\tswitch(e.type){\r\n\t\t\tcase 'pointerdown':\r\n\t\t\t\tif(isLeftButton) this._leftButtonDown=true;\r\n\t\t\t\telse if(isRightButton)this._rightButtonDown=true;\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'pointerup':\r\n\t\t\t\tif(isLeftButton) this._leftButtonDown=false;\r\n\t\t\t\telse if(isRightButton)this._rightButtonDown=false;\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'mouseleave':\r\n\t\t\t\tthis._leftButtonDown=false;\r\n\t\t\t\tthis._rightButtonDown=false;\r\n\t\t\t\tbreak;\r\n\t\t\t\r\n\t\t}\r\n\t}\r\n\t_isNewForwardVectorTooCloseToSingularity(v){\r\n\t\t\tconst TOO_CLOSE_TO_UP_THRESHOLD = 0.99;\r\n\t\t\treturn Math.abs(BABYLON.Vector3.Dot(v, BABYLON.Vector3.Up())) > TOO_CLOSE_TO_UP_THRESHOLD;\r\n\t}\r\n\t_mouseLeft(e){\r\n\t\tthis._setMouseButtonStates(e);\r\n\t\tthis._stopPanningIfPanning();\r\n\t}\r\n\t_stopPanningIfPanning(e){\r\n\t\tif(!this._currentlyPanning)return;\r\n\t\tthis._currentlyPanning = false;\r\n\t\tthis._babylonScene.scene.defaultCursor = \"grab\";\r\n\t\tthis._babylonScene.scene.onBeforeRenderObservable.remove(this._sphericalPanObserver);\r\n\t\tthis._inertialPanObserver = this._babylonScene.scene.onBeforeRenderObservable.add(this._inertialPan);\r\n\t}\r\n\t_pan(currX, currY) {\r\n\t\tvar computeNewForward = (x, y) => {\r\n\t\t\tthis._getPointerViewSpaceDirectionToRef(this._ptrX, this._ptrY, this._priorDir);\r\n\t\t\tthis._getPointerViewSpaceDirectionToRef(x, y, this._currentDir);\r\n\r\n\t\t\tBABYLON.Vector3.CrossToRef(this._priorDir, this._currentDir, this._rotationAxis);\r\n\r\n\t\t\tif (this._rotationAxis.lengthSquared() > 0) {\r\n\t\t\t\tthis._rotationAngle = BABYLON.Vector3.GetAngleBetweenVectors(this._priorDir, this._currentDir, this._rotationAxis);\r\n\t\t\t\tBABYLON.Quaternion.RotationAxisToRef(this._rotationAxis, -this._rotationAngle, this._rotation);\r\n\r\n\t\t\t\tthis._newForward.set(0, 0, 1);\r\n\t\t\t\tthis._newForward.rotateByQuaternionToRef(this._rotation, this._newForward);\r\n\t\t\t\tthis._newForward.rotateByQuaternionToRef(this._babylonScene.camera.rotationQuaternion, this._newForward);\r\n\t\t\t\treturn !this._isNewForwardVectorTooCloseToSingularity(this._newForward);\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (computeNewForward(currX, currY) || computeNewForward(currX, this._ptrY)) {\r\n\t\t\tBABYLON.Vector3.CrossToRef(BABYLON.Vector3.Up(), this._newForward, this._newRight);\r\n\t\t\tBABYLON.Vector3.CrossToRef(this._newForward, this._newRight, this._newUp);\r\n\t\t\tthis._matrix.setRowFromFloats(0, this._newRight.x, this._newRight.y, this._newRight.z, 0);\r\n\t\t\tthis._matrix.setRowFromFloats(1, this._newUp.x, this._newUp.y, this._newUp.z, 0);\r\n\t\t\tthis._matrix.setRowFromFloats(2, this._newForward.x, this._newForward.y, this._newForward.z, 0);\r\n\t\t\tthis._babylonScene.fromRotationMatrixToRef(this._matrix.getRotationMatrix());\r\n\t\t}\r\n\t}\r\n\t\r\n\t_sphericalPan(){\r\n\t\tthis._pan(this._babylonScene.scene.pointerX, this._babylonScene.scene.pointerY);\r\n\t\tthis._inertiaX = this._babylonScene.scene.pointerX - this._ptrX;\r\n\t\tthis._inertiaY = this._babylonScene.scene.pointerY - this._ptrY;\r\n\t\tthis._ptrX = this._babylonScene.scene.pointerX;\r\n\t\tthis._ptrY = this._babylonScene.scene.pointerY;\r\n\t}\r\n\t _inertialPan(){\r\n\t\tif (Math.abs(this._inertiaX) > this._inertiaNegligibleThreshold || Math.abs(this._inertiaY) > this._inertiaNegligibleThreshold) {\r\n\t\t\tthis._pan(this._ptrX + this._inertiaX, this._ptrY + this._inertiaY);\r\n\t\t\tthis._pan(this._ptrX + this._inertiaX, this._ptrY + this._inertiaY);\r\n\r\n\t\t\tthis._inertiaX *= this._inertiaDecayFactor;\r\n\t\t\tthis._inertiaY *= this._inertiaDecayFactor;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis._babylonScene.scene.onBeforeRenderObservable.remove(this._inertialPanObserver);\r\n\t\t}\r\n\t}\r\n\t_onPointerDown(e){\r\n\t\tthis._setMouseButtonStates(e);\r\n\t\tif(!this._leftButtonDown||this._rightButtonDown)return;\r\n\t\tif(this._currentlyPanning)return;\r\n\t\tthis._currentlyPanning = true;\r\n\t\tthis._babylonScene.scene.onBeforeRenderObservable.remove(this._inertialPanObserver);\r\n\t\tthis._babylonScene.scene.defaultCursor = \"grabbing\";\r\n\t\tthis._ptrX = this._babylonScene.scene.pointerX;\r\n\t\tthis._ptrY = this._babylonScene.scene.pointerY;\r\n\t\tthis._sphericalPanObserver = this._babylonScene.scene.onBeforeRenderObservable.add(this._sphericalPan);\r\n\t}\r\n\t_onPointerUp(e){\r\n\t\tthis._setMouseButtonStates(e);\r\n\t\tthis._stopPanningIfPanning();\r\n\t}\r\n\t_getPointerViewSpaceDirectionToRef(x, y, ref){\r\n\t\tBABYLON.Vector3.UnprojectToRef(\r\n\t\t\tnew BABYLON.Vector3(x, y, 0), \r\n\t\t\tthis._babylonScene.canvas.width, \r\n\t\t\tthis._babylonScene.canvas.height,\r\n\t\t\tBABYLON.Matrix.Identity(),\r\n\t\t\tBABYLON.Matrix.Identity(), \r\n\t\t\tthis._babylonScene.camera.getProjectionMatrix(),\r\n\t\t\tref);\r\n\t\tref.normalize();\r\n\t}\r\n}\r\nexport default BabylonCameraPan;","import React, { Component } from \"react\";\r\nimport * as BABYLON from '@babylonjs/core';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport TwoFingerTouch from '../ui_core/TwoFingerTouch';\r\nconst { throwNotProvided } = ParameterErrors;\r\nclass BabylonCameraZoom {\r\n\tconstructor(params){\r\n\t\tconst {babylonScene, inertiaDecayFactor, inertiaNegligibleThreshold, zoomSpeedFactor, closestCanGetToSurface}=params||{};\r\n\t\tif(!babylonScene)throwNotProvided('babylonScene');\r\n\t\tthis._zoomSpeedFactor = zoomSpeedFactor===undefined?15:zoomSpeedFactor;\r\n\t\tthis._babylonScene = babylonScene;\r\n\t\tthis._closestCanGetToSurface = closestCanGetToSurface===undefined?3:closestCanGetToSurface;\r\n\t\tthis._getMaximumDistanceCanMoveForward= this._getMaximumDistanceCanMoveForward.bind(this);\r\n\t\tthis._onPointerWheel= this._onPointerWheel.bind(this);\r\n\t\tbabylonScene.scene.onPrePointerObservable.add( this._onPointerWheel, BABYLON.PointerEventTypes.POINTERWHEEL, false);\r\n\t\tnew TwoFingerTouch({element:babylonScene.canvas, \r\n\t\tonStart:()=>{\r\n\t\t\tconsole.log('onStart');\r\n\t\t}, onStartFinger1:()=>{\r\n\t\t\tconsole.log('onStartFinger1');\r\n\t\t}, onStartFinger2:()=>{\r\n\t\t\tconsole.log('onStartFinger2');\r\n\t\t}, onMoveFinger1:()=>{\r\n\t\t\tconsole.log('onMoveFinger1');\r\n\t\t}, onMoveFinger2:()=>{\r\n\t\t\tconsole.log('onMoveFinger2');\r\n\t\t}, onEndFinger1:()=>{\r\n\t\t\tconsole.log('onEndFinger1');\r\n\t\t}, onEndFinger2:()=>{\r\n\t\t\tconsole.log('onEndFinger2');\r\n\t\t}\r\n\t\t, onEnd:()=>{\r\n\t\t\tconsole.log('onEnd');\r\n\t\t}});\r\n\t}\r\n\t_onPointerWheel(pointerInfo, eventState) {\r\n\t\tconst event = pointerInfo.event;\r\n\t\tvar delta = 0;\r\n\t\tif (event.wheelDelta) {\r\n\t\t\tdelta = event.wheelDelta;\r\n\t\t}\r\n\t\telse if (event.detail) {\r\n\t\t\tdelta = -event.detail;\r\n\t\t}\r\n\t\tif (!delta)return;\r\n\t\tconst direction = this._babylonScene.camera.getDirection(new BABYLON.Vector3(0,0,delta>0?1:-1));\r\n\t\tconst actualDistanceToMove = this._getMaximumDistanceCanMoveForward(direction, this._zoomSpeedFactor);\t\r\n\t\tconst scaledDirection = direction.scale(actualDistanceToMove);\r\n\t\tthis._babylonScene.addInPlace(scaledDirection);\r\n\t}\r\n\t_getMaximumDistanceCanMoveForward(direction, distanceWouldLikeToMove){\r\n\t\tconst origin = this._babylonScene.camera.position;\r\n\t\tconst ray = new BABYLON.Ray(origin, direction, 1000);\r\n\t\tconst hit = this._babylonScene.scene.pickWithRay(ray);\r\n\t\tif(!hit.hit)return distanceWouldLikeToMove;\r\n\t\tconst distanceLeftToMoveForward = hit.distance - this._closestCanGetToSurface;\r\n\t\tif(distanceLeftToMoveForward>distanceWouldLikeToMove)return distanceWouldLikeToMove;\r\n\t\treturn distanceLeftToMoveForward*0.7;\r\n\t}\r\n}\r\nexport default BabylonCameraZoom;","import eventEnable from '../core/eventEnable';\r\nexport default class StandardProgressSource\r\n{\r\n\tconstructor(props){\r\n\t\tconst {weightingFactor}=props||{};\r\n\t\teventEnable(this);\r\n\t\tthis.done= this.done.bind(this);\r\n\t\tthis._dispatchProgressChanged= this._dispatchProgressChanged.bind(this);\r\n\t\tthis._weightingFactor = weightingFactor===undefined||weightingFactor===null?1:weightingFactor;\r\n\t\tthis._isDone = false;\r\n\t\tthis._proportion = 0;\r\n\t}\r\n\tget progressProportion (){ \r\n\t\treturn this._isDone ? 1 : this._proportion;\r\n\t}\r\n\tset progressProportion(value){\r\n\t\tif(this._proportion===value)return;\r\n\t\tthis._proportion= value;\r\n\t\tthis._dispatchProgressChanged();\r\n\t}\r\n\tget weightingFactor()\r\n\t{\r\n\t\treturn this._weightingFactor;\r\n\t}\r\n\tdone() {\r\n\t\tif(this._isDone)return;\r\n\t\tthis._isDone = true; \r\n\t\tthis._dispatchProgressChanged(); \r\n\t}\r\n\t_dispatchProgressChanged()\r\n\t{\r\n\t\tthis.dispatchEvent({type:'progresschanged', progressProportion:this.progressProportion});\r\n\t}\r\n}","import enableBindingToOthers from '../../mvvm/enableBindingToOthers';\r\nimport PropertyBindingFactory from '../../mvvm/PropertyBindingFactory';\r\nimport BabylonViewBase from './BabylonViewBase';\r\nimport Iterator from '../../core/Iterator';\r\nimport * as BABYLON from '@babylonjs/core';\r\nimport BabylonCameraPan from '../../modelling/BabylonCameraPan';\r\nimport BabylonCameraZoom from '../../modelling/BabylonCameraZoom';\r\nimport StandardProgressSource from '../../progress/StandardProgressSource';\r\nimport Urls from '../../urls/Urls';\r\nexport default class SiteView extends BabylonViewBase{\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {model, babylonScene, babylonModelsManager}=props;\r\n\t\tthis._babylonScene=babylonScene;\r\n\t\tthis._babylonModelsManager = babylonModelsManager;\r\n\t\tthis.initialize = this.initialize.bind(this);\r\n\t\tthis._loadSiteModels = this._loadSiteModels.bind(this);\r\n\t\tthis._setupControls = this._setupControls.bind(this);\r\n\t\tthis._model = model;\r\n\t\tenableBindingToOthers(this);\r\n\t}\r\n\tinitialize(){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tthis._loadSiteModels().then(()=>{\r\n\t\t\t\tthis._setupControls().then(resolve).catch(reject);\r\n\t\t\t}).catch(reject);\r\n\t\t});\r\n\t}\r\n\t_loadSiteModels(){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tconst models = this._model.siteModels;\r\n\t\t\tconst progressSourceLoading = this._model.progressSourceLoading;\r\n\t\t\tprogressSourceLoading.clear();\r\n\t\t\tconst iteratorModels = new Iterator(models);\r\n\t\t\tconst progressSources = [];\r\n\t\t\tfor(var nModel=0; nModel{\r\n\t\t\t\tif(!iteratorModels.hasNext()){\r\n\t\t\t\t\tresolve(babylonModels);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tconst model = iteratorModels.next();\r\n\t\t\t\tconst progressSource = iteratorProgressSources.next();\r\n\t\t\t\tprogressSource.progressProportion =0;\r\n\t\t\t\tconsole.log('model.quadrantsRelativePath');\r\n\t\t\t\tconsole.log(model.quadrantsRelativePath);\r\n\t\t\t\tthis._babylonModelsManager.getNewMesh({\r\n\t\t\t\t\tcode:model.code,\r\n\t\t\t\t\tobjectIdNodeIdsMappings:model.objectIdNodeIdsMappings,\r\n\t\t\t\t\tquadrantsPath:Urls.getQuadrantsAbsolutePath({configuration:this._model.configuration, relativePath:model.quadrantsRelativePath}),\r\n\t\t\t\t\tstandardProgressSource:progressSource\r\n\t\t\t\t}).then((babylonModel)=>{\r\n\t\t\t\t\tprogressSource.done();\r\n\t\t\t\t\tbabylonModels.push(babylonModel);\r\n\t\t\t\t\tloadNextModel();\r\n\t\t\t\t}).catch(reject);\r\n\t\t\t};\r\n\t\t\tloadNextModel();\r\n\t\t});\r\n\t\t\r\n\t}\r\n\t_setupControls(){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tthis._babylonScene.defaultCamerasAndLight({attachCameraControls:false});\r\n\t\t\tnew BabylonCameraPan({babylonScene:this._babylonScene});\r\n\t\t\tnew BabylonCameraZoom({babylonScene:this._babylonScene, zoomSpeedFactor:8});\r\n\t\t\tthis._babylonScene.startRendering();\r\n\t\t\tthis._babylonScene.setCameraPosition (new BABYLON.Vector3(200,200,-200));\r\n\t\t\tresolve();\r\n\t\t});\r\n\t}\r\n\t_zoomChanged(value){\r\n\t\t\r\n\t}\r\n}\r\n","import enableBindingToOthers from '../../mvvm/enableBindingToOthers';\r\nimport PropertyBindingFactory from '../../mvvm/PropertyBindingFactory';\r\nimport BabylonViewBase from './BabylonViewBase';\r\nimport Vector3 from '../../geometry/Vector3';\r\nimport Iterator from '../../core/Iterator';\r\nimport SiteView from './SiteView';\r\nimport GenericView from './GenericView';\r\nimport ProgressBar from '../ProgressBar';\r\nimport Urls from '../../urls/Urls';\r\nexport default class SitePlan3DView extends BabylonViewBase{\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {model, element, babylonScene, babylonModelsManager}=props;\r\n\t\tthis._model = model;\r\n\t\tthis._element = element;\r\n\t\tthis._babylonScene=babylonScene;\r\n\t\tthis._babylonModelsManager = babylonModelsManager;\r\n\t\tthis._unitViews = [];\r\n\t\tthis.initialize = this.initialize.bind(this);\r\n\t\tthis._progressBarVisibleChanged = this._progressBarVisibleChanged.bind(this);\r\n\t\tenableBindingToOthers(this);\r\n\t\tPropertyBindingFactory.standard(this, model, 'zoom', this._zoomChanged);\r\n\t\tthis._progressBar = new ProgressBar({model:model, propertyNameProgressProportion:'loadProgressProportion', propertyNameVisible:'progressBarVisible', delayHide:0});\r\n\t\tthis._logoLarge = document.createElement('img');\r\n\t\tthis._logoLarge.src = Urls.assets+'logos/large.png';\r\n\t\tthis._logoLarge.classList.add('logo-large');\r\n\t\tthis._element.appendChild(babylonScene.element);\r\n\t\tthis._element.appendChild(this._progressBar.element);\r\n\t\tthis._element.appendChild(this._logoLarge);\r\n\t\tthis._bindingProgressBarVisible = PropertyBindingFactory.standard(this, model, 'progressBarVisible', this._progressBarVisibleChanged);\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n\tinitialize(){\r\n\t\tconst self = this;\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tconst siteView = new SiteView({\r\n\t\t\t\tmodel:this._model, \r\n\t\t\t\tbabylonScene:self._babylonScene, \r\n\t\t\t\tbabylonModelsManager:self._babylonModelsManager, \r\n\t\t\t\tbabylonMaterialsManager:self._babylonMaterialsManager});\r\n\t\t\tsiteView.initialize().then(()=>{\r\n\t\t\t\tresolve();\r\n\t\t\t}).catch(reject);\r\n\t\t});\r\n\t}\r\n\t_zoomChanged(value){\r\n\t\t\r\n\t}\r\n\t_progressBarVisibleChanged(value){\r\n\t\tif(value)this._logoLarge.classList.add('visible');\r\n\t\telse this._logoLarge.classList.remove('visible');\r\n\t}\r\n}\r\n","import ParameterErrors from '../errors/ParameterErrors';\r\nimport Mesh from './Mesh';\r\nimport UrlHelper from '../core/UrlHelper'\r\nconst { throwNotProvided } = ParameterErrors;\r\nexport default class ModelFile {\r\n constructor(props) {\r\n const { rootUrl, fileName, url, code } = props;\r\n if (!code) throwNotProvided('code');\r\n this._code = code;\r\n if (url === null || url === undefined) {\r\n if (!rootUrl) this._throwMustProvideUrlOrRootUrlAndFileName(\"rootUrl\");\r\n this._rootUrl = rootUrl;\r\n if (!fileName) this._throwMustProvideUrlOrRootUrlAndFileName('fileName');\r\n this._fileName = fileName;\r\n }\r\n else {\r\n const seperatedUrlComponents = UrlHelper.seperateUrlIntoRootUrlAndFileName(url);\r\n this._rootUrl = seperatedUrlComponents[0];\r\n this._fileName = seperatedUrlComponents[1];\r\n }\r\n }\r\n _throwMustProvideUrlOrRootUrlAndFileName() {\r\n throw new Error('You must provide either the parameters \"rootUrl\" and \"fileName\" or \"url\"');\r\n\r\n }\r\n get code() {\r\n return this._code;\r\n }\r\n get rootUrl() {\r\n return this._rootUrl;\r\n }\r\n get fileName() {\r\n return this._fileName;\r\n }\r\n\r\n}\r\n","import ParameterErrors from '../errors/ParameterErrors';\r\nimport Vector3 from '../geometry/Vector3';\r\nconst { throwNotProvided } = ParameterErrors;\r\nexport default class Mesh {\r\n constructor(props) {\r\n const { name, material, position, relativePath} = props;\r\n if (!name) throwNotProvided(\"name\");\r\n this._name = name;\r\n //if (!material) throwNotProvided(\"material\");\r\n this._material = material;\r\n\r\n if (!position) throwNotProvided(\"position\");\r\n this._position = position;\r\n\t\t\r\n\t\tthis._relativePath = relativePath;\r\n }\r\n get name() {\r\n return this._name;\r\n }\r\n get material() {\r\n return this._material;\r\n }\r\n get position() {\r\n return this._position;\r\n }\r\n static fromObj(obj) {\r\n return new Mesh({\r\n name: obj.name,\r\n material: obj.material,\r\n position: Vector3.fromArray(obj.position),\r\n\t\t\trelativePath:obj.relativePath\r\n })\r\n }\r\n}\r\n","import * as BABYLON from '@babylonjs/core';\r\nimport eventEnable from '../core/eventEnable';\r\nexport default class BabylonModel{\r\n\tconstructor(props){\r\n\t\tconst {root, babylonMeshes, particleSystems, skeletons, code, location, objectIdNodeIdsMappings, quadrants}=props;\r\n\t\teventEnable(this);\r\n\t\tthis._root = root;\r\n\t\tthis._objectIdNodeIdsMappings= objectIdNodeIdsMappings;\r\n\t\tthis._quadrants = quadrants;\r\n\t\tthis._babylonMeshes = babylonMeshes;\r\n\t\tthis._particleSystems = particleSystems;\r\n\t\tthis._skeletons = skeletons;\r\n\t\tthis._code = code;\r\n\t\tthis._location = location;\r\n\t\tthis.setLocation = this.setLocation.bind(this);\r\n\t\tthis.setVisibleObjects = this.setVisibleObjects.bind(this);\r\n\t\tthis._setNodeEnabled = this._setNodeEnabled.bind(this);\r\n\t\tthis.dispose = this.dispose.bind(this);\r\n\t\tthis._setPositionRotationAndScaling = this._setPositionRotationAndScaling.bind(this);\r\n\t\tthis.setAllObjectsVisible = this.setAllObjectsVisible.bind(this);\r\n\t\tthis.clone = this.clone.bind(this);\r\n\t\tthis._mapNodeIdToBabylonMesh = new Map();\r\n\t\tthis._currentNodeIdsVisible = [];\r\n\t\tbabylonMeshes.forEach(babylonMesh=>{\r\n\t\t\tif(babylonMesh.id.indexOf('node')!==0)return;\r\n\t\t\tconst number = parseInt(babylonMesh.id.substr(4));\r\n\t\t\tthis._mapNodeIdToBabylonMesh.set(number, babylonMesh);\r\n\t\t\tthis._currentNodeIdsVisible.push(number);\r\n\t\t});\r\n\t\tconsole.log('this._babylonMeshes');\r\n\t\tconsole.log(this._babylonMeshes);\r\n\t}\r\n\tget code(){\r\n\t\treturn this._code;\r\n\t}\r\n\tget quadrants(){\r\n\t\treturn this._quadrants;\r\n\t}\r\n\tsetLocation(location){\r\n\t\tthis._setPositionRotationAndScaling(location.position, location.rotation, location.scaling);\r\n\t}\r\n\tsetAllObjectsVisible(){\r\n\t\tfor(var nodeId of this._objectIdNodeIdsMappings.allNodeIds){\r\n\t\t\tthis._setNodeEnabled(nodeId, true);\r\n\t\t}\r\n\t\tthis._currentNodeIdsVisible = this._objectIdNodeIdsMappings.allNodeIds;\r\n\t}\r\n\tsetVisibleObjects(objectIds){\r\n\t\tconst nodeIdsVisible = this._objectIdNodeIdsMappings.getNodeIdsForObjectIds(objectIds);\r\n\t\tnodeIdsVisible.forEach((nodeIdVisible)=>{\r\n\t\t\tconst indexInCurrentNodeIdsVisible = this._currentNodeIdsVisible.indexOf(nodeIdVisible);\r\n\t\t\tif(indexInCurrentNodeIdsVisible>=0)\r\n\t\t\t\tthis._currentNodeIdsVisible.splice(indexInCurrentNodeIdsVisible, 1);\r\n\t\t\telse\r\n\t\t\t\tthis._setNodeEnabled(nodeIdVisible, true);\r\n\t\t});\r\n\t\tthis._currentNodeIdsVisible.forEach(nodeIdToDisable=>this._setNodeEnabled(nodeIdToDisable, false));\r\n\t\tthis._currentNodeIdsVisible = nodeIdsVisible;\r\n\t}\r\n\t_setNodeEnabled(nodeId, enabled){\t\r\n\t\tconst mesh = this._mapNodeIdToBabylonMesh.get(nodeId);\r\n\t\tif(!mesh)return;\r\n\t\tmesh.setEnabled(enabled);\t\r\n\t}\r\n _setPositionRotationAndScaling(position, rotation, scaling) {\r\n this._root.position= new BABYLON.Vector3(position.x, position.y, position.z);\r\n this._root.rotation = new BABYLON.Vector3(rotation.x, rotation.y, rotation.z); \r\n this._root.scaling = new BABYLON.Vector3(scaling.x, scaling.y, scaling.z);\r\n }\r\n\tclone(){\r\n\t\tconst clonedRoot = this._root.clone();\r\n\t\treturn new BabylonModel({\r\n\t\t\troot:this._root,\r\n\t\t\tbabylonMeshes:this._babylonMeshes,\r\n\t\t\tparticleSystems:this._particleSystems,\r\n\t\t\tskeletons:this._skeletons,\r\n\t\t\tcode:this._code,\r\n\t\t\tlocation:this._location\r\n\t\t});\r\n\t}\r\n\tdispose(){\r\n\t\tthis.dispatchEvent({type:'disposed', babylonModel:this});\r\n\t}\r\n}","import * as BABYLON from '@babylonjs/core';\r\nimport Models from './Models';\r\nimport ModelFile from './ModelFile';\r\nimport BabylonModel from './BabylonModel';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport UrlHelper from '../core/UrlHelper';\r\nimport '@babylonjs/loaders'\r\nconst { throwNotProvided, throwNotOfType } = ParameterErrors;\r\nBABYLON.SceneLoader.loggingLevel = BABYLON.SceneLoader.DETAILED_LOGGING;\r\nexport default class BabylonModelsManagerCache {\r\n constructor(props) { \r\n\t\tthis._mapFileNameToBabylonModel = new Map();\r\n }\r\n\tadd(filePath, babylonModel){\r\n\t\tthis._mapFileNameToBabylonModel.set(filePath, babylonModel);\r\n\t}\r\n\thas(filePath){\r\n\t\treturn this._mapFileNameToBabylonModel.has(filePath);\r\n\t}\r\n\tget(filePath){\r\n\t\treturn this._mapFileNameToBabylonModel.get(filePath);\r\n\t}\r\n}","import * as BABYLON from '@babylonjs/core';\r\nimport Iterator from '../core/Iterator';\r\nexport default class BabylonMeshesCombiner{\r\n\tconstructor({scene}){\r\n\t\tthis._scene=scene;\r\n\t\tthis._mapMaterialNameToCombinedMesh = new Map();\r\n\t\tthis.combineMeshesByMaterial = this.combineMeshesByMaterial.bind(this);\r\n\t\tthis._get_MaterialName_MeshesToCombine_Pairs= this._get_MaterialName_MeshesToCombine_Pairs.bind(this);\r\n\t\tthis._validateAllVerticesHaveBufferBound= this._validateAllVerticesHaveBufferBound.bind(this);\r\n\t\tthis._get_getName = this._get_getName.bind(this);\r\n\t\tthis._mergeMeshes= this._mergeMeshes.bind(this);\r\n\t}\r\n\tcombineMeshesByMaterial(babylonMeshes){\r\n\t\tconst getName = this._get_getName();\r\n\t\tconst materialName_MeshesToCombine_Pairs= this._get_MaterialName_MeshesToCombine_Pairs(babylonMeshes);\r\n\t\tfor(var pair of materialName_MeshesToCombine_Pairs){\r\n\t\t\tlet [materialName, meshesToCombine]=pair;\r\n\t\t\t//if(materialName=='VG_Ext_Brick_IbstockSurreyOrange (Instance)'){\r\n\t\t\tconsole.log('materialName: '+materialName);\r\n\t\t\tconsole.log(meshesToCombine);\r\n\t\t\tif(materialName==='VG_Ext_Brick_IbstockSurreyOrange')continue;\r\n\t\t\tif(meshesToCombine.length>500)continue;\r\n\t\t\tlet combinedMesh = this._mapMaterialNameToCombinedMesh.get(materialName);\r\n\t\t\tif(combinedMesh!==undefined&&combinedMesh!==null){\r\n\t\t\t\tmeshesToCombine = [combinedMesh].concat(meshesToCombine);\r\n\t\t\t}\r\n\t\t\tif(meshesToCombine.length<2){\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\tcombinedMesh = this._mergeMeshes(getName(), meshesToCombine, this._scene);\r\n\t\t\tif(combinedMesh===null){\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\tthis._mapMaterialNameToCombinedMesh.set(materialName, combinedMesh);\r\n\t\t}\r\n\t}\r\n\t_get_getName(){\r\n\t\tlet nMerge=0;\r\n\t\treturn ()=>{\r\n\t\t\treturn 'merged_'+(nMerge++);\r\n\t\t};\r\n\t}\r\n\t_get_MaterialName_MeshesToCombine_Pairs(babylonMeshes){\r\n\t\tconst mapMeshNameToMeshesToCombine = new Map();\r\n\t\tconst materialName_MeshesToCombine_Pairs = [];\r\n\t\tfor(var babylonMesh of babylonMeshes){\r\n\t\t\tconst materialName = babylonMesh.material?.name;\r\n\t\t\tlet meshesToCombine = mapMeshNameToMeshesToCombine.get(materialName);\r\n\t\t\tif(meshesToCombine===undefined||meshesToCombine===null){\r\n\t\t\t\tmeshesToCombine = [babylonMesh];\r\n\t\t\t\tmaterialName_MeshesToCombine_Pairs.push([materialName, meshesToCombine]);\r\n\t\t\t\tmapMeshNameToMeshesToCombine.set(materialName, meshesToCombine);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\tmeshesToCombine.push(babylonMesh);\r\n\t\t}\r\n\t\treturn materialName_MeshesToCombine_Pairs;\r\n\t}\r\n\t\r\n\t\r\n\t_mergeMeshes(meshName, meshes, scene) {\r\n\t\tif(meshes.length<2)return;\r\n\t\tconst firstMesh = meshes[0];\r\n\t\tlet newUv2s = [];\r\n\t\tlet newColors = [];\r\n\t\tlet newMatricesIndices = [];\r\n\t\tlet newMatricesWeights = [];\r\n\t\tlet newIndices = [];\r\n\t\tlet newPositions = [];\r\n\t\tlet newNormals = [];\r\n\t\tlet newUvs = [];\r\n\t\tlet meshesToDispose = [];\r\n\t\tvar hasUv2s = true;\r\n\t\tvar hasColors = true;\r\n\t\tvar hasMatricesIndices = true;\r\n\t\tvar hasMatricesWeights = true;\r\n\t\tlet hasNormals =true;\r\n\t\tconst normalsForEachMesh=[];\r\n\t\tfor (var i = 0; i < meshes.length; i++) {\r\n\t\t\tconst mesh = meshes[i];\r\n\t\t\tconst normals = mesh.getVerticesData(BABYLON.VertexBuffer.NormalKind);\r\n\t\t\tif(!normals)\r\n\t\t\t\thasNormals = false;\r\n\t\t\tnormalsForEachMesh[i]=normals;\r\n\t\t\tif (!mesh.isVerticesDataPresent([BABYLON.VertexBuffer.UV2Kind])) hasUv2s = false;\r\n\t\t\tif (!mesh.isVerticesDataPresent([BABYLON.VertexBuffer.ColorKind])) hasColors = false;\r\n\t\t\tif (!mesh.isVerticesDataPresent([BABYLON.VertexBuffer.MatricesIndicesKind])) hasMatricesIndices = false;\r\n\t\t\tif (!mesh.isVerticesDataPresent([BABYLON.VertexBuffer.MatricesWeightsKind])) hasMatricesWeights = false;\r\n\t\t\r\n\t\t}\r\n\t\tfor (i = 0; i < meshes.length; i++) {\r\n\t\t\tconst mesh = meshes[i];\r\n\t\t\ttry{\r\n\t\t\t\tvar indices = mesh.getIndices();\r\n\t\t\t\tif(indices===null)continue;\r\n\t\t\t\tconst positions = mesh.getVerticesData(BABYLON.VertexBuffer.PositionKind);\r\n\t\t\t\tif(positions===null)continue;\r\n\t\t\t\tmesh.computeWorldMatrix(true);\r\n\t\t\t\tnewUvs = newUvs.concat(mesh.getVerticesData(BABYLON.VertexBuffer.UVKind));\r\n\t\t\t\tif (hasUv2s) newUv2s = newUv2s.concat(mesh.getVerticesData(BABYLON.VertexBuffer.UV3Kind));\r\n\t\t\t\tif (hasColors) newColors = newColors.concat(mesh.getVerticesData(BABYLON.VertexBuffer.ColorKind));\r\n\t\t\t\tif (hasMatricesIndices) newMatricesIndices = newMatricesIndices.concat(mesh.getVerticesData(BABYLON.VertexBuffer.MatricesIndicesKind));\r\n\t\t\t\tif (hasMatricesWeights) newMatricesWeights = newMatricesWeights.concat(mesh.getVerticesData(BABYLON.VertexBuffer.MatricesWeightsKind));\r\n\r\n\t\t\t\tvar positionsOffset = newPositions.length / 3;\r\n\r\n\t\t\t\tvar worldMatrix = mesh.getWorldMatrix();\r\n\t\t\t\tthis._validateAllVerticesHaveBufferBound(indices, positions);\r\n\t\t\t\tfor (var vertexIndex = 0; vertexIndex < positions.length; vertexIndex += 3) {\r\n\t\t\t\t\tconst vertex = BABYLON.Vector3.TransformCoordinates(new BABYLON.Vector3(positions[vertexIndex], positions[vertexIndex + 1], positions[vertexIndex + 2]), worldMatrix);\r\n\t\t\t\t\tnewPositions.push(vertex.x);\r\n\t\t\t\t\tnewPositions.push(vertex.y);\r\n\t\t\t\t\tnewPositions.push(vertex.z);\r\n\t\t\t\t}\r\n\t\t\t\tif(hasNormals){\r\n\t\t\t\t\tconst normals = normalsForEachMesh[i];\r\n\t\t\t\t\tif(normals===null){\r\n\t\t\t\t\t\tnormals = new Array(positions.length/3/*???*/).fill(0);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tfor (var normalsIndex = 0; normalsIndex != normals.length; normalsIndex += 3) {\r\n\t\t\t\t\t\tvar normal = BABYLON.Vector3.TransformNormal(new BABYLON.Vector3(normals[normalsIndex], normals[normalsIndex + 1], normals[normalsIndex + 2]), worldMatrix);\r\n\t\t\t\t\t\tnewNormals.push(normal.x);\r\n\t\t\t\t\t\tnewNormals.push(normal.y);\r\n\t\t\t\t\t\tnewNormals.push(normal.z);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tfor (var indicesIndex = 0; indicesIndex < indices.length; indicesIndex++) {\r\n\t\t\t\t newIndices.push(indices[indicesIndex] + positionsOffset);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tfinally{\r\n\t\t\t\tif(i>0)\r\n\t\t\t\t\tmeshesToDispose.push(mesh);\r\n\t\t\t}\r\n\t\t}\r\n\t\tif((newIndices.length<1)||(newPositions.length<1))return null;\r\n\t\tconst newMesh = new BABYLON.Mesh(meshName, scene);\r\n\t\tnewMesh.setVerticesData(BABYLON.VertexBuffer.PositionKind, newPositions, false);\r\n\t\tif(hasNormals&&(newNormals.length>0))\r\n\t\t\tnewMesh.setVerticesData(BABYLON.VertexBuffer.NormalKind, newNormals, false);\r\n\t\tnewMesh.setVerticesData(BABYLON.VertexBuffer.UVKind, newUvs, false);\r\n\t\t\r\n\t\tif (newUv2s.length > 0) newMesh.setVerticesData(BABYLON.VertexBuffer.UV2Kind, newUv2s, false);\r\n\t\tif (newColors.length > 0) newMesh.setVerticesData(BABYLON.VertexBuffer.ColorKind, newUvs, false);\r\n\t\tif (newMatricesIndices.length > 0) newMesh.setVerticesData(BABYLON.VertexBuffer.MatricesIndicesKind, newUvs, false);\r\n\t\tif (newMatricesWeights.length > 0) newMesh.setVerticesData(BABYLON.VertexBuffer.MatricesWeightsKind, newUvs, false);\r\n\r\n\t\tnewMesh.setIndices(newIndices);\r\n\t\tnewMesh.material = firstMesh.material;\r\n\t\tconsole.log( firstMesh.material);\r\n\t\tmeshesToDispose.forEach(mesh=>mesh.dispose(true));\r\n\t\tfirstMesh.dispose(true);\r\n\t\treturn newMesh;\r\n\t}\r\n\t_validateAllVerticesHaveBufferBound(indices, positions){\r\n\t\t\r\n\t}\r\n}","import * as BABYLON from '@babylonjs/core';\r\nimport '@babylonjs/core/Debug/debugLayer';\r\nimport '@babylonjs/inspector';\r\nimport '@babylonjs/loaders';\r\nimport Models from './Models';\r\nimport ModelFile from './ModelFile';\r\nimport BabylonModel from './BabylonModel';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport UrlHelper from '../core/UrlHelper';\r\nimport AssetsManager from '../assets_management/AssetsManager';\r\nimport Location from '../modelling/Location';\r\nimport '@babylonjs/loaders'\r\nimport BabylonModelsManagerCache from './BabylonModelsManagerCache';\r\nimport BabylonMeshesCombiner from './BabylonMeshesCombiner';\r\nconst { throwNotProvided, throwNotOfType } = ParameterErrors;\r\nBABYLON.SceneLoader.loggingLevel = BABYLON.SceneLoader.DETAILED_LOGGING;\r\nconst PROPORTION_PROGRESS_DOWNLOADING_FILE=0.8;\r\nexport default class BabylonModelsManager {\r\n constructor(props) { \r\n const { models, babylonMaterialsManager, babylonScene, modelsRootUrl} = props;\r\n if (!models) throwNotProvided(\"models\");\r\n if (!models instanceof Models) throwNotOfType(\"models\", Models.constructor.name);\r\n this._models = models;\t\r\n\t\tif(!babylonScene)throwNotProvided('babylonScene');\r\n\t\tthis._babylonScene = babylonScene;\r\n\t\tif(!modelsRootUrl)throwNotProvided('modelsRootUrl');\r\n\t\tthis._modelsRootUrl=UrlHelper.makeSureSlashOnEnd(modelsRootUrl);\r\n\t\tthis._babylonModelsManagerCache = new BabylonModelsManagerCache();\r\n\t\tthis._babylonMeshesCombiner = new BabylonMeshesCombiner({scene:babylonScene });\r\n\t\tthis._babylonMaterialsManager=babylonMaterialsManager;\r\n\t\tthis._getModelFileFromModelAndOrCode = this._getModelFileFromModelAndOrCode.bind(this);\r\n\t\tthis._scheduleApplyTexturesToModel = this._scheduleApplyTexturesToModel.bind(this);\r\n\t\tthis._scheduleApplyTextureToMesh = this._scheduleApplyTextureToMesh.bind(this);\r\n\t\tthis._makeBabylonMeshInvisible= this._makeBabylonMeshInvisible.bind(this);\r\n\t\tthis._isCollider = this._isCollider.bind(this);\r\n\t\tthis.getNewMesh = this.getNewMesh.bind(this);\r\n\t\tthis.loadBabylonModel = this.loadBabylonModel.bind(this);\r\n\t\t\r\n }\r\n\tgetNewMesh({code, location, objectIdNodeIdsMappings, loadBabylonModel, quadrantsPath, standardProgressSource}){\r\n\t\tconst self = this;\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tif(!location)location = Location.getDefault();\r\n\t\t\tconst model = this._models.getModelByCode(code);\r\n\t\t\tif(!model)throw new Error(`Model with code ${code} doesnt exist in models json file`);\r\n\t\t\tconst modelFile = this._getModelFileFromModelAndOrCode(model, code);\r\n\t\t\tif(!self._babylonModelsManagerCache.has(modelFile.fileName)){\r\n\t\t\t\tself.loadBabylonModel({code, location, modelFile, model, objectIdNodeIdsMappings, quadrantsPath, standardProgressSource})\r\n\t\t\t\t.then(babylonModel=>{\r\n\t\t\t\t\tif(standardProgressSource)standardProgressSource.progressProportion=1;\r\n\t\t\t\t\tresolve(babylonModel);\r\n\t\t\t\t}).catch(reject);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tthrow new Error('should not be here atm');\r\n\t\t\tconst existingBabylonModel = self._babylonModelsManagerCache.get(modelFile.fileName);\r\n\t\t\tconst babylonModel = existingBabylonModel.clone();\r\n\t\t\tbabylonModel.setLocation(location);\r\n\t\t\tresolve(babylonModel);\r\n\t\t});\r\n\t}\r\n\tloadBabylonModel({code, location, modelFile, model, objectIdNodeIdsMappings, quadrantsPath, standardProgressSource}){\r\n\t\tconst self = this;\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\t//const root = new BABYLON.TransformNode();\r\n\t\t\tconst promiseGetQuadrants = AssetsManager.getQuadrants(quadrantsPath);\r\n\t\t\tBABYLON.SceneLoader.ImportMesh(null, modelFile.rootUrl, modelFile.fileName, this._babylonScene.scene,\r\n\t\t\t\t(babylonMeshes, particleSystems, skeletons)=>{\r\n\t\t\t\t\ttry{\r\n\t\t\t\t\t\t/*babylonMeshes.forEach(babylonMesh => {\r\n\t\t\t\t\t\t\tif (babylonMesh.parent)return;\r\n\t\t\t\t\t\t\tbabylonMesh.parent = root;\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\t*/\r\n\t\t\t\t\t\t//self._applyTextures(model, this._babylonMaterialsManager, babylonMeshes).then(()=>{\r\n\t\t\t\t\t\tpromiseGetQuadrants.then((quadrants)=>{\r\n\t\t\t\t\t\t\tconst babylonModel = new BabylonModel({root:null, babylonMeshes, particleSystems,\r\n\t\t\t\t\t\t\tskeletons, code, location, quadrants, objectIdNodeIdsMappings});\r\n\t\t\t\t\t\t\tconsole.log(this._babylonScene);\r\n\t\t\t\t\t\t\tthis._babylonScene.babylonModelAdded(babylonModel);\r\n\t\t\t\t\t\t\tconsole.log('did quadrants promise');\r\n\t\t\t\t\t\t\tconsole.log(quadrants);\r\n\t\t\t\t\t\t\tself._babylonModelsManagerCache.add(modelFile.fileName, babylonModel);\r\n\t\t\t\t\t\t\tif(standardProgressSource)standardProgressSource.progressProportion=1;\r\n\t\t\t\t\t\t\tresolve(babylonModel);\r\n\t\t\t\t\t\t}).catch(reject);\r\n\t\t\t\t\t\t//}).catch(reject);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcatch(err){\r\n\t\t\t\t\t\treject(err);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t(progress)=>{\r\n\t\t\t\t\tif(!standardProgressSource)return;\r\n\t\t\t\t\tconst progressProportion = progress.loaded*PROPORTION_PROGRESS_DOWNLOADING_FILE/progress.total;\r\n\t\t\t\t\tstandardProgressSource.progressProportion= progressProportion;\r\n\t\t\t\t},\r\n\t\t\t\t(scene, message)=>{\r\n\t\t\t\t\treject(new Error(message));\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t\t});\r\n\t}\r\n\t_combineMeshesByMaterial(){\r\n\r\n\t}\r\n _applyTextures(model, materialsManager, babylonMeshes) {\r\n return new Promise((resolve, reject) => { \r\n this._scheduleApplyTexturesToModel(model, babylonMeshes, materialsManager);\r\n resolve();\r\n });\r\n }\r\n _scheduleApplyTexturesToModel(model, babylonMeshes, materialsManager) {\r\n const meshes = model.meshes;\r\n for (var index = 0; index < babylonMeshes.length; index++) {\r\n const babylonMesh = babylonMeshes[index];\r\n if (this._isCollider(babylonMesh)) {\r\n\t\t\t\tthis._makeBabylonMeshInvisible(babylonMesh, materialsManager);\r\n\t\t\t\tcontinue;\r\n }\r\n\t\t\tconst mesh = meshes.getByName(babylonMesh.name);\r\n\t\t\tlet materialName;\r\n\t\t\tconst hasMesh = mesh!==undefined&&mesh!==null;\r\n\t\t\tif(hasMesh){\r\n\t\t\t\tmaterialName = mesh.material;\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\tif(babylonMesh.material===null)continue;\r\n\t\t\t\tmaterialName = babylonMesh.material.name;\r\n\t\t\t}\r\n\t\t\tthis._scheduleApplyTextureToMesh(materialName, babylonMesh, materialsManager);\r\n }\r\n }\r\n _makeBabylonMeshInvisible(babylonMesh, materialsManager) {\r\n babylonMesh.material = materialsManager.getInvisibleMaterial();\r\n }\r\n _scheduleApplyTextureToMesh(materialName, babylonMesh, materialsManager) {\r\n materialsManager.getBabylonMaterialByName(materialName).then((babylonMaterial) => {\r\n babylonMesh.material = babylonMaterial;\r\n }).catch(console.error);\r\n }\r\n\t_getModelFileFromModelAndOrCode(model, code){\r\n\t\tconst modelRelativePath = model.relativePath;\r\n\t\tif(modelRelativePath){\r\n\t\t\tconst suffix = UrlHelper.removeStartSlash(modelRelativePath);\r\n\t\t\tconst url = `${this._modelsRootUrl}${suffix}`;\r\n\t\t\treturn new ModelFile({code:code, url:url}); \r\n\t\t}\r\n\t\treturn new ModelFile({code:code, rootUrl:this._modelsRootUrl, fileName:`${code}.gbx`}); \r\n\t}\r\n _isCollider(babylonMesh) {\r\n const name = babylonMesh.name;\r\n return name === 'Collider' || name === 'collider';\r\n }\r\n}","import React, { Component } from \"react\";\r\nimport * as BABYLON from '@babylonjs/core';\r\n/*import { Engine } from \"@babylonjs/core/Engines/engine\";\r\nimport { Scene } from \"@babylonjs/core/scene\";\r\nimport { ArcRotateCamera } from \"@babylonjs/core/Cameras/arcRotateCamera\";\r\nimport { Vector3 } from \"@babylonjs/core/Maths/math.vector\";\r\nimport { HemisphericLight } from \"@babylonjs/core/Lights/hemisphericLight\";\r\nimport { SceneLoader } from \"@babylonjs/core/Loading/sceneLoader\";\r\nimport { CubeTexture } from \"@babylonjs/core/Materials/Textures/cubeTexture\";\r\nimport { EnvironmentHelper } from \"@babylonjs/core/Helpers/environmentHelper\";\r\n*/\r\nimport { SceneInstrumentation } from \"@babylonjs/core/Instrumentation/sceneInstrumentation\";\r\n// required imports\r\nimport \"@babylonjs/core/Loading/loadingScreen\";\r\nimport \"@babylonjs/core/Materials/standardMaterial\";\r\nimport \"@babylonjs/core/Materials/Textures/Loaders/envTextureLoader\";\r\n\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport Iterator from '../core/Iterator';\r\nimport FrequencyLimitedCallback from '../core/FrequencyLimitedCallback';\r\nconst { throwNotProvided } = ParameterErrors;\r\nclass BabylonScene {\r\n constructor(props) {\r\n const { onReadyToAddSceneComponents } = props;\r\n this._rendering = false;\r\n this._scene = null;\r\n if (!onReadyToAddSceneComponents) throwNotProvided('onReadyToAddSceneComponents');\r\n\t\tthis._onReadyToAddSceneComponents = onReadyToAddSceneComponents;\r\n this.defaultCamerasAndLight = this.defaultCamerasAndLight.bind(this);\r\n this._onWindowResize = this._onWindowResize.bind(this);\r\n this.startRendering = this.startRendering.bind(this);\r\n this.stopRendering = this.stopRendering.bind(this);\r\n this.setRendering = this.setRendering.bind(this);\r\n this._rendeLoop = this._rendeLoop.bind(this);\r\n this.babylonModelAdded = this.babylonModelAdded.bind(this);\r\n this._babylonModelDisposed = this._babylonModelDisposed.bind(this);\r\n this.fromRotationMatrixToRef = this.fromRotationMatrixToRef.bind(this);\r\n this._updateVisibleObjects = this._updateVisibleObjects.bind(this);\r\n this._cameraPositionOrRotationChanged = this._cameraPositionOrRotationChanged.bind(this);\r\n this.dispose = this.dispose.bind(this);\r\n this._setScalingRotationAndPosition = this._setPositionRotationAndScaling.bind(this);\r\n this.setNTimesInitialCameraRadius = this.setNTimesInitialCameraRadius.bind(this);\r\n\t\tthis._babylonModels=[];\r\n\t\tthis._updateVisibleObjectsFrequencyLimitedCallback = new FrequencyLimitedCallback({frequencyHz:6});\r\n\t\tthis._canvas = document.createElement('canvas');\r\n this._canvas.style.width = '100%';\r\n\t\tthis._canvas.style.height = '100%';\r\n this._engine = new BABYLON.Engine(this._canvas, true);\r\n this._scene = new BABYLON.Scene( this._engine);\r\n\t\tconst sceneInstrumentation = new SceneInstrumentation(this._scene);\r\n\t\tsetInterval(()=>console.log('n draw calls: '+sceneInstrumentation.drawCallsCounter.current), 3000);\r\n window.addEventListener(\"resize\", this._onWindowResize, false);\r\n\t\tsetTimeout(()=>{\r\n\t\t\t this._engine.resize();\r\n\t\t\tthis._onReadyToAddSceneComponents();\r\n\t\t}, 0);\r\n }\r\n\tbabylonModelAdded(babylonModel){\r\n\t\tbabylonModel.addEventListener('disposed', this._babylonModelDisposed);\r\n\t\tthis._babylonModels.push(babylonModel);\r\n\t}\r\n\t_babylonModelDisposed(e){\r\n\t\tconst {babylonModel}=e;\r\n\t\tconst index = this._babylonModels.indexOf(babylonModel);\r\n\t\tif(index<0)return;\r\n\t\tthis._babylonModels.splice(index, 1);\r\n\t}\r\n\tget element(){\r\n\t\treturn this._canvas;\r\n\t}\r\n get scene() {\r\n return this._scene;\r\n }\r\n get canvas() {\r\n return this._canvas;\r\n }\r\n\tget camera(){\r\n\t\treturn this._camera;\r\n\t}\r\n defaultCamerasAndLight(params) {\r\n\t\tparams = params||{attachCameraControls:true}\r\n //this._scene.createDefaultCameraOrLight(true, true, params.attachCameraControls);\r\n this._scene.createDefaultEnvironment();\r\n\t\tsetInterval(()=>{\r\n\t\tthis._scene.createDefaultLight();\r\n this._scene.lights[0].intensity = 20;\r\n\t\t});\r\n\t\tthis._camera = new BABYLON.FreeCamera(\"camera\", BABYLON.Vector3.Zero(), this._scene);\r\n this._initialCameraRadius = this._camera.radius;\r\n }\r\n setNTimesInitialCameraRadius(n) {\r\n\t\tconsole.log('this._camera.radius');\r\n\t\tconsole.log(this._camera.radius);\r\n this._camera.radius = this._initialCameraRadius * n;\r\n }\r\n\t\r\n\tsetCameraPosition(position){\r\n\t\tthis._camera.position = position;\r\n\t\tthis._cameraPositionOrRotationChanged();\r\n\t}\r\n\taddInPlace(scaledDirection){\r\n\t\tthis._camera.position.addInPlace(scaledDirection);\r\n\t\tthis._cameraPositionOrRotationChanged();\r\n\t}\r\n\tfromRotationMatrixToRef(rotationMatrix){\r\n\t\tBABYLON.Quaternion.FromRotationMatrixToRef(rotationMatrix, this._camera.rotationQuaternion);\r\n\t\tthis._cameraPositionOrRotationChanged();\r\n\t}\r\n\tgetCameraPosition(){\r\n\t\treturn this._camera.position;\r\n\t}\r\n startRendering() {\r\n this.setRendering(true);\r\n }\r\n stopRendering() {\r\n this.setRendering(false);\r\n }\r\n setRendering(value) {\r\n if (!(this._rendering ^ value)) return;\r\n this._rendering = value;\r\n if (value) {\r\n this._engine.runRenderLoop(this._rendeLoop);\r\n return;\r\n }\r\n this._engine.stopRenderLoop(this._rendeLoop);\r\n }\r\n\t_cameraPositionOrRotationChanged(){\r\n\t\tthis._updateVisibleObjectsFrequencyLimitedCallback.trigger(this._updateVisibleObjects);\r\n\t}\r\n\t_updateVisibleObjects(){\r\n\t\tif(window.objectIdsToShow){\r\n\t\t\tfor(var babylonModel of this._babylonModels){\r\n\t\t\t\tconsole.log(window.objectIdsToShow);\r\n\t\t\t\tbabylonModel.setVisibleObjects(window.objectIdsToShow);\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif(window.setAllObjectsVisible){\r\n\t\t\t\t\r\n\t\t\tfor(var babylonModel of this._babylonModels){\r\n\t\t\t\tbabylonModel.setAllObjectsVisible();\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tlet objectIdsToShow = [];\r\n\t\tconst {x, y, z}=this._camera.position;\r\n\t\tconst eulerAngles = this._camera.rotationQuaternion.toEulerAngles();\r\n\t\tconst yawRadians =-eulerAngles.y, pitchRadians=-eulerAngles.x;\r\n\t\tconsole.log(yawRadians);\r\n\t\tconsole.log(pitchRadians);\r\n\t\tfor(var babylonModel of this._babylonModels){\r\n\t\t\tconst objectIdsToShow = babylonModel.quadrants.getObjectIds({yawRadians, pitchRadians, x, y, z});\r\n\t\t\tconsole.log(objectIdsToShow);\r\n\t\t\tbabylonModel.setVisibleObjects(objectIdsToShow);\r\n\t\t}\r\n\t}\r\n _setPositionRotationAndScaling(root, position, rotation, scaling) {\r\n root.position = new BABYLON.Vector3(position.x, position.y, position.z);\r\n root.rotation = new BABYLON.Vector3(rotation.x, rotation.y, rotation.z); \r\n root.scaling = new BABYLON.Vector3(scaling.x, scaling.y, scaling.z);\r\n }\r\n _scheduleApplyTextureToMesh(mesh, babylonMesh, materialsManager) {\r\n materialsManager.getBabylonMaterialByName(mesh.material).then((babylonMaterial) => {\r\n babylonMesh.material = babylonMaterial;\r\n }).catch(console.error);\r\n }\r\n _rendeLoop() {\r\n this._scene.render();\r\n }\r\n _onWindowResize = event => {\r\n this._engine.resize();\r\n };\r\n\tdispose(){\r\n window.removeEventListener(\"resize\", this._onWindowResize, false);\r\n\t}\r\n}\r\nexport default BabylonScene;","import React, { Component } from 'react';\r\nimport './SitePlan3D.css';\r\nimport ModelRefs from '../modelling/ModelRefs';\r\nimport SitePlan3DViewModel from '../view_models/SitePlan3DViewModel';\r\nimport SitePlan3DView from '../views/3d/SitePlan3DView';\r\nimport Slider from './Slider';\r\nimport IconButton from './IconButton';\r\nimport HashSource from '../core/HashSource';\r\nimport BabylonModelsManager from '../modelling/BabylonModelsManager';\r\nimport Models from '../modelling/Models';\r\nimport BabylonScene from '../modelling/BabylonScene';\r\nimport GroupedCallbacks from '../core/GroupedCallbacks';\r\nimport Urls from '../urls/Urls';\r\nimport Dialog from './Dialog';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nconst { throwNotProvided } = ParameterErrors;\r\n\r\nexport default class SitePlan3D extends Component {\r\n\t\r\n constructor(props) {\r\n super(props);\r\n\t\tconst {hide, getInsertedMenuItemsHandler, getInsertedMenuItemsAtEndHandler, getConfiguration}=props;\r\n\t\tthis._getConfiguration= getConfiguration;\r\n\t\tthis.hide = hide;\r\n\t\tthis._getInsertedMenuItemsHandler = getInsertedMenuItemsHandler;\r\n this.load = this.load.bind(this);\r\n this.setVisible = this.setVisible.bind(this);\r\n this._load = this._load.bind(this);\r\n this._displayErrorDialog = this._displayErrorDialog.bind(this);\r\n this._retryLoad = this._retryLoad.bind(this);\r\n this._retryLoadWithLowerResolution = this._retryLoadWithLowerResolution.bind(this);\r\n this._elementRef = React.createRef();\r\n this.state = {visible:false};\r\n\t\tthis._groupedCallbacksLoad = null;\r\n\t\tthis._currentDialog = null;\r\n\t\tthis._insertedMenuItemsRemoveHandle = null;\r\n }\r\n\tload(siteJson){\r\n\t\tthis._siteJson = siteJson;\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tif(!this._groupedCallbacksLoad){\r\n\t\t\t\tthis._groupedCallbacksLoad = new GroupedCallbacks();\r\n\t\t\t\tsetTimeout(this._load,0);\r\n\t\t\t}\r\n\t\t\tthis._groupedCallbacksLoad.then(resolve);\r\n\t\t\tthis._groupedCallbacksLoad.catch(reject);\r\n\t\t});\r\n\t}\r\n\t_load(){\r\n\t\tconst sitePlan3DViewModel = new SitePlan3DViewModel({siteJson:this._siteJson, configuration:this._getConfiguration()});\r\n\t\tlet rootView;\r\n\t\tconst babylonScene = new BabylonScene({onReadyToAddSceneComponents:()=>{\r\n\t\t\trootView.initialize()\r\n\t\t\t.then(this._groupedCallbacksLoad.doThen)\r\n\t\t\t.catch((err)=>{\r\n\t\t\t\tconsole.error(err);\r\n\t\t\t\tthis._groupedCallbacksLoad.doCatch(err);\r\n\t\t\t\tthis._groupedCallbacksLoad= null;\r\n\t\t\t\tthis._displayErrorDialog();\r\n\t\t\t});\r\n\t\t}});\r\n\t\tconst babylonModelsManager = new BabylonModelsManager({modelRefs:this._modelRefs, models:this._siteJson.models,\r\n\t\t\tbabylonScene, modelsRootUrl:Urls.getAssetsForSite(this._getConfiguration().siteSlug) });\r\n\t\trootView = new SitePlan3DView({model:sitePlan3DViewModel, element:this._elementRef.current, babylonScene:babylonScene, babylonModelsManager:babylonModelsManager});\r\n\t}\r\n\t_displayErrorDialog({retry, retryWithLowerResolution}){\r\n\t\tthis._currentDialog = Dialog.create({\r\n\t\t\ttitle:'Error', \r\n\t\t\tclassName:'brochure-generation-result-dialog error',\r\n\t\t\tmessage:'Failed to load :(',\r\n\t\t\toptions:[\r\n\t\t\t\t{text:'Retry', callback:this._retryLoad}, \r\n\t\t\t\t{text:'Retry with lower resolution', callback:this._retryLoadWithLowerResolution},\r\n\t\t\t\t{text:'Cancel', callback:this.hide}\r\n\t\t\t]}\r\n\t\t);\r\n\t}\r\n\t_retryLoad(){\r\n\t\tthis._load();\r\n\t}\r\n\t_retryLoadWithLowerResolution(){\r\n\t\tthis._load();\r\n\t}\r\n\tsetVisible(value){\r\n\t\tthis._insertedMenuItemsRemoveHandle?.dispose();\r\n\t\tthis._insertedMenuItemsRemoveHandle = null;\r\n\t\tif(value){\r\n\t\t\tthis._insertedMenuItemsRemoveHandle = this._getInsertedMenuItemsHandler().registerMenuItems([\r\n\t\t\t\t\t()\r\n\t\t\t\t]\r\n\t\t\t);\r\n\t\t}\r\n\t\tthis.setState({visible:value});\r\n\t}\r\n render() {\r\n\t\tconst className = 'site-plan-3d '+(this.state.visible?'visible':'');\r\n return (\r\n
    \r\n
    \r\n );\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport './Hotspot.css';\r\nimport stopEventPropagation from '../ui_core/stopEventPropagation';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nconst{throwNotProvided, throwNotOfType}=ParameterErrors;\r\nexport default class Hotspot{\r\n\tconstructor(props){\r\n\t\tconst self = this;\r\n\t\tconst {scene360Hotspot, scene360, marzipanoScene, getIconUrlFromRelativePath, onClick}=props;\r\n\t\tthis._scene360Hotspot = scene360Hotspot;\r\n\t\tthis._scene360 = scene360;\r\n\t\tthis._callbackClick = onClick;\r\n\t\tthis._iconUrl = getIconUrlFromRelativePath(scene360Hotspot.iconRelativePath);\r\n\t\tthis._eulerAngles = scene360Hotspot.eulerAngles;\r\n\t\tthis._pointingAtEulerAngles = scene360Hotspot.pointingAtEulerAngles;\r\n\t\tconst rotateToCompensate = scene360Hotspot.rotateToCompensate;\r\n\t\tif(rotateToCompensate&&(!this._pointingAtEulerAngles))\r\n\t\t\tthrowNotProvided('pointingAtEulerAngles');\r\n\t\tconst rotation = this._eulerAngles.rollRadians;\r\n\t\tthis._handleClick= this._handleClick.bind(this);\r\n\t\tthis._setTransform= this._setTransform.bind(this);\r\n\t\tthis._handleClick = this._handleClick.bind(this);\r\n\t\tthis._calculateCompensatedRotation= this._calculateCompensatedRotation.bind(this);\r\n\t\tthis._setToRotate= this._setToRotate.bind(this);\r\n\t\tconst element = document.createElement('div');\r\n\t\telement.classList.add(\"hotspot\");\r\n\t\tif(scene360Hotspot.className)\r\n\t\t\telement.classList.add(scene360Hotspot.className);\r\n\t\t\r\n\t\tconst iconElement = document.createElement('img');\r\n\t\ticonElement.classList.add(\"icon\");\r\n\t\ticonElement.classList.add(\"hotspot-icon\");\r\n\t\ticonElement.addEventListener('click', this._handleClick);\r\n\t\ticonElement.src = this._iconUrl;\r\n\t\tthis._iconElement = iconElement;\r\n\t\t\r\n\t\tconst tooltipElement = document.createElement('div');\r\n\t\ttooltipElement.classList.add(\"hotspot-tooltip\");\r\n\t\ttooltipElement.classList.add(\"hotspot-tooltip\");\r\n\t\t//tooltipElement.innerHTML = target;\r\n\t\t\r\n\t\telement.appendChild(iconElement);\r\n\t\telement.appendChild(tooltipElement);\r\n\t\t\r\n\t\tthis._element = element;\r\n\t\t\r\n\t\tstopEventPropagation(this._element);\r\n\t\tthis._cosPitchRadians = Math.cos(this._eulerAngles.pitchRadians);\r\n\t\tthis._hotspot = marzipanoScene.hotspotContainer().createHotspot(element, { yaw: this._eulerAngles.yawRadians, pitch:this._eulerAngles.pitchRadians});\r\n\t\tthis._setTransform(rotateToCompensate?this._calculateCompensatedRotation():this._eulerAngles.roll);\r\n\t\tif(rotateToCompensate){\r\n\t\t\tthis._setToRotate();\r\n\t\t}\r\n\t}\r\n\tget centerPosition(){\r\n\t\tconst rect = this._element.getBoundingClientRect();\r\n\t\treturn [rect.left+(this._element.offsetWidth/2), rect.top+(this._element.offsetHeight/2)];\r\n\t}\r\n\tget scene360Hotspot(){\r\n\t\treturn this._scene360Hotspot;\r\n\t}\r\n\tget scene360(){\r\n\t\treturn this._scene360;\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n\t_setToRotate(){\r\n\t\tconst self = this;\r\n\t\tconst originalUpdate = this._hotspot._update.bind(this._hotspot);\r\n\t\tconst pointingAtEulerAngles=this._pointingAtEulerAngles;\r\n\t\tthis._hotspot._update = function(){\r\n\t\t\tconst xYMarker = this._position;\r\n\t\t\tconst xYPointingAt = this._view.coordinatesToScreen({yaw:pointingAtEulerAngles.yawRadians,\r\n\t\t\t\tpitch:pointingAtEulerAngles.pitchRadians});\t\t\t\r\n\t\t\tif(xYMarker===null)return;\r\n\t\t\tif(xYPointingAt==null||xYPointingAt.x===null||xYPointingAt.y===null)return;\r\n\t\t\tconst angleRadians = (Math.PI/2) +Math.atan2((xYPointingAt.y - xYMarker.y), (xYPointingAt.x - xYMarker.x));\r\n\t\t\tself._setTransform(angleRadians);\r\n\t\t\toriginalUpdate();\r\n\t\t};\r\n\t}\r\n\t_calculateCompensatedRotation(){\r\n\t\t//const a = Math.sin( this._eulerAngles.pitchRadians);\r\n\t\treturn this._eulerAngles.rollRadians-(this._hotspot._view._yaw);\r\n\t}\r\n\t_setTransform(rotationRadians){\r\n\t\tvar transformProperties = [ '-ms-transform', '-webkit-transform', 'transform' ];\r\n\t\tfor (var i = 0; i < transformProperties.length; i++) {\r\n\t\t\tvar property = transformProperties[i];\r\n\t\t\tthis._iconElement.style[property] = 'rotate(' + rotationRadians + 'rad)';\r\n\t\t}\r\n\t}\r\n\t_handleClick(){\r\n\t\tthis._callbackClick(this);\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport Iterator from '../core/Iterator';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport stopEventPropagation from '../ui_core/stopEventPropagation';\r\nimport Marzipano from 'marzipano';\r\nimport Hotspot from './Hotspot';\r\nimport eventEnable from '../core/eventEnable';\r\nimport './View360.css';\r\nconst{throwNotProvided}=ParameterErrors;\r\nexport default class View360 extends Component {\r\n\tconstructor(props){\r\n\t\tconst {getIconUrlFromRelativePath, onClickHotspot, children, mapHotspotTypeToFactory}=props;\r\n\t\tsuper(props);\r\n\t\teventEnable(this);\r\n\t\tthis._children = children;\r\n\t\tthis._mapHotspotTypeToFactory = mapHotspotTypeToFactory===undefined||mapHotspotTypeToFactory===null?{}:mapHotspotTypeToFactory;\r\n\t\tif(getIconUrlFromRelativePath===undefined||getIconUrlFromRelativePath===null)\r\n\t\t\tthrowNotProvided('getIconUrlFromRelativePath');\r\n\t\tthis._getIconUrlFromRelativePath=getIconUrlFromRelativePath;\r\n\t\tthis._callbackClickHotspot = onClickHotspot;\r\n\t\tthis._viewer360Ref = React.createRef();\r\n\t\tthis._createImageUrlSources= this._createImageUrlSources.bind(this);\r\n\t\tthis._createLayers = this._createLayers.bind(this);\r\n\t\tthis._handleSceneTransitionUpdate = this._handleSceneTransitionUpdate.bind(this);\r\n\t\tthis._createMarzipanoScene = this._createMarzipanoScene.bind(this);\r\n\t\tthis._createTileUrl = this._createTileUrl.bind(this);\r\n\t\tthis._sourceFromTile = this._sourceFromTile.bind(this);\r\n\t\tthis._createHotspots = this._createHotspots.bind(this);\r\n\t\tthis._createHotspotFromFactory= this._createHotspotFromFactory.bind(this);\r\n\t\tthis.loadScene= this.loadScene.bind(this);\r\n\t\tthis._handleSceneTransitionDone = this._handleSceneTransitionDone.bind(this);\r\n\t\tthis._handleHotspotClick= this._handleHotspotClick.bind(this);\r\n\t\tthis._hookUpdateEvent= this._hookUpdateEvent.bind(this);\r\n\t\tthis._setCameraDirectionEulerAngles = this._setCameraDirectionEulerAngles.bind(this);\r\n\t\tthis._cancelCurrentLoadScene = null;\r\n\t\tthis.state = {};\r\n\t}\r\n\t\r\n componentDidMount(){\r\n const viewerOptions = {\r\n stageType: 'webgl',\r\n controls: {\r\n mouseViewMode: 'drag' // drag|qtvr\r\n },\r\n stage: {\r\n antialias: true,\r\n preserveDrawingBuffer: true,\r\n generateMipmaps: false\r\n }\r\n }\r\n\t\tconst viewerElement = this._viewer360Ref.current;\r\n this._marzipanoViewer = new Marzipano.Viewer(viewerElement, viewerOptions);\r\n this._limiter = Marzipano.RectilinearView.limit.traditional(1024, 120*Math.PI/180, 120*Math.PI/180);\r\n\t}\r\n\t_createMarzipanoScene(scene360, cameraDirectionEulerAngles){\r\n\t\tconst imageUrlSources = this._createImageUrlSources(scene360);\r\n\t\tconst rectilinearView = new Marzipano.RectilinearView({yaw:cameraDirectionEulerAngles?cameraDirectionEulerAngles.yawRadians:undefined}, this._limiter );\r\n\t\tconst marzipanoScene = this._marzipanoViewer.createEmptyScene({view: rectilinearView});\r\n\t\tif(this._unhookCurrentUpdateEvent){\r\n\t\t\tthis._unhookCurrentUpdateEvent();\r\n\t\t\tthis._unhookCurrentUpdateEvent = null;\r\n\t\t}\r\n\t\tthis._unhookCurrentUpdateEvent = this._hookUpdateEvent(\r\n\t\t\tthis._marzipanoViewer, marzipanoScene, scene360.cameraEulerAngles);\r\n\t\tthis._createLayers(marzipanoScene, imageUrlSources, scene360.getLevels());\r\n\t\tthis._createHotspots(marzipanoScene, scene360);\r\n\t\treturn marzipanoScene;\r\n\t}\r\n\t_hookUpdateEvent(marzipanoViewer, marzipanoScene, eulerAngles){\r\n\t\tconst self = this;\r\n\t\tconst oldUpdate = marzipanoViewer._renderLoop._boundLoop;\r\n\t\tconst newLoop = function(props){\r\n\t\t\toldUpdate(props);\r\n\t\t\tconst yaw = marzipanoScene._view._yaw-((eulerAngles?eulerAngles.yawRadians:0) + 1.57079);\r\n\t\t\tself.dispatchEvent({type:'scenemoved', yaw:yaw});\r\n\t\t};\r\n\t\tmarzipanoViewer._renderLoop._boundLoop = newLoop;\r\n\t\treturn ()=>{\r\n\t\t\tmarzipanoViewer._renderLoop._boundLoop = oldUpdate;\r\n\t\t};\r\n\t}\r\n\t/*\r\n\t\t*/\r\n\t_createTileUrl(face, z, x, y){\r\n\t\treturn `${face}/${z}/${y}/${x}.jpg`;\r\n\t}\r\n\t_createImageUrlSources(scene360){\r\n\t\tconst imageUrlSources = [];\r\n\t\tscene360.layers.forEach((scene360Layers)=>{\r\n\t\t\tscene360Layers.choices.forEach((scene360LayerChoice)=>{\r\n\t\t\t\tconst imageUrlSource = new Marzipano.ImageUrlSource((tile)=>this._sourceFromTile(\r\n\t\t\t\t\ttile, scene360, scene360Layers, scene360LayerChoice\r\n\t\t\t\t));\r\n\t\t\t\timageUrlSources.push(imageUrlSource);\r\n\t\t\t});\r\n\t\t}); \r\n\t\treturn imageUrlSources;\t\t\r\n\t}\r\n\t_sourceFromTile(tile, scene360, scene360Layer, scene360LayerChoice){\r\n\t\tlet urlPrefix = `${scene360.urlPrefix}${scene360Layer.slug}/`;\r\n\t\tif(scene360LayerChoice.slug!==undefined&&scene360LayerChoice.slug!==null)\r\n\t\t\turlPrefix+=`${scene360LayerChoice.slug}/`;\r\n\t\tlet res;\r\n\t\t//if (tile.z === 0) {\r\n\t\t//\tvar mapY = 'bfrlud'.indexOf(tile.face) / 6;\r\n\t\t//\tres = { url: `${urlPrefix}preview.png`, rect: { x: 0, y: mapY, width: 1, height: 1/6 }};\r\n\t\t//}\r\n\t\t//else\r\n\t\t\tres = { url: `${urlPrefix}${this._createTileUrl(tile.face, tile.z, tile.x, tile.y)}` };\t\r\n\t\treturn res;\r\n\t}\r\n\t_createLayers(marzipanoScene, imageUrlSources, levels){\r\n const marzipanoCubeGeometry = new Marzipano.CubeGeometry(levels);\r\n\t\tfor (const imageUrlSource of imageUrlSources) {\r\n\t\t\tmarzipanoScene.createLayer({\r\n\t\t\t\tsource: imageUrlSource,\r\n\t\t\t\tgeometry: marzipanoCubeGeometry,\r\n\t\t\t\tpinFirstLevel: true\r\n\t\t\t});\r\n\t\t};\r\n\t}\r\n\t_createHotspots(marzipanoScene, scene360){\r\n\t\tconst self = this;\r\n\t\tscene360.hotspots.forEach(function(scene360Hotspot) {\r\n\t\t\tif(scene360Hotspot.enabled===false)return;\r\n\t\t\tif(scene360Hotspot.fromFactory){\r\n\t\t\t\tthis._createHotspotFromFactory({scene360Hotspot:scene360Hotspot, scene360:scene360, marzipanoScene:marzipanoScene, \r\n\t\t\t\tgetIconUrlFromRelativePath:self._getIconUrlFromRelativePath,\r\n\t\t\t\tonClick:self._handleHotspotClick});\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tnew Hotspot({scene360Hotspot:scene360Hotspot, scene360:scene360, marzipanoScene:marzipanoScene, \r\n\t\t\tgetIconUrlFromRelativePath:self._getIconUrlFromRelativePath,\r\n\t\t\t\tonClick:self._handleHotspotClick});\r\n\t\t});\r\n\t}\r\n\t_createHotspotFromFactory(scene360Hotspot){\r\n\t\tconst factoryMethod = this._mapHotspotTypeToFactory[scene360Hotspot.type];\r\n\t\treturn factoryMethod(scene360Hotspot);\r\n\t}\r\n\t_handleHotspotClick(hotspot){\r\n\t\tconsole.log(hotspot);\r\n\t\tthis._callbackClickHotspot(hotspot);\r\n\t}\r\n\r\n\t_handleSceneTransitionDone() {\r\n\t\tif (this._marzipanoViewer.listScenes().length <= 1) return;\r\n\t\tthis._marzipanoViewer.destroyScene(this._marzipanoViewer.listScenes().shift());\r\n\t}\r\n\r\n loadScene(params){\r\n\t\tconst {scene360, cameraDirectionEulerAngles}=params;\r\n\t\tif(!scene360)throwNotProvided('scene360');\r\n\t\tconst self = this;\r\n\t\tthis._cancelCurrentLoadScene&&this._cancelCurrentLoadScene();\r\n\t\tlet cancelled = false;\r\n\t\tthis._cancelCurrentLoadScene =()=>{cancelled = true;};\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tconst doRejectBecauseCancelled = ()=>{\r\n\t\t\t\treject(new Error('cancelled because another scene then started loading'));\r\n\t\t\t};\r\n\t\t\tif(cancelled)return doRejectBecauseCancelled();\r\n\t\t\tthis._marzipanoViewer.updateSize();\r\n\t\t\tconst marzipanoScene = this._createMarzipanoScene(scene360, cameraDirectionEulerAngles);\r\n\t\t\tconst layers = marzipanoScene.listLayers();\r\n\t\t\tconst iteratorLayers = new Iterator(layers);\r\n\t\t\tconst next = ()=>{\r\n\t\t\t\tif(cancelled)return doRejectBecauseCancelled();\r\n\t\t\t\tif(!iteratorLayers.hasNext()){\r\n\t\t\t\t\tself._switchToScene(marzipanoScene).then(()=>{\r\n\t\t\t\t\t\tif(cancelled)return doRejectBecauseCancelled();\r\n\t\t\t\t\t\tself._marzipanoViewer.updateSize();\r\n\t\t\t\t\t\tresolve();\r\n\t\t\t\t\t}).catch(reject);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tconst layer = iteratorLayers.next();\r\n\t\t\t\tthis._loadLayer(layer)\r\n\t\t\t\t\t.then(next).catch(reject);\r\n\t\t\t};\r\n\t\t\tnext();\r\n\t\t});\r\n\t}\r\n\t_setCameraDirectionEulerAngles(marzipanoScene, eulerAngles){\r\n\t\t\tmarzipanoScene.setYaw(eulerAngles.yawRadians);\r\n\t}\r\n\t_switchToScene(marzipanoScene){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\ttry{\r\n\t\t\t\tmarzipanoScene.switchTo({\r\n\t\t\t\t\ttransitionDuration: 1000,\r\n\t\t\t\t\ttransitionUpdate: this._handleSceneTransitionUpdate\r\n\t\t\t\t},()=>{\r\n\t\t\t\t\tthis._handleSceneTransitionDone();\r\n\t\t\t\t\tresolve();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tcatch(err){\r\n\t\t\t\treject(err);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t_handleSceneTransitionUpdate(val, newScene, oldScene) {\r\n\t\tconst layers = newScene.listLayers();\r\n\t\tlayers.forEach(function(layer, index) {\r\n\t\t\tconst newVal = (val * layers.length) + (index+1 - layers.length);\r\n\t\t\tconst opacity = Marzipano.util.clamp(newVal, 0, 1);\r\n\t\t\tlayer.mergeEffects({ opacity: opacity });\r\n\t\t});\r\n\t\tnewScene._hotspotContainer.domElement().style.opacity = val;\r\n\t\t//newScene._hotspotContainer.domElement().style.display=\"block\";\r\n\t}\r\n _loadLayer(layer){\r\n\t\tconst textureStore = layer.textureStore();\r\n\t\treturn new Promise ((resolve, reject)=>{\r\n\t\t\ttextureStore.addEventListener('textureLoad', tile => {\r\n\t\t\t\tresolve();\r\n\t\t\t});\r\n\t\t\ttextureStore.addEventListener('textureError', reject);\r\n\t\t});\r\n\t}\r\n\trender() {\r\n\t\treturn (
    \r\n\t\t\t{this._children}\r\n\t\t
    );\r\n\t}\r\n}\r\n//TODO check where viewere.destroy was and add in.\r\n","import React, { Component } from 'react';\r\nimport IconButton from './IconButton';\r\nimport GroupedCallbacks from '../core/GroupedCallbacks';\r\nimport AssetsManager from '../assets_management/AssetsManager';\r\nimport Once from '../core/Once';\r\nimport Urls from '../urls/Urls';\r\nimport ParameterError from '../errors/ParameterError';\r\nimport EfficientMoveCycle from '../ui_core/EfficientMoveCycle';\r\nimport './MiniMap.css';\r\nimport isMobile from '../core/isMobile';\r\nconst{ throwNotProvided}=ParameterError;\r\nexport default class MiniMap extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {configuration}=props;\r\n\t\tthis._configuration = configuration;\r\n\t\tthis._useCurrentPositionIcon = configuration.useCurrentPositionIcon;\r\n\t\tthis._elementRef = React.createRef();\r\n\t\tthis._mapImageRef = React.createRef();\r\n\t\tthis._currentPositionMarkerRef= React.createRef();\r\n\t\tthis.toggleShowing = this.toggleShowing.bind(this);\r\n\t\tthis.load = this.load.bind(this);\r\n\t\tthis.hide = this.hide.bind(this);\r\n\t\tthis.setAtOutside360 = this.setAtOutside360.bind(this);\r\n\t\tthis._setVisible = this._setVisible.bind(this);\r\n\t\tthis._handleClickButtonClose = this._handleClickButtonClose.bind(this);\r\n\t\tthis._setCurrentPositionMarkerLeftPercent = this._setCurrentPositionMarkerLeftPercent.bind(this);\r\n\t\tthis._setCurrentPositionMarkerTopPercent = this._setCurrentPositionMarkerTopPercent.bind(this);\r\n\t\tthis._setCurrentPositionMarkerVisibile = this._setCurrentPositionMarkerVisibile.bind(this);\r\n\t\tthis.setAngleRadians = this.setAngleRadians.bind(this);\r\n\t\tthis._setupResize = this._setupResize.bind(this);\r\n\t\tthis._mapImageError = this._mapImageError.bind(this);\r\n\t\tthis._mapImageLoaded = this._mapImageLoaded.bind(this);\r\n\t\tthis._groupedCallbacksMapImageLoad = new GroupedCallbacks();\r\n\t\tthis._siteJson = null;\r\n\t\tthis._visible = false;\r\n\t\tthis._fixedAspectRatio = null;\r\n\t}\r\n\tcomponentDidMount(){\r\n\t\tconst mapImageElement = this._mapImageRef.current;\r\n\t\tconst element = this._elementRef.current;\r\n\t\tmapImageElement.addEventListener('load', this._mapImageLoaded);\r\n\t\tmapImageElement.addEventListener('error', this._mapImageError);\r\n\t\tthis._setupResize(element);\r\n\t}\r\n\t_setupResize(element){\r\n\t\tlet offsets=null, maxWidth = null;\r\n\t\tconst efficientMoveCycle = new EfficientMoveCycle({ \r\n\t\t\telement, stopPropagation:false, preventDefault:true, \r\n\t\t\tonStart:(e)=>{\r\n\t\t\t\tif(this._fixedAspectRatio==null)\r\n\t\t\t\t\tthis._fixedAspectRatio = element.offsetWidth/element.offsetHeight;\r\n\t\t\t\toffsets= [element.offsetWidth - e.x, element.offsetHeight + e.y];\r\n\t\t\t\telement.style.maxWidth = 'none';\r\n\t\t\t\tmaxWidth= element.parentNode.offsetWidth - 24;\r\n\t\t\t}, onMove:(e)=>{\r\n\t\t\t\tconst x = e.x, y=e.y;\r\n\t\t\t\tconst widthFromHeight = (offsets[1] -y )*this._fixedAspectRatio;\r\n\t\t\t\tconst heightFromWidth = (x + offsets[0])/this._fixedAspectRatio;\r\n\t\t\t\tconst l = (widthFromHeight*widthFromHeight)+ (heightFromWidth*heightFromWidth);\r\n\t\t\t\tconst aspectRatioSquared = this._fixedAspectRatio*this._fixedAspectRatio;\r\n\t\t\t\tlet height = Math.sqrt(l /(1+aspectRatioSquared));\r\n\t\t\t\tlet width = height * this._fixedAspectRatio;\r\n\t\t\t\tif(width>maxWidth){\r\n\t\t\t\t\twidth = maxWidth;\r\n\t\t\t\t\theight = width / this._fixedAspectRatio;\r\n\t\t\t\t}\r\n\t\t\t\telse{\r\n\t\t\t\t\tif(width < 100)\r\n\t\t\t\t\t\twidth = 100;\r\n\t\t\t\t\theight = width / this._fixedAspectRatio;\r\n\t\t\t\t}\r\n\t\t\t\telement.style.width = String(width)+'px';\r\n\t\t\t\telement.style.height = String(height)+'px';\r\n\t\t\t}, onEnd:()=>{} , friendlyXY:true\r\n\t\t});\r\n\t}\r\n\t\r\n\tsetAtOutside360(outside360UniqueId){\r\n\t\tconst markerPositionProportion = this._siteJson?.birdsEyeViews.getDefault().getMarkerPositionForOutside360(outside360UniqueId);\r\n\t\tif(!markerPositionProportion)return;\r\n\t\tthis._setCurrentPositionMarkerLeftPercent(markerPositionProportion.x*100);\r\n\t\tthis._setCurrentPositionMarkerTopPercent(markerPositionProportion.y*100);\r\n\t\tthis._setCurrentPositionMarkerVisibile(true);\r\n\t\t\r\n\t}\r\n\tsetAngleRadians(radians){\r\n\t\tconst offset = this._configuration.miniMapConeOffset!==undefined?this._configuration.miniMapConeOffset:radians+(2*Math.PI/2);\r\n\t\tthis._currentPositionMarkerRef.current.style.transform = `translate(-50%,-50%) rotate(${offset}rad)`;\r\n\t}\r\n\ttoggleShowing(){\r\n\t\tthis._setVisible(!this._visible);\r\n\t}\r\n\thide(){\r\n\t\tthis._setVisible(false);\r\n\t\t//this._setCurrentPositionMarkerVisibile(false);\r\n\t}\r\n\tshow(){\r\n\t\tthis._setVisible(true);\r\n\t\t//this._setCurrentPositionMarkerVisibile(false);\r\n\t}\r\n\tload({siteJson}){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tthis._siteJson = siteJson;\r\n\t\t\tif(!siteJson){\r\n\t\t\t\tthrowNotProvided('siteJson');\r\n\t\t\t}\r\n\t\t\tconst imageRelativePath =Urls.getAssetsForSite(this._configuration.siteSlug)+siteJson.birdsEyeViews.getDefault().imageRelativePath;\r\n\t\t\tthis._mapImageRef.current.src = imageRelativePath;\r\n\t\t\tthis._groupedCallbacksMapImageLoad.then(()=>{\r\n\t\t\t\tthis._setVisible(true);\r\n\t\t\t\tresolve();\r\n\t\t\t});\r\n\t\t\tthis._groupedCallbacksMapImageLoad.catch(reject);\r\n\t\t});\r\n\t}\r\n\t_mapImageError(){\r\n\t\tthis._groupedCallbacksMapImageLoad.doCatch(new Error('Error loading map image'));\r\n\t}\r\n\t_mapImageLoaded(){\r\n\t\tthis._groupedCallbacksMapImageLoad.doThen();\r\n\t}\r\n\t_setVisible(visible){\r\n\t\tif(visible){\r\n\t\t\tthis._element.classList.add('visible');\r\n\t\t}\r\n\t\telse \r\n\t\t\tthis._element.classList.remove('visible');\r\n\t\tthis._visible = visible;\r\n\t}\r\n\t_setCurrentPositionMarkerLeftPercent(leftPercent){\r\n\t\tthis._currentPositionMarkerElement.style.left=`${leftPercent}%`;\r\n\t}\r\n\t_setCurrentPositionMarkerTopPercent(topPercent){\r\n\t\tthis._currentPositionMarkerElement.style.top=`${topPercent}%`;\r\n\t}\r\n\t_setCurrentPositionMarkerVisibile(visible){\r\n\t\tif(visible)\r\n\t\t\tthis._currentPositionMarkerElement.classList.add('visible');\r\n\t\telse \r\n\t\t\tthis._currentPositionMarkerElement.classList.remove('visible');\r\n\t}\r\n\tget _element(){\r\n\t\treturn this._elementRef.current;\r\n\t}\r\n\tget _currentPositionMarkerElement(){\r\n\t\treturn this._currentPositionMarkerRef.current;\r\n\t}\r\n\t_handleClickButtonClose(){\r\n\t\tthis.hide();\r\n\t}\r\n\trender() {\r\n\t\tconst currentPosition = this._useCurrentPositionIcon\r\n\t\t\t?(
    \r\n\t\t\t\t\r\n\t\t\t
    )\r\n\t\t\t:(\r\n\t\t\t\tthis._configuration.miniMapConeMarkerEnabled\r\n\t\t\t\t?\r\n\t\t\t\t\r\n\t\t\t\t(
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    )\r\n\t\t\t\t:\r\n\t\t\t\t(
    \r\n\t\t\t\t\t
    \r\n\t\t\t\t
    )\r\n\t\t\t);\r\n\t\treturn (
    \r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t{currentPosition}\r\n\t\t
    );\r\n\t}\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport Hotspot from '../360_react/Hotspot';\r\nconst{throwNotProvided, throwNotOfType}=ParameterErrors;\r\nexport default class InfoHotspot extends Hotspot{\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst self = this;\r\n\t\tconst {scene360Hotspot, scene360, marzipanoScene, getIconUrlFromRelativePath, onClick}=props;\r\n\t\tthis._expand = this._expand.bind(this);\r\n\t\tthis._callbackClick= this._expand;\r\n\t\tconst expandedTextElement = document.createElement('div');\r\n\t\texpandedTextElement.classList.add('expanded-text');\r\n\t\texpandedTextElement.textContent = scene360Hotspot.text;\r\n\t\tthis.element.appendChild(expandedTextElement);\r\n\t}\r\n\t_expand(){\r\n\t}\r\n\tstatic create(props){\r\n\t\treturn (props)=>new InfoHotspot(props);\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport './Spinner.css';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nconst {throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class Hider extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props)\r\n\t\tconst{handles, invertHandles, children}=props;\r\n\t\tthis._children = children;\r\n\t\tif(invertHandles===undefined||invertHandles===null)\r\n\t\t\tthis._invertHandles = false;\r\n\t\telse \r\n\t\t\tthis._invertHandles = invertHandles;\r\n\t\t\r\n\t\tthis._handles = handles;\r\n\t\tthis._handlesChanged = this._handlesChanged.bind(this);\r\n\t\thandles.addEventListener('change', this._handlesChanged);\r\n\t\tthis.state={visible:false};\r\n\t}\r\n\t_handlesChanged(e){\r\n\t\tconst visible = this._invertHandles?(!e.hasHandles):e.hasHandles;\r\n\t\tthis.setState({visible:visible});\r\n\t}\r\n\trender() {\r\n\t\tlet className =\"hider\";\r\n\t\tif(this.state.visible)\r\n\t\t\tclassName+=\" visible\";\r\n\t\treturn (
    \r\n\t\t\t{this._children}\r\n\t\t\t
    );\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport stopEventPropagation from '../ui_core/stopEventPropagation';\r\nimport Marzipano from 'marzipano';\r\nimport View360 from '../360_react/View360';\r\nimport MiniMap from './MiniMap';\r\nimport './SitePlan360.css';\r\nimport { faCaretRight, faCaretLeft, faCaretUp, faCaretDown} from '@fortawesome/free-solid-svg-icons';\r\nimport IconButton from './IconButton';\r\nimport HashSource from '../core/HashSource';\r\nimport GroupedCallbacks from '../core/GroupedCallbacks';\r\nimport HotspotType from '../enums/HotspotType';\r\nimport InfoHotspot from '../hotspots/InfoHotspot';\r\nimport Handles from '../core/Handles';\r\nimport Spinner from './Spinner';\r\nimport Hider from './Hider';\r\nimport Urls from '../urls/Urls';\r\nimport EulerAngles from '../geometry/EulerAngles';\r\nimport AssetsManager from '../assets_management/AssetsManager';\r\nconst{throwNotProvided}=ParameterErrors;\r\nconst TWO_PI = Math.PI*2;\r\nexport default class SitePlan360 extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {getInsertedMenuItemsHandler, getInsertedMenuItemsAtEndHandler, onBack, goToConfigurator, \r\n\t\t\tshowPlotMenu, showPlotDetailedInformation, configuration}=props;\r\n\t\tthis._configuration = configuration;\r\n\t\tif(!getInsertedMenuItemsHandler)throwNotProvided('getInsertedMenuItemsHandler');\r\n\t\tif(!getInsertedMenuItemsAtEndHandler)throwNotProvided('getInsertedMenuItemsAtEndHandler');\r\n\t\tthis._showPlotMenu = showPlotMenu;\r\n\t\tthis._showPlotDetailedInformation = showPlotDetailedInformation;\r\n\t\tthis._view360Ref = React.createRef();\r\n\t\tthis._miniMapRef= React.createRef();\r\n\t\t//this._iframeRef = React.createRef();\r\n\t\tthis.state = {visible:true};\r\n\t\tthis._handleClickBack= this._handleClickBack.bind(this);\r\n\t\tthis._normalizeRadians= this._normalizeRadians.bind(this);\r\n\t\tthis._callbackBack = onBack;\r\n\t\tthis._callbackGoToConfigurator = goToConfigurator;\r\n\t\tthis._getIconUrlFromRelativePath = this._getIconUrlFromRelativePath.bind(this);\r\n\t\tthis._handleClickHotspot= this._handleClickHotspot.bind(this);\r\n\t\tthis._handleToggleMinimap= this._handleToggleMinimap.bind(this);\r\n\t\tthis.setVisible= this.setVisible.bind(this);\r\n\t\tthis._getCameraDirectionEulerAngles = this._getCameraDirectionEulerAngles.bind(this);\r\n\t\tthis.whenLoaded = this.whenLoaded.bind(this);\r\n\t\tthis._sceneMoved = this._sceneMoved.bind(this);\r\n\t\tthis._spinnerHandles = new Handles();\r\n\t\tthis._create_SwitchToOutside360_LexicalClosure = this._create_SwitchToOutside360_LexicalClosure.bind(this);\r\n\t\tthis._getInsertedMenuItemsHandler = getInsertedMenuItemsHandler;\r\n\t\tthis._getInsertedMenuItemsAtEndHandler = getInsertedMenuItemsAtEndHandler;\r\n\t\tthis._groupedCallbacksLoaded = new GroupedCallbacks();\r\n\t\tthis._insertedMenuItemsRemoveHandle = null;\r\n\t\tthis._insertedMenuItemsAtEndRemoveHandle = null;\r\n\t\tthis._mapHotspotTypeToFactory={[HotspotType.INFO]:InfoHotspot.create};\r\n\t}\r\n\tload(siteJson){\r\n\t\tthis._siteJson = siteJson;\r\n\t\tthis._loaded = false;\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tthis._view360Ref.current.loadScene({scene360:siteJson.outside360.getDefaultScene()}).catch(reject).then(()=>{\r\n\t\t\t\tthis._switchToOutside360 = this._create_SwitchToOutside360_LexicalClosure(siteJson).bind(this);\r\n\t\t\t\tthis._miniMapRef.current.load({\r\n\t\t\t\t\tsiteJson:siteJson\r\n\t\t\t\t})\r\n\t\t\t\t.then(()=>{\r\n\t\t\t\t\tthis._loaded=true;\r\n\t\t\t\t\tthis._groupedCallbacksLoaded.doThen();\r\n\t\t\t\t}).catch((err)=>{\r\n\t\t\t\t\tthis._groupedCallbacksLoaded.doCatch(err);\r\n\t\t\t\t\treject(err);\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t\tresolve();\r\n\t\t});\r\n\t}\r\n\twhenLoaded(){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tif(this._loaded)\r\n\t\t\t{\r\n\t\t\t\tresolve();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tthis._groupedCallbacksLoaded.then(resolve).catch(reject);\r\n\t\t});\r\n\t}\r\n\tswitchToOutside360(outside360UniqueId, cameraDirectionEulerAngles){\r\n\t\tconst spinnerHandle = this._spinnerHandles.take();\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tconst doReject = (err)=>{\r\n\t\t\t\tconsole.error(err);\t\r\n\t\t\t\tspinnerHandle.dispose();\r\n\t\t\t\treject(err);\r\n\t\t\t};\r\n\t\t\tthis.whenLoaded().then(()=>{\r\n\t\t\t\tconst doResolve=()=>{\r\n\t\t\t\t\tspinnerHandle.dispose();\r\n\t\t\t\t\tresolve();\r\n\t\t\t\t};\r\n\t\t\t\tif(!this._switchToOutside360){\r\n\t\t\t\t\tdoReject(new Error('no scene loaded'));\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tthis._switchToOutside360(outside360UniqueId, cameraDirectionEulerAngles)\r\n\t\t\t\t\t.then(doResolve).catch(doReject);\r\n\t\t\t}).catch(doReject);\r\n\t\t});\r\n\t}\r\n\t_create_SwitchToOutside360_LexicalClosure(siteJson){\r\n\t\tconst scenes = siteJson.outside360.getScene360s();\r\n\t\treturn (outside360ToMoveToUniqueId, cameraDirectionEulerAngles)=>{\r\n\t\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\t\tconst scene = scenes.filter(scene=>{\r\n\t\t\t\t\t\treturn scene.uniqueId===outside360ToMoveToUniqueId\r\n\t\t\t\t})[0];\r\n\t\t\t\tif(scene===undefined||scene===null)\r\n\t\t\t\t\tthrow new Error(`No scene for outside360ToMoveToUniqueId ${outside360ToMoveToUniqueId}`);\r\n\t\t\t\tif(!cameraDirectionEulerAngles)\r\n\t\t\t\t\tcameraDirectionEulerAngles = this._getCameraDirectionEulerAngles(scene, this._previousScene);\t\r\n\t\t\t\tthis._previousScene=scene;\r\n\t\t\t\tthis._miniMapRef.current.setAtOutside360(outside360ToMoveToUniqueId);\r\n\t\t\t\tthis._view360Ref.current.loadScene({\r\n\t\t\t\t\tscene360:scene, \r\n\t\t\t\t\tcameraDirectionEulerAngles:cameraDirectionEulerAngles\r\n\t\t\t\t})\r\n\t\t\t\t.then(()=>{\r\n\t\t\t\t\tresolve();\r\n\t\t\t\t}).catch(reject);\r\n\t\t\t});\r\n\t\t};\r\n\t}\r\n\t_getCameraDirectionEulerAngles(scene360, previousScene360){\r\n\t\tconst otherScenesNotCountingOneCameFrom = [];\r\n\t\tconst hotspotsForScene = scene360.hotspots;\r\n\t\tlet yawRadianss = [];\r\n\t\tlet hadNoOutside360MoveHotspots=true;\r\n\t\tlet previousHotspot = null;\r\n\t\tif(!previousScene360)return null;\r\n\t\tfor(var i=0; i{\r\n\t\t\t\tconst normalized = this._normalizeRadians(y);\r\n\t\t\t\tconsole.log(normalized);\r\n\t\t\t\tyawRadians+=normalized;\r\n\t\t\t});\r\n\t\t\tyawRadians = yawRadians/yawRadianss.length;\r\n\t\t}\r\n\t\tif(previousHotspot&&yawRadianss.length>1){\r\n\t\t\tlet directionOfTravel = this._normalizeRadians(Math.PI+previousHotspot.eulerAngles.yawRadians);\r\n\t\t\tlet differenceInDirectionOfTravelAndYawRadians = yawRadians- directionOfTravel;\r\n\t\t\tdifferenceInDirectionOfTravelAndYawRadians = Math.sign(differenceInDirectionOfTravelAndYawRadians)*differenceInDirectionOfTravelAndYawRadians;\r\n\t\t\tif(differenceInDirectionOfTravelAndYawRadians>Math.PI/2)\r\n\t\t\t\tyawRadians = yawRadians+Math.PI;\r\n\t\t}\r\n\t\treturn new EulerAngles({yawRadians:yawRadians, pitchRadians:0, rollRadians:0});\r\n\t}\r\n\t_normalizeRadians(value){\r\n\t\t\tvalue = value%TWO_PI;\r\n\t\t\twhile(value<0)value+=TWO_PI;\r\n\t\t\treturn value;\r\n\t}\r\n\tsetVisible(value){\r\n\t\t//this._iframeRef.current.src='about:blank';\r\n\t\t//setTimeout(()=>{\r\n\t\t//this._iframeRef.current.src=\"http://futurium.tech/Clients/vX922Pvm/VistryGroup/FletcherRise360/ExternalV3/\" ;\r\n\t\t//}, 0);\r\n\t\tthis._insertedMenuItemsRemoveHandle?.dispose();\r\n\t\tthis._insertedMenuItemsRemoveHandle = null;\r\n\t\tthis._insertedMenuItemsAtEndRemoveHandle?.dispose();\r\n\t\tthis._insertedMenuItemsAtEndRemoveHandle=null;\r\n\t\tif(value){\r\n\t\t\tthis._insertedMenuItemsRemoveHandle = this._getInsertedMenuItemsHandler().registerMenuItems([\r\n\t\t\t\t\t()\r\n\t\t\t\t]\r\n\t\t\t);\r\n\t\t\tthis._insertedMenuItemsAtEndRemoveHandle = this._getInsertedMenuItemsAtEndHandler().registerMenuItems([\r\n\t\t\t\t\t()\r\n\t\t\t\t]\r\n\t\t\t);\r\n\t\t}\r\n\t\tthis.setState({visible:value});\r\n\t}\r\n componentDidMount(){\r\n this._view360Ref.current.addEventListener('scenemoved', this._sceneMoved);\r\n\t}\r\n\t_sceneMoved(e){\r\n\t\tthis._miniMapRef.current.setAngleRadians(e.yaw);\r\n\t}\r\n\t_handleClickBack(){\r\n\t\tthis._callbackBack();\r\n\t}\r\n\t_handleToggleMinimap(){\r\n\t\tconst minimap = this._miniMapRef.current;\r\n\t\tminimap.toggleShowing();\r\n\t}\r\n\t_getIconUrlFromRelativePath(iconRelativePath){\r\n\t\treturn Urls.assets+iconRelativePath;\r\n\t}\r\n\t_handleClickHotspot(hotspot){\r\n\t\tconst {scene360Hotspot}=hotspot;\r\n\t\tswitch(scene360Hotspot.type){\r\n\t\t\tcase HotspotType.OUTSIDE_360_MOVE:\r\n\t\t\t\tthis._switchToOutside360(scene360Hotspot.outside360ToMoveToUniqueId).then(()=>{}).catch(console.error);\r\n\t\t\t\tbreak;\r\n\t\t\tcase HotspotType.OUTSIDE_360_CONFIGURATOR:\r\n\t\t\t\tconst configuration = this._configuration;\r\n\t\t\t\tif(configuration.showPanelOnClickOutside360ConfiguratorIcon){\r\n\t\t\t\t\tconst siteJsonUnitPlot = this._siteJson.getPlotByNumber(scene360Hotspot.plotNumber)\r\n\t\t\t\t\tif(configuration.onClickPlotSelectionMenuEntryShowDetailedElseSmallPlotInfo){\r\n\t\t\t\t\t\tthis._showPlotDetailedInformation(siteJsonUnitPlot);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis._showPlotMenu(siteJsonUnitPlot, false, hotspot.centerPosition);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tthis._callbackGoToConfigurator(scene360Hotspot.plotNumber);\r\n\t\t\t\treturn;;\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error('Not implemented for type '+scene360Hotspot.type);\r\n\t\t\t\t\r\n\t\t}\r\n\t}\t\t\r\n\t//\r\n\t\t\r\n\trender() {\r\n\t\tconst className = 'site-plan-360 '+(this.state.visible?'visible':'');\r\n\t\tconst hiderClassName='hider'+(this.state.hideBehindSpinner?' visible':'');\r\n\treturn (
    \r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\t\r\n\t\t\t
    );\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport './Configurator.css';\r\nimport Urls from '../urls/Urls';\r\nimport IconButton from './IconButton';\r\nimport HashSource from '../core/HashSource';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nconst{throwNotProvided}=ParameterErrors;\r\nexport default class Configurator extends Component{\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst{hide, getInsertedMenuItemsHandler, configuration}=props;\r\n\t\tthis._configuration = configuration;\r\n\t\tif(!getInsertedMenuItemsHandler)throwNotProvided('getInsertedMenuItemsHandler');\r\n\t\tthis._callbackHide = hide;\r\n\t\tthis.showConfiguratorForPlot = this.showConfiguratorForPlot.bind(this);\r\n\t\tthis.closeCurrentConfigurator = this.closeCurrentConfigurator.bind(this);\r\n\t\tthis._handleClickButtonBack = this._handleClickButtonBack.bind(this);\r\n\t\tthis._iframeLoaded= this._iframeLoaded.bind(this);\t\r\n\t\tthis._nextIframeKey = this._nextIframeKey.bind(this);\r\n\t\tthis._getInsertedMenuItemsHandler = getInsertedMenuItemsHandler;\r\n\t\tthis.state = {iframes:null, visible:false};\r\n\t\tthis._iframeCount =0;\r\n\t}\r\n\tcomponentDidMount(){\r\n\t\t\r\n\t}\r\n\tsetVisible(value){\r\n\t\tthis._insertedMenuItemsRemoveHandle?.dispose();\r\n\t\tthis._insertedMenuItemsRemoveHandle = null;\r\n\t\tif(value){\r\n\t\t\tthis._insertedMenuItemsRemoveHandle = this._getInsertedMenuItemsHandler().registerMenuItems([\r\n\t\t\t\t\t()\r\n\t\t\t\t]\r\n\t\t\t);\r\n\t\t}\r\n\t\tthis.setState({visible:value});\r\n\t}\r\n\tshowConfiguratorForPlot(options){\r\n\t\tthis.closeCurrentConfigurator();\r\n\t\tconst {plot, roomName}=options\r\n\t\tconst roomStr = roomName?`#${roomName}`:'';\r\n\t\tlet url = Urls.getConfiguratorUrlForPlot(plot, this._configuration);\r\n\t\tif(roomStr&&url){\r\n\t\t\turl+=roomStr;\r\n\t\t}\r\n\t\tconst iframe = (\r\n\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t
    );\r\n\t\tthis.setState({iframes:[iframe]});\r\n\t}\r\n\t_handleClickButtonBack(){\r\n\t\tthis.closeCurrentConfigurator();\r\n\t\tthis._callbackHide();\r\n\t}\r\n\t_iframeLoaded(e){\r\n\t}\r\n\tcloseCurrentConfigurator(){\r\n\t\tthis.setState({iframes:[]});\r\n\t}\r\n\t_nextIframeKey(){\r\n\t\treturn `iframe_${(this._iframeCount++)}`;\r\n\t}\r\n\trender(){\r\n\t\tconst className=\"configurator\"+(this.state.visible?\" visible\":\"\");\r\n\t\treturn (
    {this.state.iframes}
    );\r\n\t}\r\n}\r\n","const SitePlanVisibleType={BIRDS_EYE_VIEW:'birdsEyeView', OUTSIDE_360:'outside360', CONFIGURATOR:'configurator', THREE_D:'threeD'};\r\nSitePlanVisibleType.getCssClassName = function(val){\r\n\tswitch(val){\r\n\t\tcase SitePlanVisibleType.BIRDS_EYE_VIEW:\r\n\t\t\treturn 'birds-eye-view-visible';\r\n\t\tcase SitePlanVisibleType.OUTSIDE_360:\r\n\t\t\treturn 'outside-360-visible';\r\n\t\tcase SitePlanVisibleType.CONFIGURATOR:\r\n\t\t\treturn 'configurator-visible';\r\n\t\tcase SitePlanVisibleType.THREE_D:\r\n\t\t\treturn 'three-d-visible';\r\n\t}\r\n\treturn '';\r\n}\r\nexport default SitePlanVisibleType;\t\t","import React, { Component } from 'react';\r\nimport PopupMenu from './PopupMenu';\r\nimport EdgeLocation from '../ui_core/EdgeLocation';\r\nimport Star from './Star';\r\nimport Spinner from './Spinner';\r\nimport './PlotMenu.css';\r\nimport UrlHelper from '../core/UrlHelper';\r\nimport Once from '../core/Once';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport PropertyBindingFactory from '../mvvm/PropertyBindingFactory';\r\nimport enableBindingToOthers from '../mvvm/enableBindingToOthers';\r\nimport Handles from '../core/Handles';\r\nimport { faStreetView} from '@fortawesome/free-solid-svg-icons';\r\nimport IconButton from './IconButton';\r\nimport PlotStatus from '../site/PlotStatus';\r\nimport Urls from '../urls/Urls';\r\nimport GroupedCallbacks from '../core/GroupedCallbacks';\r\nimport PlotMoreInformationType from '../enums/PlotMoreInformationType';\r\nimport HashSource from '../core/HashSource';\r\nimport isMobile from '../core/isMobile';\r\nconst {throwNotProvided}=ParameterErrors;\r\nconst MIN_TIME_SHOW_SPINNER_MILLISECONDS=500;\r\nconst MAX_TIME_TO_LOAD_IMAGE_BEFORE_SPINNER_DELAY_REQUIRED=20; //This is so that if the image loads very fast because already cached the spinner is never seen.\r\nconst DELAY_BEFORE_SHOW_SPINNER_MILLISECONDS = 1000;\r\nexport default class PlotMenu extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props)\r\n\t\tenableBindingToOthers(this);\r\n\t\tconst {showPlotMoreInformation, onHide, addFavourite, removeFavourite,\r\n\t\tshowStreetView, enterHouse, showBrochureGenerationDialog, showPlotDetailedInformation,\r\n\t\tshowImagesFullScreen, configuration}=props;\r\n\t\tthis._configuration = configuration;\r\n\t\tthis._showPlotDetailedInformation = showPlotDetailedInformation;\r\n\t\tthis._showImagesFullScreen = showImagesFullScreen;\r\n\t\tthis._star = React.createRef();\r\n\t\tthis._imgRef= React.createRef();\r\n\t\tthis._lhsRef= React.createRef();\r\n\t\tthis._callbackOnHide=onHide;\r\n\t\tif(!showPlotMoreInformation)throwNotProvided('showPlotMoreInformation');\r\n\t\tthis._callbackShowPlotMoreInformation = showPlotMoreInformation;\r\n\t\tthis._callbackAddFavourite = addFavourite;\r\n\t\tthis._callbackRemoveFavourite = removeFavourite;\r\n\t\tthis._callbackShowStreetView = showStreetView;\r\n\t\tthis._callbackEnterHouse = enterHouse;\r\n\t\tthis._callbackShowBrochureGenerationDialog = showBrochureGenerationDialog;\r\n\t\tthis._popupMenu = React.createRef();\r\n\t\tthis.setFilteredPlots= this.setFilteredPlots.bind(this);\r\n\t\tthis._getFirstPlotMatchingFilteredPlots= this._getFirstPlotMatchingFilteredPlots.bind(this);\r\n\t\tthis._handleClickMoreInfo= this._handleClickMoreInfo.bind(this);\r\n\t\tthis._handleStarSelectedChanged = this._handleStarSelectedChanged.bind(this);\r\n\t\tthis._handlePlotSelectedChanged = this._handlePlotSelectedChanged.bind(this);\r\n\t\tthis._handleClickPreviousPlot = this._handleClickPreviousPlot.bind(this);\r\n\t\tthis._handleClickNextPlot = this._handleClickNextPlot.bind(this);\r\n\t\tthis._handleImageLoaded= this._handleImageLoaded.bind(this);\r\n\t\tthis._handleImageError= this._handleImageError.bind(this);\r\n\t\tthis._handlePopupMenuHide = this._handlePopupMenuHide.bind(this);\r\n\t\tthis._handleClickShowGallery= this._handleClickShowGallery.bind(this);\r\n\t\tthis._handleClickShowFloorPlan= this._handleClickShowFloorPlan.bind(this);\r\n\t\tthis._handleClickMeaningShowPlotDetailedInformation= this._handleClickMeaningShowPlotDetailedInformation.bind(this);\r\n\t\tthis._handleClickLHS= this._handleClickLHS.bind(this);\r\n\t\tthis._getImgUrl= this._getImgUrl.bind(this);\r\n\t\tthis._handleClickEnterHouse= this._handleClickEnterHouse.bind(this);\r\n\t\tthis.show = this.show.bind(this);\r\n\t\tthis.hide = this.hide.bind(this);\r\n\t\tthis._releasePlotActiveHandle= this._releasePlotActiveHandle.bind(this);\r\n\t\tthis._handleClickShowStreetView = this._handleClickShowStreetView.bind(this);\r\n\t\tthis._handleClickSendBrochure = this._handleClickSendBrochure.bind(this);\r\n\t\tthis._groupedCallbackImageLoaded = new GroupedCallbacks();\r\n\t\tthis._onceClicked = new Once(method=>method());\r\n\t\tthis._currentPlotActiveHandle = null;\r\n\t\tthis._startedShowAt = 0;\r\n\t\tthis._loadingImageHandles = new Handles();\r\n\t\tthis.state={siteJson:null, plot:null};\r\n\t}\r\n\tshow({position, getMouseInSourceBounds, siteJson, plot, unit, untilClickOff}){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tif(!plot)throwNotProvided('plot');\r\n\t\t\tif(plot.unit.plots.length>1){\r\n\t\t\t\tplot = this._getFirstPlotMatchingFilteredPlots(plot.unit.plots);\r\n\t\t\t}\r\n\t\t\tif(!siteJson)throwNotProvided('siteJson');\r\n\t\t\tthis._currentLoadingImageHandle?.dispose();\r\n\t\t\tthis.setState({siteJson:siteJson, plot:plot});\r\n\t\t\tthis._imgRef.current.src='';\r\n\t\t\tthis._imgRef.current.src = this._getImgUrl(plot);\r\n\t\t\tthis._plot = plot;\r\n\t\t\tthis._popupMenu.current.show({position:position, getMouseInSourceBounds:getMouseInSourceBounds, untilClickOff});\r\n\t\t\tthis._releasePlotActiveHandle();\r\n\t\t\tthis._currentPlotActiveHandle?.dispose();\r\n\t\t\tthis._currentPlotActiveHandle=plot.unit.takeActiveHandle();\r\n\t\t\tthis._startedShowAt = new Date().getTime();\r\n\t\t\tlet imgLoaded = false;\r\n\t\t\tconst whenImgLoaded = ()=>{\r\n\t\t\t\timgLoaded = true;\r\n\t\t\t\tthis._currentLoadingImageHandle?.dispose();\r\n\t\t\t};\r\n\t\t\tsetTimeout(()=>{\r\n\t\t\t\tif(imgLoaded) return;\r\n\t\t\t\tthis._currentLoadingImageHandle?.dispose();\r\n\t\t\t\tthis._currentLoadingImageHandle = this._loadingImageHandles.take();\r\n\t\t\t}, DELAY_BEFORE_SHOW_SPINNER_MILLISECONDS);\r\n\t\t\tthis._groupedCallbackImageLoaded.then(()=>{\r\n\t\t\t\twhenImgLoaded();\r\n\t\t\t\tresolve();\r\n\t\t\t}).catch((err)=>{\r\n\t\t\t\twhenImgLoaded();\r\n\t\t\t\treject(err);\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\thide(){\r\n\t\tthis._popupMenu.current.hide();\r\n\t}\r\n\tsetFilteredPlots(value){\r\n\t\tthis._filteredPlots = value;\r\n\t}\r\n\t_getFirstPlotMatchingFilteredPlots(plots){\r\n\t\tif(!this._filteredPlots)return plots[0];\r\n\t\tconst plotsMatchingFilteredPlots = [];\r\n\t\tfor(var plot of plots){\r\n\t\t\tif(this._filteredPlots.indexOf(plot)>=0)\r\n\t\t\t\tplotsMatchingFilteredPlots.push(plot);\r\n\t\t}\r\n\t\tif(plotsMatchingFilteredPlots.length>0)\r\n\t\t{\r\n\t\t\tconst availablePlots = plotsMatchingFilteredPlots.filter(plot=>plot.status===PlotStatus.AVAILABLE);\r\n\t\t\tif(availablePlots.length>0)\r\n\t\t\t\treturn availablePlots[0];\r\n\t\t\tconst comingSoonPlots = plotsMatchingFilteredPlots.filter(plot=>plot.status===PlotStatus.COMING_SOON);\r\n\t\t\tif(comingSoonPlots.length>0)\r\n\t\t\t\treturn comingSoonPlots[0];\r\n\t\t}\r\n\t\treturn plots[0];\r\n\t}\r\n\t_getImgUrl(plot){\r\n\t\tconst relativePath = plot.unit.frontViewImage.getBestEntryToFitWidth(160).relativePath;\r\n\t\treturn `${Urls.getAssetsForSite(this._configuration.siteSlug)}${UrlHelper.removeStartSlash(relativePath)}`;\r\n\t}\r\n\t_handlePopupMenuHide(){\r\n\t\t//this.setState({plot:null});\r\n\t\tthis._currentLoadingImageHandle?.dispose();\r\n\t\tthis._callbackOnHide&&this._callbackOnHide();\r\n\t\tthis._releasePlotActiveHandle();\r\n\t}\r\n\t_handleClickMoreInfo(e){\r\n\t\tthis._stopEventPropagation(e);\r\n\t\tthis._callbackShowPlotMoreInformation(this.state.plot);\r\n\t}\r\n\t_handleStarSelectedChanged(selected){\r\n\t\tthis._stopEventPropagation();\r\n\t\tif(selected)this._callbackAddFavourite(this.state.plot);\r\n\t\telse this._callbackRemoveFavourite(this.state.plot);\r\n\t}\r\n\t_handlePlotSelectedChanged(value){\r\n\t\tif(this._star.current)\r\n\t\t\tthis._star.current.selected=value;\r\n\t}\r\n\t_handleImageLoaded(){\r\n\t\tthis._imgLoading = false;\r\n\t\tconst timeShownSpinnerForMilliseconds = new Date().getTime()-this._startedShowAt;\r\n\t\t//let timeLeftBeforeHideSpinner=0;\r\n\t\tthis._groupedCallbackImageLoaded.doThen();\r\n\t\t/*if(timeShownSpinnerForMilliseconds<=MAX_TIME_TO_LOAD_IMAGE_BEFORE_SPINNER_DELAY_REQUIRED)\r\n\t\t\ttimeLeftBeforeHideSpinner= 0;\r\n\t\telse\r\n\t\t{\t\r\n\t\t\ttimeLeftBeforeHideSpinner = MIN_TIME_SHOW_SPINNER_MILLISECONDS - timeShownSpinnerForMilliseconds;\r\n\t\t\tif(timeLeftBeforeHideSpinner<0)timeLeftBeforeHideSpinner=0;\r\n\t\t}*/\r\n\t\t/*this._currentLoadingImageHandle?.dispose();\r\n\t\tsetTimeout(()=>{\r\n\t\t}, timeLeftBeforeHideSpinner);*/\r\n\t}\r\n\t_handleImageError(e){\r\n\t\tthis._groupedCallbackImageLoaded.doCatch(e);\r\n\t}\r\n\t_handleClickShowStreetView(e){\r\n\t\tthis._stopEventPropagation(e);\r\n\t\tthis.hide();\r\n\t\tthis._callbackShowStreetView({nearPlot:this.state.plot});\r\n\t}\r\n\t_handleClickShowGallery(e){\r\n\t\tthis._onceClicked.trigger(()=>{\r\n\t\t\tthis._stopEventPropagation(e);\r\n\t\t\tthis.hide();\r\n\t\t\tthis._callbackShowPlotMoreInformation(this.state.plot, PlotMoreInformationType.GALLERY);\r\n\t\t});\r\n\t}\r\n\t_handleClickShowFloorPlan(){\r\n\t\tthis._onceClicked.trigger(()=>{\r\n\t\t\tthis.hide();\r\n\t\t\tthis._callbackShowPlotMoreInformation(this.state.plot, PlotMoreInformationType.FLOOR_PLANS);\r\n\t\t});\r\n\t}\r\n\t_handleClickEnterHouse(e){\r\n\t\tthis._stopEventPropagation(e);\r\n\t\tthis.hide();\r\n\t\tthis._callbackEnterHouse(this.state.plot);\r\n\t}\r\n\t_handleClickSendBrochure(e){\r\n\t\tthis._stopEventPropagation(e);\r\n\t\tthis.hide();\r\n\t\tthis._callbackShowBrochureGenerationDialog({plot:this._plot});\r\n\t}\r\n\t_handleClickPreviousPlot(e){\r\n\t\tthis._stopEventPropagation();\r\n\t\tconst currentPlot = this.state.plot;\r\n\t\tconst unit = currentPlot.unit;\r\n\t\tif(!unit)return;\r\n\t\tconst plots = unit.plots;\r\n\t\tlet nextIndex = plots.indexOf(currentPlot)-1;\r\n\t\tif(nextIndex<0)\r\n\t\t\tnextIndex=plots.length-1;\r\n\t\tthis._plot=plots[nextIndex];\r\n\t\tthis.setState({plot:this._plot});\r\n\t}\r\n\t_handleClickNextPlot(e){\r\n\t\tthis._stopEventPropagation();\r\n\t\tconst currentPlot = this.state.plot;\r\n\t\tconst unit = currentPlot.unit;\r\n\t\tif(!unit)return;\r\n\t\tconst plots = unit.plots;\r\n\t\tlet nextIndex = plots.indexOf(currentPlot)+1;\r\n\t\tif(nextIndex>=plots.length)\r\n\t\t\tnextIndex=0;\r\n\t\tthis._plot=plots[nextIndex];\r\n\t\tthis.setState({plot:this._plot});\r\n\t}\r\n\t_handleClickMeaningShowPlotDetailedInformation(e){\r\n\t\tthis._onceClicked.trigger(()=>{\r\n\t\t\tif(!this._configuration.showPlotDetailedInformationOnClickPlotMenu)return;\r\n\t\t\tthis._stopEventPropagation();\r\n\t\t\tthis.hide();\r\n\t\t\tthis._showPlotDetailedInformation(this._plot);\r\n\t\t});\r\n\t}\r\n\t_handleClickLHS(){\r\n\t\tconst plot = this.state.plot;\r\n\t\tlet dynamicImages = [];\r\n\t\tthis._stopEventPropagation();\r\n\t\tconst frontViewImage = plot.unit.frontViewImage;\r\n\t\tif(frontViewImage){\r\n\t\t\tdynamicImages.push(frontViewImage);\r\n\t\t}\r\n\t\tconst streetViewImage = plot.unit.streetViewImage;\r\n\t\tif(streetViewImage)\r\n\t\t\tdynamicImages.push(streetViewImage);\r\n\t\tplot.rooms.getArray().forEach((room)=>{\r\n\t\t\tdynamicImages = dynamicImages.concat(room.images);\r\n\t\t});\r\n\t\tthis._showImagesFullScreen(dynamicImages);\r\n\t}\r\n\t_stopEventPropagation(e){\r\n\t\tif(!e)e=window.event;\r\n\t\te.stopPropagation&&e.stopPropagation();\r\n\t\te.preventDefault&&e.preventDefault();\r\n\t}\r\n\t_releasePlotActiveHandle(){\r\n\t\tif(!this._currentPlotActiveHandle)return;\r\n\t\tthis._currentPlotActiveHandle.dispose();\r\n\t\tthis._currentPlotActiveHandle=null;\r\n\t}\r\n\tcomponentDidUpdate(previousProps, previousState){\r\n\t\tconst oldPlot = previousState.plot;\r\n\t\tconst newPlot = this.state.plot;\r\n\t\tthis.myBindings.reset();\r\n\t\tif(newPlot){\r\n\t\t\tPropertyBindingFactory.standard(this, newPlot, 'selected', this._handlePlotSelectedChanged);\r\n\t\t}\r\n\t}\r\n\trender(){\r\n\t\tconst hasOneOrMoreRoomImages=this.state.plot&&this.state.plot.hasOneOrMoreRoomImages;\r\n\t\tconst nBathroomString = this._configuration.showNBathrooms?` and ${this._plot?.nBathrooms} Bathrooms`:'';\r\n\t\tconst buttons = [];\r\n\t\tif(this._configuration.showMoreInformation)\r\n\t\t\tbuttons.push(());\r\n\t\telse{\r\n\t\t\tconst hasConfiguratorOrTour=this.state.plot&&Urls.getConfiguratorUrlForPlot(this.state.plot, this._configuration);\r\n\t\t\tif(hasConfiguratorOrTour)\r\n\t\t\t\tbuttons.push(());\r\n\t\t\tbuttons.push(());\r\n\t\t\tif(this.state.plot?.unit.plots.length>1){\t\r\n\t\t\t\tbuttons.push(());\r\n\t\t\t\tbuttons.push(());\r\n\t\t\t}\r\n\t\t}\r\n\t\tconst showPrice = (this.state.plot)&&(!this.state.plot.isSold)&&(!this.state.plot.isReserved);\r\n\t\tlet classNameStatus = 'status ';\r\n\t\tif(this.state.plot)\r\n\t\t\tclassNameStatus+=PlotStatus.getCssName(this.state.plot.status);\r\n\t\tconst nBedrooms = this._configuration.hideNBedrooms?null:(\r\n\t\t\t
    {this.state.plot?.nBedrooms} Bedrooms {nBathroomString}
    );\r\n\t\treturn (\r\n\t
    \r\n\t
    \r\n\t\t
    \r\n\t\t\t\r\n\t\t\t\r\n\t\t
    \r\n\t\t
    \r\n\t\t\t
    {this.state.plot?.name}
    \r\n\t\t\t
    Plot \t{this.state.plot?.number}
    \r\n\t\t\t
    {this.state.plot?PlotStatus.getDescription(this.state.plot.status):' '}
    \r\n\t\t\t
    {(!showPrice)||(this.state.plot.price<=0)?' ':this.state.plot.priceString}
    \r\n\t\t\t\t{nBedrooms}\r\n\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t{}}>\r\n\t\t\t\t\r\n\t\t\t
    \r\n\t\t
    \r\n\t
    \r\n\t\t
    \r\n\t\t\t{buttons}\r\n\t\t
    \r\n\t
    \r\n\t
    \t\r\n\t\t
    )\r\n\t}\r\n}\r\n","const BrochureType={\r\n FavouritesAllPlots:1,\r\n Favourites:2,\r\n FavouritesAllHouseTypes:3,\r\n Configurator:4\r\n};\r\nBrochureType.getString = function(brochureType){\r\n\tswitch(brochureType){\r\n\t\tcase BrochureType.FavouritesAllPlots:\r\n\t\t\treturn 'All Plots';\r\n\t\tcase BrochureType.Favourites:\r\n\t\t\treturn 'Favourites';\r\n\t\tcase BrochureType.FavouritesAllHouseTypes:\r\n\t\t\treturn 'All House Types';\r\n\t\tcase BrochureType.Configurator:\r\n\t\t\treturn 'Configurator';\r\n\t\tdefault:\r\n\t\t\tthrow new Error('Not implemented');\r\n\t}\r\n};\r\nexport default BrochureType;","import ParameterErrors from '../errors/ParameterErrors';\r\nimport enableBindingToOthers from '../mvvm/enableBindingToOthers';\r\nimport PropertyBindingFactory from '../mvvm/PropertyBindingFactory';\r\nimport WhenFinishedModifying from '../core/WhenFinishedModifying';\r\nimport Timer from '../core/Timer';\r\nimport BrochureProgressStatus from '../enums/BrochureProgressStatus';\r\nimport BrochureType from '../enums/BrochureType';\r\nimport Tooltip from '../components/Tooltip';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class BrochuresMenuEntry{\t\r\n\tconstructor(params){\r\n\t\tconst { brochureBeingGenerated }=params;\r\n\t\tenableBindingToOthers(this);\r\n\t\tif(!brochureBeingGenerated)throwNotProvided('brochureBeingGenerated');\r\n\t\tthis._brochureBeingGenerated = brochureBeingGenerated;\r\n\t\tthis.dispose = this.dispose.bind(this);\r\n\t\tthis._update = this._update.bind(this);\r\n\t\tthis._whenFinishedModifying = new WhenFinishedModifying({delay:100, callback:this._update});\r\n\t\tthis._brochureProgressStatusChanged = this._brochureProgressStatusChanged.bind(this);\r\n\t\tthis._brochureUrlChanged = this._brochureUrlChanged.bind(this);\r\n\t\tthis._proportionProgressChanged = this._proportionProgressChanged.bind(this);\r\n\t\tthis._updateProgressBarProportion = this._updateProgressBarProportion.bind(this);\r\n\t\tthis._currentBrochureProgressStatusClass = null;\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add('brochures-menu-entry');\r\n\t\tthis._progressElement = document.createElement('div');\r\n\t\tthis._progressElement.classList.add('progress');\r\n\t\tthis._element.appendChild(this._progressElement);\r\n\t\tthis._innerElement = document.createElement('div');\r\n\t\tthis._innerElement.classList.add('inner');\r\n\t\tthis._element.appendChild(this._innerElement);\r\n\t\tthis._textElement = document.createElement('div');\r\n\t\tthis._textElement.classList.add('text');\r\n\t\tthis._innerElement.appendChild(this._textElement);\r\n\t\tthis._handleClick= this._handleClick.bind(this);\r\n\t\tthis._element.addEventListener('click', this._handleClick);\r\n\t\tthis._timerUpdateProgressProportion = new Timer({callback:this._updateProgressBarProportion, delay:500, nTicks:-1});\r\n\t\tthis._timerUpdateProgressProportion.start();\r\n\t\tthis._propertyBindingBrochureProgressStatus = PropertyBindingFactory.standard(\r\n\t\t\tthis, brochureBeingGenerated, 'brochureProgressStatus', this._brochureProgressStatusChanged);\r\n\t\t\t\r\n\t\tthis._propertyBindingBrochureUrl= PropertyBindingFactory.standard(\r\n\t\t\tthis, brochureBeingGenerated, 'brochureUrl', this._brochureUrlChanged);\r\n\t\t\t\r\n\t\tthis._propertyBindingProportionProgress = PropertyBindingFactory.standard(\r\n\t\t\tthis, brochureBeingGenerated, 'proportionProgress', this._proportionProgressChanged);\r\n\t}\r\n\tget brochureGenerationIdentifier(){\r\n\t\treturn this._brochureBeingGenerated.brochureGenerationIdentifier;\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n\t_brochureProgressStatusChanged(){\r\n\t\tthis._changedStatusAtMilliseconds =new Date().getTime();\r\n\t\tthis._whenFinishedModifying.trigger();\r\n\t\tif(this._brochureBeingGenerated.brochureProgressStatus===BrochureProgressStatus.Generated)\r\n\t\t\tthis._timerUpdateProgressProportion.stop();\r\n\t}\r\n\t_brochureUrlChanged(){\r\n\t\tthis._whenFinishedModifying.trigger();\r\n\t}\r\n\t_proportionProgressChanged(){\r\n\t\tthis._whenFinishedModifying.trigger();\r\n\t}\r\n\t_update(){\r\n\t\tthis._updateBrochureProgressStatusClassOnElement();\r\n\t\tthis._updateProgressBarProportion();\r\n\t\tconst text = this._getText();\r\n\t\tthis._textElement.innerHTML = text;\r\n\t}\r\n\t_updateBrochureProgressStatusClassOnElement(){\r\n\t\tif(this._currentBrochureProgressStatusClass)\r\n\t\t\tthis._element.classList.remove(this._currentBrochureProgressStatusClass);\r\n\t\tconst className = BrochureProgressStatus.getClassName(this._brochureBeingGenerated.brochureProgressStatus);\r\n\t\tthis._currentBrochureProgressStatusClass = className;\r\n\t\tthis._element.classList.add(className);\r\n\t}\r\n\t_updateProgressBarProportion(){\r\n\t\tlet progressPercent=0;\r\n\t\tconst millisecondsSinceChangedStatus = new Date().getTime() - this._changedStatusAtMilliseconds ;\r\n\t\tconst neverGetThereProportion = 1-Math.pow(2, -millisecondsSinceChangedStatus/3000);\r\n\t\tswitch(this._brochureBeingGenerated.brochureProgressStatus){\r\n\t\t\tcase BrochureProgressStatus.Queued:\r\n\t\t\t\tprogressPercent=15+(35*neverGetThereProportion);\r\n\t\t\t\tbreak;\r\n\t\t\tcase BrochureProgressStatus.Generating:\r\n\t\t\tconst proportionProgress = this._brochureBeingGenerated.proportionProgress;\r\n\t\t\t\tprogressPercent=50+(50*neverGetThereProportion);\r\n\t\t\t\tbreak;\r\n\t\t\tcase BrochureProgressStatus.Generated:\r\n\t\t\t\tprogressPercent=100;\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error('Not implemented');\r\n\t\t}\r\n\t\tthis._progressElement.style.width=String(progressPercent)+'%';\r\n\t}\r\n\t_getText(){\r\n\t\t\r\n\t\tconst brochureType = this._brochureBeingGenerated.brochureType;\r\n\t\tlet text='';\r\n\t\tswitch(this._brochureBeingGenerated.brochureProgressStatus){\r\n\t\t\tcase BrochureProgressStatus.Queued:\r\n\t\t\t\ttext+='Queued: ';\r\n\t\t\t\tbreak;\r\n\t\t\tcase BrochureProgressStatus.Generating:\r\n\t\t\t\ttext+='Generating: ';\r\n\t\t\t\tbreak;\r\n\t\t\tcase BrochureProgressStatus.Generated:\r\n\t\t\t\ttext+='Download ';\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error('Not implemented');\r\n\t\t}\r\n\t\ttext+=BrochureType.getString(brochureType);\r\n\t\ttext+=' Brochure';\r\n\t\tconst plotNumbers = this._brochureBeingGenerated.plotNumbers;\r\n\t\tif(plotNumbers\r\n\t\t\t&&(plotNumbers.length>0)\r\n\t\t\t&&(brochureType!==BrochureType.FavouritesAllPlots)\r\n\t\t\t&&(brochureType!==BrochureType.FavouritesAllHouseTypes)\r\n\t\t\t)\r\n\t\t\ttext+='
    (Plots '+plotNumbers.join(',')+')
    ';\r\n\t\treturn text;\r\n\t}\r\n\t_handleClick(){\r\n\t\tif(this._brochureBeingGenerated.brochureProgressStatus!==BrochureProgressStatus.Generated){\r\n\t\t\tthis._showDownloadedBrochuresWillAppearHere();\r\n\t\t\treturn;\r\n\t\t}\r\n\t\twindow.open(this._brochureBeingGenerated.brochureUrl, '_blank').focus();\r\n\t}\r\n\tdispose(){\r\n\t\tthis.bindingsHandler.dispose();\r\n\t}\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport ClickedOffManager from '../ui_core/ClickedOffManager';\r\nimport SubMenuHeaderNonReact from '../components/SubMenuHeaderNonReact';\r\nimport BrochuresManager from './BrochuresManager';\r\nimport BrochuresMenuEntry from './BrochuresMenuEntry';\r\nimport MenuType from '../enums/MenuType';\r\nimport './BrochuresMenu.css';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class BrochuresMenu{\t\r\n\tconstructor(params){\r\n\t\tconst{menuManager, getHandlesActivateButton}=params;\r\n\t\tthis._iMenuManager = menuManager;\r\n\t\tthis._getHandlesActivateButton = getHandlesActivateButton;\r\n\t\tthis.show = this.show.bind(this);\r\n\t\tthis.hide = this.hide.bind(this);\r\n\t\tthis._updateNoBrochuresVisibility = this._updateNoBrochuresVisibility .bind(this);\r\n\t\tthis._setNoBrochuresVisible = this._setNoBrochuresVisible.bind(this);\r\n\t\tthis._brochuresBeingGeneratedChanged = this._brochuresBeingGeneratedChanged.bind(this);\r\n\t\tthis._releaseHandleActivateIcon = this._releaseHandleActivateIcon.bind(this);\r\n\t\tthis._removeEntry = this._removeEntry.bind(this);\r\n\t\tthis._addEntryForNewBrochureBeingGenerated = this._addEntryForNewBrochureBeingGenerated.bind(this);\r\n\t\tthis._releaseHandleActivateIcon = this._releaseHandleActivateIcon.bind(this);\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add('brochures-menu');\r\n\t\tthis._element.classList.add('menu');\r\n\t\tthis._subMenuHeader = new SubMenuHeaderNonReact({ title:\"Brochures\", menuManager:menuManager});\r\n\t\tthis._element.appendChild(this._subMenuHeader.element);\r\n\t\tthis._entriesWrapperElement = document.createElement('div');\r\n\t\tthis._entriesWrapperElement.classList.add('entries-wrapper');\r\n\t\tthis._entriesElement = document.createElement('div');\r\n\t\tthis._entriesElement.classList.add('entries');\r\n\t\tthis._element.appendChild(this._entriesWrapperElement);\r\n\t\tthis._entriesWrapperElement.appendChild(this._entriesElement);\r\n\t\tthis._clickedOffManager = new ClickedOffManager({element:this._element, hide:this.hide});\r\n\t\tthis._mapBrochureGenerationIdentifierToEntry = new Map();\r\n\t\tthis._noBrochuresElement = document.createElement('div');\r\n\t\tthis._noBrochuresElement.classList.add('no-brochures');\r\n\t\tthis._noBrochuresElement.innerHTML = 'Downloaded brochures will appear here';\r\n\t\tthis._element.appendChild(this._noBrochuresElement);\r\n\t\tthis._noBrochuresElement.classList.add('visible');\r\n\t\tBrochuresManager.instance.addEventListener('brochuresBeingGeneratedChanged', this._brochuresBeingGeneratedChanged);\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n\tget menuType(){\r\n\t\treturn MenuType.BROCHURES;\r\n\t}\r\n\tshow(params){\r\n\t\tconst scrollToBottom = params?.scrollToBottom;\r\n\t\tthis._element.classList.add('visible');\r\n\t\tthis._iMenuManager.showMe(this);\r\n\t\tthis._clickedOffManager.register();\r\n\t\tthis._releaseHandleActivateIcon();\r\n\t\tthis._handlActivateButton = this._getHandlesActivateButton(MenuType.BROCHURES).take();\r\n\t\tif(scrollToBottom){\r\n\t\t\tthis._entriesWrapperElement.scrollTop = this._entriesWrapperElement.scrollHeight;\r\n\t\t}\r\n\t}\r\n\t_releaseHandleActivateIcon(){\r\n\t\tif(!this._handlActivateButton)return;\r\n\t\tthis._handlActivateButton.dispose();\r\n\t\tthis._handlActivateButton= null;\r\n\t}\r\n\thide(){\r\n\t\tthis._releaseHandleActivateIcon()\r\n\t\tthis._element.classList.remove('visible');\r\n\t\tthis._clickedOffManager.dispose();\r\n\t\tthis._iMenuManager.close();\r\n\t}\r\n\t_brochuresBeingGeneratedChanged(e){\r\n\t\tconst currentBrochureGenerationIdentifiersNotSeen = Array.from(this._mapBrochureGenerationIdentifierToEntry.keys());\r\n\t\tconst brochuresBeingGenerated = e.brochuresBeingGenerated;\r\n\t\tbrochuresBeingGenerated.forEach(brochureBeingGenerated=>{\r\n\t\t\tconst index = currentBrochureGenerationIdentifiersNotSeen.indexOf(brochureBeingGenerated.brochureGenerationIdentifier);\r\n\t\t\tif(index >=0)currentBrochureGenerationIdentifiersNotSeen.splice(index, 1);\r\n\t\t\telse this._addEntryForNewBrochureBeingGenerated(brochureBeingGenerated);\r\n\t\t});\r\n\t\tcurrentBrochureGenerationIdentifiersNotSeen.forEach(brochureGenerationIdentifierNotSeen=>{\r\n\t\t\tconst entry = this._mapBrochureGenerationIdentifierToEntry.get(brochureGenerationIdentifierNotSeen);\r\n\t\t\tif(!entry)return;\r\n\t\t\tthis._removeEntry(entry);\r\n\t\t});\r\n\t}\r\n\t_removeEntry(entry){\r\n\t\tentry.dispose();\r\n\t\tthis._mapBrochureGenerationIdentifierToEntry.delete(entry.brochureGenerationIdentifier);\r\n\t\tthis._entriesElement.removeChild(entry.element);\r\n\t\tthis._updateNoBrochuresVisibility();\r\n\t}\r\n\t_addEntryForNewBrochureBeingGenerated(brochureBeingGenerated){\r\n\t\tconst brochuresMenuEntry = new BrochuresMenuEntry({brochureBeingGenerated:brochureBeingGenerated});\r\n\t\tthis._mapBrochureGenerationIdentifierToEntry.set(brochuresMenuEntry.brochureGenerationIdentifier, brochuresMenuEntry);\r\n\t\tthis._entriesElement.appendChild(brochuresMenuEntry.element);\r\n\t\tthis._updateNoBrochuresVisibility();\r\n\t}\r\n\t_updateNoBrochuresVisibility(){\r\n\t\tthis._setNoBrochuresVisible(this._mapBrochureGenerationIdentifierToEntry.size<=0);\r\n\t}\r\n\t_setNoBrochuresVisible(value){\r\n\t\tif(value)this._noBrochuresElement.classList.add('visible');\r\n\t\telse this._noBrochuresElement.classList.remove('visible');\r\n\t}\r\n}","import React, { Component } from 'react';\r\nimport Urls from '../urls/Urls';\r\nimport UrlHelper from '../core/UrlHelper';\r\nimport PlotStatus from '../site/PlotStatus';\r\nexport default class PlotsMenuEntry {\r\n\tconstructor({siteJsonUnitPlot, callbackClicked, configuration}){\r\n\t\tthis._callbackClicked = callbackClicked;\r\n\t\tthis._siteJsonUnitPlot = siteJsonUnitPlot;\r\n\t\tthis._handleClicked= this._handleClicked.bind(this);\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add('plots-menu-entry');\r\n\t\tthis._imageWrapperElement = document.createElement('div');\r\n\t\tthis._imageWrapperElement.classList.add(\"image-wrapper\");\r\n\t\tthis._img = document.createElement('img');\r\n\t\tthis._img.classList.add('image');\r\n\t\tthis._img.src = `${Urls.getAssetsForSite(configuration.siteSlug)}${UrlHelper.removeStartSlash(siteJsonUnitPlot.frontViewImage.getBestEntryToFitHeight(50).relativePath)}`;\r\n\t\tthis._descriptionWrapperElement = document.createElement('div');\r\n\t\tthis._descriptionWrapperElement.classList.add('description-wrapper');\r\n\t\tthis._descriptionElement = document.createElement('div');\r\n\t\tconst blockString = siteJsonUnitPlot.unit.plots.length>1?`Block ${siteJsonUnitPlot.unit.id}`:'';\r\n\t\tthis._descriptionElement.innerHTML = `${blockString} Plot ${siteJsonUnitPlot.number} ${siteJsonUnitPlot.name}`;\r\n\t\tthis._plotStatusElement = document.createElement('div');\r\n\t\tthis._plotStatusElement.classList.add('plot-status');\r\n\t\tthis._plotStatusElement.classList.add(PlotStatus.getCssName(siteJsonUnitPlot.status));\r\n\t\tthis._plotStatusElement.innerHTML = `${PlotStatus.getDescription(siteJsonUnitPlot.status)}`;\r\n\t\tthis._element.appendChild(this._imageWrapperElement);\r\n\t\tthis._imageWrapperElement.appendChild(this._img);\r\n\t\tthis._element.appendChild(this._descriptionWrapperElement);\r\n\t\tthis._descriptionWrapperElement.appendChild(this._descriptionElement);\r\n\t\tthis._descriptionWrapperElement.appendChild(this._plotStatusElement);\r\n\t\tthis._element.addEventListener('click', this._handleClicked);\r\n\t}\r\n\tget number(){\r\n\t\treturn this._siteJsonUnitPlot.number;\r\n\t}\r\n\tset filteredOut(value){\r\n\t\tif(value)\r\n\t\t\tthis._element.classList.add('filtered-out');\r\n\t\telse\r\n\t\t\tthis._element.classList.remove('filtered-out');\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n\t_handleClicked(){\r\n\t\tthis._callbackClicked(this._siteJsonUnitPlot);\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport PlotsSelectionMenuEntry from './PlotsSelectionMenuEntry';\r\nimport SitePlanVisibleType from '../enums/SitePlanVisibleType';\r\nimport ClickedOffManager from '../ui_core/ClickedOffManager';\r\nimport GenericWindow from '../window/GenericWindow';\r\nimport IconButtonNonReact from '../components/IconButtonNonReact';\r\nimport WindowType from '../enums/WindowType';\r\nimport ResizeWatchers from '../ui_core/ResizeWatchers';\r\nimport Urls from '../urls/Urls';\r\nimport AssetsManager from '../assets_management/AssetsManager';\r\nimport FiltersButtons from './FiltersButtons';\r\nimport './PlotsSelectionMenu.css';\r\nexport default class PlotsSelectionMenu {\r\n\tconstructor({showPlotDetailedInformation,\r\n\t\t\tshowPlotMenuForPlot, showMenu, showStreetView,\r\n\t\t\tclearFilters, getSitePlanVisibleType,\r\n\t\t\tgetConfiguration, clickShowForSale,\r\n\t\t\tiMenuManager }){\r\n\t\tconst title = 'Plots';\r\n\t\tthis._window = new GenericWindow({tooltipMessage:title, name:title, minWidth:100, maxWidth:800, minHeight:100, maxHeight:1000,\r\n\t\t\tdefaultWidth:600, defaultHeight:600, defaultX:10, defaultY:10, minimized:true, maximized:false, minimizable:true,\r\n\t\t\tmaximizable:true, closeable:true, minimizeOnClose:true, resizable:true, dragable:true,\r\n\t\t\ttype:WindowType.PLOTS_SELECTION_MENU\r\n\t\t});\r\n\t\tthis._getConfiguration = getConfiguration;\r\n\t\tthis._showPlotDetailedInformation = showPlotDetailedInformation;\r\n\t\tthis._showPlotMenuForPlot = showPlotMenuForPlot;\r\n\t\tthis._showStreetView = showStreetView;\r\n\t\tthis._getSitePlanVisibleType= getSitePlanVisibleType;\r\n\t\tthis._element = this._window.getElement();\r\n\t\tthis._element.classList.add('plots-menu');\r\n\t\tthis._innerElement =this._window.getMainElement();\r\n\t\tthis._innerElement.classList.add('inner');\r\n\t\tthis._buttonDoneElement =document.createElement('button-done');\r\n\t\tthis._createEntries = this._createEntries.bind(this);\r\n\t\tthis._callbackClickedEntry = this._callbackClickedEntry.bind(this);\r\n\t\tthis.show = this.show.bind(this);\r\n\t\tthis.hide = this.hide.bind(this);\r\n\t\tthis._done = this._done.bind(this);\r\n\t\tthis._addEntry = this._addEntry.bind(this);\r\n\t\tthis._removeEntry = this._removeEntry.bind(this);\r\n\t\tthis.initialize = this.initialize.bind(this);\r\n\t\tthis._onResize = this._onResize.bind(this);\r\n\t\tthis._setColumnsClass = this._setColumnsClass.bind(this);\r\n\t\tthis._entries = [];\r\n\t\tthis._menuElement= document.createElement('div');\r\n\t\tthis._menuElement.classList.add('top-menu');\r\n\t\tthis._iconButtonMenu = new IconButtonNonReact({ \t\r\n\t\t\t\tclassName:\"button-menu\", \r\n\t\t\t\timgUrl:Urls.assets+'icons/UI_Button_Filter.png',\r\n\t\t\t\tonClick:showMenu\r\n\t\t});\r\n\t\tthis._menuElement.appendChild(this._iconButtonMenu.element);\r\n\t\tthis._scrollableElement = document.createElement('div');\r\n\t\tthis._scrollableElement.classList.add('scrollable');\r\n\t\tthis._innerElement.appendChild(this._menuElement);\r\n\t\tthis._innerElement.appendChild(this._scrollableElement);\r\n\t\tthis._clickedOffManager = new ClickedOffManager({elementRef:this._element, hide:this.hide});\r\n\t\tResizeWatchers.add({element:this._element, onResized:this._onResize});\r\n\t\tthis._filtersButtonsWrapperElement = document.createElement('div');\r\n\t\tthis._filtersButtonsWrapperElement.classList.add('filter-buttons-wrapper');\r\n\t\tthis._menuElement.appendChild(this._filtersButtonsWrapperElement);\r\n\t\tconst filtersButtonsFactory = React.createFactory(FiltersButtons);\r\n\t\tReactDOM.render(filtersButtonsFactory(\r\n\t\t{ \r\n\t\t\tsingleRow:true,\r\n\t\t\tclickClear:clearFilters, clickShowForSale, \r\n\t\t\tgetConfiguration, iMenuManager\r\n\t\t}),\r\n\t\tthis._filtersButtonsWrapperElement);\r\n\t}\r\n\tshow(){\r\n\t\tthis._window.unminimize();\r\n\t\tthis._window.bringToFront();\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n\thide(){\r\n\t\tthis._window.minimize();\r\n\t}\r\n\tsetFilteredPlots(filteredSiteJsonUnitPlots){\r\n\t\tconst mapPlotNumberToEntry = new Map();\r\n\t\tthis._entries.forEach(entry=>\r\n\t\t\tmapPlotNumberToEntry.set(entry.number, entry));\r\n\t\tfilteredSiteJsonUnitPlots.forEach(filteredSiteJsonUnitPlot=>\r\n\t\t{\r\n\t\t\tconst entry = mapPlotNumberToEntry.get(filteredSiteJsonUnitPlot.number);\r\n\t\t\tif(!entry)return;\r\n\t\t\tmapPlotNumberToEntry.delete(filteredSiteJsonUnitPlot.number);\r\n\t\t\tentry.filteredOut = false;\r\n\t\t});\r\n\t\tconst entriesToBeFilteredOut = Array.from(mapPlotNumberToEntry.values());\r\n\t\tentriesToBeFilteredOut.forEach(entry=>entry.filteredOut = true);\r\n\t}\r\n\t_onResize(){\r\n\t\tif(this._scrollableElement.offsetWidth<500){\r\n\t\t\tthis._setColumnsClass('one-columns');\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif(this._scrollableElement.offsetWidth<1000){\r\n\t\t\tthis._setColumnsClass('two-columns');\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif(this._scrollableElement.offsetWidth<1500){\r\n\t\t\tthis._setColumnsClass('three-columns');\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis._setColumnsClass('four-columns');\r\n\t}\r\n\t_callbackClickedEntry(siteJsonUnitPlot){\r\n\t\tif(this._getSitePlanVisibleType()===SitePlanVisibleType.OUTSIDE_360){\r\n\t\t\tthis._showStreetView({nearPlot:siteJsonUnitPlot});\r\n\t\t\tthis.hide();\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif(this._getConfiguration().onClickPlotSelectionMenuEntryShowDetailedElseSmallPlotInfo)\r\n\t\t\tthis._showPlotDetailedInformation(siteJsonUnitPlot);\r\n\t\telse\r\n\t\t\tthis._showPlotMenuForPlot(siteJsonUnitPlot, /*zoomOut*/true);\r\n\t\tthis.hide();\r\n\t}\r\n\t_setColumnsClass(className){\r\n\t\tif(this._currentColumnClassName)\r\n\t\t\tthis._element.classList.remove(this._currentColumnClassName);\r\n\t\tthis._element.classList.add(className);\r\n\t\tthis._currentColumnClassName = className;\r\n\t}\r\n\t_done(){\r\n\t\tconst selectedSiteJsonUnitPlots = this._entries.filter(entry=>entry.selected).map(entry=>entry.siteJsonUnitPlot);\r\n\t\tthis._callbackPicked(selectedSiteJsonUnitPlots);\r\n\t\tthis.hide();\r\n\t}\r\n\tinitialize({siteJson}){\r\n\t\tthis._siteJson= siteJson;\r\n\t\tthis._createEntries();\r\n\t}\r\n\t_createEntries(){\r\n\t\tconst siteJsonUnitPlots = this._siteJson.getPlotsArray();\r\n\t\tsiteJsonUnitPlots.sort(function(a, b) {\r\n\t\t\treturn a.number - b.number;\r\n\t\t});\r\n\t\tsiteJsonUnitPlots.forEach(siteJsonUnitPlot=>{\r\n\t\t\tconst entry = new PlotsSelectionMenuEntry({\r\n\t\t\t\tcallbackClicked:this._callbackClickedEntry,\r\n\t\t\t\tsiteJsonUnitPlot:siteJsonUnitPlot,\r\n\t\t\t\tconfiguration:this._getConfiguration()\r\n\t\t\t});\r\n\t\t\tthis._addEntry(entry);\r\n\t\t});\r\n\t}\r\n\t_addEntry(entry){\r\n\t\tthis._entries.push(entry);\r\n\t\tthis._scrollableElement.appendChild(entry.element);\r\n\t}\r\n\t_removeEntry(entry){\r\n\t\tthis._entries.splice(this._entries.indexOf(entry), 1);\r\n\t\tthis._scrollableElement.removeChild(entry.element);\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport IconButtonNonReact from '../components/IconButtonNonReact';\r\nimport Urls from '../urls/Urls';\r\nimport UrlHelper from '../core/UrlHelper';\r\nimport Once from '../core/Once';\r\nimport PropertyBindingFactory from '../mvvm/PropertyBindingFactory';\r\nimport PlotStatus from '../site/PlotStatus';\r\nimport AssetsManager from '../assets_management/AssetsManager';\r\nimport Star from '../components/Star';\r\nexport default class HouseTypesViewerEntryStatusesEntry {\r\n\tconstructor({plotsToConsider, plotStatus}){\r\n\t\tthis._plotsToConsider = plotsToConsider;\r\n\t\tthis._plotStatus = plotStatus;\r\n\t\tthis.update = this.update.bind(this);\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add('statuses-entry');\r\n\t\tthis._element.classList.add(PlotStatus.getCssName(plotStatus));\r\n\t\tthis._dotElement = document.createElement('div');\r\n\t\tthis._dotElement.classList.add('dot');\r\n\t\tthis._element.appendChild(this._dotElement);\r\n\t\tthis._nameElement= document.createElement('div');\r\n\t\tthis._nameElement.innerHTML = PlotStatus.getDescription(plotStatus);\r\n\t\tthis._nameElement.classList.add('name');\r\n\t\tthis._element.appendChild(this._nameElement);\r\n\t\tthis._nElement= document.createElement('div');\r\n\t\tthis._nElement.classList.add('n');\r\n\t\tthis._element.appendChild(this._nElement);\r\n\t\tthis._updateOnce = new Once(this.update);\r\n\t\tplotsToConsider.forEach(plot=>{\r\n\t\t\tPropertyBindingFactory.standard(this, plot, 'status', this._updateOnce.trigger);\r\n\t\t});\r\n\t}\r\n\tupdate(){\r\n\t\tlet n=0;\r\n\t\tthis._plotsToConsider.forEach(plot=>{\r\n\t\t\tconst status = plot.status;\r\n\t\t\tif(status!==this._plotStatus)return;\r\n\t\t\tn++;\r\n\t\t});\r\n\t\tthis._nElement.innerHTML = String(n);\r\n\t\tif(n>0)\r\n\t\t\tthis._element.classList.add('visible');\r\n\t\telse this._element.classList.remove('visible');\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport IconButtonNonReact from '../components/IconButtonNonReact';\r\nimport Urls from '../urls/Urls';\r\nimport UrlHelper from '../core/UrlHelper';\r\nimport PlotStatus from '../site/PlotStatus';\r\nimport AssetsManager from '../assets_management/AssetsManager';\r\nimport HouseTypesViewerEntryStatusesEntry from './HouseTypesViewerEntryStatusesEntry';\r\nimport Star from '../components/Star';\r\nexport default class HouseTypesViewerEntryStatuses {\r\n\tconstructor({houseTypes}){\r\n\t\tthis._houseTypes = houseTypes;\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add('statuses');\r\n\t\tthis._entries = [];\r\n\t\tlet plotsToConsider =[];\r\n\t\thouseTypes.forEach(houseType=>plotsToConsider = plotsToConsider.concat(houseType.plots));\r\n\t\tPlotStatus.getValues().forEach(plotStatus=>{\r\n\t\t\tconst entry = new HouseTypesViewerEntryStatusesEntry({plotsToConsider, plotStatus});\r\n\t\t\tthis._entries.push(entry);\r\n\t\t\tthis._element.appendChild(entry.element);\r\n\t\t});\r\n\t\tthis._update();\r\n\t}\r\n\t_update(){\r\n\t\tthis._entries.forEach(entry=>entry.update());\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport IconButtonNonReact from '../components/IconButtonNonReact';\r\nimport Urls from '../urls/Urls';\r\nimport UrlHelper from '../core/UrlHelper';\r\nimport PlotStatus from '../site/PlotStatus';\r\nimport AssetsManager from '../assets_management/AssetsManager';\r\nimport HouseTypesViewerEntryStatusesEntry from './HouseTypesViewerEntryStatusesEntry';\r\nimport numberWithCommas from '../core/numberWithCommas';\r\nimport Star from '../components/Star';\r\nexport default class HouseTypesViewerEntryPriceRange {\r\n\tconstructor({houseTypes}){\r\n\t\tthis._houseTypes = houseTypes;\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add('price-range');\r\n\t\tthis._plotsToConsider =[];\r\n\t\thouseTypes.forEach(houseType=>this._plotsToConsider = this._plotsToConsider.concat(houseType.plots));\r\n\t\tthis._update();\r\n\t}\r\n\t_update(){\r\n\t\tlet minPrice = null, maxPrice = null;\r\n\t\tlet minPriceString, maxPriceString;\r\n\t\tthis._plotsToConsider.forEach(plotToConsider=>{\r\n\t\t\tif(plotToConsider.price===0)return;\r\n\t\t\tif(minPrice==null){\r\n\t\t\t\tminPrice = plotToConsider.price;\r\n\t\t\t\tmaxPrice = minPrice;\r\n\t\t\t\tminPriceString = plotToConsider.priceString;\r\n\t\t\t\tmaxPriceString = minPriceString;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif(plotToConsider.pricemaxPrice){\r\n\t\t\t\tmaxPrice = plotToConsider.price;\r\n\t\t\t\tmaxPriceString = plotToConsider.priceString;\r\n\t\t\t}\r\n\t\t});\r\n\t\tif(minPrice===null){\r\n\t\t\tthis._element.innerHTML = '';\r\n\t\t\tthis._element.classList.remove('visible');\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis._element.innerHTML = minPrice===maxPrice?minPriceString:`${minPriceString} - ${maxPriceString}`;\r\n\t\tthis._element.classList.add('visible');\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport IconButtonNonReact from '../components/IconButtonNonReact';\r\nimport Urls from '../urls/Urls';\r\nimport UrlHelper from '../core/UrlHelper';\r\nimport PlotStatus from '../site/PlotStatus';\r\nimport AssetsManager from '../assets_management/AssetsManager';\r\nimport HouseTypesViewerEntryStatuses from './HouseTypesViewerEntryStatuses';\r\nimport HouseTypesViewerEntryPriceRange from './HouseTypesViewerEntryPriceRange';\r\nimport Checkbox from '../components/Checkbox';\r\nimport Star from '../components/Star';\r\nexport default class HouseTypesViewerEntry {\r\n\tconstructor({houseTypes, callbackClicked, houseTypeViewModel, showImagesFullScreen,\r\n\t\tshowStreetView, enterHouse, hide, callbackAddFavourite, callbackRemoveFavourite,\r\n\t\tconfiguration}){\r\n\t\tthis._callbackHide =hide;\r\n\t\tthis._callbackClicked = callbackClicked;\r\n\t\tthis._callbackAddFavourite = callbackAddFavourite;\r\n\t\tthis._callbackRemoveFavourite = callbackRemoveFavourite;\r\n\t\tthis._showImagesFullScreen= showImagesFullScreen;\r\n\t\tthis._showStreetView = showStreetView;\r\n\t\tthis._enterHouse= enterHouse;\r\n\t\tthis._houseTypes = houseTypes;\r\n\t\tthis._houseTypeViewModel = houseTypeViewModel;\r\n\t\tthis._handleClicked= this._handleClicked.bind(this);\r\n\t\tthis._statuses = new HouseTypesViewerEntryStatuses({houseTypes});\r\n\t\tthis._priceRange = new HouseTypesViewerEntryPriceRange({houseTypes});\r\n\t\tthis._handleStarSelectedChanged = this._handleStarSelectedChanged.bind(this);\r\n\t\tthis._handleCheckboxChanged = this._handleCheckboxChanged.bind(this);\r\n\t\tthis._houseTypeViewModelSelectedChanged = this._houseTypeViewModelSelectedChanged.bind(this);\r\n\t\tthis._handleClickButtonWalkmode = this._handleClickButtonWalkmode.bind(this);\r\n\t\tthis._showFloorPlans = this._showFloorPlans.bind(this);\r\n\t\tthis._handleClickImage = this._handleClickImage.bind(this);\r\n\t\tthis._showRoomImages = this._showRoomImages.bind(this);\r\n\t\tthis._handleShowConfigurator = this._handleShowConfigurator.bind(this);\r\n\t\tthis._expandAbout = this._expandAbout.bind(this);\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add('house-types-viewer-entry');\r\n\t\tthis._imageWrapperElement = document.createElement('div');\r\n\t\tthis._imageWrapperElement.classList.add(\"image-wrapper\");\r\n\t\tthis._img = document.createElement('img');\r\n\t\tthis._img.classList.add('image');\r\n\t\tconst firstHouseTypeWithName = houseTypes[0];\r\n\t\tconst firstPlot = firstHouseTypeWithName.plots[0];\r\n\t\tthis._firstPlot = firstPlot;\r\n\t\tconst firstUnit = firstPlot.unit;\r\n\t\tthis._img.src = `${Urls.getAssetsForSite(configuration.siteSlug)}${UrlHelper.removeStartSlash(firstUnit.frontViewImage.getBestEntryToFitHeight(50).relativePath)}`;\r\n\t\tthis._infoWrapperElement = document.createElement('div');\r\n\t\tthis._infoWrapperElement.classList.add('info-wrapper');\r\n\t\tthis._descriptionElement = document.createElement('div');\r\n\t\tthis._descriptionElement.classList.add('description');\r\n\t\tthis._descriptionTextElement = document.createElement('div');\r\n\t\tthis._descriptionTextElement.classList.add('description-text');\r\n\t\tthis._descriptionTextElement.innerHTML = `${firstHouseTypeWithName.name}`;\r\n\t\tthis._topElement = document.createElement('div');\r\n\t\tthis._topElement.classList.add('top');\r\n\t\tthis._topElement.appendChild(this._imageWrapperElement);\r\n\t\tthis._imageWrapperElement.appendChild(this._img);\r\n\t\tthis._imageWrapperElement.addEventListener('click', this._handleClickImage);\r\n\t\tthis._topElement.appendChild(this._infoWrapperElement);\r\n\t\tthis._element.appendChild(this._topElement);\r\n\t\tthis._infoWrapperElement.appendChild(this._descriptionElement);\r\n\t\tthis._descriptionElement.appendChild(this._descriptionTextElement);\r\n\t\tthis._element.addEventListener('click', this._handleClicked);\r\n\t\tthis._handleStarSelectedChanged = this._handleStarSelectedChanged.bind(this);\r\n\t\tthis._plotPriceRangeElement = document.createElement('div');\r\n\t\tthis._plotPriceRangeElement.classList.add('price-range');\r\n\t\tthis._nBedroomsElement = document.createElement('div');\r\n\t\tthis._nBedroomsElement.classList.add('n-bedrooms');\r\n\t\tconst nBathroomString = configuration.showNBathrooms?` and ${firstPlot.nBathrooms} Bathrooms`:'';\r\n\t\tthis._nBedroomsElement.innerHTML = ' - '+String(firstPlot.nBedrooms)+' Bedrooms'+nBathroomString;\r\n\t\t\r\n\t\tthis._smallButtonsElement = document.createElement('div');\r\n\t\tthis._smallButtonsElement.classList.add('small-buttons');\r\n\t\t[this._plotPriceRangeElement, this._nBedroomsElement]\r\n\t\t\t.forEach(childElement=>this._descriptionElement.appendChild(childElement));\r\n\t\t[this._statuses.element, this._smallButtonsElement]\r\n\t\t\t.forEach(childElement=>this._infoWrapperElement.appendChild(childElement));\r\n\t\t/*const starFactory = React.createFactory(Star);\r\n\t\t\r\n\t\tthis._starElement = document.createElement('div');\r\n\t\tReactDOM.render(starFactory(\r\n\t\t\t{ \r\n\t\t\t\tonSelectedChange:this._handleStarSelectedChanged, \r\n\t\t\t\tref:this._star,\r\n\t\t\t\tstopEventPropagation:true\r\n\t\t\t}),\r\n\t\t\tthis._starElement);\r\n\t\tthis._smallButtonsElement.appendChild(this._starElement);\r\n\t\t*/\r\n\t\tconst hasOneOrMoreRoomImages=firstPlot.hasOneOrMoreRoomImages;\r\n\t\tthis._iconButtonWalkmode = new IconButtonNonReact({ \t\r\n\t\t\t\tclassName:[\"button-show-street-view\", \"button-show\"], \r\n\t\t\t\timgUrl:Urls.assets+'icons/UI_Button_Walkmode.png',\r\n\t\t\t\tonClick:this._handleClickButtonWalkmode\r\n\t\t\t});\r\n\t\tthis._smallButtonsElement.appendChild(this._iconButtonWalkmode.element);\r\n\t\t\t\r\n\t\t\r\n\t\tthis._iconButtonShowGallery = new IconButtonNonReact({\r\n\t\t\t\tclassName:[\"button-show-gallery\", \"button-show\"], \r\n\t\t\t\timgUrl:hasOneOrMoreRoomImages?(Urls.assets+'icons/UI_Button_Gallery.png'):(Urls.assets+'icons/UI_Button_Gallery_Disabled.png'),\r\n\t\t\t\tonClick:hasOneOrMoreRoomImages?this._showRoomImages:()=>{}\r\n\t\t\t});\r\n\t\tthis._smallButtonsElement.appendChild(this._iconButtonShowGallery.element);\r\n\t\t\t\r\n\t\t\r\n\t\tthis._iconButtonShowFloorplan = new IconButtonNonReact({\r\n\t\t\t\tclassName:[\"button-show-floor-plan\", \"button-show\"], \r\n\t\t\t\timgUrl:Urls.assets+'icons/UI_Button_Floorplan.png',\r\n\t\t\t\tonClick:this._showFloorPlans\r\n\t\t\t});\r\n\t\tthis._smallButtonsElement.appendChild(this._iconButtonShowFloorplan.element);\r\n\t\t\r\n\t\tthis._iconButtonEnterHouse = new IconButtonNonReact({\r\n\t\t\t\tclassName:[\"button-show-floor-plan\", \"button-show\"], \r\n\t\t\t\timgUrl:Urls.assets+'icons/UI_Button_Enter_House.png',\r\n\t\t\t\tonClick:this._handleShowConfigurator\r\n\t\t\t});\r\n\t\tthis._smallButtonsElement.appendChild(this._iconButtonEnterHouse.element);\r\n\t\tthis._smallButtonsElement.appendChild(this._priceRange.element);\r\n\t\t\r\n\t\tconst checkboxFactory = React.createFactory(Checkbox);\r\n\t\tthis._checkboxElement = document.createElement('div');\r\n\t\tthis._checkbox = ReactDOM.render(checkboxFactory(\r\n\t\t\t{ \ttoggleOnClick:true, \r\n\t\t\t\tonChange:this._handleCheckboxChanged,\r\n\t\t\t\tstopEventsPropagating:true,\r\n\t\t\t\tref:React.createRef()\r\n\t\t\t}),\r\n\t\t\tthis._checkboxElement\r\n\t\t);\r\n\t\tthis._checkboxRef = this._checkbox._checkboxRef;\r\n\t\tthis._descriptionElement.appendChild(this._checkboxElement);\r\n\t\t\r\n\t\tthis._aboutElement = document.createElement('div');\r\n\t\tthis._aboutElement.classList.add('about');\r\n\t\tthis._aboutElement.innerHTML = firstPlot.about;\r\n\t\tthis._aboutElement.addEventListener('click', this._expandAbout);\r\n\t\tsetTimeout(()=>{\r\n\t\tthis._infoWrapperElement.appendChild(this._aboutElement);\r\n\t\t}, 0);\r\n\t\thouseTypeViewModel.addEventListener('selectedchanged', this._houseTypeViewModelSelectedChanged);\r\n\t\t\r\n\t}\r\n\t_expandAbout(){\r\n\t\tif(this._aboutExpanded){\r\n\t\t\tthis._aboutExpanded = false;\r\n\t\t\tthis._element.removeChild(this._aboutElement);\r\n\t\t\tthis._infoWrapperElement.appendChild(this._aboutElement);\r\n\t\t\tthis._aboutElement.classList.remove('expanded');\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis._aboutExpanded = true;\r\n\t\tthis._infoWrapperElement.removeChild(this._aboutElement);\r\n\t\tthis._element.appendChild(this._aboutElement);\r\n\t\tthis._aboutElement.classList.add('expanded');\r\n\t}\r\n\t_handleStarSelectedChanged(selected){\r\n\t\tthis._houseTypes.forEach(houseType=>{\r\n\t\t\thouseType.plots.forEach(plot=>{\r\n\t\t\t\tif(selected)this._callbackAddFavourite(plot);\r\n\t\t\t\telse this._callbackRemoveFavourite(plot);\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\t_handleClickImage(){\r\n\t\tthis._showImagesFullScreen([this._firstPlot.frontViewImage]);\r\n\t}\r\n\t_handleClickButtonWalkmode(){\r\n\t\tthis._showStreetView({nearPlot:this._firstPlot});\r\n\t\tthis._callbackHide();\r\n\t}\r\n\t_houseTypeViewModelSelectedChanged(e){\r\n\t\tthis._checkboxRef.current.checked = e.value;\r\n\t}\r\n\t_handleCheckboxChanged(e){\r\n\t\tthis._houseTypeViewModel.selected = e.checked;\r\n\t}\r\n\t_showFloorPlans(){\r\n\t\tthis._showImagesFullScreen(this._firstPlot.floorPlanImages);\r\n\t}\r\n\t_showRoomImages(){\r\n\t\tthis._showImagesFullScreen(this._firstPlot.rooms.allImages);\r\n\t}\r\n\t_handleShowConfigurator(){\r\n\t\tthis._enterHouse(this._firstPlot);\r\n\t\tthis._callbackHide();\r\n\t}\r\n\tget number(){\r\n\t\treturn this._houseTypes[0].number;\r\n\t}\r\n\tset filteredOut(value){\r\n\t\tif(value)\r\n\t\t\tthis._element.classList.add('filtered-out');\r\n\t\telse\r\n\t\t\tthis._element.classList.remove('filtered-out');\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n\t_handleClicked(){\r\n\t\tthis._callbackClicked(this);\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport './HouseTypesViewer.css';\r\nimport GenericWindow from '../window/GenericWindow';\r\nimport IconButtonNonReact from '../components/IconButtonNonReact';\r\nimport AssetsManager from '../assets_management/AssetsManager';\r\nimport Urls from '../urls/Urls';\r\nimport WindowType from '../enums/WindowType';\r\nimport HouseTypesViewerEntry from './HouseTypesViewerEntry';\r\nimport MenuType from '../enums/MenuType';\r\nexport default class HouseTypesViewer {\r\n\tconstructor(props){\r\n\t\tconst {onSelectedOptionsChange, clearFilters, showMenu, showImagesFullScreen, showStreetView, \r\n\t\taddFavourite, removeFavourite, enterHouse, configuration} = props;\r\n\t\tthis._configuration= configuration;\r\n\t\tthis._showImagesFullScreen=showImagesFullScreen;\r\n\t\tthis._showStreetView = showStreetView;\r\n\t\tthis._updateSelected= this._updateSelected.bind(this);\r\n\t\tthis._callbackAddFavourite = addFavourite;\r\n\t\tthis._callbackRemoveFavourite = removeFavourite;\r\n\t\tthis._callbackSelectedOptionsChange=onSelectedOptionsChange;\r\n\t\tthis._enterHouse = enterHouse;\r\n\t\tthis._mapHouseTypeToEntry = new Map();\r\n\t\t\r\n\t\tconst title = \"House type\"\r\n\t\tthis._window = new GenericWindow({tooltipMessage:title, name:title, minWidth:100, maxWidth:800, minHeight:100, maxHeight:1000,\r\n\t\t\tdefaultWidth:600, defaultHeight:600, defaultX:10, defaultY:10, minimized:!\r\n\t\t\tconfiguration.showHouseTypesViewerOnOpen, \r\n\t\t\tmaximized:configuration.showHouseTypesViewerOnOpen, minimizable:true,\r\n\t\t\tmaximizable:true, closeable:true, minimizeOnClose:true, resizable:true, dragable:true,\r\n\t\t\ttype:WindowType.HOUSE_TYPE_VIEWER\r\n\t\t});\r\n\t\tthis._element = this._window.getElement();\r\n\t\tthis._element.classList.add('house-types-viewer');\r\n\t\tthis._innerElement =this._window.getMainElement();\r\n\t\tthis._innerElement.classList.add('inner');\r\n\t\tthis.initialize = this.initialize.bind(this);\r\n\t\tthis._createEntries = this._createEntries.bind(this);\r\n\t\tthis._clickedEntry = this._clickedEntry.bind(this);\r\n\t\tthis.show = this.show.bind(this);\r\n\t\tthis.hide= this.hide.bind(this);\r\n\t\t\r\n\t\t\r\n\t\tthis._entries = [];\r\n\t\tthis._menuElement= document.createElement('div');\r\n\t\tthis._menuElement.classList.add('top-menu');\r\n\t\tthis._iconButtonMenu = new IconButtonNonReact({ \t\r\n\t\t\t\tclassName:\"button-menu\", \r\n\t\t\t\timgUrl:Urls.assets+'icons/UI_Button_Filter.png',\r\n\t\t\t\tonClick:showMenu\r\n\t\t});\r\n\t\tthis._menuElement.appendChild(this._iconButtonMenu.element);\r\n\t\tthis._iconButtonClearFilters = new IconButtonNonReact({ \t\r\n\t\t\t\tclassName:\"button-clear-filters\", \r\n\t\t\t\timgUrl:Urls.assets+'icons/UI_Button_Filter_Clear.png',\r\n\t\t\t\tonClick:clearFilters\r\n\t\t});\r\n\t\tthis._menuElement.appendChild(this._iconButtonClearFilters.element);\r\n\t\tthis._scrollableElement = document.createElement('div');\r\n\t\tthis._scrollableElement.classList.add('scrollable');\r\n\t\tthis._innerElement.appendChild(this._menuElement);\r\n\t\tthis._innerElement.appendChild(this._scrollableElement);\r\n\t}\r\n\tinitialize({siteJson, houseTypesViewModel}){\r\n\t\tthis._siteJson = siteJson;\r\n\t\tconst title = siteJson.allUnitsHaveMultiplePlots?\"Apartment Type\":\"House type\";\r\n\t\tthis._window.setName(title);\r\n\t\tthis._window.setTooltipMessage(title);\r\n\t\tthis._createEntries(houseTypesViewModel);\r\n\t}\r\n\t_updateSelected(){\r\n\t\tconst houseTypeListsSelected = this._getHouseTypeListsSelected();\r\n\t\tconst seenEntries =[];\r\n\t\thouseTypeListsSelected.forEach(houseTypeListSelected=>{\r\n\t\t\tconst firstHouseTypeWithName = houseTypeListSelected[0];\r\n\t\t\tconst entry = this._mapHouseTypeToEntry.get(firstHouseTypeWithName);\r\n\t\t\tseenEntries.push(entry);\r\n\t\t\tentry.houseTypeSelected = true;\r\n\t\t});\r\n\t\tconst entriesNotSeen = this._entries.filter(entry=>seenEntries.indexOf(entry)<0);\r\n\t\tentriesNotSeen.forEach(entryNotSeen=>entryNotSeen.houseTypeSelected=false);\r\n\t}\r\n\t_createEntries(houseTypesViewModel){\r\n\t\thouseTypesViewModel.entries.forEach(houseTypeViewModel=>{\r\n\t\t\tconst houseTypes =houseTypeViewModel.houseTypesWithSameName;\r\n\t\t\tlet allHouseTypePlots = [];\r\n\t\t\thouseTypes.forEach(houseType=>allHouseTypePlots = allHouseTypePlots.concat(houseType.plots));\r\n\t\t\tif(allHouseTypePlots.length<1)return;\r\n\t\t\tconst houseTypesViewerEntry = new HouseTypesViewerEntry({\r\n\t\t\t\thouseTypes,\r\n\t\t\t\tcallbackClicked:this._clickedEntry,\r\n\t\t\t\thouseTypeViewModel,\r\n\t\t\t\tshowImagesFullScreen:this._showImagesFullScreen,\r\n\t\t\t\tshowStreetView:this._showStreetView,\r\n\t\t\t\thide:this.hide,\r\n\t\t\t\tcallbackAddFavourite:this._callbackAddFavourite,\r\n\t\t\t\tcallbackRemoveFavourite:this._callbackRemoveFavourite,\r\n\t\t\t\tenterHouse:this._enterHouse,\r\n\t\t\t\tconfiguration:this._configuration\r\n\t\t\t});\r\n\t\t\tthis._entries.push(houseTypesViewerEntry);\r\n\t\t\thouseTypes.forEach(houseType=>\r\n\t\t\t\tthis._mapHouseTypeToEntry.set(houseType, houseTypesViewerEntry)\r\n\t\t\t);\r\n\t\t\tthis._scrollableElement.appendChild(houseTypesViewerEntry.element);\r\n\t\t});\r\n\t}\r\n\t_clickedEntry(entry){\r\n\t\t\r\n\t}\r\n\tshow(){\r\n\t\tthis._window.unminimize();\r\n\t\tthis._window.bringToFront();\r\n\t}\r\n\thide(){\r\n\t\tthis._window.minimize();\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n}\r\n","import eventEnable from '../core/eventEnable';\r\nexport default class HouseTypeViewModel{\r\n\tconstructor(houseTypesWithSameName){\r\n\t\teventEnable(this);\r\n\t\tthis._houseTypesWithSameName= houseTypesWithSameName;\r\n\t\tthis._firstHouseType = houseTypesWithSameName[0];\r\n\t\tthis._dispatchSelectedChanged = this._dispatchSelectedChanged.bind(this);\r\n\t}\r\n\tget name(){\r\n\t\treturn this._firstHouseType.name;\r\n\t}\r\n\tget about(){\r\n\t\treturn this._firstHouseType.about;\r\n\t}\r\n\tget houseTypesWithSameName(){\r\n\t\treturn this._houseTypesWithSameName;\r\n\t}\r\n\tget imageAbsolutePath(){\r\n\t\treturn this._firstHouseType.getImageAbsolutePath();\r\n\t}\r\n\tget selected(){\r\n\t\treturn this._selected;\r\n\t}\r\n\tset selected(value){\r\n\t\tif(value===this._selected)return;\r\n\t\tthis._selected = value;\r\n\t\tthis._dispatchSelectedChanged(value);\r\n\t}\r\n\t_dispatchSelectedChanged(value){\r\n\t\tthis.dispatchEvent({type:'selectedchanged', value:value, houseTypeViewModel:this});\r\n\t}\r\n}","import HouseTypeViewModel from './HouseTypeViewModel';\r\nimport eventEnable from '../core/eventEnable';\r\nexport default class HouseTypesViewModel{\r\n\tconstructor(plotsArray){\r\n\t\teventEnable(this);\r\n\t\tthis._dispatchSelectedChanged = this._dispatchSelectedChanged.bind(this);\r\n\t\tconst houseTypesForPlots=[];\r\n\t\tplotsArray.forEach(plot=>{\r\n\t\t\tif(plot.affordable)return;\r\n\t\t\tif(houseTypesForPlots.indexOf(plot.houseType)<0)\r\n\t\t\t\thouseTypesForPlots.push(plot.houseType);\r\n\t\t});\r\n\t\t\r\n\t\tconst mapHouseTypeNameToHouseTypes = new Map();\r\n\t\thouseTypesForPlots.forEach(houseType=>{\r\n\t\t\tlet listOfHouseTypesForName = mapHouseTypeNameToHouseTypes.get(houseType.name);\r\n\t\t\tif(listOfHouseTypesForName===undefined||listOfHouseTypesForName===null){\r\n\t\t\t\tlistOfHouseTypesForName=[];\r\n\t\t\t\tmapHouseTypeNameToHouseTypes.set(houseType.name, listOfHouseTypesForName);\r\n\t\t\t}\r\n\t\t\tlistOfHouseTypesForName.push(houseType);\r\n\t\t});\r\n\t\tconst houseTypeLists = Array.from(mapHouseTypeNameToHouseTypes.values());\r\n\t\tthis._entries = houseTypeLists.map(houseTypeList=>{\r\n\t\t\tconst houseTypeViewModel = new HouseTypeViewModel(houseTypeList);\r\n\t\t\thouseTypeViewModel.addEventListener('selectedchanged', this._dispatchSelectedChanged);\r\n\t\t\treturn houseTypeViewModel;\r\n\t\t});\r\n\t}\r\n\tget entries(){\r\n\t\treturn this._entries;\r\n\t}\r\n\t_dispatchSelectedChanged(e){\r\n\t\tthis.dispatchEvent(e);\r\n\t}\r\n}","import ReactDOM from 'react-dom';\r\nimport React from 'react';\r\nimport JumpableZoomableDragable from '../components/JumpableZoomableDragable';\r\nimport Urls from '../urls/Urls';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport './FullScreenImagesViewer.css';\r\nimport IconButtonNonReact from './IconButtonNonReact';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class FullScreenImagesViewer {\r\n\tconstructor({configuration}){\r\n\t\tthis._configuration = configuration;\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add(\"full-screen-images-viewer\");\r\n\t\tthis._jumpableZoomableDragableWrapperElement = document.createElement('div');\r\n\t\tthis._jumpableZoomableDragableWrapperElement.classList.add('jumpable-zoomable-dragable-wrapper');\r\n\t\tthis._jumpableZoomableDragableFactory= React.createFactory(JumpableZoomableDragable);\r\n\t\tthis.hide= this.hide.bind(this);\r\n\t\tthis.show= this.show.bind(this);\r\n\t\tthis._setVisible= this._setVisible.bind(this);\r\n\t\tthis._renderJumpableZoomableDragable= this._renderJumpableZoomableDragable.bind(this);\r\n\t\tthis._handleClickButtonClose= this._handleClickButtonClose.bind(this);\r\n\t\tthis._renderJumpableZoomableDragable([]);\r\n\t\tthis._iconButtonNonReactClose = new IconButtonNonReact({imgUrl:Urls.assets+'icons/UI_Button_Exit.png',\r\n\t\t\tonClick:this._handleClickButtonClose});\r\n\t\tthis._element.appendChild(this._jumpableZoomableDragableWrapperElement);\r\n\t\tthis._element.appendChild(this._iconButtonNonReactClose.element);\r\n\t}\r\n\t_handleClickButtonClose(){\r\n\t\tthis.hide();\r\n\t}\r\n\t_renderJumpableZoomableDragable(images){\r\n\t\tReactDOM.render(this._jumpableZoomableDragableFactory(\r\n\t\t\t{ \r\n\t\t\t\timages:images,\r\n\t\t\t\trootUrl:Urls.getAssetsForSite(this._configuration.siteSlug),\r\n\t\t\t\tzoomMin:1,\r\n\t\t\t\tzoomMax:4\r\n\t\t\t}),\r\n\t\t\tthis._jumpableZoomableDragableWrapperElement);\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n\thide(){\r\n\t\tthis._setVisible(false);\r\n\t}\r\n\tshow({images}){\r\n\t\tthis._setVisible(true);\r\n\t\tthis._renderJumpableZoomableDragable(images);\r\n\t}\r\n\t_setVisible(value){\r\n\t\tif(value)\r\n\t\t\tthis._element.classList.add('visible');\r\n\t\telse this._element.classList.remove('visible');\r\n\t}\r\n}\r\n","import ParameterErrors from '../errors/ParameterErrors';\r\nconst{throwNotProvided, throwNotOfType}=ParameterErrors;\r\nexport default class DistanceHelper {\r\n static calculateKmFromLatLng(latLng1, latLng2) {\r\n\t\tDistanceHelper._validateLatLng(latLng1, 'latLng1');\r\n\t\tDistanceHelper._validateLatLng(latLng2, 'latLng2');\r\n\t\tconst [lat1, lon1]= latLng1;\r\n\t\tconst [lat2, lon2]= latLng2;\r\n\t\tconst R = 6371e3; // metres\r\n\t\tconst φ1 = lat1 * Math.PI/180; // φ, λ in radians\r\n\t\tconst φ2 = lat2 * Math.PI/180;\r\n\t\tconst Δφ = (lat2-lat1) * Math.PI/180;\r\n\t\tconst Δλ = (lon2-lon1) * Math.PI/180;\r\n\t\tconst a = Math.sin(Δφ/2) * Math.sin(Δφ/2) +\r\n\t\t\t\t Math.cos(φ1) * Math.cos(φ2) *\r\n\t\t\t\t Math.sin(Δλ/2) * Math.sin(Δλ/2);\r\n\t\tconst c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));\r\n\t\tconst d = R * c/1000;\r\n\t\treturn d;\r\n }\r\n\tstatic _validateLatLng(latLng, parameterName){\r\n\t\tif(latLng===undefined||latLng===null)\r\n\t\t\tthrowNotProvided(parameterName);\r\n\t\tif(!Array.isArray(latLng)||(latLng.length!==2))\r\n\t\t\tthrowNotOfType(parameterName, '[number, number]');\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport ClickedOffManager from '../ui_core/ClickedOffManager';\r\nimport DistanceHelper from '../geometry/DistanceHelper';\r\nimport Urls from '../urls/Urls';\r\nimport './NearbySites.css';\r\nexport default class NearbySite{\r\n\tconstructor({siteJson, thisSiteJson}){\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add('nearby-site');\r\n\t\tthis._imageWrapperElement = document.createElement('div');\r\n\t\tthis._imageWrapperElement.classList.add('image-wrapper');\r\n\t\tthis._imgElement = document.createElement('img');\r\n\t\tthis._textElement = document.createElement('div');\r\n\t\tthis._textElement.classList.add('text');\r\n\t\tthis._distanceElement = document.createElement('div');\r\n\t\tthis._distanceElement.classList.add('distance');\r\n\t\tthis._element.appendChild(this._imageWrapperElement);\r\n\t\tthis._imageWrapperElement.appendChild(this._imgElement);\r\n\t\tconst configuration = siteJson.configuration;\r\n\t\tthis._imgElement.src = Urls.getAssetsForSite(configuration.siteSlug)\r\n\t\t\t+'/'+siteJson.birdsEyeViews.getDefault().imageRelativePath;\r\n\t\tthis._element.appendChild(this._textElement);\r\n\t\tthis._textElement.innerHTML=configuration.siteName;\r\n\t\tthis._distanceElement.innerHTML = ' ('+String(Math.round(DistanceHelper.calculateKmFromLatLng(siteJson.latLng, \r\n\t\t\t\tthisSiteJson.latLng)))+'km)';\r\n\t\tthis._textElement.appendChild(this._distanceElement);\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport ClickedOffManager from '../ui_core/ClickedOffManager';\r\nimport NearbySite from './NearbySite';\r\nimport './NearbySites.css';\r\nexport default class NearbySites{\r\n\tconstructor(props){\r\n\t\tconst {}=props;\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add('nearby-sites');\r\n\t\tthis.initialize = this.initialize.bind(this);\r\n\t\tthis.show = this.show.bind(this);\r\n\t\tthis.hide= this.hide.bind(this);\r\n\t\tthis._setVisible= this._setVisible.bind(this);\r\n\t\tthis._clickedOffManager = new ClickedOffManager({element:this._element, hide:this.hide});\r\n\t}\r\n\tinitialize({siteJsons, thisSiteJson}){\r\n\t\tsiteJsons.entries.forEach(siteJson=>{\r\n\t\t\tif(siteJson===thisSiteJson)return;\r\n\t\t\tconst nearbySite = new NearbySite({siteJson, thisSiteJson});\r\n\t\t\tthis._element.appendChild(nearbySite.element);\r\n\t\t});\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n\tshow(){\r\n\t\tthis._clickedOffManager.register();\r\n\t\tthis._setVisible(true);\r\n\t}\r\n\t_setVisible(value){\r\n\t\tif(value)\r\n\t\t\tthis._element.classList.add('visible');\r\n\t\telse \r\n\t\t\tthis._element.classList.remove('visible');\r\n\t}\r\n\thide(){\r\n\t\tthis._clickedOffManager.dispose();\r\n\t\tthis._setVisible(false);\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport './SitePlan.css';\r\nimport PlotMoreInformationType from '../enums/PlotMoreInformationType';\r\nimport BirdsEyeView from './BirdsEyeView';\r\nimport Filters from './Filters';\r\nimport AvailablePricesFilter from './AvailablePricesFilter';\r\nimport Favourite from '../favourites/Favourite';\r\nimport StatusFilter from './StatusFilter';\r\nimport BedroomsFilter from './BedroomsFilter';\r\nimport FeaturesFilter from './FeaturesFilter';\r\nimport MenuBar from './MenuBar';\r\nimport MainMenu from './MainMenu';\r\nimport VideoPlayer from './VideoPlayer';\r\nimport MenuManager from './MenuManager';\r\nimport HouseTypeFilter from './HouseTypeFilter';\r\nimport PlotFilterer from '../filters/PlotFilterer';\r\nimport PlotSearch from './PlotSearch';\r\nimport SitePicker from './SitePicker';\r\nimport Spinner from './Spinner';\r\nimport MouseBlocker from './MouseBlocker';\r\nimport Handles from '../core/Handles';\r\nimport PlotMoreInformation from './PlotMoreInformation';\r\nimport BrochureGeneration from './BrochureGeneration';\r\nimport ImageViewer from './ImageViewer';\r\nimport Favourites from './Favourites';\r\nimport Dialog from './Dialog';\r\nimport AssetsManager from '../assets_management/AssetsManager';\r\nimport StylesHelper from '../html/StylesHelper';\r\nimport PrivacyPolicy from './PrivacyPolicy';\r\nimport SitePlan3D from './SitePlan3D';\r\nimport SitePlan360 from './SitePlan360';\r\nimport Configurator from './Configurator';\r\nimport Urls from '../urls/Urls';\r\nimport SitePlanVisibleType from '../enums/SitePlanVisibleType';\r\nimport PlotMenu from './PlotMenu';\r\nimport UrlHelper from '../core/UrlHelper';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport BrochuresMenu from '../brochures/BrochuresMenu';\r\nimport BrochuresManager from '../brochures/BrochuresManager';\r\nimport PlotDetailedInformationsManager from '../plot_detailed_information/PlotDetailedInformationsManager';\r\nimport PlotComparisonManager from '../plot_detailed_information/PlotComparisonManager';\r\nimport PlotsSelectionMenu from './PlotsSelectionMenu';\r\nimport HouseTypesViewer from '../house_types_viewer/HouseTypesViewer';\r\nimport HouseTypesViewModel from '../view_models/HouseTypesViewModel';\r\nimport PlotStatus from '../site/PlotStatus';\r\nimport FullScreenImagesViewer from './FullScreenImagesViewer';\r\nimport NearbySites from './NearbySites';\r\nconst urlParams = new URLSearchParams(window.location.search);\r\nconst hashType = window.location.href.split('#')[1];\r\nconst{throwNotProvided}=ParameterErrors;\r\nexport default class SitePlan extends Component {\r\n\tstatic get BIRDS_EYE_VIEW_ZOOM_MIN(){\r\n\t\treturn 1;\r\n\t}\r\n\tstatic get BIRDS_EYE_VIEW_ZOOM_MAX(){\r\n\t\treturn 6;\r\n\t}\r\n\tstatic get _MAX_FAVOURITES(){\r\n\t\treturn 10\r\n\t}\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {configuration, callbackDidMount}=props;\r\n\t\tthis._callbackDidMount = callbackDidMount;\r\n\t\tthis._getConfiguration = ()=>configuration;\r\n\t\tthis._elementRef = React.createRef();\r\n\t\tthis._menuBarRef=React.createRef();\r\n\t\tthis._mainMenuRef = React.createRef();\r\n\t\tthis._filtersRef=React.createRef();\r\n\t\tthis._availablePricesFilterRef = React.createRef(); \r\n\t\tthis._statusFilterRef = React.createRef();\r\n\t\tthis._bedroomsFilterRef = React.createRef();\r\n\t\tthis._plotSearchRef = React.createRef();\r\n\t\tthis._houseTypeFilterRef = React.createRef();\r\n\t\tthis._featuresFilterRef = React.createRef();\r\n\t\tthis._spinnerRef = React.createRef();\r\n\t\tthis._mouseBlockerRef=React.createRef();\r\n\t\tthis._plotMoreInformationRef=React.createRef();\r\n\t\tthis._brochureGenerationRef = React.createRef();\r\n\t\tthis._favouritesRef = React.createRef();\r\n\t\tthis._imageViewerRef=React.createRef();\r\n\t\tthis._showForSale=this._showForSale.bind(this);\r\n\t\tthis.initialize = this.initialize.bind(this);\r\n\t\tthis._birdsEyeViewRef=React.createRef();\r\n\t\tthis._privacyPolicyRef= React.createRef();\r\n\t\tthis._sitePlan3DRef = React.createRef();\r\n\t\tthis._sitePlan360Ref = React.createRef();\r\n\t\tthis._configuratorRef = React.createRef();\r\n\t\tthis._menuManagerRef = React.createRef();\r\n\t\tthis._plotMenuRef = React.createRef();\r\n\t\tthis._brochuresMenuRef = React.createRef();\r\n\t\tthis._spinnerHandles = new Handles();\r\n\t\tthis._loadSite= this._loadSite.bind(this);\r\n\t\tthis._load3dSite= this._load3dSite.bind(this);\r\n\t\tthis._getFilteredPlots = this._getFilteredPlots.bind(this);\r\n\t\tthis._handleShowMainMenu = this._handleShowMainMenu.bind(this);\r\n\t\tthis._filtersChanged=this._filtersChanged.bind(this);\r\n\t\tthis._filterAndLoadPlots=this._filterAndLoadPlots.bind(this);\r\n\t\tthis._loadIndividualPlot = this._loadIndividualPlot.bind(this);\r\n\t\tthis._clearFilters = this._clearFilters.bind(this);\r\n\t\tthis._plotSearchSelectedPlot=this._plotSearchSelectedPlot.bind(this);\r\n\t\tthis._getDimensions = this._getDimensions.bind(this);\r\n\t\tthis._handleShowPlotMoreInformation = this._handleShowPlotMoreInformation.bind(this);\r\n\t\tthis._handlePlaySiteVideo = this._handlePlaySiteVideo.bind(this);\r\n\t\tthis._handleShowTwoDSitePlan = this._handleShowTwoDSitePlan.bind(this);\r\n\t\tthis._handleClickedFavourite = this._handleClickedFavourite.bind(this);\r\n\t\tthis._handleZoomChange = this._handleZoomChange.bind(this);\r\n\t\tthis.resize= this.resize.bind(this);\r\n\t\tthis._setMenuBarZoom= this._setMenuBarZoom.bind(this);\r\n\t\tthis._handleSetFavouritesActive= this._handleSetFavouritesActive.bind(this);\r\n\t\tthis._handleFavouritesHide= this._handleFavouritesHide.bind(this);\r\n\t\tthis._handleExpandImage=this._handleExpandImage.bind(this);\r\n\t\tthis._handleAddFavourite = this._handleAddFavourite.bind(this);\r\n\t\tthis._handleRemoveFavourite = this._handleRemoveFavourite.bind(this);\r\n\t\tthis._handleShowOutside360 = this._handleShowOutside360.bind(this);\r\n\t\tthis._handleShowDefaultOutside360 = this._handleShowDefaultOutside360.bind(this);\r\n\t\tthis._handleShow3d = this._handleShow3d.bind(this);\r\n\t\tthis._handleShowBrochures = this._handleShowBrochures.bind(this);\r\n\t\tthis._handleBackFromSitePlan360 = this._handleBackFromSitePlan360.bind(this);\r\n\t\tthis._handleEnterHouse = this._handleEnterHouse.bind(this);\r\n\t\tthis._handleShowSuggestedSites = this._handleShowSuggestedSites.bind(this);\r\n\t\tthis._initializeConfiguredCssClasses = this._initializeConfiguredCssClasses.bind(this);\r\n\t\tthis._showTooManyFavouritesDialog = this._showTooManyFavouritesDialog.bind(this);\r\n\t\tthis._handlePreviousSitePlanVisibleTypeElseDefault = this._handlePreviousSitePlanVisibleTypeElseDefault.bind(this);\r\n\t\tthis._handleShowBrochureGenerationDialog= this._handleShowBrochureGenerationDialog.bind(this);\r\n\t\tthis._handleShowSendFavouritesBrochure= this._handleShowSendFavouritesBrochure.bind(this);\r\n\t\tthis._handleShowStreetView= this._handleShowStreetView.bind(this);\r\n\t\tthis._hasSpaceToShowMenuOnOpen= this._hasSpaceToShowMenuOnOpen.bind(this);\r\n\t\tthis._menuBarIsHorizontalChanged = this._menuBarIsHorizontalChanged.bind(this);\r\n\t\tthis._handleEnterHouseByPlotNumber = this._handleEnterHouseByPlotNumber.bind(this);\r\n\t\tthis._setupFirstShowPlotMarkers = this._setupFirstShowPlotMarkers.bind(this);\r\n\t\tthis._showPlotDetailedInformation = this._showPlotDetailedInformation.bind(this);\r\n\t\tthis._showImagesFullScreen = this._showImagesFullScreen.bind(this);\r\n\t\tthis._handleShowPlots = this._handleShowPlots.bind(this);\r\n\t\tthis._handleShowHouseTypes = this._handleShowHouseTypes.bind(this);\r\n\t\tthis._showPlotMenuForPlot = this._showPlotMenuForPlot.bind(this);\r\n\t\tthis.setFilterInSiteFromWhatAreYouLookingFor = this.setFilterInSiteFromWhatAreYouLookingFor.bind(this);\r\n\t\tthis._previousSitePlanVisibleType = null;\r\n\t\tthis._currentSitePlanVisibleType = null;\r\n\t\tthis._plotFilterer = new PlotFilterer();\r\n\t\tthis._siteJson = null;\r\n\t\tthis._initializedConfiguredCssClasses = null;\r\n\t\tthis._showPlotMarkers = false;\r\n\t\tthis._doneFirstShowPlotMarkers=false;\r\n\t\tthis.state = {birdsEyeView:null, menuBarHorizontal:false, fadeInPlotMarkers:true}\r\n\t}\r\n\tinitialize({siteJsons}){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tconst spinnerHandle = this._spinnerHandles.take();\r\n\t\t\tthis._loadSite(siteJsons).then(()=>{\t\r\n\t\t\t\tspinnerHandle.dispose()\r\n\t\t\t\tresolve(this);\r\n\t\t\t}).catch((err)=>{\r\n\t\t\t\tspinnerHandle.dispose();\r\n\t\t\t\treject(err);\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\t_loadSite(siteJsons){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tAssetsManager.getSiteAssets(this._getConfiguration()).then(({siteJson, configuration})=>{\r\n\t\t\t\tthis._siteJson = siteJson;\r\n\t\t\t\tthis._houseTypesViewModel = new HouseTypesViewModel(this._siteJson.getPlotsArray());\r\n\t\t\t\tconst unitsArray = siteJson.units.getArray();\r\n\t\t\t\tconst plotsArray = siteJson.units.getPlotsArray();\r\n\t\t\t\tthis._initializeConfiguredCssClasses(configuration.plotStatusConfigurations);\r\n\t\t\t\tthis._plotFilterer.clearFilters();\r\n\t\t\t\tthis._availablePricesFilterRef.current.load({plotsArray:plotsArray, availablePricesSettings:this._siteJson.filtersSettings.availablePricesSettings,\r\n\t\t\t\t\tcurrencyConfiguration:this._siteJson.currencyConfiguration});\r\n\t\t\t\t\tthis._featuresFilterRef.current.load({siteJson});\r\n\t\t\t\tthis._statusFilterRef.current.load(plotsArray);\r\n\t\t\t\tthis._houseTypeFilterRef.current.load(this._houseTypesViewModel, siteJson);\r\n\t\t\t\tthis._bedroomsFilterRef.current.load(plotsArray);\r\n\t\t\t\tthis._plotSearchRef.current.load(siteJson.units);\r\n\t\t\t\tthis._plotsSelectionMenu?.initialize({siteJson});\r\n\t\t\t\tthis._houseTypesViewer?.initialize({siteJson, \r\n\t\t\t\t\thouseTypesViewModel:this._houseTypesViewModel});\r\n\t\t\t\tif(siteJsons)\r\n\t\t\t\t\tthis._nearbySites?.initialize({siteJsons, thisSiteJson:siteJson});\r\n\t\t\t\tthis._filtersRef.current.load({siteJson});\r\n\t\t\t\tthis._filterAndLoadPlots().then(()=>{\r\n\t\t\t\t\tthis._sitePlan360Ref.current.load(siteJson, this._getConfiguration()).then(()=>{//needs to be visible as loads.\r\n\t\t\t\t\t\t\tthis._setVisibleType(SitePlanVisibleType.BIRDS_EYE_VIEW);\r\n\t\t\t\t\t\t\tif(this._hasSpaceToShowMenuOnOpen()){\r\n\t\t\t\t\t\t\t\tthis._handleShowMainMenu();//simpligon \r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tthis._setupFirstShowPlotMarkers();\r\n\t\t\t\t\t\tresolve();\r\n\t\t\t\t\t}).catch(reject);\r\n\t\t\t\t}).catch(reject);\r\n\t\t\t}).catch(reject);\r\n\t\t});\r\n\t}\r\n\t_initializeThreeDIfEnabled({configuration, siteJson}){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tif(!configuration.threeDEnabled)return Promise.resolve();\r\n\t\t\tthis._sitePlan3DRef.current.load(siteJson).then(resolve).catch(reject);\r\n\t\t});\r\n\t}\r\n\tsetFilterInSiteFromWhatAreYouLookingFor(whatAreYouLookingForViewModel){\r\n\t\twhatAreYouLookingForViewModel.visible = false;\r\n\t\tconst plotsStillAvailableWithAnd = whatAreYouLookingForViewModel.getPlotsStillAvailableForSite(this._siteJson);\r\n\t\tif(plotsStillAvailableWithAnd.length>0){\r\n\t\t\tthis._plotFilterer.clearFilters();\r\n\t\t\tthis._statusFilterRef.current.setAvailableOnly();\r\n\t\t\tthis._houseTypeFilterRef.current.setFromWhatAreYouLookingForViewModel(whatAreYouLookingForViewModel);\r\n\t\t\tthis._bedroomsFilterRef.current.setFromWhatAreYouLookingForViewModel(whatAreYouLookingForViewModel);\r\n\t\t\tthis._availablePricesFilterRef.current.setFromWhatAreYouLookingForViewModel(whatAreYouLookingForViewModel);\r\n\t\t\tconst filteredPlots = this._getFilteredPlots();\r\n\t\t\tif(filteredPlots.length>0){\r\n\t\t\t\tthis._plotsSelectionMenu?.setFilteredPlots(filteredPlots);\r\n\t\t\t\tthis._plotMenuRef.current.setFilteredPlots(filteredPlots);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tconst loadPlotsDirectory = (plots, message)=>{\t\r\n\t\t\tthis._doneFirstShowPlotMarkers=true;\t\t\r\n\t\t\tconst siteJsonUnits = [];\r\n\t\t\tplots.forEach(plot=>{\r\n\t\t\t\tif(siteJsonUnits.indexOf(plot.unit)<0)\r\n\t\t\t\t\tsiteJsonUnits.push(plot.unit);\r\n\t\t\t});\r\n\t\t\tthis._birdsEyeViewRef.current.load({siteJson:this._siteJson, unitsArray:siteJsonUnits,\r\n\t\t\t\tshowPlotMarkers:true, filtered:false})\r\n\t\t\t.catch(console.error);\r\n\t\t\tthis._plotsSelectionMenu?.setFilteredPlots(plots);\r\n\t\t\tthis._plotMenuRef.current.setFilteredPlots(plots);\r\n\t\t\t/*\r\n\t\t\tthis._currentDialog = Dialog.create({\r\n\t\t\t\ttitle:'Info', \r\n\t\t\t\tclassName:'brochure-generation-result-dialog error',\r\n\t\t\t\tmessage:message,\r\n\t\t\t\toptions:[{text:'OK', callback:()=>{\r\n\t\t\t\t\t\r\n\t\t\t\t}}]}\r\n\t\t\t);*/\r\n\t\t};\r\n\t\t\r\n\t\tconst plotsStillAvailableWithOr = whatAreYouLookingForViewModel.getPlotsStillAvailableWithOr(this._siteJson);\r\n\t\tif(plotsStillAvailableWithOr.length>0)\r\n\t\t{\r\n\t\t\tconsole.log('plotsStillAvailableWithOr');\r\n\t\t\tconsole.log(plotsStillAvailableWithOr.length);\r\n\t\t\tloadPlotsDirectory(plotsStillAvailableWithOr, \r\n\t\t\t\t'No plots matched all filters. The active plots matched some of the filters!');\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t\r\n\t\tconst allPlots = this._siteJson.getPlotsArray();\r\n\t\tconst allAvailablePlotsForSite = allPlots.filter(siteJsonUnitPlot=>siteJsonUnitPlot.status===PlotStatus.AVAILABLE);\r\n\t\tif(allAvailablePlotsForSite.length>0){\r\n\t\t\tconsole.log('allAvailablePlotsForSite');\r\n\t\t\tconsole.log(allAvailablePlotsForSite.length);\r\n\t\t\tloadPlotsDirectory(allAvailablePlotsForSite, \r\n\t\t\t\t'No available plots currently match what you’re looking for, please see other available plots below');\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t\r\n\t\tconst allPlotsThatCouldBecomeAvailable = allPlots.filter(siteJsonUnitPlot=>siteJsonUnitPlot.status!==PlotStatus.SOLD_OR_UNAVAILABLE&&siteJsonUnitPlot.status!==PlotStatus.RESERVED);\r\n\t\tif(allPlotsThatCouldBecomeAvailable.length>0){\r\n\t\t\tloadPlotsDirectory(allPlotsThatCouldBecomeAvailable,\r\n\t\t\t\t'The site had no available plots. Please see other plots which may become available');\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t\r\n\t\tloadPlotsDirectory(allPlots, 'The site had no available plots. Showing other plots.');\r\n\t\t\r\n\t}\r\n\tresize(){\r\n\t\tconsole.log('resized_fdfd');\r\n\t\tthis._birdsEyeViewRef.current?.resize();\r\n\t}\r\n\t_load3dSite(){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tAssetsManager.getSiteAssets(this._getConfiguration()).then(({siteJson, configuration})=>{\r\n\t\t\t\tthis._sitePlan3DRef.current.load(siteJson).then(()=>{\r\n\t\t\t\t\tresolve();\r\n\t\t\t\t}).catch(reject);\r\n\t\t\t}).catch(reject);\r\n\t\t});\r\n\t}\r\n\t_setupFirstShowPlotMarkers(){\r\n\t\tconst delayShowPlotMarkersSeconds = this._getConfiguration().delayShowPlotMarkersSeconds;\r\n\t\tconst show = ()=>{\r\n\t\t\tif(this._doneFirstShowPlotMarkers)return;\r\n\t\t\tthis._doneFirstShowPlotMarkers = true;\r\n\t\t\tthis._showPlotMarkers= true;\r\n\t\t\tthis._filterAndLoadPlots().then(()=>{\r\n\t\t\t\tsetTimeout(()=>{\r\n\t\t\t\t\tthis.setState({fadeInPlotMarkers:false});\r\n\t\t\t\t}, 5000);\r\n\t\t\t}).catch(console.error);\r\n\t\t};\r\n\t\tif(delayShowPlotMarkersSeconds>0){\r\n\t\t\tsetTimeout(show,delayShowPlotMarkersSeconds*1000);\r\n\t\t}\r\n\t\tconst handleFirstMouseDown = ()=>{\r\n\t\t\tdocument.documentElement.removeEventListener('mousedown', handleFirstMouseDown);\r\n\t\t\tshow();\r\n\t\t};\r\n\t\tdocument.documentElement.addEventListener('mousedown', handleFirstMouseDown);\r\n\t}\r\n\t_setVisibleType(sitePlanVisibleType){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tthis._previousSitePlanVisibleType = this._currentSitePlanVisibleType;\r\n\t\t\tswitch(sitePlanVisibleType){\r\n\t\t\t\tcase SitePlanVisibleType.BIRDS_EYE_VIEW:\r\n\t\t\t\t\tthis._birdsEyeViewRef.current.setVisible(true);\r\n\t\t\t\t\tthis._sitePlan360Ref.current.setVisible(false);\r\n\t\t\t\t\tthis._sitePlan3DRef.current.setVisible(false);\r\n\t\t\t\t\tthis._configuratorRef.current.setVisible(false);\r\n\t\t\t\tbreak;\r\n\t\t\t\tcase SitePlanVisibleType.OUTSIDE_360:\r\n\t\t\t\t\tthis._birdsEyeViewRef.current.setVisible(false);\r\n\t\t\t\t\tthis._sitePlan360Ref.current.setVisible(true);\r\n\t\t\t\t\tthis._sitePlan3DRef.current.setVisible(false);\r\n\t\t\t\t\tthis._configuratorRef.current.setVisible(false);\r\n\t\t\t\tbreak;\r\n\t\t\t\tcase SitePlanVisibleType.CONFIGURATOR:\r\n\t\t\t\t\tthis._birdsEyeViewRef.current.setVisible(false);\r\n\t\t\t\t\tthis._sitePlan360Ref.current.setVisible(false);\r\n\t\t\t\t\tthis._sitePlan3DRef.current.setVisible(false);\r\n\t\t\t\t\tthis._configuratorRef.current.setVisible(true);\r\n\t\t\t\tbreak;\r\n\t\t\t\tcase SitePlanVisibleType.THREE_D:\r\n\t\t\t\t\tthis._birdsEyeViewRef.current.setVisible(false);\r\n\t\t\t\t\tthis._sitePlan360Ref.current.setVisible(false);\r\n\t\t\t\t\tthis._sitePlan3DRef.current.setVisible(true);\r\n\t\t\t\t\tthis._configuratorRef.current.setVisible(false);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tthis._currentSitePlanVisibleType = sitePlanVisibleType;\r\n\t\t\tthis.setState({sitePlanVisibleType:sitePlanVisibleType});\r\n\t\t});\r\n\t}\r\n\t_getDimensions(){\r\n\t\tconst element = this._elementRef.current;\r\n\t\tif(!element)return null;\r\n\t\treturn [element.offsetWidth, element.offsetHeight];\r\n\t}\r\n\t_hasSpaceToShowMenuOnOpen(){\r\n\t\tconst dimensions = this._getDimensions();\r\n\t\tif(!dimensions)return false;\r\n\t\treturn (dimensions[0]>800)&&(dimensions[1]>400);\r\n\t}\r\n\t_handleShowMainMenu(){\r\n\t\t//if(!this._getConfiguration().goStraightToFiltersMenu){\r\n\t\t//\tthis._mainMenuRef.current.show();\r\n\t\t//\treturn;\r\n\t\t//}\r\n\t\tthis._filtersRef.current.show();\r\n\t\t\r\n\t}\r\n\t_filterAndLoadPlots(){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tsetTimeout(()=>{\r\n\t\t\t\tconst filteredPlots = this._getFilteredPlots();\r\n\t\t\t\tconst filteredUnits = this._siteJson.units.getArray().filter(unit=>{\r\n\t\t\t\t\tconst unitPlotsArray = unit.plots;\r\n\t\t\t\t\tfor(var i=0; i=0)\r\n\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t});\r\n\t\t\t\tthis._plotsSelectionMenu?.setFilteredPlots(filteredPlots);\r\n\t\t\t\tthis._plotMenuRef.current.setFilteredPlots(filteredPlots);\r\n\t\t\t\tthis._birdsEyeViewRef.current.load({siteJson:this._siteJson, unitsArray:filteredUnits,\r\n\t\t\t\tshowPlotMarkers:this._showPlotMarkers||this._doneFirstShowPlotMarkers||(this._showPlotMarkers= this._plotFilterer.filtersApplied), filtered:true})\r\n\t\t\t\t.then(resolve).catch(reject);\r\n\t\t\t}, 0);\r\n\t\t});\r\n\t}\r\n\t_getFilteredPlots(){\r\n\t\treturn this._plotFilterer.filterPlots(this._siteJson.units.getPlotsArray())\r\n\t\t\t\t\t.filter(plot=>!plot.affordable);\r\n\t}\r\n\t_loadIndividualPlot(plot){\r\n\t\tsetTimeout(()=>{\r\n\t\t\tthis._birdsEyeViewRef.current.load({siteJson:this._siteJson, unitsArray:[plot.unit], filtered:true});\r\n\t\t},0\t);\r\n\t}\r\n\t_filtersChanged(){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tthis._plotSearchRef.current.clear();\r\n\t\t\tthis.setState({fadeInPlotMarkers:false});\r\n\t\t\tthis._filterAndLoadPlots().then(()=>{\r\n\t\t\t\tresolve();\r\n\t\t\t}).catch(reject);\r\n\t\t});\r\n\t}\r\n\tcomponentDidMount(){\r\n\t\tthis._callbackDidMount(this);\r\n\t\tthis._plotFilterer.addPlotFilter(this._availablePricesFilterRef.current);\r\n\t\tthis._plotFilterer.addPlotFilter(this._statusFilterRef.current);\r\n\t\tthis._plotFilterer.addPlotFilter(this._bedroomsFilterRef.current);\r\n\t\tthis._plotFilterer.addPlotFilter(this._houseTypeFilterRef.current);\r\n\t\tthis._plotFilterer.addPlotFilter(this._plotSearchRef.current);\r\n\t\tif(this._featuresFilterRef.current)\r\n\t\t\tthis._plotFilterer.addPlotFilter(this._featuresFilterRef.current);\r\n\t\tthis._menuBarRef.current.addEventListener('isHorizontalChanged', this._menuBarIsHorizontalChanged);\r\n\t\tconst element = this._elementRef.current;\r\n\t\tconst configuration = this._getConfiguration();\r\n\t\tif(configuration.brochuresMenuEnabled){\r\n\t\t\tthis._brochuresMenu = new BrochuresMenu({menuManager:this._menuManagerRef.current,\r\n\t\t\t\tgetHandlesActivateButton:this._menuBarRef.current.getHandlesActivateButton});\r\n\t\t\telement.appendChild(this._brochuresMenu.element);\r\n\t\t}\r\n\t\tthis._videoPlayerFullScreen= new VideoPlayer({\r\n\t\t\tmaximized:true,\r\n\t\t\tcloseable:true\r\n\t\t});\r\n\t\telement.appendChild(this._videoPlayerFullScreen.element);\r\n\t\tif(configuration.plotSelectionMenuEnabled){\r\n\t\t\tthis._plotsSelectionMenu= new PlotsSelectionMenu({\r\n\t\t\t\tshowPlotDetailedInformation:(siteJsonUnitPlot)=>this._plotDetailedInformationsManager.show(siteJsonUnitPlot),\r\n\t\t\t\tshowPlotMenuForPlot:this._showPlotMenuForPlot,\r\n\t\t\t\tshowMenu:this._handleShowMainMenu,\r\n\t\t\t\tclearFilters:this._clearFilters,\r\n\t\t\t\tshowStreetView:this._handleShowStreetView,\r\n\t\t\t\tgetSitePlanVisibleType:()=>this._currentSitePlanVisibleType,\r\n\t\t\t\tgetConfiguration:this._getConfiguration,\r\n\t\t\t\tclickShowForSale:this._showForSale,\r\n\t\t\t\tiMenuManager:this._menuManagerRef.current\r\n\t\t\t});\r\n\t\t\telement.appendChild(this._plotsSelectionMenu.element);\r\n\t\t}\r\n\t\tif(configuration.houseTypesViewerEnabled){\r\n\t\t\tthis._houseTypesViewer= new HouseTypesViewer({\r\n\t\t\t\tshowMenu:this._handleShowMainMenu,\r\n\t\t\t\tclearFilters:this._clearFilters,\r\n\t\t\t\tiHouseTypesFilter:this._houseTypeFilterRef.current.iHouseTypesFilter,\r\n\t\t\t\tshowImagesFullScreen:this._showImagesFullScreen,\r\n\t\t\t\tshowStreetView:this._handleShowStreetView,\r\n\t\t\t\taddFavourite:this._handleAddFavourite, \r\n\t\t\t\tremoveFavourite:this._handleRemoveFavourite,\r\n\t\t\t\tenterHouse:this._handleEnterHouse,\r\n\t\t\t\tconfiguration\r\n\t\t\t});\r\n\t\t\telement.appendChild(this._houseTypesViewer.element);\r\n\t\t}\r\n\t\tthis._plotDetailedInformationsManager = new PlotDetailedInformationsManager({\r\n\t\t\tparentElement:this._elementRef.current, \r\n\t\t\taddFavourite:this._handleAddFavourite, removeFavourite:this._handleRemoveFavourite,\r\n\t\t\tshowStreetView:this._handleShowStreetView, showImagesFullScreen:this._showImagesFullScreen,\r\n\t\t\tshowPlotsMenu:this._plotsSelectionMenu?this._plotsSelectionMenu.show:()=>{},\r\n\t\t\tconfiguration,\r\n\t\t\tshowBrochureGenerationDialog:this._handleShowBrochureGenerationDialog,\r\n\t\t\tenterHouse:this._handleEnterHouse\r\n\t\t});\r\n\t\tthis._fullScreenImageViewer = new FullScreenImagesViewer({configuration});\r\n\t\telement.appendChild(this._fullScreenImageViewer.element);\r\n\t\tPlotComparisonManager.initialize({plotDetailedInformationsManager:\r\n\t\t\tthis._plotDetailedInformationsManager, sitePlanElement:this._elementRef.current});\r\n\t\tthis._nearbySites = new NearbySites({});\r\n\t\telement.appendChild(this._nearbySites.element);\r\n\t}\r\n\t_menuBarIsHorizontalChanged(e){\r\n\t\tconst isHorizontal = e.isHorizontal;\r\n\t\tthis.setState({menuBarHorizontal:isHorizontal});\r\n\t}\r\n\t_clearFilters(){\r\n\t\tthis._plotFilterer.clearFilters();\r\n\t\tthis._filterAndLoadPlots();\r\n\t\tthis._plotSearchRef.current.clear();\r\n\t}\r\n\t_showForSale(){\r\n\t\tthis._statusFilterRef.current.setForSale();\r\n\t}\r\n\t_plotSearchSelectedPlot(plot){\r\n\t\tif(plot===null)\r\n\t\t\tthis._filterAndLoadPlots();\r\n\t\telse\r\n\t\t\tthis._loadIndividualPlot(plot);\r\n\t}\r\n\t_handleShowPlotMoreInformation(plot, plotMoreInformationType){\r\n\t\tconst plotMoreInformation = this._plotMoreInformationRef.current;\r\n\t\tplotMoreInformation.show(this._siteJson, plot, undefined, plotMoreInformationType);\r\n\t}\r\n\t_handleZoomChange(value){\r\n\t\tthis._birdsEyeViewRef.current.setZoom(value);\r\n\t}\r\n\t_setMenuBarZoom(value){\r\n\t\tthis._menuBarRef.current.setZoom(value);\r\n\t}\r\n\t_handleSetFavouritesActive(active){\r\n\t\tif(active)this._favouritesRef.current.show();\r\n\t\telse this._favouritesRef.current.hide();\r\n\t}\r\n\t_handleFavouritesHide(){\r\n\t\tthis._menuBarRef.current.setFavouritesActive(false);\r\n\t}\r\n\t_handleExpandImage(params){\r\n\t\tthis._imageViewerRef.current.load(params);\r\n\t}\r\n\t_handleRemoveFavourite(plot){\r\n\t\tthis._favouritesRef.current.remove(plot.hash);\r\n\t\tplot.selected=false;\r\n\t}\r\n\t_handleAddFavourite(plot){\r\n\t\tconst favourites = this._favouritesRef.current;\r\n\t\tif(favourites.count>=SitePlan._MAX_FAVOURITES){\r\n\t\t\tthis._showTooManyFavouritesDialog();\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tplot.selected=true;\r\n\t\tthis._favouritesRef.current.add(new Favourite({payload:plot, description:`Plot ${plot.number} ${plot.name}`, \r\n\t\timageUrl:`${Urls.getAssetsForSite(this._getConfiguration().siteSlug)}${UrlHelper.removeStartSlash(plot.frontViewImage.getBestEntryToFitHeight(50).relativePath)}`, hash:plot.hash,\r\n\t\t\tsortValue:plot.number,\r\n\t\t\tonRemove:()=>{plot.selected=false;},\r\n\t\t\tonClick:()=>{this._handleClickedFavourite(plot)}\r\n\t\t}));\r\n\t\treturn true;\r\n\t}\r\n\t_handleClickedFavourite(plot){\r\n\t\tif(this._getConfiguration().plotMoreInformationHasOverview){\r\n\t\t\tthis._handleShowPlotMoreInformation(plot, PlotMoreInformationType.OVERVIEW);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t\tswitch(this._currentSitePlanVisibleType){\r\n\t\t\t\tcase SitePlanVisibleType.OUTSIDE_360:\r\n\t\t\t\t\tthis._handleShowStreetView({nearPlot:plot});\r\n\t\t\t\t\treturn;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tthis._showPlotMenuForPlot(plot);\r\n\t\t\t\t\treturn;\r\n\t\t\t}\r\n\t}\r\n\t_handleBackFromSitePlan360(){\r\n\t\tthis._setVisibleType(SitePlanVisibleType.BIRDS_EYE_VIEW);\r\n\t}\r\n\t_handleEnterHouse(plot){\r\n\t\tthis._handleEnterHouseByPlotNumber(plot.number);\r\n\t}\r\n\t_handleEnterHouseByPlotNumber(plotNumber){\r\n\t\tthis._setVisibleType(SitePlanVisibleType.CONFIGURATOR);\r\n\t\tif(!this._siteJson)return;\r\n\t\tconst plot = this._siteJson.getPlotByNumber(plotNumber);\r\n\t\tthis._configuratorRef.current.showConfiguratorForPlot({roomName:null, plot:plot});\r\n\t}\r\n\t_handlePreviousSitePlanVisibleTypeElseDefault(){\r\n\t\tif(this._previousSitePlanVisibleType)\r\n\t\t\tthis._setVisibleType(this._previousSitePlanVisibleType);\r\n\t\telse \r\n\t\t\tthis._setVisibleType(SitePlanVisibleType.BIRDS_EYE_VIEW);\r\n\t}\r\n\t_handleShowOutside360(params){\r\n\t\tlet outside360UniqueId = params?.outside360UniqueId;\r\n\t\tconst cameraDirectionEulerAngles = params?.cameraDirectionEulerAngles;\r\n\t\tif(outside360UniqueId ===undefined||outside360UniqueId===null)\r\n\t\t\toutside360UniqueId=0;\r\n\t\tthis._sitePlan360Ref.current.switchToOutside360(outside360UniqueId, cameraDirectionEulerAngles).then(()=>{\r\n\t\t}).catch(console.error);\r\n\t\tsetTimeout(()=>{\r\n\t\t\tthis._setVisibleType(SitePlanVisibleType.OUTSIDE_360);\r\n\t\t},0);\r\n\t}\r\n\t_handleShow3d(){\r\n\t\tthis._setVisibleType(SitePlanVisibleType.THREE_D);\r\n\t\tthis._load3dSite().then(()=>{\r\n\t\t\t\r\n\t\t}).catch(console.error);\r\n\t}\r\n\t_handleShowDefaultOutside360(){\r\n\t\tconst configuration = this._getConfiguration();\r\n\t\tconst defaultOutside360PlotNumber = configuration.defaultOutside360PlotNumber\r\n\t\t\t?configuration.defaultOutside360PlotNumber:18;\r\n\t\tlet nearestOutside360Move = this._siteJson?.units?.getPlotByNumber(defaultOutside360PlotNumber)?.unit?.nearestOutside360Move;\r\n\t\tif(!nearestOutside360Move)\r\n\t\t\tnearestOutside360Move = this._siteJson?.units?.getFirstPlot()?.unit.nearestOutside360Move;\r\n\t\tif(!nearestOutside360Move)return;\r\n\t\tthis._handleShowOutside360({outside360UniqueId:nearestOutside360Move.outside360UniqueId, \r\n\t\t\tcameraDirectionEulerAngles:nearestOutside360Move.cameraAngleToFaceFrontDoor});\r\n\t}\r\n\t_showTooManyFavouritesDialog(){\r\n\t\tDialog.create({\r\n\t\t\ttitle:'Too many favourites!',\r\n\t\t\tclassName:'brochure-generation-result-dialog error',\r\n\t\t\tmessage:'You may only add up to ten plots. Remove another plot first!',\r\n\t\t\toptions:[{text:'OK'}]\r\n\t\t});\r\n\t}\r\n\t_handleShowBrochureGenerationDialog(params){\r\n\t\tconst plot = params.plot;\r\n\t\tthis._brochureGenerationRef.current.load({plots:plot?[plot]:null});\r\n\t}\r\n\t_handleShowSendFavouritesBrochure(){\r\n\t\tthis._brochureGenerationRef.current.load({});\r\n\t}\r\n\t_handleShowStreetView(e){\r\n\t\tconst nearestOutside360Move = e.nearPlot?.unit.nearestOutside360Move;\r\n\t\tif(!nearestOutside360Move)return;\r\n\t\tthis._handleShowOutside360({outside360UniqueId:nearestOutside360Move.outside360UniqueId, \r\n\t\t\tcameraDirectionEulerAngles:nearestOutside360Move.cameraAngleToFaceFrontDoor});\r\n\t}\r\n\t_handleShowBrochures(){\r\n\t\tthis._brochuresMenu?.show();\r\n\t}\r\n\t_handleShowPlots(){\r\n\t\tthis._plotsSelectionMenu?.show({});\r\n\t}\r\n\t_handleShowHouseTypes(){\r\n\t\tthis._houseTypesViewer?.show({});\r\n\t}\r\n\t_handleShowSuggestedSites(){\r\n\t\tthis._nearbySites.show();\r\n\t}\r\n\t_initializeConfiguredCssClasses(plotStatusConfigurations){\r\n\t\tif(this._initializedConfiguredCssClasses)return;\r\n\t\tconst cssHtmlString = plotStatusConfigurations.toCssHtmlString();\r\n\t\tStylesHelper.appendCssToPage(cssHtmlString);\r\n\t\tthis._initializedConfiguredCssClasses=true;\r\n\t}\r\n\t_showPlotMenuForPlot(plot, zoomOut, c){\r\n\t\tconst showPlotMenu = ()=>{\r\n\t\t\tlet markerPosition;\r\n\t\t\tswitch(this._currentSitePlanVisibleType){\r\n\t\t\t\tcase SitePlanVisibleType.BIRDS_EYE_VIEW:\r\n\t\t\t\t\tmarkerPosition = this._birdsEyeViewRef.current?.getMarkerPositionForPlotNumber(plot.number);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase SitePlanVisibleType.OUTSIDE_360:\r\n\t\t\t\t\tmarkerPosition = c?c:[0,0];\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tthis._showPlotDetailedInformation(plot);\r\n\t\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tthis._plotMenuRef.current.show({position:markerPosition,\r\n\t\t\t\tsiteJson:this._siteJson, plot:this._siteJson.units.getPlotByNumber(plot.number), \r\n\t\t\t\tuntilClickOff:true}).catch(console.error);\r\n\t\t};\r\n\t\tif(zoomOut){\r\n\t\t\tthis._birdsEyeViewRef.current?.setZoom(1).then(()=>{\r\n\t\t\t\tshowPlotMenu();\r\n\t\t\t}).catch(console.error);\r\n\t\t}\r\n\t\telse showPlotMenu();\r\n\t}\r\n\t_showPlotDetailedInformation(siteJsonUnitPlot){\r\n\t\tthis._plotDetailedInformationsManager.show(siteJsonUnitPlot);\r\n\t}\r\n\t_showImagesFullScreen(images){\r\n\t\tthis._fullScreenImageViewer.show({images});\r\n\t}\r\n\t_handlePlaySiteVideo(){\r\n\t\tthis._videoPlayerFullScreen.play({url:Urls.videos+'site.mp4'});\r\n\t}\r\n\t_handleShowTwoDSitePlan(){\r\n\t\tthis._fullScreenImageViewer.show({images:['twoDSitePlan.jpg']});\r\n\t}\r\n\trender() {\r\n\t\tconst classNameSitePlan = \"site-plan \"+(window.isMobile?'mobile ':'')+SitePlanVisibleType.getCssClassName(this.state.sitePlanVisibleType) \r\n\t\t+(this.state.menuBarHorizontal?' menu-bar-horizontal':'')\r\n\t\t+(this.state.fadeInPlotMarkers?' fade-in-unit-markers':'')\r\n\t\t+(this._getConfiguration().threeDEnabled?'':' disable-3d');\r\n\treturn (
    \r\n\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t{}}\r\n\t\t\t\t\tenterHouse={this._handleEnterHouse} addFavourite ={this._handleAddFavourite}\r\n\t\t\t\t\tremoveFavourite={this._handleRemoveFavourite}\r\n\t\t\t\t\tplotMenuRef={this._plotMenuRef}\r\n\t\t\t\t\tshowPlotDetailedInformation={this._showPlotDetailedInformation}\r\n\t\t\t\t\tgetConfiguration={this._getConfiguration}>\r\n\t\t\t\tthis._menuBarRef.current.insertedMenuItemsHandler}\r\n\t\t\t\tgetInsertedMenuItemsAtEndHandler={()=>this._menuBarRef.current.insertedMenuItemsAtEndHandler}\r\n\t\t\t\tonBack={this._handleBackFromSitePlan360} goToConfigurator={this._handleEnterHouseByPlotNumber}\r\n\t\t\t\tshowPlotMenu={this._showPlotMenuForPlot} showPlotDetailedInformation={this._showPlotDetailedInformation}>\r\n\t\t\t\tthis._menuBarRef.current.insertedMenuItemsHandler}\r\n\t\t\t\t\tgetInsertedMenuItemsAtEndHandler={()=>this._menuBarRef.current.insertedMenuItemsAtEndHandler}\r\n\t\t\t\t\tgetConfiguration={this._getConfiguration}\r\n\t\t\t\t>\r\n\t\t\t\tthis._menuBarRef.current.insertedMenuItemsHandler}\r\n\t\t\t\tconfiguration={this._getConfiguration()}/>\r\n\t\t\t
    \r\n\t\t\t\r\n\t\t\t\tthis._birdsEyeViewRef.current} \r\n\t\t\t\t\tshowDefault3d={this._handleShow3d} showBrochures={this._handleShowBrochures}\r\n\t\t\t\t\tshowPlots={this._handleShowPlots} showHouseTypes={this._handleShowHouseTypes}\r\n\t\t\t\t\tplaySiteVideo={this._handlePlaySiteVideo}\r\n\t\t\t\t\tshowTwoDSitePlan={this._handleShowTwoDSitePlan}\r\n\t\t\t\t\tshowSuggestedSites={this._handleShowSuggestedSites}>\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t[this._siteJson, this._siteJson.units]}\r\n\t\t\t\t\tgetSelectedFavourites={()=>this._favouritesRef.current.selectedFavourites.map(favourite=>favourite.payload)}\r\n\t\t\t\tshowBrochuresMenu={()=>{this._brochuresMenu?.show({scrollToBottom:true});}}\r\n\t\t\t\tgetConfiguration={this._getConfiguration}/>\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t
    )\r\n\t}\r\n}\r\n","import ReactDOM from 'react-dom';\r\nimport React, { Component } from 'react';\r\nimport './SitePlans.css';\r\nimport AssetsManager from '../assets_management/AssetsManager';\r\nimport SitePlan from './SitePlan';\r\nimport GenericWindow from '../window/GenericWindow';\r\nimport Windows from '../window/Windows';\r\nimport WindowType from '../enums/WindowType';\r\nimport WindowEventNames from '../window/WindowEventNames';\r\nexport default class SitePlanWrapper {\r\n\tconstructor({configuration, parentElement, hasFilteredOptions, siteJsons, singleSite}){\r\n\t\tsingleSite=true;\r\n\t\tthis._configuration = configuration;\r\n\t\tthis._hasFilteredOptions = hasFilteredOptions;\r\n\t\tthis._siteJsons = siteJsons;\r\n\t\tthis.initialize = this.initialize.bind(this);\r\n\t\tthis.show = this.show.bind(this);\r\n\t\tthis.hide = this.hide.bind(this);\r\n\t\tthis.fillLeftHalf = this.fillLeftHalf.bind(this);\r\n\t\tthis.fillRightHalf = this.fillRightHalf.bind(this);\r\n\t\tconst title = this._configuration.siteName;\r\n\t\tthis._window = new GenericWindow({tooltipMessage:title, name:title, \r\n\t\t\tminWidth:100, maxWidth:1700, minHeight:100, maxHeight:1000,\r\n\t\t\tdefaultWidth:600, defaultHeight:600, defaultX:10, defaultY:10, minimized:(!singleSite)&&(!hasFilteredOptions), \r\n\t\t\tmaximized:false, minimizable:true, maximizable:true, closeable:true,\r\n\t\t\tminimizeOnClose:true, resizable:((!window.isMobile)&&(!singleSite)), dragable:(!singleSite),\r\n\t\t\ttype:WindowType.SITE_PLAN,\r\n\t\t\tparentElement\r\n\t });\r\n\t\tthis._element = this._window.getElement();\r\n\t\tthis._element.classList.add('site-plan-wrapper');\r\n\t}\r\n\t\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n\tget hasFilteredOptions(){\r\n\t\treturn this._hasFilteredOptions;\r\n\t}\r\n\tfillLeftHalf(){\r\n\t\tthis._window.fillLeftHalf();\r\n\t}\r\n\tfillRightHalf(){\r\n\t\tthis._window.fillRightHalf();\r\n\t}\r\n\tshow(maximised){\r\n\t\tif(!maximised)\r\n\t\t\tthis._window.unminimize();\r\n\t\telse this._window.maximize();\r\n\t\tthis._window.bringToFront();\r\n\t}\r\n\thide(){\r\n\t\tthis._window.minimize();\r\n\t}\r\n\tget sitePlan(){\r\n\t\treturn this._sitePlan;\r\n\t}\r\n\tget siteName(){\r\n\t\treturn this._configuration.siteName;\r\n\t}\r\n\tinitialize(){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tconst sitePlanFactory = React.createFactory(SitePlan);\r\n\t\t\tReactDOM.render(sitePlanFactory({ \r\n\t\t\t\tref:React.createRef(),\r\n\t\t\t\tconfiguration:this._configuration,\r\n\t\t\t\tcallbackDidMount:(sitePlan)=>{\r\n\t\t\t\t\tthis._sitePlan = sitePlan;\r\n\t\t\t\t\tsetTimeout(()=>{\r\n\t\t\t\t\t\tsitePlan.initialize({siteJsons:this._siteJsons}).then(()=>{\r\n\t\t\t\t\t\t\tresolve(sitePlan);\r\n\t\t\t\t\t\t}).catch(reject);\r\n\t\t\t\t\t},0);\r\n\t\t\t\t\tthis._window.addEventListener(WindowEventNames.MAXIMIZED, this._sitePlan.resize);\r\n\t\t\t\t\tthis._window.addEventListener(WindowEventNames.MINIMIZED, this._sitePlan.resize);\r\n\t\t\t\t}\r\n\t\t\t}),\r\n\t\t\tthis._window.getMainElement());\r\n\t\t});\r\n\t}\r\n}\r\n","import ParameterErrors from '../errors/ParameterErrors';\r\nimport AssetsManager from '../assets_management/AssetsManager';\r\nimport Iterator from '../core/Iterator';\r\nimport PropertyBindingFactory from '../mvvm/PropertyBindingFactory';\r\nimport enableAcceptBindings from '../mvvm/enableAcceptBindings';\r\nimport exposeBinding from '../mvvm/exposeBinding';\r\nimport WhenFinishedModifying from '../core/WhenFinishedModifying';\r\nconst { throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class SiteJsons{\r\n\tconstructor(){\r\n\t\tenableAcceptBindings(this);\r\n\t\tthis.initialize = this.initialize.bind(this);\r\n\t\tthis._updateAllFeatures = this._updateAllFeatures.bind(this);\r\n\t\tthis._whenFinishedModifyingSiteJsonAllFeatures = new WhenFinishedModifying({\r\n\t\t\tdelay:0.1, callback:this._updateAllFeatures\r\n\t\t});\r\n\t}\r\n\tget entries(){\r\n\t\treturn this._entries;\r\n\t}\r\n\tgetPlotsArray(){\r\n\t\tlet siteJsonUnitPlots = [];\r\n\t\tthis._entries.forEach(siteJson=>{\r\n\t\t\tsiteJsonUnitPlots = siteJsonUnitPlots.concat(siteJson.getPlotsArray());\r\n\t\t});\r\n\t\treturn siteJsonUnitPlots;\r\n\t}\r\n\t\r\n\tget units(){\r\n\t\tlet siteJsonUnits = [];\r\n\t\tthis._entries.forEach(siteJson=>{\r\n\t\t\tsiteJson.units.forEach(siteJsonUnit=>{\r\n\t\t\t\tif(siteJsonUnits.indexOf(siteJsonUnit)<0)\r\n\t\t\t\t\tsiteJsonUnits.push(siteJsonUnit);\r\n\t\t\t});\r\n\t\t});\r\n\t\treturn siteJsonUnits;\r\n\t}\r\n\tget houseTypes(){\r\n\t\tconst entries = [];\r\n\t\tthis._entries.forEach(siteJson=>{\r\n\t\t\tsiteJson.houseTypes.forEach(houseType=>{\r\n\t\t\t\tif(entries.indexOf(houseType)<0)\r\n\t\t\t\t\tentries.push(houseType);\r\n\t\t\t});\r\n\t\t});\r\n\t\treturn entries;\r\n\t}\r\n\tget allFeatures(){\r\n\t\treturn this._allFeatures;\r\n\t}\r\n\t_updateAllFeatures(){\r\n\t\tconst allFeatures = [];\r\n\t\tconst seenIds = [];\r\n\t\tif(!this._entries)return;\r\n\t\tthis._entries.forEach(siteJson=>{\r\n\t\t\tif(!siteJson.allFeatures)return;\r\n\t\t\tsiteJson.allFeatures.forEach(feature=>{\r\n\t\t\t\tif(seenIds.indexOf(feature.id)<0){\r\n\t\t\t\t\tseenIds.push(feature.id);\r\n\t\t\t\t\tallFeatures.push(feature);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t});\r\n\t\tthis._allFeatures = allFeatures;\r\n\t\tthis.bindingsHandler.changed('allFeatures', this._allFeatures);\r\n\t}\r\n\t/*\r\n\tget models(){\r\n\t\treturn this._models;\r\n\t}\r\n\tgetPlotByNumber(plotNumber){\r\n\t\treturn this.units.getPlotByNumber(plotNumber);\r\n\t}\r\n\tgetPlotsForHouseType(houseType){\r\n\t\treturn this.getPlotsArray().filter(plot=>plot.houseType===houseType);\r\n\t}*/\r\n\tget minPlotPrice(){\r\n\t\tlet min = null;\r\n\t\tthis.getPlotsArray().forEach(siteJsonUnitPlot=>{\r\n\t\t\tif(siteJsonUnitPlot.price===0||siteJsonUnitPlot.price===null||siteJsonUnitPlot.price===undefined) return;\r\n\t\t\tif(min===null)\r\n\t\t\t\tmin = siteJsonUnitPlot.price;\r\n\t\t\telse \r\n\t\t\t\tif(min>siteJsonUnitPlot.price)\r\n\t\t\t\t\tmin = siteJsonUnitPlot.price;\r\n\t\t});\r\n\t\treturn min;\r\n\t}\r\n\tget maxPlotPrice(){\r\n\t\tlet max = null;\r\n\t\tthis.getPlotsArray().forEach(siteJsonUnitPlot=>{\r\n\t\t\tif(max===null)\r\n\t\t\t\tmax = siteJsonUnitPlot.price;\r\n\t\t\telse \r\n\t\t\t\tif(max{\r\n\t\t\tconst entries = [];\r\n\t\t\tconst configurations = AssetsManager.configurations;\r\n\t\t\tconst configurationsIterator = new Iterator(configurations.entries);\r\n\t\t\tconst doNext = ()=>{\r\n\t\t\t\tif(!configurationsIterator.hasNext()){\r\n\t\t\t\t\tthis._entries = entries;\r\n\t\t\t\t\texposeBinding(this, 'allFeatures', ()=>this.allFeatures, (value)=>this.allFeatures = value);\r\n\t\t\t\t\tthis._updateAllFeatures();\r\n\t\t\t\t\tresolve();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tconst configuration = configurationsIterator.next();\r\n\t\t\t\tAssetsManager.getSiteAssets(configuration).then(({siteJson})=>{\r\n\t\t\t\t\tentries.push(siteJson);\r\n\t\t\t\t\tPropertyBindingFactory.standard(this, siteJson, 'allFeatures', \r\n\t\t\t\t\t\tthis._whenFinishedModifyingSiteJsonAllFeatures.trigger);\r\n\t\t\t\t\tdoNext();\r\n\t\t\t\t}).catch(reject);\r\n\t\t\t};\r\n\t\t\tdoNext();\r\n\t\t});\r\n\t}\r\n}","import React, { Component } from 'react';\r\nimport './DropdownSelectorMenu.css';\r\nimport CheckboxFilter from './CheckboxFilter';\r\nimport ClickedOffManager from '../ui_core/ClickedOffManager';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport stopEventPropagation from'../ui_core/stopEventPropagation';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class DropdownSelectorMenu {\r\n\tconstructor(props){\r\n\t\tconst {classNames, defaultTitle} = props;\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add('dropdown-selector-menu');\r\n\t\tthis._element.innerHTML = defaultTitle;\r\n\t\tthis.showEntries = this.showEntries.bind(this);\r\n\t\tthis.setEntries = this.setEntries.bind(this);\r\n\t\tthis.hideEntries = this.hideEntries.bind(this);\r\n\t\tthis._setExpandedClassName = this._setExpandedClassName.bind(this);\r\n\t\tthis._element.addEventListener('click', this.showEntries)\r\n\t\tthis._entriesElement = document.createElement('div');\r\n\t\tthis._entriesElement.classList.add('entries');\r\n\t\tthis._element.appendChild(this._entriesElement);\r\n\t\tif(classNames){\r\n\t\t\tif(Array.isArray(classNames))\r\n\t\t\t\tclassNames.forEach(className=>this._element.classList.add(className));\r\n\t\t\telse \r\n\t\t\t\tthis._element.classList.add(classNames);\r\n\t\t}\r\n\t\tthis._clickedOffHandle = null;\r\n\t\tthis._clickedOffManager = new ClickedOffManager({element:this._entriesElement, hide:\r\n\t\t\tthis.hideEntries});\r\n\t}\r\n\tshowEntries(){\r\n\t\tthis._setExpandedClassName(true);\r\n\t\tthis._clickedOffManager.register();\r\n\t}\r\n\t_setExpandedClassName(value){\r\n\t\tif(value)\r\n\t\t\tthis._element.classList.add('expanded');\r\n\t\telse \r\n\t\t\tthis._element.classList.remove('expanded');\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n\tsetEntries(entries){\r\n\t\tthis._entries?.forEach(entry=>this._entriesElement.removeChild(entry.element));\r\n\t\tthis._entries =[];\r\n\t\tentries.forEach(entry=>{\r\n\t\t\tconst {callback, value, text, classNames}= entry;\r\n\t\t\tconst entryElement = document.createElement('div');\r\n\t\t\tthis._entriesElement.appendChild(entryElement);\r\n\t\t\tentryElement.innerHTML = text;\r\n\t\t\tentryElement.classList.add('entry');\r\n\t\t\tif(classNames){\r\n\t\t\t\tif(Array.isArray(classNames))\r\n\t\t\t\t\tclassNames.forEach(className=>entryElement.classList.add(className));\r\n\t\t\t\telse entryElement.classList.add(classNames);\r\n\t\t\t}\r\n\t\t\tif(callback){\r\n\t\t\t\tentryElement.addEventListener('click', (e)=>{\r\n\t\t\t\t\te.value = value;\r\n\t\t\t\t\tthis.hideEntries();\r\n\t\t\t\t\tcallback(e);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tstopEventPropagation(entryElement, [ 'touchstart', 'click', 'mousedown' ]);\r\n\t\t\tthis._entries.push({entryElement, callback, value});\r\n\t\t});\r\n\t}\r\n\thideEntries(){\r\n\t\tthis._clickedOffManager.dispose();\r\n\t\tthis._setExpandedClassName(false);\r\n\t}\r\n}\r\n","import './WhatAreYouLookingFor.css';\r\nimport stopEventPropagation from '../ui_core/stopEventPropagation';\r\nimport PropertyBindingFactory from '../mvvm/PropertyBindingFactory';\r\nimport numberWithCommas from '../core/numberWithCommas';\r\nimport IconButtonNonReact from '../components/IconButtonNonReact';\r\nimport Dialog from '../components/Dialog';\r\nimport Urls from '../urls/Urls';\r\nimport Feature from '../enums/Feature';\r\nexport default class WhatAreYouLookingForFirstOptions{\r\n\tconstructor({nBeds, price, houseType, features, whatAreYouLookingForViewModel}){\r\n\t\tthis._whatAreYouLookingForViewModel = whatAreYouLookingForViewModel;\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add('first-options');\r\n\t\tthis._createButton= this._createButton.bind(this);\r\n\t\tthis._clickedNext= this._clickedNext.bind(this);\r\n\t\tthis._getPriceRangeText= this._getPriceRangeText.bind(this);\r\n\t\tthis._setNextEnabled= this._setNextEnabled.bind(this);\r\n\t\tthis._plotsStillAvailableChanged= this._plotsStillAvailableChanged.bind(this);\r\n\t\tthis.collapseExpandedOptions= this.collapseExpandedOptions.bind(this);\r\n\t\tthis._formatNumberToString = this._formatNumberToString.bind(this);\r\n\t\tthis._handleBack = this._handleBack.bind(this);\r\n\t\tthis._get_show= this._get_show.bind(this);\r\n\t\tthis._buttonBedsElement = this._createButton('Beds', 'n-beds-button', this._get_show('n-beds-visible'),\r\n\t\t\t'nBedrooms', (nBedrooms)=>nBedrooms?String(nBedrooms):'');\r\n\t\tthis._buttonPriceElement = this._createButton('Price', 'price-button', \r\n\t\t\tthis._get_show('price-visible', price.becomingVisible), 'priceRange',\r\n\t\t\tthis._getPriceRangeText);\r\n\t\tthis._buttonFeaturesElement = this._createButton('Features', 'features-button', this._get_show('features-visible'),\r\n\t\t\t'features', (features)=>features?features.map(feature=>feature.name).join(','):'');\r\n\t\tthis._buttonHousetypeElement = this._createButton('Housetype', 'housetype-button', \r\n\t\t\tthis._get_show('housetype-visible'), 'houseTypes', \r\n\t\t\t(houseTypeViewModels)=>houseTypeViewModels?houseTypeViewModels.map(houseTypeViewModel=>houseTypeViewModel.name).join(','):'');\r\n\t\tthis._nBeds = nBeds;\r\n\t\tthis._Price = price;\r\n\t\tthis._houseType = houseType;\r\n\t\tthis._features = features;\r\n\t\tnBeds.addEventListener('chose', this.collapseExpandedOptions);\r\n\t\tprice.addEventListener('chose', this.collapseExpandedOptions);\r\n\t\tfeatures.addEventListener('chose', this.collapseExpandedOptions);\r\n\t\thouseType.addEventListener('chose', this.collapseExpandedOptions);\r\n\t\tthis._buttonBedsElement.appendChild(this._nBeds.element);\r\n\t\tthis._buttonPriceElement.appendChild(this._Price.element);\r\n\t\tthis._buttonFeaturesElement.appendChild(this._features.element);\r\n\t\tthis._buttonHousetypeElement.appendChild(this._houseType.element);\r\n\t\tconst buttonNextTitleElement = document.createElement('div');\r\n\t\tbuttonNextTitleElement.classList.add('title');\r\n\t\tbuttonNextTitleElement.innerHTML = \"Find my Home\";\r\n\t\tthis._buttonNext = document.createElement('button');\r\n\t\tthis._buttonNext.classList.add('button-next');\r\n\t\tthis._buttonNext.classList.add('option-button');\r\n\t\tthis._buttonNext.appendChild(buttonNextTitleElement);\r\n\t\tthis._buttonNext.addEventListener('click', this._clickedNext);\r\n\t\tthis._element.appendChild(this._buttonNext);\r\n\t\tthis._propertyBindingPlotsStillAvailable = PropertyBindingFactory.standard(this,\r\n\t\twhatAreYouLookingForViewModel,\r\n\t\t'plotsStillAvailable', this._plotsStillAvailableChanged);\r\n\t}\r\n\t_plotsStillAvailableChanged(value){\r\n\t\tthis._plotsStillAvailable = value;\r\n\t\tthis._nextEnabled = this._whatAreYouLookingForViewModel.hasFilterApplied;\r\n\t\tthis._setNextEnabled(this._nextEnabled);\r\n\t}\r\n\t_setNextEnabled(value){\r\n\t\tif(value)\r\n\t\t\tthis._buttonNext.classList.add('enabled');\r\n\t\telse this._buttonNext.classList.remove('enabled');\r\n\t}\r\n\t_clickedNext(){\r\n\t\tif(!this._nextEnabled)return;\r\n\t\tthis._whatAreYouLookingForViewModel.visible = false;\r\n\t\tthis._whatAreYouLookingForViewModel.setFilterInSite();\r\n\t}\r\n\t_handleBack(){\r\n\t\tthis.collapseExpandedOptions();\r\n\t}\r\n\t_getPriceRangeText(priceRange){\r\n\t\tif(!priceRange)return '';\r\n\t\tconst [priceFrom, priceTo] = priceRange;\r\n\t\tconst hasPriceFrom=priceFrom!==undefined&&priceFrom!==null;\r\n\t\tconst hasPriceTo=priceTo!==undefined&&priceTo!==null;\r\n\t\tif(hasPriceFrom){\r\n\t\t\tif(!hasPriceTo)\r\n\t\t\t\treturn `from ${this._formatNumberToString(priceFrom)}`;\r\n\t\t\treturn `${this._formatNumberToString(priceFrom)} - ${this._formatNumberToString(priceTo)}`;\r\n\t\t}\r\n\t\treturn `to ${this._formatNumberToString(priceTo)}`;\r\n\t}\r\n\t_formatNumberToString(value){\r\n\t\tif(value===undefined||value===null)return value;\r\n\t\tlet str = String(value);\r\n\t\tstr = str.split('.')[0];\r\n\t\treturn numberWithCommas(str);\r\n\t}\r\n\tcollapseExpandedOptions(){\r\n\t\tif(this._currentCssClassNameShow){\r\n\t\t\tthis._element.classList.remove(this._currentCssClassNameShow);\r\n\t\t\tthis._currentCssClassNameShow = null;\r\n\t\t}\r\n\t\tthis._element.classList.remove('has-visible');\r\n\t}\r\n\t_get_show(cssClassNameShow, becomingVisible){\r\n\t\treturn ()=>{\r\n\t\t\tthis.collapseExpandedOptions();\r\n\t\t\tthis._element.classList.add('has-visible');\r\n\t\t\tthis._element.classList.add(cssClassNameShow);\r\n\t\t\tthis._currentCssClassNameShow = cssClassNameShow;\r\n\t\t\tbecomingVisible&&becomingVisible();\r\n\t\t};\r\n\t}\r\n\t_createButton(buttonText, cssClassName, onClick, propertyName, getTextFromValue){\r\n\t\tconst buttonElement = document.createElement('button');\r\n\t\tbuttonElement.classList.add('option-button');\r\n\t\tbuttonElement.classList.add(cssClassName);\r\n\t\tconst titleElement = document.createElement('div');\r\n\t\ttitleElement.classList.add('title');\r\n\t\tbuttonElement.addEventListener('click', onClick);\r\n\t\tbuttonElement.appendChild(titleElement);\r\n\t\tconst buttonBackElement = \r\n\t\tthis._iconButtonBack = new IconButtonNonReact({\r\n\t\t\tclassName:\"button-back\",\r\n\t\t\timgUrl:Urls.assets+'icons/back.png',\r\n\t\t\tonClick:this._handleBack,\r\n\t\t\tstopEventPropagation:true});\r\n\t\tstopEventPropagation(this._iconButtonBack.element, ['click', 'mousedown', 'touchstart']);\r\n\t\ttitleElement.appendChild(this._iconButtonBack.element);\r\n\t\tconst titleTextElement = document.createElement('div');\r\n\t\ttitleTextElement.classList.add('text');\r\n\t\ttitleTextElement.innerHTML = buttonText;\r\n\t\ttitleElement.appendChild(titleTextElement);\r\n\t\tthis._element.appendChild(buttonElement);\r\n\t\tPropertyBindingFactory.standard(this, this._whatAreYouLookingForViewModel, propertyName, \r\n\t\t\t(value)=>{\r\n\t\t\t\tlet text = getTextFromValue(value);\r\n\t\t\t\tif(text!=='')\r\n\t\t\t\t\ttext=`(${text})`;\r\n\t\t\t\ttitleTextElement.innerHTML = `${buttonText} ${text}`;\r\n\t\t});\r\n\t\treturn buttonElement;\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n}","import './WhatAreYouLookingFor.css';\r\nimport stopEventPropagation from '../ui_core/stopEventPropagation';\r\nimport PropertyBindingFactory from '../mvvm/PropertyBindingFactory';\r\nimport numberWithCommas from '../core/numberWithCommas';\r\nimport Feature from '../enums/Feature';\r\nexport default class WhatAreYouLookingForToggleButton{\r\n\tconstructor({callbackClicked, text, value}){\r\n\t\tthis._value = value;\r\n\t\tthis._callbackClicked = callbackClicked;\r\n\t\tthis._clicked = this._clicked.bind(this);\r\n\t\tthis.select = this.select.bind(this);\r\n\t\tthis.unselect = this.unselect.bind(this);\r\n\t\tthis._selected = false;\r\n\t\tthis._element = document.createElement('button');\r\n\t\tthis._element.classList.add('child-option-button');\r\n\t\tthis._element.innerHTML = text;\r\n\t\tthis._element.addEventListener('click', this._clicked);\r\n\t\tstopEventPropagation(this._element, ['click', 'mousedown', 'touchstart']);\r\n\t}\r\n\tsetAvailableOption(value){\r\n\t\tif(value)\r\n\t\t\tthis._element.classList.remove('not-available-option');\r\n\t\telse \r\n\t\t\tthis._element.classList.add('not-available-option');\r\n\t}\r\n\tget selected(){\r\n\t\treturn this._selected;\r\n\t}\r\n\tget value(){\r\n\t\treturn this._value;\r\n\t}\r\n\t_clicked(){\r\n\t\tthis._callbackClicked(this);\r\n\t}\r\n\tselect(){\r\n\t\tthis._selected = true;\r\n\t\tthis._element.classList.add('selected');\r\n\t}\r\n\tunselect(){\r\n\t\tthis._selected = false;\r\n\t\tthis._element.classList.remove('selected');\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n}","import './WhatAreYouLookingFor.css';\r\nimport stopEventPropagation from '../ui_core/stopEventPropagation';\r\nimport PropertyBindingFactory from '../mvvm/PropertyBindingFactory';\r\nimport eventEnable from '../core/eventEnable';\r\nimport WhatAreYouLookingForToggleButton from './WhatAreYouLookingForToggleButton';\r\nexport default class WhatAreYouLookingForNBeds{\r\n\tconstructor({siteJson, whatAreYouLookingForViewModel}){\r\n\t\teventEnable(this);\r\n\t\tthis._whatAreYouLookingForViewModel = whatAreYouLookingForViewModel;\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add('n-beds');\r\n\t\tthis._createSetNBedsButton= this._createSetNBedsButton.bind(this);\r\n\t\tthis._get_setNBeds= this._get_setNBeds.bind(this);\r\n\t\tthis._nBedroomsSelectedValueChanged = this._nBedroomsSelectedValueChanged.bind(this);\r\n\t\tthis._nBedroomAvailableWithOtherOptionsChanged = this._nBedroomAvailableWithOtherOptionsChanged.bind(this);\r\n\t\tthis._mapValueToToggleButton = new Map();\r\n\t\tthis._toggleButtons=[];\r\n\t\twhatAreYouLookingForViewModel.nBedroomsValues.forEach(nBedsValue=>this._createSetNBedsButton(nBedsValue));\r\n\t\tthis._propertyBindingNBedrooms = PropertyBindingFactory.standard(this, whatAreYouLookingForViewModel,\r\n\t\t'nBedrooms', this._nBedroomsSelectedValueChanged);\r\n\t\tthis._propertyBindingNBedroomAvailableWithOtherOptions = PropertyBindingFactory.standard(this,\r\n\t\twhatAreYouLookingForViewModel,\r\n\t\t'nBedroomsAvailableWithOtherOptions', this._nBedroomAvailableWithOtherOptionsChanged);\r\n\t}\r\n\t_nBedroomsSelectedValueChanged(value){\r\n\t\tif(this._currentlySelectedButton){\r\n\t\t\tthis._currentlySelectedButton.unselect();\r\n\t\t\tthis._currentlySelectedButton=null;\r\n\t\t}\r\n\t\tconst toggleButton = this._mapValueToToggleButton.get(value);\r\n\t\tif(!toggleButton)return;\r\n\t\ttoggleButton.select();\r\n\t\tthis._currentlySelectedButton=toggleButton;\r\n\t}\r\n\t_nBedroomAvailableWithOtherOptionsChanged(value){\r\n\t\tthis._toggleButtons.forEach(toggleButton=>{\r\n\t\t\tconst nBedrooms = toggleButton.value;\r\n\t\t\ttoggleButton.setAvailableOption(value?.indexOf(nBedrooms)>=0?true:false);\r\n\t\t});\r\n\t}\r\n\t_createSetNBedsButton(nBedrooms){\r\n\t\tconst toggleButton = new WhatAreYouLookingForToggleButton({\r\n\t\t\tcallbackClicked:this._get_setNBeds(nBedrooms),\r\n\t\t\ttext:String(nBedrooms),\r\n\t\t\tvalue:nBedrooms\r\n\t\t});\r\n\t\tthis._mapValueToToggleButton.set(nBedrooms, toggleButton);\r\n\t\tthis._element.appendChild(toggleButton.element);\r\n\t\tthis._toggleButtons.push(toggleButton);\r\n\t}\r\n\t_get_setNBeds(nBedrooms){\r\n\t\treturn (toggleButton)=>{\r\n\t\t\tif(toggleButton.selected){\r\n\t\t\t\ttoggleButton.unselect();\r\n\t\t\t\tthis._whatAreYouLookingForViewModel.nBedrooms=null;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tthis._whatAreYouLookingForViewModel.nBedrooms = nBedrooms;\r\n\t\t\tthis.dispatchEvent({type:'chose'});\r\n\t\t};\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n}","import './WhatAreYouLookingFor.css';\r\nimport WhatAreYouLookingForToggleButton from './WhatAreYouLookingForToggleButton';\r\nimport PropertyBindingFactory from '../mvvm/PropertyBindingFactory';\r\nimport eventEnable from '../core/eventEnable';\r\nimport exposeBinding from '../mvvm/exposeBinding';\r\nexport default class WhatAreYouLookingForFeatures{\r\n\tconstructor({siteJsons, whatAreYouLookingForViewModel}){\r\n\t\teventEnable(this);\r\n\t\tthis._whatAreYouLookingForViewModel = whatAreYouLookingForViewModel;\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add('features');\r\n\t\tthis._createSetFeaturesButton= this._createSetFeaturesButton.bind(this);\r\n\t\tthis._removeFeaturesButton= this._removeFeaturesButton.bind(this);\r\n\t\tthis._featuresChanged= this._featuresChanged.bind(this);\r\n\t\tthis._selectedFeaturesChanged= this._selectedFeaturesChanged.bind(this);\r\n\t\tthis._get_setFeature= this._get_setFeature.bind(this);\r\n\t\tthis._featuresAvailableWithOtherOptionsChanged= this._featuresAvailableWithOtherOptionsChanged.bind(this);\r\n\t\tthis._mapFeatureIdToButton = new Map();\r\n\t\tthis._toggleButtons=[];\r\n\t\tthis._propertyBindingFeatures = PropertyBindingFactory.standard(this, \r\n\t\t\tsiteJsons, 'allFeatures', this._featuresChanged);\r\n\t\tthis._propertyBindingSelectedFeatures = PropertyBindingFactory.standard(this, \r\n\t\t\twhatAreYouLookingForViewModel, 'features', this._selectedFeaturesChanged);\r\n\t\tthis._propertyBindingFeaturesAvailableWithOtherOptions = PropertyBindingFactory.standard(this, \r\n\t\t\twhatAreYouLookingForViewModel, 'featuresAvailableWithOtherOptions', this._featuresAvailableWithOtherOptionsChanged);\r\n\t}\r\n\t_featuresChanged(features){\r\n\t\tconst seenIds = [];\r\n\t\tfeatures?.forEach(feature=>{\r\n\t\t\tseenIds.push(feature.id);\r\n\t\t\tlet toggleButton = this._mapFeatureIdToButton.get(feature.id);\r\n\t\t\tif(!toggleButton)this._createSetFeaturesButton(feature);\r\n\t\t});\r\n\t\tArray.from(this._mapFeatureIdToButton.keys()).forEach(featureId=>{\r\n\t\t\tif(seenIds.indexOf(featureId)>=0)return;\r\n\t\t\tthis._removeFeaturesButton(featureId);\r\n\t\t});\r\n\t}\r\n\t_featuresAvailableWithOtherOptionsChanged(value){\r\n\t\tif(!value)return;\r\n\t\tconst availableFeatureIds = value?.map(feature=>feature.id);\r\n\t\tthis._toggleButtons.forEach(toggleButton=>{\r\n\t\t\tconst featureId = toggleButton.value;\r\n\t\t\tconsole.log(featureId);\r\n\t\t\tconst isAvailableOption = (!availableFeatureIds)||availableFeatureIds.indexOf(featureId)>=0;\r\n\t\t\tconsole.log(isAvailableOption);\r\n\t\t\ttoggleButton.setAvailableOption(isAvailableOption);\r\n\t\t});\r\n\t}\r\n\t_removeFeaturesButton(featureId){\t\r\n\t\tconst toggleButton = this._mapFeatureIdToButton.get(featureId);\r\n\t\tthis._element.appendChild(toggleButton.element);\r\n\t\tthis._mapFeatureIdToButton.delete(featureId);\r\n\t\tthis._toggleButtons.splice(this._toggleButtons.indexOf(toggleButton), 1);\r\n\t}\r\n\t_selectedFeaturesChanged(value){\r\n\t\tif(!value)return;\r\n\t\tif(value.length<1)return;\r\n\t\tthis._toggleButtons.forEach(toggleButton=>toggleButton.unselect());\r\n\t\tvalue.forEach(feature=>{\r\n\t\t\tthis._mapFeatureIdToButton.get(feature.id).select();\r\n\t\t});\r\n\t}\r\n\t_createSetFeaturesButton(feature){\r\n\t\tconst toggleButton = new WhatAreYouLookingForToggleButton({\r\n\t\t\tcallbackClicked:this._get_setFeature(feature),\r\n\t\t\ttext:feature.name,\r\n\t\t\tvalue:feature.id\r\n\t\t});\r\n\t\tthis._mapFeatureIdToButton.set(feature.id, toggleButton);\r\n\t\tthis._element.appendChild(toggleButton.element);\r\n\t\tthis._toggleButtons.push(toggleButton);\r\n\t}\r\n\t_get_setFeature(feature){\r\n\t\treturn (toggleButton)=>{\r\n\t\t\tif(toggleButton.selected){\r\n\t\t\t\ttoggleButton.unselect();\r\n\t\t\t\tthis._propertyBindingSelectedFeatures.set(null);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tthis._propertyBindingSelectedFeatures.set([feature]);\r\n\t\t\tthis.dispatchEvent({type:'chose'});\r\n\t\t};\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n}","import './WhatAreYouLookingFor.css';\r\nimport ReactDOM from 'react-dom';\r\nimport React, { Component } from 'react';\r\nimport Slider from '../components/Slider';\r\nimport stopEventPropagation from '../ui_core/stopEventPropagation';\r\nimport PropertyBindingFactory from '../mvvm/PropertyBindingFactory';\r\nimport eventEnable from '../core/eventEnable';\r\nimport Urls from '../urls/Urls';\r\nimport IconButtonNonReact from '../components/IconButtonNonReact';\r\nexport default class WhatAreYouLookingForPrice{\r\n\tconstructor({siteJsons, whatAreYouLookingForViewModel, titleElement}){\r\n\t\teventEnable(this);\r\n\t\tthis._minSliderRef= React.createRef();\r\n\t\tthis._maxSliderRef= React.createRef();\r\n\t\tthis._whatAreYouLookingForViewModel = whatAreYouLookingForViewModel;\r\n\t\tthis._priceRangeChanged= this._priceRangeChanged.bind(this);\r\n\t\tthis._onSliderMinValueChanged = this._onSliderMinValueChanged.bind(this);\r\n\t\tthis._onSliderMaxValueChanged = this._onSliderMaxValueChanged.bind(this);\r\n\t\tthis.becomingVisible = this.becomingVisible.bind(this);\r\n\t\tthis._handleClickButtonDone = this._handleClickButtonDone.bind(this);\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add('price');\r\n\t\tthis._valueElement= document.createElement('div');\r\n\t\tthis._valueElement.classList.add('value');\r\n\t\tthis._element.appendChild(this._valueElement);\r\n\t\tthis._sliderMinWrapperElement = document.createElement('div');\r\n\t\tthis._sliderMinWrapperElement.classList.add('slider-min-wrapper');\r\n\t\tthis._sliderMaxWrapperElement = document.createElement('div');\r\n\t\tthis._sliderMaxWrapperElement.classList.add('slider-max-wrapper');\r\n\t\tthis._element.appendChild(this._sliderMinWrapperElement);\r\n\t\t\r\n\t\tstopEventPropagation(\tthis._sliderMinWrapperElement, ['click', 'mousedown', 'touchstart']);\r\n\t\tstopEventPropagation(\tthis._sliderMaxWrapperElement, ['click', 'mousedown', 'touchstart']);\r\n\t\tconst sliderFactory = React.createFactory(Slider);\r\n\t\t\r\n\t\tReactDOM.render(sliderFactory(\r\n\t\t{ \r\n\t\t\tref:this._minSliderRef, \r\n\t\t\tmin:siteJsons.minPlotPrice, max:siteJsons.maxPlotPrice, initial:siteJsons.minPlotPrice, \r\n\t\t\tonValueChanged:this._onSliderMinValueChanged, \r\n\t\t\tisHorizontal:true\r\n\t\t}),\r\n\t\tthis._sliderMinWrapperElement);\r\n\t\tReactDOM.render(sliderFactory(\r\n\t\t{ \r\n\t\t\tref:this._maxSliderRef, \r\n\t\t\tmin:siteJsons.minPlotPrice, max:siteJsons.maxPlotPrice, initial:siteJsons.maxPlotPrice, \r\n\t\t\tonValueChanged:this._onSliderMaxValueChanged, \r\n\t\t\tisHorizontal:true\r\n\t\t}),\r\n\t\tthis._sliderMaxWrapperElement);\r\n\t\tthis._minSliderRef.current.handle.element.innerHTML = 'Min';\r\n\t\tthis._maxSliderRef.current.handle.element.innerHTML = 'Max';\r\n\t\tthis._sliderMinWrapperElement.appendChild(this._sliderMaxWrapperElement);\r\n\t\tthis._propertyBindingPriceRange = PropertyBindingFactory.standard(this, whatAreYouLookingForViewModel,\r\n\t\t\t'priceRange',\r\n\t\t\tthis._priceRangeChanged);\r\n\t\twhatAreYouLookingForViewModel.priceRange = [siteJsons.minPlotPrice, siteJsons.maxPlotPrice];\r\n\t\tconsole.log('set the price range');\r\n\t\t/*this._iconButtonNonReactDone = new IconButtonNonReact({\r\n\t\t\tclassName:'button-done',\r\n\t\t\timgUrl:Urls.assets+'icons/tick.png', \r\n\t\t\tonClick:this._handleClickButtonDone});\r\n\t\tstopEventPropagation(this._iconButtonNonReactDone.element, ['click', 'mousedown', 'touchstart']);\r\n\t\ttitleElement.appendChild(this._iconButtonNonReactDone.element);*/\r\n\t\tthis._firstBecomingVisible = true;\r\n\t}\r\n\t_handleClickButtonDone(){\r\n\t\tthis.dispatchEvent({type:'chose'});\r\n\t}\r\n\tbecomingVisible(){\r\n\t\tif(!this._firstBecomingVisible)return;\r\n\t\tthis._firstBecomingVisible = false;\r\n\t\tthis._minSliderRef.current.setFromInitialValue();\r\n\t\tthis._maxSliderRef.current.setFromInitialValue();\r\n\t}\r\n\t_priceRangeChanged(value){\r\n\t\tif(!value)return;\r\n\t\tconst [min, max]= value;\r\n\t\tthis._minSliderRef.current.setValue(min);\r\n\t\tthis._maxSliderRef.current.setValue(max);\r\n\t\tconst noMin = (min===undefined)||(min===null);\r\n\t\tconst noMax = (max===undefined)||(max===null);\r\n\t\tif((!noMin)&&(!noMax)&&(min>max)){\r\n\t\t\tthis._element.classList.add('invalid');\r\n\t\t}\r\n\t\telse\r\n\t\t\tthis._element.classList.remove('invalid');\r\n\t}\r\n\t_onSliderMinValueChanged(value){\r\n\t\tif(value===undefined||value===null)return;\r\n\t\tconst currentPriceRange = this._propertyBindingPriceRange.get();\r\n\t\tthis._propertyBindingPriceRange.set([value, currentPriceRange?currentPriceRange[1]:null]);\r\n\t}\r\n\t_onSliderMaxValueChanged(value){\r\n\t\tif(value===undefined||value===null)return;\r\n\t\tconst currentPriceRange = this._propertyBindingPriceRange.get();\r\n\t\tthis._propertyBindingPriceRange.set([currentPriceRange?currentPriceRange[0]:null, value]);\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n}","import './WhatAreYouLookingFor.css';\r\nimport stopEventPropagation from '../ui_core/stopEventPropagation';\r\nimport PropertyBindingFactory from '../mvvm/PropertyBindingFactory';\r\nimport WhatAreYouLookingForToggleButton from './WhatAreYouLookingForToggleButton';\r\nimport eventEnable from '../core/eventEnable';\r\nexport default class WhatAreYouLookingForHouseType{\r\n\tconstructor({siteJson, houseTypesViewModel,\r\n\t\twhatAreYouLookingForViewModel}){\r\n\t\teventEnable(this);\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add('housetype');\r\n\t\tthis._createSetHouseTypesButton= this._createSetHouseTypesButton.bind(this);\r\n\t\tthis._houseTypesAvailableWithOtherOptionsChanged= this._houseTypesAvailableWithOtherOptionsChanged.bind(this);\r\n\t\tthis._get_setHouseTypes= this._get_setHouseTypes.bind(this);\r\n\t\tthis._houseTypesChanged= this._houseTypesChanged.bind(this);\r\n\t\tthis._toggleButtons = [];\r\n\t\tthis._mapHouseTypeViewModelToButton = new Map();\r\n\t\thouseTypesViewModel.entries.forEach(houseTypeViewModel=>this._createSetHouseTypesButton(houseTypeViewModel));\r\n\t\tthis._propertyBindingHouseTypes= PropertyBindingFactory\r\n\t\t\t.standard(this, whatAreYouLookingForViewModel, 'houseTypes', this._houseTypesChanged);\r\n\t\tthis._propertyBindingHouseTypesAvailableWithOtherOptions = PropertyBindingFactory.standard(this,\r\n\t\twhatAreYouLookingForViewModel,\r\n\t\t'houseTypesAvailableWithOtherOptions', this._houseTypesAvailableWithOtherOptionsChanged);\r\n\t}\r\n\t_houseTypesChanged(value){\r\n\t\tthis._toggleButtons.forEach(toggleButton=>toggleButton.unselect());\r\n\t\tif(!value)return;\r\n\t\tvalue.forEach(houseTypeViewModel=>this._mapHouseTypeViewModelToButton\r\n\t\t\t.get(houseTypeViewModel).select());\r\n\t}\r\n\t_houseTypesAvailableWithOtherOptionsChanged(value){\r\n\t\tconsole.log('houseTypesAvailableWithOtherOptions');\r\n\t\tthis._toggleButtons.forEach(toggleButton=>{\r\n\t\t\tconst houseTypeViewModel = toggleButton.value;\r\n\t\t\tconsole.log('houseTypeViewModel');\r\n\t\t\tconsole.log(houseTypeViewModel);\r\n\t\t\ttoggleButton.setAvailableOption((!value)||value.indexOf(houseTypeViewModel)>=0);\r\n\t\t});\r\n\t}\r\n\t_createSetHouseTypesButton(houseTypeViewModel){\r\n\t\tconst toggleButton = new WhatAreYouLookingForToggleButton({\r\n\t\t\tcallbackClicked:this._get_setHouseTypes(houseTypeViewModel),\r\n\t\t\ttext:houseTypeViewModel.name+'',\r\n\t\t\tvalue:houseTypeViewModel\r\n\t\t});\r\n\t\tthis._mapHouseTypeViewModelToButton.set(houseTypeViewModel, toggleButton);\r\n\t\tthis._element.appendChild(toggleButton.element);\r\n\t\tthis._toggleButtons.push(toggleButton);\r\n\t}\r\n\t_get_setHouseTypes(houseTypeViewModel){\r\n\t\treturn (toggleButton)=>{\r\n\t\t\tif(toggleButton.selected){\r\n\t\t\t\ttoggleButton.unselect();\r\n\t\t\t\tthis._propertyBindingHouseTypes.set(null);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tthis._propertyBindingHouseTypes.set([houseTypeViewModel]);\r\n\t\t\tthis.dispatchEvent({type:'chose'});\r\n\t\t};\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n}","import eventEnable from '../core/eventEnable';\r\nimport enableAcceptBindings from '../mvvm/enableAcceptBindings';\r\nimport exposeBinding from '../mvvm/exposeBinding';\r\nconst SelectedOptionType = {NBedrooms:'nBedrooms', HouseType:'hosueType',\r\n PriceRange:'priceRange', Features:'features'};\r\nexport default class WhatAreYouLookingForViewModel{\r\n\tconstructor({siteJsons, houseTypesViewModel, setFilterInSite}){\r\n\t\tthis._siteJsons = siteJsons;\r\n\t\tthis._availablePlots = this._siteJsons.getPlotsArray().filter(siteJsonsUnitPlot=>siteJsonsUnitPlot.isAvailable);\r\n\t\tthis._houseTypesViewModel = houseTypesViewModel;\r\n\t\tthis._setFilterInSiteCallback = setFilterInSite;\r\n\t\tthis.setFilterInSite = this.setFilterInSite.bind(this);\r\n\t\tthis.getPlotsStillAvailableWithOr = this.getPlotsStillAvailableWithOr.bind(this);\r\n\t\teventEnable(this);\r\n\t\tthis._visible = true;\r\n\t\tthis._getPlotsAvailableWithOtherSelectedOptions = this._getPlotsAvailableWithOtherSelectedOptions.bind(this);\r\n\t\tthis._createIsInPriceRangeLexicalClosure = this._createIsInPriceRangeLexicalClosure.bind(this);\r\n\t\tthis._createNBedroomsAvailableWithOtherOptions = this._createNBedroomsAvailableWithOtherOptions.bind(this);\r\n\t\tthis._createHouseTypesAvailableWithOtherOptions = this._createHouseTypesAvailableWithOtherOptions.bind(this);\r\n\t\tthis._createPriceRangeAvailableWithOtherOptions = this._createPriceRangeAvailableWithOtherOptions.bind(this);\r\n\t\texposeBinding(this, 'nBedrooms', ()=>this.nBedrooms, (value)=>this.nBedrooms = value);\r\n\t\texposeBinding(this, 'nBedroomsAvailableWithOtherOptions', ()=>this.nBedroomsAvailableWithOtherOptions);\r\n\t\texposeBinding(this, 'houseTypes', ()=>this.houseTypes, (value)=>this.houseTypes = value);\r\n\t\texposeBinding(this, 'houseTypesAvailableWithOtherOptions', ()=>this.houseTypesAvailableWithOtherOptions);\r\n\t\texposeBinding(this, 'features', ()=>this.features, (value)=>this.features = value);\r\n\t\texposeBinding(this, 'featuresAvailableWithOtherOptions', ()=>this.featuresAvailableWithOtherOptions);\r\n\t\texposeBinding(this, 'priceRange', ()=>this.priceRange, (value)=>this.priceRange = value);\r\n\t\texposeBinding(this, 'priceRangeAvailableWithOtherOptions', ()=>this.priceRangeAvailableWithOtherOptions);\r\n\t\texposeBinding(this, 'visible', ()=>this.visible, (value)=>this.visible = value);\r\n\t\texposeBinding(this, 'plotsStillAvailable', ()=>this.getPlotsStillAvailableForSite());\r\n\t}\r\n\tget visible(){\r\n\t\treturn this._visible;\r\n\t}\r\n\tset visible(value){\r\n\t\tif(this._visible ===value)return;\r\n\t\tthis._visible = value;\r\n\t\tthis.bindingsHandler.changed('visible', value);\r\n\t}\r\n\tsetFilterInSite(){\r\n\t\tthis._setFilterInSiteCallback(this);\r\n\t}\r\n\t_getPlotsAvailableWithOtherSelectedOptions(selectedOptionTypeFor, siteJson){\r\n\t\tlet plotsStillAvailable = this._availablePlots;\r\n\t\tif(siteJson){\r\n\t\t\tconst siteJsonUnitPlotsForSite = siteJson.getPlotsArray();\r\n\t\t\tplotsStillAvailable = plotsStillAvailable.filter(siteJsonUnitPlot=>siteJsonUnitPlotsForSite.indexOf(siteJsonUnitPlot));\r\n\t\t}\r\n\t\tif(selectedOptionTypeFor!==SelectedOptionType.Bedrooms\r\n\t\t\t&&this._nBedrooms!==undefined&&this._nBedrooms!==null)\r\n\t\t\tplotsStillAvailable = plotsStillAvailable.filter(siteJsonsUnitPlot=>\r\n\t\t\t\tsiteJsonsUnitPlot.nBedrooms===this._nBedrooms);\r\n\t\tif(selectedOptionTypeFor!==SelectedOptionType.HouseType&&this._houseTypes!==undefined&&this._houseTypes!==null&&this._houseTypes.length>0)\r\n\t\t{\r\n\t\t\tlet houseTypes = [];\r\n\t\t\tthis._houseTypes.forEach(houseTypeViewModel=>\r\n\t\t\t\thouseTypes = houseTypes.concat(houseTypeViewModel.houseTypesWithSameName)\r\n\t\t\t);\r\n\t\t\tplotsStillAvailable = plotsStillAvailable.filter(\r\n\t\t\t\tsiteJsonsUnitPlot=>houseTypes.indexOf(siteJsonsUnitPlot.houseType)>=0\r\n\t\t\t)\r\n\t\t}\r\n\t\tif(selectedOptionTypeFor!==SelectedOptionType.PriceRange\r\n\t\t\t&&this._isInPriceRange){\r\n\t\t\tplotsStillAvailable = plotsStillAvailable.filter(\r\n\t\t\t\tsiteJsonsUnitPlot=>this._isInPriceRange(siteJsonsUnitPlot.price)\r\n\t\t\t);\r\n\t\t}\r\n\t\tif(selectedOptionTypeFor!==SelectedOptionType.Features\r\n\t\t\t&&this._features!==undefined&&this._features!==null){\r\n\t\t\tconst selectedFeatureIds = this._features.map(feature=>feature.id);\r\n\t\t\tplotsStillAvailable = plotsStillAvailable.filter(siteJsonsUnitPlot=>{\r\n\t\t\t\tfor(var feature of siteJsonsUnitPlot.features){\r\n\t\t\t\t\tif(selectedFeatureIds.indexOf(feature.id))\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t\treturn false;\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn plotsStillAvailable;\r\n\t}\r\n\t\r\n\tget hasFilterApplied(){\r\n\t\tconst nBedroomsFilterApplied = (this._nBedrooms!==null&&this._nBedrooms!==undefined&&this._nBedrooms>0);\r\n\t\tconst houseTypesFilterApplied = (this._houseTypes!==null&&this._houseTypes!==undefined&&this._houseTypes.length>0);\r\n\t\tconst featuresFilterApplied = (this._features!==null&&this._features!==undefined&&this._features.length>0);\r\n\t\tconst priceRangeFilterApplied = (this._priceRange!==null&&this._priceRange!==undefined&&\r\n\t\t!(this._priceRange[0]===this._siteJsons.minPlotPrice&&this._priceRange[1]===this._siteJsons.maxPlotPrice));\r\n\t\t/*console.log('nBedroomsFilterApplied '+nBedroomsFilterApplied);\r\n\t\tconsole.log('houseTypesFilterApplied '+houseTypesFilterApplied);\r\n\t\tconsole.log('featuresFilterApplied '+featuresFilterApplied);\r\n\t\tconsole.log('priceRangeFilterApplied '+priceRangeFilterApplied);\r\n\t\tconsole.log(this._priceRange);\r\n\t\tconsole.log(this._minPrice);\r\n\t\tconsole.log(this._maxPrice);*/\r\n\t\treturn nBedroomsFilterApplied||houseTypesFilterApplied||featuresFilterApplied||priceRangeFilterApplied;\r\n\t}\r\n\tgetPlotsStillAvailableForSite(siteJson){\r\n\t\treturn this._getPlotsAvailableWithOtherSelectedOptions(null, siteJson);\r\n\t}\r\n\tgetPlotsStillAvailableWithOr(siteJson){\r\n\t\tconst siteJsonUnitPlotsForSite = siteJson.getPlotsArray();\r\n\t\tconst availablePlots = this._availablePlots.filter(siteJsonsUnitPlot=>\r\n\t\t\t\tsiteJsonUnitPlotsForSite.indexOf(siteJsonsUnitPlot)>=0);\r\n\t\tlet plotsStillAvailable = availablePlots.filter(siteJsonsUnitPlot=>\r\n\t\t\t\tsiteJsonsUnitPlot.nBedrooms===this._nBedrooms);\r\n\t\tif(this._houseTypes!==undefined&&this._houseTypes!==null){\r\n\t\t\tlet houseTypes = [];\r\n\t\t\tthis._houseTypes.forEach(houseTypeViewModel=>\r\n\t\t\t\thouseTypes = houseTypes.concat(houseTypeViewModel.houseTypesWithSameName)\r\n\t\t\t);\r\n\t\t\tplotsStillAvailable = plotsStillAvailable.concat(availablePlots.filter(\r\n\t\t\t\tsiteJsonsUnitPlot=>houseTypes.indexOf(siteJsonsUnitPlot.houseType)>=0\r\n\t\t\t));\r\n\t\t}\r\n\t\tplotsStillAvailable = plotsStillAvailable.concat(availablePlots.filter(\r\n\t\t\tsiteJsonsUnitPlot=>this._isInPriceRange(siteJsonsUnitPlot.price)\r\n\t\t));\r\n\t\tif(this._features!==undefined&&this._features!==null){\r\n\t\t\tconst selectedFeatureIds = this._features.map(feature=>feature.id);\r\n\t\t\tplotsStillAvailable = plotsStillAvailable.concat(availablePlots.filter(siteJsonsUnitPlot=>{\r\n\t\t\t\tfor(var feature of siteJsonsUnitPlot.features){\r\n\t\t\t\t\tif(selectedFeatureIds.indexOf(feature.id))\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t\treturn false;\r\n\t\t\t}));\r\n\t\t}\r\n\t\tconst oneOfEachPlotsStillAvailable = [];\r\n\t\tplotsStillAvailable.forEach(plotStillAvailable=>{\r\n\t\t\tif(oneOfEachPlotsStillAvailable.indexOf(plotStillAvailable)<0)\r\n\t\t\t\toneOfEachPlotsStillAvailable.push(plotStillAvailable);\r\n\t\t});\r\n\t\treturn plotsStillAvailable;\r\n\t}\r\n\tget nBedroomsValues(){\r\n\t\tif(this._nBedroomsValues!==undefined&&this._nBedroomsValues!==null)\r\n\t\t\treturn this._nBedroomsValues;\r\n\t\tthis._nBedroomsValues =[];\r\n\t\tthis._availablePlots.forEach(siteJsonsUnitPlot=>{\r\n\t\t\tconst nBedrooms = siteJsonsUnitPlot.nBedrooms;\r\n\t\t\tif(this._nBedroomsValues.indexOf(nBedrooms)<0)\r\n\t\t\t\tthis._nBedroomsValues.push(nBedrooms);\r\n\t\t});\r\n\t\tthis._nBedroomsValues.sort((a, b)=>a-b);\r\n\t\treturn this._nBedroomsValues;\r\n\t}\r\n\tget nBedrooms(){\r\n\t\treturn this._nBedrooms;\r\n\t}\r\n\tset nBedrooms(value){\r\n\t\tif(this._nBedrooms===value)return;\r\n\t\tthis._nBedrooms = value;\r\n\t\tconsole.log('this._nBedrooms');\r\n\t\tconsole.log(this._nBedrooms);\r\n\t\tthis.bindingsHandler.changed('nBedrooms', value);\r\n\t\tthis._createHouseTypesAvailableWithOtherOptions();\r\n\t\tthis._createFeaturesAvailableWithOtherOptions();\r\n\t\tthis._createPriceRangeAvailableWithOtherOptions();\r\n\t\tthis.bindingsHandler.changed('plotsStillAvailable', this.getPlotsStillAvailableForSite());\r\n\t}\r\n\t_createNBedroomsAvailableWithOtherOptions(){\r\n\t\tthis._nBedroomsAvailableWithOtherOptions = [];\r\n\t\tthis._getPlotsAvailableWithOtherSelectedOptions(SelectedOptionType.NBedrooms).forEach(siteJsonsUnitPlot=>{\r\n\t\t\tconst nBedrooms = siteJsonsUnitPlot.nBedrooms;\r\n\t\t\tif(this._nBedroomsAvailableWithOtherOptions.indexOf(nBedrooms)<0)\r\n\t\t\t\tthis._nBedroomsAvailableWithOtherOptions.push(nBedrooms);\r\n\t\t});\r\n\t\tthis.bindingsHandler.changed('nBedroomsAvailableWithOtherOptions', this._nBedroomsAvailableWithOtherOptions);\r\n\t}\r\n\tget nBedroomAvailableWithOtherOptions(){\r\n\t\treturn this._nBedroomsAvailableWithOtherOptions;\r\n\t}\r\n\tget houseTypes(){\r\n\t\treturn this._houseTypes;\r\n\t}\r\n\tset houseTypes(value){\r\n\t\tif(this._houseTypes===value)return;\r\n\t\tthis._houseTypes = value;\r\n\t\tthis.bindingsHandler.changed('houseTypes', value);\r\n\t\tthis._createNBedroomsAvailableWithOtherOptions();\r\n\t\tthis._createFeaturesAvailableWithOtherOptions();\r\n\t\tthis._createPriceRangeAvailableWithOtherOptions();\r\n\t\tthis.bindingsHandler.changed('plotsStillAvailable', this.getPlotsStillAvailableForSite());\r\n\t}\r\n\t_createHouseTypesAvailableWithOtherOptions(){\r\n\t\tconst mapHouseTypeToHouseTypeViewModel = new Map();\r\n\t\tthis._houseTypesViewModel.entries.forEach(houseTypeViewModel=>{\r\n\t\t\thouseTypeViewModel.houseTypesWithSameName.forEach(houseType=>{\r\n\t\t\t\tif(!mapHouseTypeToHouseTypeViewModel.has(houseType))\r\n\t\t\t\t\tmapHouseTypeToHouseTypeViewModel.set(houseType, houseTypeViewModel);\r\n\t\t\t});\r\n\t\t});\r\n\t\tthis._houseTypeViewModelsStillAvailable = [];\r\n\t\tthis._getPlotsAvailableWithOtherSelectedOptions(SelectedOptionType.HouseType).forEach(siteJsonsUnitPlot=>{\r\n\t\t\tconst houseTypeViewModel = mapHouseTypeToHouseTypeViewModel.get(siteJsonsUnitPlot.houseType);\r\n\t\t\tif(this._houseTypeViewModelsStillAvailable.indexOf(houseTypeViewModel)<0)\r\n\t\t\t\tthis._houseTypeViewModelsStillAvailable.push(houseTypeViewModel);\r\n\t\t});\r\n\t\tthis.bindingsHandler.changed('houseTypesAvailableWithOtherOptions', this._houseTypeViewModelsStillAvailable);\r\n\t}\r\n\tget houseTypesAvailableWithOtherOptions(){\r\n\t\treturn this._houseTypeViewModelsStillAvailable;\r\n\t}\r\n\tget features(){\r\n\t\treturn this._features;\r\n\t}\r\n\tset features(value){\r\n\t\tif(this._features===value)return;\r\n\t\tthis._features = value;\r\n\t\tthis.bindingsHandler.changed('features', value);\r\n\t\tthis._createNBedroomsAvailableWithOtherOptions();\r\n\t\tthis._createHouseTypesAvailableWithOtherOptions();\r\n\t\tthis._createPriceRangeAvailableWithOtherOptions();\r\n\t\tthis.bindingsHandler.changed('plotsStillAvailable', this.getPlotsStillAvailableForSite());\r\n\t}\r\n\t_createFeaturesAvailableWithOtherOptions(){\r\n\t\tthis._featuresAvailableWithOtherOptions = [];\r\n\t\tthis._getPlotsAvailableWithOtherSelectedOptions(SelectedOptionType.Features).forEach(siteJsonsUnitPlot=>{\r\n\t\t\tsiteJsonsUnitPlot.features?.forEach(feature=>{\r\n\t\t\t\tif(this._featuresAvailableWithOtherOptions.indexOf(feature)<0)\r\n\t\t\t\t\tthis._featuresAvailableWithOtherOptions.push(feature);\r\n\t\t\t});\r\n\t\t});\r\n\t\tthis.bindingsHandler.changed('featuresAvailableWithOtherOptions', this._featuresAvailableWithOtherOptions);\r\n\t}\r\n\tget featuresAvailableWithOtherOptions(){\r\n\t\treturn this._featuresAvailableWithOtherOptions;\r\n\t}\r\n\tget priceRange(){\r\n\t\treturn this._priceRange;\r\n\t}\r\n\tset priceRange(value){\r\n\t\tif(this._priceRange===value)return;\r\n\t\tthis._priceRange = value;\r\n\t\tthis._createIsInPriceRangeLexicalClosure();\r\n\t\tthis.bindingsHandler.changed('priceRange', value);\r\n\t\tthis._createNBedroomsAvailableWithOtherOptions();\r\n\t\tthis._createHouseTypesAvailableWithOtherOptions();\r\n\t\tthis._createFeaturesAvailableWithOtherOptions();\r\n\t\tthis.bindingsHandler.changed('plotsStillAvailable', this.getPlotsStillAvailableForSite());\r\n\t}\r\n\t_createPriceRangeAvailableWithOtherOptions(){\r\n\t\tconst siteJsonsUnitPlots = this._getPlotsAvailableWithOtherSelectedOptions(SelectedOptionType.PriceRange);\r\n\t\tif((!siteJsonsUnitPlots)\r\n\t\t\t||siteJsonsUnitPlots.length<1) return null;\r\n\t\tthis._minPrice=null; this._maxPrice=null;\r\n\t\tsiteJsonsUnitPlots.forEach(siteJsonsUnitPlot=>{\r\n\t\t\tif(this._minPrice===null||siteJsonsUnitPlot.pricethis._maxPrice)\r\n\t\t\t\t this._maxPrice = siteJsonsUnitPlot.price;\r\n\t\t});\r\n\t\tthis._priceRangeAvailableWithOtherOptions = [this._minPrice, this._maxPrice];\r\n\t\tthis.bindingsHandler.changed('priceRangeAvailableWithOtherOptions', this._priceRangeAvailableWithOtherOptions);\r\n\t}\r\n\tget priceRangeAvailableWithOtherOptions(){\r\n\t\treturn this._priceRangeAvailableWithOtherOptions;\r\n\t}\r\n\t_createIsInPriceRangeLexicalClosure(){\r\n\t\tif(this._priceRange===undefined||this._priceRange===null)\r\n\t\t{\r\n\t\t\tthis._isInPriceRange = null;\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst from = this._priceRange[0];\r\n\t\tconst to = this._priceRange[1];\r\n\t\tif(from!==undefined&&from!==null){\r\n\t\t\tif(to!==undefined&&to!==null){\r\n\t\t\t\tthis._isInPriceRange = (price)=>{\r\n\t\t\t\t\treturn (price>=from)&&(price<=to);\r\n\t\t\t\t};\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tthis._isInPriceRange = (price)=>price>=from;\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif(to!==undefined&&to!==null){\r\n\t\t\tthis._isInPriceRange = (price)=>price<=to;\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis._isInPriceRange = null;\r\n\t}\r\n}","const WhatAreYouLookingForContentType = {\r\n\tFirstOptions:'first-options'\r\n};\r\nexport default WhatAreYouLookingForContentType;","import './WhatAreYouLookingFor.css';\r\nimport PropertyBindingFactory from '../mvvm/PropertyBindingFactory';\r\nimport WhatAreYouLookingForFirstOptions from './WhatAreYouLookingForFirstOptions';\r\nimport WhatAreYouLookingForNBeds from './WhatAreYouLookingForNBeds';\r\nimport WhatAreYouLookingForFeatures from './WhatAreYouLookingForFeatures';\r\nimport WhatAreYouLookingForPrice from './WhatAreYouLookingForPrice';\r\nimport WhatAreYouLookingForHouseType from './WhatAreYouLookingForHouseType';\r\nimport WhatAreYouLookingForViewModel from '../view_models/WhatAreYouLookingForViewModel';\r\nimport ContentType from './WhatAreYouLookingForContentType';\r\nexport default class WhatAreYouLookingFor{\r\n\tconstructor({}){\r\n\t\tthis._setContent = this._setContent.bind(this);\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add('what-are-you-looking-for');\r\n\t\tthis._visibleChanged = this._visibleChanged.bind(this);\r\n\t\tthis.initialize = this.initialize.bind(this);\r\n\t}\r\n\tinitialize({siteJsons, houseTypesViewModel, setFilterInSite}){\r\n\t\tconsole.log('the site jsons is ');\r\n\t\tconsole.log(siteJsons);\r\n\t\tthis._whatAreYouLookingForViewModel = new WhatAreYouLookingForViewModel({siteJsons,\r\n\t\t\thouseTypesViewModel, setFilterInSite});\r\n\t\tthis._titleElement = document.createElement('div');\r\n\t\tthis._titleElement.classList.add('title');\r\n\t\tthis._element.appendChild(this._titleElement);\r\n\t\tthis._titleElement.innerHTML = 'What are you looking for?';\r\n\t\tthis._contentElement = document.createElement('div');\r\n\t\tthis._contentElement.classList.add('content');\r\n\t\tthis._element.appendChild(this._contentElement);\r\n\t\tconsole.log('siteJsons');\r\n\t\tconsole.log(siteJsons);\r\n\t\tthis._whatAreYouLookingForNBeds = new WhatAreYouLookingForNBeds({\r\n\t\t\tsiteJsons,\r\n\t\t\twhatAreYouLookingForViewModel:this._whatAreYouLookingForViewModel\r\n\t\t});\r\n\t\tthis._whatAreYouLookingForFeatures = new WhatAreYouLookingForFeatures({\r\n\t\t\tsiteJsons,\r\n\t\t\twhatAreYouLookingForViewModel:this._whatAreYouLookingForViewModel\r\n\t\t});\r\n\t\tthis._whatAreYouLookingForPrice = new WhatAreYouLookingForPrice({\r\n\t\t\tsiteJsons,\r\n\t\t\twhatAreYouLookingForViewModel:this._whatAreYouLookingForViewModel\r\n\t\t});\r\n\t\tthis._whatAreYouLookingForHouseType = new WhatAreYouLookingForHouseType({\r\n\t\t\tsiteJsons, \r\n\t\t\thouseTypesViewModel,\r\n\t\t\twhatAreYouLookingForViewModel:this._whatAreYouLookingForViewModel\r\n\t\t});\r\n\t\tthis._whatAreYouLookingForFirstOptions = new WhatAreYouLookingForFirstOptions({\r\n\t\t\tnBeds:this._whatAreYouLookingForNBeds,\r\n\t\t\tprice:this._whatAreYouLookingForPrice,\r\n\t\t\thouseType:this._whatAreYouLookingForHouseType,\r\n\t\t\tfeatures:this._whatAreYouLookingForFeatures,\r\n\t\t\twhatAreYouLookingForViewModel:this._whatAreYouLookingForViewModel\r\n\t\t});\r\n\t\tthis._setContent(ContentType.FirstOptions);\r\n\t\tthis._propertyBindingPriceRange = PropertyBindingFactory.standard(this, this._whatAreYouLookingForViewModel,\r\n\t\t\t'visible',\r\n\t\t\tthis._visibleChanged);\r\n\t}\r\n\t_visibleChanged(value){\r\n\t\tif(value)\r\n\t\t\tthis._element.classList.add('visible');\r\n\t\telse \r\n\t\t\tthis._element.classList.remove('visible');\r\n\t}\r\n\t_setContent(contentType){\r\n\t\tif(this._currentContentElement){\r\n\t\t\tthis._element.removeChild(this._currentContentElement);\r\n\t\t}\r\n\t\tvar newContentElement;\r\n\t\tswitch(contentType){\r\n\t\t\tcase ContentType.FirstOptions:\r\n\t\t\t\tnewContentElement = this._whatAreYouLookingForFirstOptions.element;\r\n\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error('Not implemented');\r\n\t\t}\r\n\t\tthis._contentElement.appendChild(newContentElement);\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n}","import ReactDOM from 'react-dom';\r\nimport React, { Component } from 'react';\r\nimport './SitePlans.css';\r\nimport AssetsManager from '../assets_management/AssetsManager';\r\nimport isMobile from '../core/isMobile';\r\nimport SitePlanWrapper from './SitePlanWrapper';\r\nimport SiteJsons from '../site/SiteJsons';\r\nimport Iterator from '../core/Iterator';\r\nimport NFilteredSitePlansToShow from '../enums/NFilteredSitePlansToShow';\r\nimport HouseTypesViewModel from '../view_models/HouseTypesViewModel';\r\nimport DropdownSelectorMenu from '../components/DropdownSelectorMenu';\r\nimport Spinner from '../components/Spinner';\r\nimport Handles from '../core/Handles';\r\nimport Dialog from './Dialog';\r\nimport WhatAreYouLookingFor from '../what_are_you_looking_for/WhatAreYouLookingFor';\r\nexport default class SitePlans {\r\n\tconstructor(){\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add('site-plans');\r\n\t\tthis._element.classList.add('single-site');\r\n\t\tthis._sitePlansWrapperElement= document.createElement('div');\r\n\t\tthis._sitePlansWrapperElement.classList.add('site-plans-wrapper');\r\n\t\tthis._sitePlanSelectorMenu = new DropdownSelectorMenu({\r\n\t\t\tclassNames:'site-plan-selector-menu',\r\n\t\t\tdefaultTitle:'Select Site'\r\n\t\t});\r\n\t\tthis._element.appendChild(this._sitePlanSelectorMenu.element);\r\n\t\tthis._element.appendChild(this._sitePlansWrapperElement);\r\n\t\tthis._mapSiteSlugToSitePlanWrapper = new Map();\r\n\t\tthis._createSitePlan= this._createSitePlan.bind(this);\r\n\t\tthis.initialize= this.initialize.bind(this);\r\n\t\tthis._showPlotsExplanationDialog= this._showPlotsExplanationDialog.bind(this);\r\n\t\tthis._setupSiteSelectorMenu= this._setupSiteSelectorMenu.bind(this);\r\n\t\tthis._getSiteJsonsWithPlots= this._getSiteJsonsWithPlots.bind(this);\r\n\t\tthis._loadSitesForSiteJsons= this._loadSitesForSiteJsons.bind(this);\r\n\t\tthis._getSetWindowVisibilityForSitePlan= this._getSetWindowVisibilityForSitePlan.bind(this);\r\n\t\tthis._setFilterInSitesFromWhatAreYouLookingFor= this._setFilterInSitesFromWhatAreYouLookingFor.bind(this);\r\n\t\tif(AssetsManager.configuration.whatAreYouLookingForEnabled){\r\n\t\t\tthis._whatAreYouLookingFor = new WhatAreYouLookingFor({});\r\n\t\t\tthis._element.appendChild(this._whatAreYouLookingFor.element);\r\n\t\t}\r\n\t\tthis._spinnerWrapperElement = document.createElement('div');\r\n\t\tthis._element.appendChild(this._spinnerWrapperElement);\r\n\t\tthis._spinnerHandles = new Handles();\r\n\t\tconst spinnerFactory = React.createFactory(Spinner);\r\n\t\tReactDOM.render(spinnerFactory(\r\n\t\t\t{ \r\n\t\t\t\tspinnerHandles:this._spinnerHandles, invertHandles:false\r\n\t\t\t}),\r\n\t\t\tthis._spinnerWrapperElement);\r\n\t\tthis._spinnerHandleLoading = this._spinnerHandles.take();\r\n\t}\r\n\t_setFilterInSitesFromWhatAreYouLookingFor (whatAreYouLookingForViewModel){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tthis._getSiteJsonsWithPlots({andElseOr:true, whatAreYouLookingForViewModel}).then((siteJsonsWithPlots)=>{\r\n\t\t\t\tif(siteJsonsWithPlots.length>0){\t\r\n\t\t\t\t\tthis._loadSitesForSiteJsons(siteJsonsWithPlots, whatAreYouLookingForViewModel).then(resolve).catch(reject);;\t\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\t\t\t\r\n\t\t\t\tthis._getSiteJsonsWithPlots({andElseOr:false, whatAreYouLookingForViewModel}).then((siteJsonsWithPlots)=>{\r\n\t\t\t\t\tif(siteJsonsWithPlots.length>0){\t\r\n\t\t\t\t\t\tthis._loadSitesForSiteJsons(siteJsonsWithPlots, whatAreYouLookingForViewModel).then(resolve).catch(reject);\r\n\t\t\t\t\t\tthis._showPlotsExplanationDialog( \r\n\t\t\t\t\t\t\t'No plots matched all filters for any site. The active plots matched some of the filters for these sites!');\r\n\t\t\t\t\t\tresolve();\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\t\r\n\t\t\t\t\tthis._showPlotsExplanationDialog( \r\n\t\t\t\t\t\t'No available plots currently match what you’re looking for for any site, please see other available plots below');\r\n\t\t\t\t\tthis._loadSitesForSiteJsons(this._siteJsons.entries, whatAreYouLookingForViewModel)\r\n\t\t\t\t\t\t.then(resolve).catch(reject);\r\n\t\t\t\t}).catch(reject);\r\n\t\t\t}).catch(reject);\r\n\t\t});\r\n\t}\r\n\t_showPlotsExplanationDialog(message){\r\n\t\tDialog.create({\r\n\t\t\ttitle:'Info', \r\n\t\t\tclassName:'brochure-generation-result-dialog error',\r\n\t\t\tmessage:message,\r\n\t\t\toptions:[{text:'OK', callback:()=>{\r\n\t\t\t\t\r\n\t\t\t}}]}\r\n\t\t);\r\n\t}\r\n\t_loadSitesForSiteJsons(siteJsons, whatAreYouLookingForViewModel){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tconst siteJsonsIterator = new Iterator(this._siteJsons.entries);\r\n\t\t\tconst sitePlanWrappers =[];\r\n\t\t\tconst setWindowVisibilityForSitePlan = this._getSetWindowVisibilityForSitePlan();\r\n\t\t\tconst doNext = ()=>{\r\n\t\t\t\tif(!siteJsonsIterator.hasNext()){\r\n\t\t\t\t\tif(sitePlanWrappers.length>1){\r\n\t\t\t\t\t\tthis._element.classList.remove('single-site');\r\n\t\t\t\t\t\tthis._sitePlanSelectorMenu.element.classList.add('visible');\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis._setupSiteSelectorMenu(sitePlanWrappers);\r\n\t\t\t\t\tresolve();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tconst siteJson= siteJsonsIterator.next();\r\n\t\t\t\tconst hasFilteredOptions = siteJsons.indexOf(siteJson)>=0;\r\n\t\t\t\tthis._createSitePlan(siteJson.configuration, hasFilteredOptions,\r\n\t\t\t\t\tsetWindowVisibilityForSitePlan).then((sitePlanWrapper)=>{\r\n\t\t\t\t\tsitePlanWrappers.push(sitePlanWrapper);\r\n\t\t\t\t\tif(hasFilteredOptions)\r\n\t\t\t\t\t\tsitePlanWrapper.sitePlan.setFilterInSiteFromWhatAreYouLookingFor(\r\n\t\t\t\t\t\t\twhatAreYouLookingForViewModel);\r\n\t\t\t\t\tdoNext();\r\n\t\t\t\t}).catch(reject);\r\n\t\t\t};\r\n\t\t\tdoNext();\r\n\t\t});\r\n\t}\r\n\t_setupSiteSelectorMenu(sitePlanWrappers){\r\n\t\tthis._sitePlanSelectorMenu.setEntries(\r\n\t\t\tsitePlanWrappers.map(sitePlanWrapper=>{\r\n\t\t\t\treturn {\r\n\t\t\t\tvalue:sitePlanWrapper, \r\n\t\t\t\tcallback:(e)=>sitePlanWrapper.show(),\r\n\t\t\t\ttext:sitePlanWrapper.siteName,\r\n\t\t\t\tclassNames:(sitePlanWrapper.hasFilteredOptions?'has-filtered-options':'has-no-filtered-options')\r\n\t\t\t};})\r\n\t\t);\r\n\t}\r\n\t_getSiteJsonsWithPlots({andElseOr, whatAreYouLookingForViewModel}){\r\n\t\treturn new Promise((resolve, reject)=>{\t\r\n\t\t\tconst siteJsonsWithPlots = [];\r\n\t\t\tconst iteratorSiteJsons = new Iterator(this._siteJsons.entries);\r\n\t\t\tconst doNextSiteJson = ()=>{\r\n\t\t\t\tif(!iteratorSiteJsons.hasNext()){\r\n\t\t\t\t\tresolve(siteJsonsWithPlots);\r\n\t\t\t\t}\r\n\t\t\t\tconst siteJson = iteratorSiteJsons.next();\r\n\t\t\t\tconst plotsArray = siteJson.getPlotsArray();\r\n\t\t\t\tconst plotsStillAvailable = andElseOr\r\n\t\t\t\t\t?whatAreYouLookingForViewModel.getPlotsStillAvailableForSite(siteJson)\r\n\t\t\t\t\t:whatAreYouLookingForViewModel.getPlotsStillAvailableWithOr(siteJson);\r\n\t\t\t\tfor(var plotStillAvailable of plotsStillAvailable){\r\n\t\t\t\t\tif(plotsArray.indexOf(plotStillAvailable)>=0){\r\n\t\t\t\t\t\tsiteJsonsWithPlots.push(siteJson);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tdoNextSiteJson();\r\n\t\t\t};\r\n\t\t\tdoNextSiteJson();\r\n\t\t});\r\n\t}\r\n\tinitialize(){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tconst doThen = ()=>{\r\n\t\t\t\tthis._spinnerHandleLoading.dispose();\r\n\t\t\t\tresolve();\r\n\t\t\t};\r\n\t\t\tconst doCatch = (err)=>{\r\n\t\t\t\tthis._spinnerHandleLoading.dispose();\r\n\t\t\t\treject(err);\r\n\t\t\t};\r\n\t\t\tif(this._whatAreYouLookingFor){\t\t\r\n\t\t\t\tthis._siteJsons = new SiteJsons();\r\n\t\t\t\tthis._siteJsons.initialize().then(()=>{\r\n\t\t\t\t\tthis._houseTypesViewModel = new HouseTypesViewModel(this._siteJsons.getPlotsArray());\r\n\t\t\t\t\tthis._whatAreYouLookingFor?.initialize({siteJsons:this._siteJsons, \r\n\t\t\t\t\t\thouseTypesViewModel:this._houseTypesViewModel, \r\n\t\t\t\t\t\tsetFilterInSite:this._setFilterInSitesFromWhatAreYouLookingFor});\r\n\t\t\t\t\t\tdoThen();\r\n\t\t\t\t}).catch(doCatch);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tthis._createSitePlan(AssetsManager.configuration, true, this._getSetWindowVisibilityForSitePlan())\r\n\t\t\t\t.then(doThen).catch(doCatch);\r\n\t\t});\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n\t_createSitePlan(configuration, hasFilteredOptions, setWindowVisibilityForSitePlan){\r\n\t\tlet sitePlanWrapper = this._mapSiteSlugToSitePlanWrapper.get(configuration.siteSlug);\r\n\t\tif(sitePlanWrapper){\r\n\t\t\tif(hasFilteredOptions)\r\n\t\t\t\tsetWindowVisibilityForSitePlan(sitePlanWrapper);\r\n\t\t\treturn new Promise((resolve, reject)=>resolve(sitePlanWrapper));\r\n\t\t}\r\n\t\tsitePlanWrapper = new SitePlanWrapper({\r\n\t\t\tconfiguration, \r\n\t\t\tparentElement:this._sitePlansWrapperElement,\r\n\t\t\thasFilteredOptions,\r\n\t\t\tsiteJsons:this._siteJsons\r\n\t\t});\r\n\t\tthis._mapSiteSlugToSitePlanWrapper.set(configuration.siteSlug, sitePlanWrapper);\r\n\t\tthis._sitePlansWrapperElement.appendChild(sitePlanWrapper.element);\r\n\t\tif(hasFilteredOptions)\r\n\t\t\tsetWindowVisibilityForSitePlan(sitePlanWrapper);\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tsitePlanWrapper.initialize().then(()=>resolve(sitePlanWrapper)).catch(reject);\r\n\t\t});\r\n\t}\r\n\t_getSetWindowVisibilityForSitePlan(){\r\n\t\tconst nFilteredSitePlansToShow = AssetsManager.configuration.nFilteredSitePlansToShow;\r\n\t\tlet firstSitePlanWrapper = null;\r\n\t\treturn (sitePlanWrapper)=>{\r\n\t\t\tconst nExistingSitePlans = this._mapSiteSlugToSitePlanWrapper.size;\r\n\t\t\tconst isFirst = nExistingSitePlans<=1;\r\n\t\t\tif(!window.isMobile&& nFilteredSitePlansToShow===NFilteredSitePlansToShow.Two){\r\n\t\t\t\tif(isFirst){\r\n\t\t\t\t\tfirstSitePlanWrapper = sitePlanWrapper;\r\n\t\t\t\t\tsitePlanWrapper.show(true);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tconst isSecond = nExistingSitePlans<=2;\r\n\t\t\t\tif(isSecond){\r\n\t\t\t\t\tfirstSitePlanWrapper.fillLeftHalf();\r\n\t\t\t\t\tsitePlanWrapper.fillRightHalf();\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif(isFirst)\r\n\t\t\t\tsitePlanWrapper.show(true);\r\n\t\t};\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport './Footer.css';\r\nexport default class Footer extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props)\r\n\t}\r\n\trender() {\r\n\t\treturn (
    \r\n\t\t\t
    )\r\n\t}\r\n}\r\n","import React, {Component} from 'react';\r\nimport logo from './logo.svg';\r\nimport './App.css';\r\nimport './ZIndices.css';\r\nimport NavMenu from './components/NavMenu';\r\nimport SitePlans from './components/SitePlans';\r\nimport Footer from './components/Footer';\r\nimport GoogleAnalytics from './google/GoogleAnalytics';\r\nimport * as Sentry from \"@sentry/react\";\r\nimport { Integrations } from \"@sentry/tracing\";\r\nimport AssetsManager from './assets_management/AssetsManager';\r\nimport isMobile from './core/isMobile';\r\nimport './site_specific/current/CssVariables.css';\r\nimport './site_specific/current/Fonts.css';\r\nimport { stopReportingRuntimeErrors } from \"react-error-overlay\";\r\n\r\nif (process.env.NODE_ENV === \"development\") {\r\n stopReportingRuntimeErrors(); // disables error overlays\r\n}\r\nSentry.init({\r\n dsn: AssetsManager.configuration.sentryDSN,\r\n integrations: [new Integrations.BrowserTracing()],\r\n\r\n // Set tracesSampleRate to 1.0 to capture 100%\r\n // of transactions for performance monitoring.\r\n // We recommend adjusting this value in production\r\n tracesSampleRate: 1.0,\r\n});\r\nexport default class App extends Component{\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tthis._appRef=React.createRef();\r\n\t}\r\n\tcomponentDidMount() {\r\n\t\t\r\n\t\tthis._googleAnalytics = new GoogleAnalytics({\r\n\t\t\ttrackingCode:AssetsManager.configuration.googleAnalyticsTrackingCode,\r\n\t\t\tsiteSlug:AssetsManager.configuration.siteSlug\r\n\t\t});\r\n\t\tconst sitePlans = new SitePlans();\r\n\t\tthis._appRef.current.appendChild(sitePlans.element);\r\n\t\tif(window.isMobile)\r\n\t\t\tdocument.body.classList.add('mobile');\r\n\t\tsitePlans.initialize();\r\n\t}\r\n\trender(){\r\n\t\treturn (\r\n\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t \r\n\t\t\t
    \r\n\t\t\t
    \r\n\t\t);\r\n\t}\r\n}\r\n","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.0/8 are considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport function register(config) {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl, config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl, config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl, {\r\n headers: { 'Service-Worker': 'script' },\r\n })\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.indexOf('javascript') === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready\r\n .then(registration => {\r\n registration.unregister();\r\n })\r\n .catch(error => {\r\n console.error(error.message);\r\n });\r\n }\r\n}\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport './index.css';\r\nimport App from './App';\r\nimport * as serviceWorker from './serviceWorker';\r\n\r\nReactDOM.render(\r\n \r\n \r\n ,\r\n document.getElementById('root')\r\n);\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: https://bit.ly/CRA-PWA\r\nserviceWorker.unregister();\r\n"],"sourceRoot":""}