{"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","errors/NotImplementedError.js","errors/ValueError.js","site/PlotStatus.js","configuration/PlotStatusConfiguration.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/ReasonsHelper.js","modelling/quadrants/QuadrantReason.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","ui_core/ElementAlignmentHelper.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","google/GoogleAnalytics.js","ui_core/E.js","components/IconButtonNonReact.js","ui_factories/ButtonFactory.js","core/isNullOrUndefined.js","enums/Side.js","tutorials/TutorialMessage.js","tutorials/Tutorials.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/MenuBarWindowEntries.js","core/isIphone.js","urls/UrlParameters.js","components/MenuBar.js","core/checkIfImageExists.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/Specification.js","components/SitePicker.js","components/MouseBlocker.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","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","house_types_viewer/HouseGridSelectorInfo.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","components/LocalArea.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","house_types_viewer/HouseGridSelectorEntry.js","house_types_viewer/HouseGridSelectorShowing.js","house_types_viewer/HouseGridSelector.js","view_models/HouseTypeViewModel.js","view_models/HouseTypesViewModel.js","components/FullScreenImagesViewer.js","components/EmGalleryFullScreenImagesViewer.js","geometry/DistanceHelper.js","components/NearbySite.js","components/NearbySites.js","site_specific/current/SiteSpecific.js","components/SalesForceWelcomePage.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","NotImplementedError","ValueError","PlotStatus","AVAILABLE","COMING_SOON","FUTURE_RELEASE","SOLD_OR_UNAVAILABLE","RESERVED","EARLY_BIRD","EXCHANGED","Object","values","filter","value","plotStatus","cssName","getCssName","customCssVariableName","getComputedStyle","document","documentElement","getPropertyValue","configuration","plotStatusConfiguration","plotStatusConfigurations","getFromPlotStatus","configuratorIconFileName","parseFromString","parseFromInt","toLowerCase","indexOf","PlotStatusConfiguration","props","unitMarkerColor","_plotStatus","_unitMarkerColor","_configuratorIconFileName","jObject","PlotStatusConfigurations","list","_list","toCssHtmlString","i","strs","cssNamePrefix","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","miniMapConeOffset","outside360Enabled","playSiteVideoOnOpen","showPlotMenuOnClickInsteadOfHover","plotMenuHasCloseButton","hideBrochuresIconTillCustomerGeneratesBrochure","hideFilteringIconsFromPlotAndHouseTypeMenu","hideHouseTypeDescriptionOnHouseTypesMenu","isIX2D","helpTutorialEnabled","helpButtonEnabled","priceIncrement","companyAddressLine1","_helpTutorialEnabled","_helpButtonEnabled","_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","_miniMapConeOffset","_outside360Enabled","_playSiteVideoOnOpen","_showPlotMenuOnClickInsteadOfHover","_plotMenuHasCloseButton","_hideBrochuresIconTillCustomerGeneratesBrochure","_hideFilteringIconsFromPlotAndHouseTypeMenu","_hideHouseTypeDescriptionOnHouseTypesMenu","_isIX2D","_priceIncrement","_companyAddressLine1","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","slug","imageRelativePath","getSiteJson","nBedrooms","nBathrooms","about","offers","sqrft","_nBedrooms","_nBathrooms","_about","_getSiteJson","_configuration","_slug","_name","_offers","_sqrft","_imageRelativePath","_allPossibleLowerCaseStrings","_getAllPossibleLowerCaseStrings","_configuratorUrl","_tourUrl","_videoUrl","_features","_statuses","statuses","videoUrl","features","galleryUrl","chooseYourStyleVideoUrl","chooseYourStyleIframeUrl","floorPlansIframeUrl","removeStartSlash","_brochureEnabled","_galleryUrl","log","_chooseYourStyleVideoUrl","_chooseYourStyleIframeUrl","_floorPlansIframeUrl","getPlotsForHouseType","allowedNameSeperators","_ALLOWED_NAME_SEPERATORS","nameComponents","RegExp","seperator","nameComponent","HouseTypes","getBySlug","Array","isArray","valueNormalised","allPossibleLowerCaseStrings","jArrayHouseTypes","houseTypes","jObjectHouseType","RoomType","KITCHEN","BEDROOM","BATHROOM","EN_SUITE","OTHER","roomType","Handle","_callbackDispose","Handles","_handles","_currentlyHasHandles","take","_dispatchChangedIfChanged","_dispatchChanged","handle","setTimeout","handles","hasHandles","SiteJsonUnitBirdsEyeView","angle","markerPosition","_angle","_markerPosition","fromObj","SiteJsonUnitBirdsEyeViews","getMarkerPositionForBirdsEyeViewWithAngle","getBirdsEyeViewMarkerPositionForBirdsEyeViewWithIndex","birdsEyeViewsWithIndex","birdsEyeView","birdsEyeViewWithIndex","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","endOfPriceTextSnippet","abovePriceHtml","_propertyBindingHouseTypeFeatures","frontViewImageRelativePath","_frontViewImageRelativePath","getArray","_plotFeatures","_endOfPriceTextSnippet","_abovePriceHtml","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","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","ReasonsHelper","reason","_objectId","_reasons","QuadrantReason","reasons","first","getDescription","Quadrant","cube","_objectIds","_cube","getObjectIds","getReasons","reasonsOut","jArrayReasons","jObjectReason","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","brochureEnabled","errorMessage","jArrayPlots","configurationJson","_configurations","configurationsJson","isMobile","test","navigator","userAgent","PlotMoreInformationType","OVERVIEW","GALLERY","FLOOR_PLANS","getAbsolute","element","rect","getBoundingClientRect","docEl","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","ElementAlignmentHelper","rightAlign","setAlignment","_getSetAlignment","elementShowingFor","absolutePositionElementShowingFor","leftWhichWouldBeRequiredForLeftAlign","alignment","currentAlignmentClass","alignmentClass","classList","Tooltip","atomicCallbackShow","noEnterLeaveEvents","tooltip","_getOrCreateTooltip","mouseDown","cancelShow","show","hide","onMouseDown","mouseUp","disposeMouseDown","_tooltip","tooltipTextElement","appendChild","body","setVisible","_getSetVisible","setPosition","get_SetPositionRelativeToOtherElement","triangleElement","getMouseDown","showing","innerHTML","visible","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","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","rightButtonClasses","_onClickLeft","_onClickRight","_onClickUp","_onClickDown","_rightButtonClasses","faCaretUp","rightButtonClassNameString","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","GoogleAnalytics","trackingCode","script","dataLayer","_gtag","Date","parameters","_instance","E","placeholder","attachEvent","_innerElement","_iconElement","_textElement","fontAwesomeIconFactory","createFactory","FontAwesomeIcon","ReactDOM","_imgElement","ButtonFactory","disposes","iconButtonNonReact","IconButtonNonReact","faTimes","isNullOrUndefined","TutorialMessage","elementOn","hasClose","callbackClose","callbackPayload","fixInPlace","_disposes","div","_callbackClose","_intervalSetPosition","transform","closeButton","close","_messageElement","textContent","_buttonsElement","button","buttonElement","callbackWithPayload","_instances","d","removeChild","tutorialMessage","Tutorials","_showStep2","hasClickedBirdsEyeViewLeftOrRightButton","hasClickedFilter","_hasDoneShowStep2","_showStep3","hasExpandedPlotMenu","_hasDoneShowStep3","_showStep3_1","hasClickedPlotMenuGallery","_showStep3_2","hasClickedPlotMenuFloorPlans","_showStep4","hasClickedPlotMenuFavourites","_showStep5","hasClickedFavourites","_showStep6","hasClickedGenerateBrochureForFavourites","hasClickedCompareFavourites","_showStep7","haveBeenToOutside360","_showStep8","hasClickedGoToOutside360","handleDispose","_showingTutorialMessages","_showing","dispatchUpdate","showStep8","_hasClickedPlotMenuFavourites","_updateShowStep4","_hasClickedPlotMenuGallery","_updateShowStep3_1","_haveBeenToOutside360","_updateShowStep7","_hasClickedPlotMenuFloorPlans","_updateShowStep3_2","_hasClickedFavourites","_updateShowStep5","_hasClickedMenuBarFavourite","_hasClickedGenerateBrochureForFavourites","_updateShowStep6","_doneWithMoveAroundOutside360Message","_hasClickedBirdsEyeViewLeftOrRightButton","_updateShowStep2","_hasClickedCompareFavourites","_canShowReturnToAerialViewMessage","_hasClickedGoToOutside360","_updateShowStep8","_hasClickedFilter","_hasExpandedPlotMenu","_updateShowStep3","_nOutside360HotspotsClicked","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","_directionButtonsRef","_createMarkers","_clear","_clearPlotMarkers","_handleClickPlotMarker","_setMarkersVisible","_handleHoverPlotMarker","_handleShowPlotMoreInformation","resize","_handleClickLeft","_handleClickRight","_handleEnterHouse","_showPlotMenu","_handleShowBrochureGenerationDialog","_getShouldFitToHeight","_getAspectRatio","_getNearestSiteJsonOutside360","_setDragDropMarkerPosition","_updateTutorialMessages","getMarkerPositionForPlotNumber","_initializeNearestOutside360PixelMappingsIfNecessary","_isDesktopAndShouldShowPlotDetailedInformationInstead","_frequencyLimitedCallbackGetNearestSiteJsonOutside360","_fittedToHeight","_zoomedOutOnFirstFilterAfterFittingToHeight","_birdsEyeViewIndex","_currentSiteJsonBirdsEyeViewsBirdsEyeView","_nearestOutside360UniqueId","_showPlotMenuOnce","unitMarkers","showPlotMarkers","_resizeWatcherParentElement","unitsArray","filtered","_unitsArray","zoomOut","positionAsPercentages","elementAbsolutePosition","_cancelCurrentLoadOperation","cancelled","siteJsonBirdsEyeViewsBirdsEyeView","afterLoadImg","_createdMarkers","zoomableDragable","initialized","plotMoreInformationType","unitMarker","logEvent","unitId","getMouseInSourceBounds","untilClickOff","allPlotsAffordable","_tutorialMessageOnUnitMarker","_tutorialMessageLeftRightButton","showStep2","showStep7","plotMenuShowing","addShowingTutorialMessage","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","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","FiltersButtons","clickClear","clickShowForSale","nextKey","singleRow","iMenuManager","_clickClear","_clickShowForSale","_singleRow","_uniqueKey","_buttonStatusRef","_nextKey","_handleClickFeatures","_handleClickPlot","_handleClickShowForSale","_handleClickStatus","_handleClickAvailablePrices","_handleClickBedrooms","_handleClickHouseType","_handleClickClear","_tutorialMessageStatus","_isShowing","hasClickedFilterStatus","showMenuByType","rows","faPoundSign","clearButton","iconButtonStatus","iconButtonPrice","iconButtonBedrooms","iconButtonHouseType","allUnitsHaveMultiplePlots","iconButtonPlot","_subMenuHeader","_unitMarkerKeyRef","_clickedOffManager","_filtersButtonsRef","isShowing","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","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","_createPriceIntervalsFromPlotsArrayOrdered","_updateOptions","filterPlots","whatAreYouLookingForViewModel","priceRange","hasFrom","hasTo","getCheckboxOptions","checkboxOption","hasFromAndFromIsInsideRangeForCheckbox","hasToAndToIsInsideRangeForCheckbox","hasFromAndToAndConsumesEntireCheckboxRange","priceRangesToShow","plotsToShow","priceRangeToShow","plotsInPriceOrder","priceRanges","currentPriceFrom","nextPrice","hadOneGreaterThanZero","desiredPriceIntervalsPlusDynamicallyAddedPriceIntervalsPrice","requiredRanges","previousPriceIntervalWithToLessThan","dynamicRangesSeen","foundRange","priceInterval","nextPriceInterval","range","dynamicRangeString","previousPriceInterval","priceRoundedDownToNearest100","requiredRange","isApplied","Favourite","payload","sortValue","imageUrl","onRemove","_onRemove","_payload","_imageUrl","_sortValue","StatusFilter","_unitMarkerKey","plotStatusesToShow","newChecked","localeCompare","BedroomsFilter","bedroomsFilterSettings","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","RESIZED","styleFromObject","Windows","currentBounds","minYPx","maxYPx","minXPerc","maxXPerc","getActive","getStartPosition","mostActiveWindowNotThisWindow","getParentElement","otherWindowPosition","getPosition","_screenResized","divDragHeightTaskBarPx","clientHeight","_updateZIndices","_setZIndex","sendToBack","instances","_dispatchWindowCreatedEvent","EventNames","_dispatchWindowDestroyedEvent","MenuBarWindowEntries","_windowCreated","_windowDestroyed","_mapWindowHashToEntry","getHash","getType","iconButton","toggleMinimize","isIphone","vendor","opera","urlSearchParameters","URLSearchParams","search","UrlParameters","MenuBar","showMainMenu","onZoomChange","setFavouritesActive","getDragDropRecipientForStreetViewButton","showDefault3d","showBrochures","showPlots","showHouseTypes","showHouseGridSelector","playSiteVideo","showTwoDSitePlan","showSuggestedSites","showSpecification","showLocalArea","_callbackShowSpecification","_showHouseTypeGrid","salesforce","_mapMenuTypeToHandles","_showMainMenu","_callbackShowPlots","_callbackShowDefault3d","_callbackShowBrochures","_callbackShowHouseTypes","_callbackPlaySiteVideo","_callbackShowTwoDSitePlan","_callbackShowSuggestedSites","_callbackShowHouseGridSelector","_callbackShowLocalArea","_zoomButtonsRef","_starRef","_buttonSiteRef","_callbackZoomChange","_setFavouritesActive","_getDragDropRecipientForStreetViewButton","_handleClickButtonSite","_handleClickButton3d","_handleClickButtonBrochures","_handleSliderZoomValueChanged","getHandlesActivateButton","_handleClickButtonTwoDSitePlan","_onStarSelectedChange","_handleWindowResized","_handleClickButtonPlots","_dispatchIsHorizontalChanged","_menuTypeActiveChanged","_getIsPortrait","_handleClickButtonHouseTypes","_handleClickButtonSpecification","_handleClickButtonPlaySiteVideo","_handleClickButtonSuggestedSites","_handleClickButtonHelp","_handleClickShowLocalArea","_windowEntriesRef","_dragDropStreetViewButtonRef","horizontal","insertedMenuItemsAtEnd","_insertedMenuItemsHandler","_insertedMenuItemsAtEndHandler","_menuBarWindowEntries","Image","complete","onload","onerror","checkIfImageExists","exists","menuType","isActive","clientWidth","_setHorizontal","_tutorialMessageFilter","generalWalkthrough","_tutorialMessageFavourite","_tutorialMessageOutside360","showStep4","showStep6","iconButtonFullScreen","isSupported","_handleClickButtonFullscreen","buttonPlots","playSiteVideoButton","brochureMenu","twoDSitePlanButton","suggestedSitesButton","specificationButton","buttonHouseTypes","localAreaButton","dragDropStreetViewButton","buttonHelp","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","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","filterNames","appliedFilterNames","remainingPlotNumbers","filters","KeyboardButton","textNotProvided","_icon","NumericalKeyboard","onKey","_onKey","_handleClickKeyboardButton","_createButton","additionalClasses","keyboardButtons","PlotSearch","selectedPlot","_callbackSelectedPlot","_input","_handleInput","_handleKey","_allowedKeyCodes","plotNumberStr","numberValid","_selectedPlot","triggered","nativeEvent","inputType","charCodeAt","keyCode","_MAX_LENGTH","fromCharCode","plotValidAndNotAffordable","previousSelectedPlot","classNamePlotNumber","onInput","Specification","getInsertedMenuItemsHandler","_getInsertedMenuItemsHandler","_insertedMenuItemsRemoveHandle","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","showInExistingPosition","_repositionVerticallySoOnPage","_repositionHorizontallySoOnPage","_startWatchingForClickOff","_startWatchingMouseForLeave","_checkMouseWithinBoundsAndAct","_doResposition","_getCurrentRect","_setLeft","_setTop","_setRelocated","_checkMouseWithinBoundsAndActOnce","relocated","_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","isAvailable","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","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","agreedToFutureUpdates","agreedToPrivacyNotice","singlePlotBrochure","debug","pageGroupIdsToInclude","waitForUrl","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","ImageViewer","_sliderRef","_pictureWrapperRef","_subMenuHeaderRef","_updateZoomSlider","slider","FavouriteEntry","onClickRemove","_callbackClickRemove","_handleCheckboxChanged","_handleClickClose","_favourite","dangerouslySetInnerHTML","__html","Drag","callbackStarted","minXPercent","maxXPercent","timer","drag","startedButNotMovedYet","updateMinMax","setText","Resizer","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","defaultX","defaultY","minimized","resizable","zIndexOffset","toggleMaximizeOnDoubleClick","callbackClickedClose","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","getMainElement","paddingString","initializePadding","_resizer","resized","_drag","fillerElement","iconButonMinimize","iconButonMaximize","iconButonClose","startSize","startZIndex","equals","getSizes","_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","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","newClassName","_currentRoomImageClassName","_dynamicRoomImages","PlotDetailedInformationDescription","PlotDetailedInformationFloorPlans","_setFloorPlanImageClass","_dynamnicImageDisplayers","dynamicImageDisplayer","PlotDetailedInformationVideo","_videoUrlChanged","_videoPlayer","_propertyBindingTourUrl","PlotDetailedInformationTour","_iframeElement","_tourOrConfiguratorUrlChanged","_propertyBindingConfiguratorUrl","HouseGridSelectorInfo","getWindowElement","_getWindowElement","_getHandleIframeMessage","_imageWrapperElement","_otherInfoElement","_nameElement","_descriptionElement","_offersElement","_currentFeatures","_featuresElement","_galleryIframe","allow","_floorPlansIframe","_chooseYourStyleIframe","_configureYourHomeIframe","_otherInfoEntries","iframe","getUrl","autoHeight","entryElement","handleMessage","frameborder","scrolling","_firstPlot","firstPlot","firstUnit","f","featureElement","iframeHeight","source","contentWindow","PlotDetailedInformation","showPlot","callbackPlotNumberChanged","_enterHouse","_showPlot","_callbackShowImagesFullScreen","_callbackPlotNumberChanged","_scrollToFloorPlans","_scrollToGallery","_scrollToElement","scrollToTop","_onClose","scrollToSectionWithProportion","setSectionProportionRanges","_dispatchScrolled","moreThanOnePlotInUnit","_window","resizeChildren","_houseGridSelectorInfo","_tour","_createNextPreviousPlotButtons","_mainElement","_scrollableElement","_summary","_video","_sections","section","insertBefore","scrollTop","nextPreviousElement","setNewPlotFromIndex","_setupSiteJsonUnitPlot","previousButton","faAngleLeft","indexOfThisPlot","newIndex","nextButton","faAngleRight","textElement","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","callbackComparing","_callbackComparing","_buttonCompareSelectedRef","_buttonSendMyFavouritesBrochureRef","_callbackShowSendFavouritesBrochure","_onClickFavouriteEntryRemove","_handleClickSendMyFavouritesBrochure","_handleClickCompare","_tutorialMessageSendMyFavouritesBrochure","_tutorialMessageCompareSelected","showStep5","_getEntryByHash","favouriteEntry","selectedPlots","selectedFavourites","selectedFavourite","selectedPlotsBrochureEnabled","selectedPlotsBrochureDisabled","stringSelectedPlotsWithoutBrochure","stringSelectedPlotsWithBrochure","sendMyFavouritesBrochureButton","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","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","createDefaultEnvironment","createDefaultLight","lights","intensity","_camera","Zero","_initialCameraRadius","radius","n","rotationMatrix","FromRotationMatrixToRef","runRenderLoop","stopRenderLoop","objectIdsToShow","toEulerAngles","SitePlan3D","getInsertedMenuItemsAtEndHandler","_displayErrorDialog","_retryLoad","_retryLoadWithLowerResolution","_groupedCallbacksLoad","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","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","leftPercent","_currentPositionMarkerElement","topPercent","currentPosition","InfoHotspot","_expand","expandedTextElement","Hider","_handlesChanged","SitePlan360","onBack","goToConfigurator","showPlotMenu","hidePlotMenu","_hidePlotMenu","_view360Ref","_miniMapRef","_buttonExitRef","_handleClickBack","_normalizeRadians","_updateDoneWithTutorial","_callbackBack","_callbackGoToConfigurator","_handleClickHotspot","_handleToggleMinimap","_getCameraDirectionEulerAngles","whenLoaded","_sceneMoved","_create_SwitchToOutside360_LexicalClosure","_getInsertedMenuItemsAtEndHandler","_groupedCallbacksLoaded","_insertedMenuItemsAtEndRemoveHandle","_sitePlan360","_loaded","getDefaultScene","_switchToOutside360","_previousScene","previousScene360","hotspotsForScene","yawRadianss","hadNoOutside360MoveHotspots","previousHotspot","normalized","directionOfTravel","differenceInDirectionOfTravelAndYawRadians","sign","backClassName","_backBeenClicked","atEnd","returnedFromOutside360","_tutorialMessageExit","_tutorialMessageMoveAroundOutside360","nOutside360HotspotsClicked","centerPosition","recreateIfExists","canShowReturnToAerialViewMessage","doneWithMoveAroundOutside360Message","hideBehindSpinner","showConfiguratorForPlot","closeCurrentConfigurator","_iframeLoaded","_nextIframeKey","iframes","_iframeCount","roomName","roomStr","LocalArea","path","pathname","SitePlanVisibleType","BIRDS_EYE_VIEW","OUTSIDE_360","CONFIGURATOR","THREE_D","LOCAL_AREA","SPECIFICATION","PlotMenu","_lhsRef","_buttonShowStreetViewRef","_floorPlansButtonRef","_buttonGalleryRef","_popupMenu","showIfIsLoaded","setFilteredPlots","_getFirstPlotMatchingFilteredPlots","_handleClickMoreInfo","_handleClickPreviousPlot","_handleClickNextPlot","_handlePopupMenuHide","_handleClickShowGallery","_handleClickShowFloorPlan","_handleClickMeaningShowPlotDetailedInformation","_handleClickLHS","_getImgUrl","_groupedCallbackImageLoaded","_startedShowAt","_loadingImageHandles","_tutorialMessageGoToOutside360","_tutorialMessagePlotMenuFloorPlans","_tutorialMessagePlotMenuGallery","showStep3_2","showStep3","showStep3_1","_currentLoadingImageHandle","imgLoaded","whenImgLoaded","_filteredPlots","plotsMatchingFilteredPlots","_imgLoading","closeAll","currentPlot","nextIndex","dynamicImages","hasFloorPlans","showMoreInformation","classNameStatus","sqrftElement","buttonShowStreetView","floorPlansButton","hasCloseButton","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","_descriptionWrapperElement","blockString","_plotStatusElement","_plotStatusNameElement","_dotElement","_priceElement","_bottomRowElement","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","_nElement","_updateOnce","HouseTypesViewerEntryStatuses","getValues","HouseTypesViewerEntryPriceRange","minPriceString","maxPriceString","minPrice","maxPrice","plotToConsider","HouseTypesViewerEntry","callbackAddFavourite","callbackRemoveFavourite","_houseTypeViewModel","_handleClickedEntry","_priceRange","_houseTypeViewModelSelectedChanged","_handleClickButtonWalkmode","_showFloorPlans","_handleClickImage","_showRoomImages","_handleShowConfigurator","_expandAbout","firstHouseTypeWithName","_infoWrapperElement","_descriptionTextElement","_topElement","_plotPriceRangeElement","_smallButtonsAndPriceElement","_iconButtonShowFloorplan","_iconButtonEnterHouse","checkboxFactory","_checkboxElement","_checkbox","_aboutElement","_aboutExpanded","allImages","HouseTypesViewer","_updateSelected","_mapHouseTypeToEntry","_clickedEntry","_handleResized","_iconButtonClearFilters","houseTypeListsSelected","_getHouseTypeListsSelected","seenEntries","houseTypeListSelected","houseTypeSelected","entryNotSeen","allHouseTypePlots","houseTypesViewerEntry","mapStatusToNEntries","statusNEntries","nEntries","nOfEachStatus","statusString","hasAvailable","squareFeet","HouseGridSelectorShowing","Entries","Info","_windowMinimized","_clickedWindowClose","_show","_siteNameElement","_locationElement","_tabElement","_innerTitleElement","_setShowing","_houseTypeEntriesElement","mapNBedroomsToEntries","houseGridSelectorEntry","HouseGridSelectorEntry","entriesNBedrooms","nBedroomsAndEntries","divNBedrooms","nBedroomsElement","_currentlyShowingClassName","_wentDirectlyToInfo","HouseTypeViewModel","_houseTypesWithSameName","_firstHouseType","_dispatchSelectedChanged","getImageAbsolutePath","HouseTypesViewModel","houseTypesForPlots","mapHouseTypeNameToHouseTypes","listOfHouseTypesForName","houseTypeLists","houseTypeList","FullScreenImagesViewer","_jumpableZoomableDragableWrapperElement","_jumpableZoomableDragableFactory","_renderJumpableZoomableDragable","EmGalleryFullScreenImagesViewer","DistanceHelper","latLng1","latLng2","_validateLatLng","lat1","lon1","lat2","lon2","φ1","φ2","Δφ","Δλ","sin","NearbySite","thisSiteJson","_distanceElement","round","calculateKmFromLatLng","NearbySites","siteJsons","nearbySite","SiteSpecific","SalesForceWelcomePage","showHouseGrid","developerIcon","buttonToSitePlan","welcomeToElement","SitePlan","callbackDidMount","_callbackDidMount","_menuBarRef","_mainMenuRef","_filtersRef","_availablePricesFilterRef","_statusFilterRef","_bedroomsFilterRef","_plotSearchRef","_houseTypeFilterRef","_featuresFilterRef","_mouseBlockerRef","_plotMoreInformationRef","_brochureGenerationRef","_imageViewerRef","_showForSale","_birdsEyeViewRef","_privacyPolicyRef","_sitePlan3DRef","_sitePlan360Ref","_localAreaRef","_specificationRef","_configuratorRef","_menuManagerRef","_brochuresMenuRef","_loadSite","_load3dSite","_getFilteredPlots","_handleShowMainMenu","_filtersChanged","_filterAndLoadPlots","_loadIndividualPlot","_clearFilters","_plotSearchSelectedPlot","_getDimensions","_handlePlaySiteVideo","_handleShowTwoDSitePlan","_handleClickedFavourite","_handleZoomChange","_handleShowLocalArea","_handleShowSpecification","_setMenuBarZoom","_handleSetFavouritesActive","_handleFavouritesHide","_handleExpandImage","_handleAddFavourite","_handleRemoveFavourite","_handleShowHouseGridSelector","_handleShowOutside360","_handleShowDefaultOutside360","_handleShow3d","_handleShowBrochures","_handleBackFromSitePlan360","_handleShowSuggestedSites","_initializeConfiguredCssClasses","_showTooManyFavouritesDialog","_handlePreviousSitePlanVisibleTypeElseDefault","_handleHideLocalArea","_handleHideSpecification","_handleShowSendFavouritesBrochure","_hasSpaceToShowMenuOnOpen","_menuBarIsHorizontalChanged","_handleEnterHouseByPlotNumber","_setupFirstShowPlotMarkers","_handleShowPlots","_handleShowHouseTypes","setFilterInSiteFromWhatAreYouLookingFor","_showPrivacyPolicy","_previousSitePlanVisibleType","_currentSitePlanVisibleType","_plotFilterer","_initializedConfiguredCssClasses","_showPlotMarkers","_doneFirstShowPlotMarkers","menuBarHorizontal","fadeInPlotMarkers","getSiteAssets","_plotsSelectionMenu","_houseTypesViewer","_houseGridSelector","_nearbySites","_emGalleryFullScreenImagesViewer","_salesForceWelcomePage","buttonShowSalesForceWelcomePage","clearGoToWelcomePageTimeout","_currentTimeoutGoToWelcomeScreenIfInactive","nClicksShortSpaceTime","goToWelcomePage","prepareToGoToWelcomeScreenIfInactive","_setVisibleType","getPlotsStillAvailableForSite","setAvailableOnly","filteredPlots","loadPlotsDirectory","siteJsonUnits","plotsStillAvailableWithOr","getPlotsStillAvailableWithOr","allPlots","allAvailablePlotsForSite","allPlotsThatCouldBecomeAvailable","handleFirstMouseDown","sitePlanVisibleType","noPlotMenu","getCssClassName","dimensions","filteredUnits","unitPlotsArray","unitPlot","filtersApplied","addPlotFilter","_brochuresMenu","_videoPlayerFullScreen","iHouseTypesFilter","HouseGridSelector","showPlotsMenu","_fullScreenImageViewer","setForSale","count","_MAX_FAVOURITES","switchToOutside360","getFirstPlot","cssHtmlString","appendCssToPage","videos","classNameSitePlan","brochureGeneration","showPrivacyPolicy","plotMenu","_handlePlotMenuHide","BIRDS_EYE_VIEW_ZOOM_MIN","BIRDS_EYE_VIEW_ZOOM_MAX","insertedMenuItemsHandler","insertedMenuItemsAtEndHandler","SitePlanWrapper","hasFilteredOptions","singleSite","_hasFilteredOptions","_siteJsons","maximised","sitePlanFactory","sitePlan","_sitePlan","SiteJsons","_whenFinishedModifyingSiteJsonAllFeatures","seenIds","configurations","configurationsIterator","doNext","DropdownSelectorMenu","classNames","defaultTitle","showEntries","setEntries","hideEntries","_setExpandedClassName","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","_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","_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.a20546c7.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 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\tEARLY_BIRD:9,\r\n\tEXCHANGED:10\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\t\r\n\tconst cssName = PlotStatus.getCssName(plotStatus);\r\n\tconst customCssVariableName = `--status-${cssName}-text`;\r\n\tconst text = getComputedStyle(document.documentElement).getPropertyValue(customCssVariableName);\r\n\tif(text&&text.length>0)\r\n\t\treturn text;\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.EXCHANGED)\r\n\t\treturn \"Exchanged\";\r\n\tif( plotStatus===PlotStatus.RESERVED)\r\n\t\treturn \"Reserved\";\r\n\tif( plotStatus===PlotStatus.EARLY_BIRD)\r\n\t\treturn \"Early Bird\";\r\n\treturn '';\r\n};\r\nPlotStatus.getCssName = function(plotStatus){\r\n\tif(plotStatus===PlotStatus.AVAILABLE){\r\n\t\treturn \"available\";\r\n\t}\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.EXCHANGED)\r\n\t\treturn \"exchanged\";\r\n\tif( plotStatus===PlotStatus.RESERVED)\r\n\t\treturn \"reserved\";\r\n\tif( plotStatus===PlotStatus.EARLY_BIRD)\r\n\t\treturn \"early-bird\";\r\n\treturn '';\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.EXCHANGED)\r\n\t\treturn \"exchanged\";\r\n\tif( plotStatus===PlotStatus.RESERVED)\r\n\t\treturn \"reserved\";\r\n\tif( plotStatus===PlotStatus.EARLY_BIRD)\r\n\t\treturn \"earlyBird\";\r\n\treturn '';\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\tif (['exchanged'].indexOf(value)>=0){\r\n\t\treturn PlotStatus.EXCHANGED;\r\n\t}\r\n\tif (value.indexOf('early')>=0){\r\n\t\treturn PlotStatus.EARLY_BIRD;\r\n\t}\r\n\treturn PlotStatus.AVAILABLE;\r\n};\r\nPlotStatus.parseFromInt = function(value){\r\n\treturn value;\r\n};\r\nexport default PlotStatus;","import ParameterErrors from '../errors/ParameterErrors';\r\nimport PlotStatus from '../site/PlotStatus';\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 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\tthis._miniMapConeOffset= miniMapConeOffset;\r\n\t\tthis._outside360Enabled = outside360Enabled;\r\n\t\tthis._playSiteVideoOnOpen=playSiteVideoOnOpen;\r\n\t\tthis._showPlotMenuOnClickInsteadOfHover=showPlotMenuOnClickInsteadOfHover;\r\n\t\tthis._plotMenuHasCloseButton = plotMenuHasCloseButton;\r\n\t\tthis._hideBrochuresIconTillCustomerGeneratesBrochure=hideBrochuresIconTillCustomerGeneratesBrochure;\r\n\t\tthis._hideFilteringIconsFromPlotAndHouseTypeMenu=hideFilteringIconsFromPlotAndHouseTypeMenu;\r\n\t\tthis._hideHouseTypeDescriptionOnHouseTypesMenu = hideHouseTypeDescriptionOnHouseTypesMenu;\r\n\t\tthis._isIX2D = isIX2D;\r\n\t\tthis._priceIncrement=priceIncrement;\r\n\t\tthis._companyAddressLine1 = companyAddressLine1;\r\n\t}\r\n\tget isIX2D(){\r\n\t\treturn this._isIX2D;\r\n\t}\r\n\tget companyAddressLine1(){\r\n\t\treturn this._companyAddressLine1;\r\n\t}\r\n\tget priceIncrement(){\r\n\t\treturn this._priceIncrement;\r\n\t}\r\n\tget hideBrochuresIconTillCustomerGeneratesBrochure(){\r\n\t\treturn this._hideBrochuresIconTillCustomerGeneratesBrochure;\r\n\t}\r\n\tget hideFilteringIconsFromPlotAndHouseTypeMenu(){\r\n\t\treturn this._hideFilteringIconsFromPlotAndHouseTypeMenu;\r\n\t}\r\n\tget hideHouseTypeDescriptionOnHouseTypesMenu(){\r\n\t\treturn this._hideHouseTypeDescriptionOnHouseTypesMenu;\r\n\t}\r\n\tget showPlotMenuOnClickInsteadOfHover(){\r\n\t\treturn this._showPlotMenuOnClickInsteadOfHover;\r\n\t}\r\n\tget playSiteVideoOnOpen(){\r\n\t\treturn this._playSiteVideoOnOpen;\r\n\t}\r\n\tget outside360Enabled(){\r\n\t\treturn this._outside360Enabled;\r\n\t}\r\n\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\tget miniMapConeOffset(){\r\n\t\treturn this._miniMapConeOffset;\r\n\t}\r\n\tget plotMenuHasCloseButton(){\r\n\t\treturn this._plotMenuHasCloseButton;\r\n\t}\r\n\tget helpTutorialEnabled(){\r\n\t\treturn this._helpTutorialEnabled;\r\n\t}\r\n\tget helpButtonEnabled(){\r\n\t\treturn this._helpButtonEnabled;\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\tminiMapConeOffset:jObject.miniMapConeOffset,\r\n\t\t\toutside360Enabled:jObject.outside360Enabled,\r\n\t\t\tplaySiteVideoOnOpen:jObject.playSiteVideoOnOpen,\r\n\t\t\tshowPlotMenuOnClickInsteadOfHover:jObject.showPlotMenuOnClickInsteadOfHover,\r\n\t\t\tplotMenuHasCloseButton:jObject.plotMenuHasCloseButton,\r\n\t\t\thideBrochuresIconTillCustomerGeneratesBrochure:jObject.hideBrochuresIconTillCustomerGeneratesBrochure,\r\n\t\t\thideFilteringIconsFromPlotAndHouseTypeMenu:jObject.hideFilteringIconsFromPlotAndHouseTypeMenu,\r\n\t\t\thideHouseTypeDescriptionOnHouseTypesMenu:jObject.hideHouseTypeDescriptionOnHouseTypesMenu,\r\n\t\t\tisIX2D:jObject.isIX2D,\r\n\t\t\thelpTutorialEnabled:jObject.helpTutorialEnabled,\r\n\t\t\thelpButtonEnabled:jObject.helpButtonEnabled,\r\n\t\t\tpriceIncrement:jObject.priceIncrement,\r\n\t\t\tcompanyAddressLine1:jObject.companyAddressLine1\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\nwindow.RunningMode = RunningMode;\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 get siteIcon(){\r\n\t\treturn Urls.assets+'icons/site-icon.png';\r\n\t}\r\n\tstatic get developerIcon(){\r\n\t\treturn Urls.assets+'icons/developer-icon.png';\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\tconst{slug, name, imageRelativePath, getSiteJson, configuration, nBedrooms, nBathrooms, about, offers, sqrft}=props;\r\n\t\teventEnable(this);\r\n\t\tenableAcceptBindings(this);\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\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._offers = offers;\r\n\t\tthis._sqrft = sqrft;\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\texposeBinding(this, 'configuratorUrl', ()=>this.configuratorUrl, (value)=>this.configuratorUrl = 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\texposeBinding(this, 'galleryUrl', ()=>this.galleryUrl, (value)=>this.galleryUrl = value);\r\n\t\texposeBinding(this, 'chooseYourStyleVideoUrl', ()=>this.chooseYourStyleVideoUrl, (value)=>this.chooseYourStyleVideoUrl = value);\r\n\t\texposeBinding(this, 'chooseYourStyleIframeUrl', ()=>this.chooseYourStyleIframeUrl, (value)=>this.chooseYourStyleIframeUrl = value);\r\n\t\texposeBinding(this, 'floorPlansIframeUrl', ()=>this.floorPlansIframeUrl, (value)=>this.floorPlansIframeUrl = 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 brochureEnabled(){\r\n\t\treturn this._brochureEnabled;\r\n\t}\r\n\tget offers(){\r\n\t\treturn this._offers;\r\n\t}\r\n\tset offers(value){\r\n\t\tthis._offers = value;\r\n\t}\r\n\tget sqrft(){\r\n\t\treturn this._sqrft;\r\n\t}\r\n\tset sqrft(value){\r\n\t\tthis._sqrft = value;\r\n\t}\r\n\tset brochureEnabled(value){\r\n\t\tthis._brochureEnabled = value;\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 galleryUrl(){\r\n\t\treturn this._galleryUrl;\r\n\t}\r\n\tset galleryUrl(value){\r\n\t\tconsole.log('SETTTING GALLERY URL');\r\n\t\tif(this._galleryUrl===value)\r\n\t\t\treturn;\r\n\t\tthis._galleryUrl = value;\r\n\t\tthis.bindingsHandler.changed('galleryUrl', value);\r\n\t}\r\n\tget chooseYourStyleVideoUrl(){\r\n\t\treturn this._chooseYourStyleVideoUrl;\r\n\t}\r\n\tset chooseYourStyleVideoUrl(value){\r\n\t\tif(this._chooseYourStyleVideoUrl===value)\r\n\t\t\treturn;\r\n\t\tthis._chooseYourStyleVideoUrl = value;\r\n\t\tthis.bindingsHandler.changed('chooseYourStyleVideoUrl', value);\r\n\t}\r\n\tget chooseYourStyleIframeUrl(){\r\n\t\treturn this._chooseYourStyleIframeUrl;\r\n\t}\r\n\tset chooseYourStyleIframeUrl(value){\r\n\t\tif(this._chooseYourStyleIframeUrl===value)\r\n\t\t\treturn;\r\n\t\tthis._chooseYourStyleIframeUrl = value;\r\n\t\tthis.bindingsHandler.changed('chooseYourStyleIframeUrl', value);\r\n\t}\r\n\tget floorPlansIframeUrl(){\r\n\t\treturn this._floorPlansIframeUrl;\r\n\t}\r\n\tset floorPlansIframeUrl(value){\r\n\t\tif(this._floorPlansIframeUrl===value)\r\n\t\t\treturn;\r\n\t\tthis._floorPlansIframeUrl = value;\r\n\t\tthis.bindingsHandler.changed('floorPlansIframeUrl', 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\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\tset nBedrooms(value){\r\n\t\tthis._nBedrooms = value;\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\toffers:jObject.offers,\r\n\t\t\tsqrft:jObject.sqrft,\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 OTHER:5\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\tif( roomType===RoomType.OTHER)\r\n\t\treturn \"Other\";\r\n\treturn \"Other\";\r\n\t//throw 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\tif( roomType===RoomType.OTHER)\r\n\t\treturn \"other\";\r\n\treturn \"Other\";\r\n\t//throw 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\tif ( ['other'].indexOf(value)>=0){\r\n\t\treturn RoomType.OTHER;\r\n\t}\r\n\treturn RoomType.OTHER;\r\n\t//throw 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.getBirdsEyeViewMarkerPositionForBirdsEyeViewWithIndex= this.getBirdsEyeViewMarkerPositionForBirdsEyeViewWithIndex.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\tgetBirdsEyeViewMarkerPositionForBirdsEyeViewWithIndex(index){\r\n\t\tconst birdsEyeViewWithIndex = this._list[index];\r\n\t\treturn birdsEyeViewWithIndex?birdsEyeViewWithIndex.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\texposeBinding(this, 'endOfPriceTextSnippet', ()=>this.endOfPriceTextSnippet, (value)=>this.endOfPriceTextSnippet = value);\r\n\t\texposeBinding(this, 'abovePriceHtml', ()=>this.abovePriceHtml, (value)=>this.abovePriceHtml = 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 isExchanged(){\r\n\t\treturn this._status===PlotStatus.EXCHANGED;\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\tif(!this.rooms)return false;\r\n\t\tconst rooms = this.rooms.getArray();\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\tget endOfPriceTextSnippet(){\r\n\t\treturn this._endOfPriceTextSnippet;\r\n\t}\r\n\tset endOfPriceTextSnippet(value){\r\n\t\tif(this._endOfPriceTextSnippet===value)return;\r\n\t\tthis._endOfPriceTextSnippet = value;\r\n\t\tthis.bindingsHandler.changed('endOfPriceTextSnippet', value);\r\n\t}\r\n\tget abovePriceHtml(){\r\n\t\treturn this._abovePriceHtml;\r\n\t}\r\n\tset abovePriceHtml(value){\r\n\t\tif(this._abovePriceHtml===value)return;\r\n\t\tthis._abovePriceHtml = value;\r\n\t\tthis.bindingsHandler.changed('abovePriceHtml', value);\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):null,\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\t//if(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\tthis.getBirdsEyeViewMarkerPositionForBirdsEyeViewWithIndex = this.getBirdsEyeViewMarkerPositionForBirdsEyeViewWithIndex.bind(this);\r\n\t\texposeBinding(this, 'selected', ()=>this.selected);\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\tgetBirdsEyeViewMarkerPositionForBirdsEyeViewWithIndex(index){\r\n\t\treturn this._birdsEyeViews.getBirdsEyeViewMarkerPositionForBirdsEyeViewWithIndex(index);\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:jObject.nearestOutside360Move?SiteJsonFileUnitNearestOutside360Move.fromJSON(jObject.nearestOutside360Move):null,\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\t//if(nearestOutside360PixelMappings===undefined||nearestOutside360PixelMappings===null)\r\n\t\t\t//throwNotProvided('nearestOutside360PixelMappings');\r\n\t\tthis._nearestOutside360PixelMappings= nearestOutside360PixelMappings;\r\n\t\t\r\n\t\t//if(outside360MarkerPositions===undefined||outside360MarkerPositions===null)\r\n\t\t\t//throwNotProvided('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:jObject.nearestOutside360PixelMappings?PixelMappings.fromJSON(jObject.nearestOutside360PixelMappings, configuration):null,\r\n\t\t\toutside360MarkerPositions:jObject.outside360MarkerPositions?jObject.outside360MarkerPositions.map(outside360MarkerPosition=>SiteJsonUnitBirdsEyeViewOutside360MarkerPosition.fromJSON(outside360MarkerPosition)):null\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\t//if(!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 = jObjectSite.outside360?SiteJsonOutside360.fromJSON(jObjectSite.outside360,\r\n\t\t(plotNumber)=>units.getPlotByNumber(plotNumber), configuration):null;\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, \r\n\t\t\tgalleryUrl, chooseYourStyleVideoUrl, chooseYourStyleIframeUrl, floorPlansIframeUrl}=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\tthis._galleryUrl = galleryUrl;\r\n\t\tthis._chooseYourStyleVideoUrl = chooseYourStyleVideoUrl;\r\n\t\tthis._chooseYourStyleIframeUrl = chooseYourStyleIframeUrl;\r\n\t\tthis._floorPlansIframeUrl = floorPlansIframeUrl;\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\tget galleryUrl(){\r\n\t\treturn this._galleryUrl;\r\n\t}\r\n\tget chooseYourStyleVideoUrl(){\r\n\t\treturn this._chooseYourStyleVideoUrl;\r\n\t}\r\n\tget chooseYourStyleIframeUrl(){\r\n\t\treturn this._chooseYourStyleIframeUrl;\r\n\t}\r\n\tget floorPlansIframeUrl(){\r\n\t\treturn this._floorPlansIframeUrl;\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)\r\n\t\t\t\tlatestPlotInfo.featuresForPlot = latestPlotInfo.featuresForPlot.map(featureForPlot=>{\r\n\t\t\t\t\tfeatureForPlot.getFeatureById = getFeatureById;\r\n\t\t\t\t\treturn new FeatureForPlot(featureForPlot);\r\n\t\t\t\t});\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_ID_JSON_KEY='o';\r\nconst REASONS_JSON_KEY='r';\r\nexport default class ReasonsHelper {\r\n\tconstructor({objectId, reason}){\r\n\t\tthis._objectId = objectId; \r\n\t\tthis._reasons = reason;\r\n\t}\r\n\tget objectId(){\r\n\t\treturn this._objectId;\r\n\t}\r\n\tget reasons(){\r\n\t\treturn this._reasons;\r\n\t}\r\n\tstatic getDescription(reason){\r\n\t\tswitch(reason){\r\n\t\t\tcase 1:\r\n\t\t\t\treturn 'AnyVertexOfObjectInsideQuadrant';\r\n\t\t\tcase 2:\r\n\t\t\t\treturn 'AnyQuadPointInsideObject';\r\n\t\t\tcase 3:\r\n\t\t\t\treturn 'ObjectWithinSmallEnoughDistance';\r\n\t\t\tcase 4:\r\n\t\t\t\treturn 'GameObjectVisibleWithinFieldOfView';\r\n\t\t\tdefault:\r\n\t\t\t\treturn 'unknown reason with value'+reason;\r\n\t\t}\r\n\t}\r\n}","import ParameterErrors from '../../errors/ParameterErrors';\r\nimport ReasonsHelper from './ReasonsHelper';\r\nconst { throwNotProvided } = ParameterErrors;\r\nconst OBJECT_ID_JSON_KEY='o';\r\nconst REASONS_JSON_KEY='r';\r\nexport default class QuadrantReason {\r\n\tconstructor({objectId, reasons}){\r\n\t\tthis._objectId = objectId; \r\n\t\tthis._reasons = reasons;\r\n\t}\r\n\tget objectId(){\r\n\t\treturn this._objectId;\r\n\t}\r\n\tget reasons(){\r\n\t\treturn this._reasons;\r\n\t}\r\n\tget description(){\r\n\t\tif(!this._reasons)\r\n\t\t\treturn '';\r\n\t\tlet str='';\r\n\t\tlet first= true;\r\n\t\tthis._reasons.forEach(reason=>{\r\n\t\t\tif(first)\r\n\t\t\t\tfirst = false;\r\n\t\t\telse str+=',';\r\n\t\t\tstr+=this._objectId;\r\n\t\t\tstr+=':';\r\n\t\t\tstr+=ReasonsHelper.getDescription(reason);\r\n\t\t});\r\n\t\treturn str;\r\n\t}\r\n\tstatic fromJSON(jObject){\r\n\t\tconst objectId = jObject[OBJECT_ID_JSON_KEY];\r\n\t\tconst reasons = jObject[REASONS_JSON_KEY];\r\n\t\treturn new QuadrantReason({objectId, reasons});\r\n\t}\r\n}","import ParameterErrors from '../../../errors/ParameterErrors';\r\nimport QuadrantReason from '../QuadrantReason';\r\nconst { throwNotProvided } = ParameterErrors;\r\nconst OBJECT_IDS_JSON_KEY='o';\r\nconst REASONS_JSON_KEY='r';\r\nconst CUBE_JSON_KEY='c';\r\nexport default class Quadrant {\r\n\tconstructor({objectIds, reasons, cube}){\r\n\t\tthis._objectIds = objectIds;\r\n\t\tthis._reasons = reasons;\r\n\t\tthis._cube = cube;\r\n\t\tthis.getObjectIds = this.getObjectIds.bind(this);\r\n\t\tthis.getReasons = this.getReasons.bind(this);\r\n\t}\r\n\tgetObjectIds(reasonsOut){\r\n\t\treturn this._objectIds;\r\n\t}\r\n\tgetReasons(){\r\n\t\treturn this._reasons;\r\n\t}\r\n\tstatic fromJSON(jObject){\r\n\t\tconst objectIds = jObject[OBJECT_IDS_JSON_KEY];\r\n\t\tconst jArrayReasons = jObject[REASONS_JSON_KEY];\r\n\t\tconst cube = jObject[CUBE_JSON_KEY];\r\n\t\tconst reasons = jArrayReasons?jArrayReasons.map(jObjectReason=>QuadrantReason.fromJSON(jObjectReason)):null;\r\n\t\treturn new Quadrant({objectIds, reasons, cube});\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, reasonsOut}){\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\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\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\tconst quadrant = quadrantsForPitch[pitchIndex];\r\n\t\tif(reasonsOut)\r\n\t\t\treasonsOut.reasons = quadrant.getReasons();\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, reasonsOut}){\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\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\treturn this._xYZQuadrants[xIndex][yIndex][zIndex].getObjectIds({yawRadians, pitchRadians, reasonsOut});\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\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\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\tconsole.log('CONFIGURAOTR');\r\n\t\t\tconsole.log(configurator);\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\thouseType.galleryUrl = configurator.galleryUrl;\r\n\t\t\thouseType.chooseYourStyleVideoUrl = configurator.chooseYourStyleVideoUrl;\r\n\t\t\thouseType.chooseYourStyleIframeUrl = configurator.chooseYourStyleIframeUrl;\r\n\t\t\thouseType.floorPlansIframeUrl=configurator.floorPlansIframeUrl;\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\tplot.endOfPriceTextSnippet = latestPlotInfo.endOfPriceTextSnippet;\r\n\t\t\tplot.abovePriceHtml = latestPlotInfo.abovePriceHtml;\r\n\t\t\tconst newFeatures = latestPlotInfo.featuresForPlot;\r\n\t\t\tif(newFeatures){\r\n\t\t\t\tplot.plotFeatures = newFeatures.map(featureForPlot=>featureForPlot.feature);\r\n\t\t\t}\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\tconst newFeatures = latestHouseTypeInfo.featuresForHouseType;\r\n\t\t\tif(newFeatures)\r\n\t\t\t\thouseType.features = newFeatures.filter(featureForHouseType=>featureForHouseType.feature?true:false).map(featureForHouseType=>featureForHouseType.feature);\r\n\t\t\thouseType.brochureEnabled = latestHouseTypeInfo.brochureEnabled;\r\n\t\t\thouseType.nBedrooms = latestHouseTypeInfo.nBedrooms;\r\n\t\t\thouseType.offers = latestHouseTypeInfo.offers;\r\n\t\t\thouseType.sqrft = latestHouseTypeInfo.sqrft;\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\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:(\r\n\t\t\t\t\t\tunit.plots.length>0?unit.plots[0].status:\r\n\t\t\t\t\t\tPlotStatus.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 getAbsolute from '../ui_core/getAbsolute';\r\nimport Alignment from '../ui_core/Alignment';\r\nexport default class ElementAlignmentHelper{\r\n\tstatic get_SetPositionRelativeToOtherElement(element, rightAlign){\r\n\t\tconst setAlignment = ElementAlignmentHelper._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||rightAlign){\r\n\t\t\t\talignment = Alignment.right;\r\n\t\t\t\tconst leftWhichWouldBeRequiredForRightAlign = absolutePositionElementShowingFor.left+elementShowingFor.offsetWidth/*+ elementShowingFor.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}","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 ElementAlignmentHelper from '../ui_core/ElementAlignmentHelper';\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 = ElementAlignmentHelper.get_SetPositionRelativeToOtherElement(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}\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.ref = React.createRef();\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, rightButtonClasses} = 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._rightButtonClasses = rightButtonClasses;\r\n\t\tthis._elementRef = React.createRef();\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\tlet rightButtonClassNameString = 'right';\r\n\t\t\tif(this._rightButtonClasses)\r\n\t\t\t\trightButtonClassNameString+=(' '+this._rightButtonClasses.join(' '));\r\n\t\t\tarr.push(());\r\n\t\t}\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 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=${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', trackingCode);\r\n\t\t});\r\n\t\tscript.addEventListener('error', console.error);\r\n }\r\n\tstatic logEvent(name, parameters){\r\n\t\ttry{\r\n\t\t\tGoogleAnalytics._gtag('event', name, parameters);\r\n\t\t}catch(error){\r\n\t\t\tconsole.error(error);\r\n\t\t}\r\n\t}\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 E{\r\n static div(className) {\r\n return E.c('div', className, className);\r\n }\r\n\tstatic img(className){ \r\n\t\treturn E.c('img', className, className);\r\n\t}\r\n\tstatic canvas (className){\r\n\t\treturn E.c('canvas', className, className);\r\n\t}\r\n static table (className) {\r\n return E.c('table', className, className);\r\n }\r\n static tr (className){\r\n return E.c('tr', className);\r\n }\r\n static td (className){\r\n return E.c('td', className);\r\n }\r\n static th (className){\r\n return E.c('th', className);\r\n }\r\n static h3 (className){\r\n return E.c('h3', className);\r\n }\r\n static h2 (className){\r\n return E.c('h2', className);\r\n }\r\n static h1 (className){\r\n return E.c('h1', className);\r\n }\r\n\tstatic video (className){\r\n\t\treturn E.c('video', className);\r\n\t}\r\n\tstatic checkbox (className){\r\n\t\treturn E.i( 'checkbox', className);\r\n\t}\r\n static text (className, placeholder){\r\n const e = E.i('text', className);\r\n\t\te.placeholder = placeholder;\r\n\t\treturn e;\r\n }\r\n static password (className){\r\n return E.i('password', className);\r\n }\r\n static textarea (className){\r\n return E.c('textarea', className);\r\n }\r\n static span (className){\r\n return E.c('span', className);\r\n }\r\n static select (className){\r\n return E.c('select', className);\r\n }\r\n static option (className){\r\n return E.c('option', className);\r\n }\r\n static table (className){\r\n return E.c('table', className);\r\n }\r\n static colgroup (className){\r\n return E.c('colgroup', className);\r\n }\r\n static col (className){\r\n return E.c('col', className);\r\n }\r\n static button (className){\r\n return E.c('button', className);\r\n }\r\n static a (className){\r\n return E.c('a', className);\r\n }\r\n static label (className){\r\n return E.c('label', className);\r\n }\r\n\tstatic file (className){\r\n\t\treturn E.i('file', className);\r\n\t}\r\n static i(type, className) {\r\n var i = E.c('input', className);\r\n i.type = type;\r\n return i;\r\n }\r\n static c(name, className) {\r\n var element = document.createElement(name);\r\n\t\tif(!element.addEventListener)\r\n\t\t\telement.addEventListener = element.attachEvent;\r\n\t\tif(className)\r\n\t\t\telement.classList.add(className);\r\n\t\treturn element;\r\n }\r\n}","import ReactDOM from 'react-dom';\r\nimport React, { Component } from 'react';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nexport default class IconButton {\r\n\tconstructor(props){\r\n\t\tlet {faIcon, imgUrl, text, onClick, className, disabled} = props;\r\n\t\tthis._callbackClick = onClick;\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.dispose=this.dispose.bind(this);\r\n\t\tthis._element = document.createElement('button');\r\n\t\tif(className){\r\n\t\t\tif(Array.isArray(className))\r\n\t\t\t\tclassName.forEach(c=>\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\tdispose(){\r\n\t\tthis._innerElement.removeEventListener('click', this._handleClick);\r\n\t}\r\n}\r\n","import E from '../ui_core/E';\r\nimport IconButtonNonReact from '../components/IconButtonNonReact';\r\nimport { faBackward, faTimes} from '@fortawesome/free-solid-svg-icons';\r\nexport default class ButtonFactory{\r\n\tstatic close(className, callback, disposes){\r\n\t\tconst iconButtonNonReact = new IconButtonNonReact({faIcon:faTimes, onClick:callback, className});\r\n\t\tdisposes.push(iconButtonNonReact.dispose);\r\n\t\treturn iconButtonNonReact.element;\r\n\t}\r\n}","export default function isNullOrUndefined(value){\r\n\treturn value===undefined||value===null;\r\n}","const Side = {\r\n\tTop:0, Right:1, Bottom:2, Left:3\r\n};\r\nSide.getCssClass = function(side){\r\n\tswitch(side){\r\n\t\tcase Side.Top: return 'top';\r\n\t\tcase Side.Right: return 'right';\r\n\t\tcase Side.Bottom: return 'bottom';\r\n\t\tcase Side.Left: return 'left';\r\n\t\tdefault:\r\n\t\t\tthrow new Error('Not Implemented');\r\n\t}\r\n\t\r\n}\r\nexport default Side;","import DOMHelper from '../reflection/DOMHelper';\r\nimport E from '../ui_core/E';\r\nimport eventEnable from '../core/eventEnable';\r\nimport getAbsoluteRectangle from '../ui_core/getAbsoluteRectangle';\r\nimport ElementAlignmentHelper from '../ui_core/ElementAlignmentHelper';\r\nimport ButtonFactory from '../ui_factories/ButtonFactory';\r\nimport isNullOrUndefined from '../core/isNullOrUndefined';\r\nimport Side from '../enums/Side';\r\nimport './TutorialMessage.css';\r\nexport default class TutorialMessage{\r\n\tconstructor({message, className, elementOn, buttons, hasClose, callbackClose, callbackPayload,\r\n\t\tleft, top, fixInPlace,\r\n\t\trightAlign}){\r\n\t\t\teventEnable(this);\r\n\t\tthis._disposes =[];\r\n\t\tthis.dispose = this.dispose.bind(this);\r\n\t\tif(callbackPayload===undefined)\r\n\t\t\tcallbackPayload = this;\r\n\t\tthis._element = E.div('tutorial-message');\r\n\t\tif(className)\r\n\t\t\tthis._element.classList.add(className);\r\n\t\tconst triangleElement = E.div('triangle');\r\n\t\tthis._element.appendChild(triangleElement);\r\n\t\tthis._callbackClose = callbackClose;\r\n\t\tif((!callbackClose)&&hasClose)\r\n\t\t\tcallbackClose = this.dispose;\r\n\t\tif(elementOn){\r\n\t\t\tconst setPosition = ElementAlignmentHelper.get_SetPositionRelativeToOtherElement(this._element, rightAlign);\r\n\t\t\tsetTimeout(()=>{\r\n\t\t\t\tsetPosition(elementOn);\r\n\t\t\t}, 0);\r\n\t\t\tif(!fixInPlace)\r\n\t\t\t\tthis._intervalSetPosition = setInterval(()=>{\r\n\t\t\t\t\tsetPosition(elementOn);\r\n\t\t\t\t\t//if(elementOn.offsetLeft<=0||elementOn.offsetTop<=0)\r\n\t\t\t\t\t\t//elementOn.style.display='none';\r\n\t\t\t\t}, 30);\r\n\t\t}\r\n\t\telse{\r\n\t\t\tthis._element.style.left=left?(typeof(left)==='number'?`${left}px`:left):'50%';\r\n\t\t\tthis._element.style.top=top?(typeof(top)==='number'?`${top}px`:top):'50%';\r\n\t\t\tthis._element.style.transform = 'translate(-50%,-50%)';\r\n\t\t}\r\n\t\tif(callbackClose){\r\n\t\t\tconst closeButton = ButtonFactory.close('close-button', callbackClose, this._disposes);\r\n\t\t\tthis._element.appendChild(closeButton);\r\n\t\t}\r\n\t\tthis._messageElement = E.div('message');\r\n\t\tthis._messageElement.textContent = message;\r\n\t\tthis._element.appendChild(this._messageElement);\r\n\t\tif(buttons&&buttons.length>0){\r\n\t\t\tthis._buttonsElement = E.div('buttons');\r\n\t\t\tthis._element.appendChild(this._buttonsElement);\r\n\t\t\tfor(var button of buttons){\r\n\t\t\t\tconst buttonElement = E.button('button');\r\n\t\t\t\tconst {text, callback}=button;\r\n\t\t\t\tconst callbackWithPayload = ()=>callback(callbackPayload);\r\n\t\t\t\tbuttonElement.addEventListener('click', callbackWithPayload);\r\n\t\t\t\tbuttonElement.textContent = text;\r\n\t\t\t\tthis._disposes.push(()=>{\r\n\t\t\t\t\tbuttonElement.removeEventListener('click', callbackWithPayload);\r\n\t\t\t\t});\r\n\t\t\t\tthis._buttonsElement.appendChild(buttonElement);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t}\r\n\t\tdocument.body.appendChild(this._element);\r\n\t\tTutorialMessage._instances.push(this);\r\n\t}\r\n\tstatic closeAll(){\r\n\t\tTutorialMessage._instances.forEach(tutorialMessage=>tutorialMessage.close());\r\n\t}\r\n\tget disposed(){\r\n\t\treturn this._disposed?true:false;\r\n\t}\r\n\tclose(){\r\n\t\tthis.dispose();\r\n\t\tthis._callbackClose&&this._callbackClose();\r\n\t}\r\n\tdispose(){\r\n\t\tconst index = TutorialMessage._instances.indexOf(this);\r\n\t\tif(index>=0)\r\n\t\t\tTutorialMessage._instances.splice(index, 1);\r\n\t\tthis._disposed = true;\r\n\t\tif(this._intervalSetPosition)\r\n\t\t\tclearInterval(this._intervalSetPosition);\r\n\t\tthis._intervalSetPosition = null;\r\n\t\tthis._disposes.forEach(d=>d());\r\n\t\tif(this._element.parentElement)\r\n\t\t\tthis._element.parentElement.removeChild(this._element);\r\n\t\tthis.dispatchEvent({type:'dispose', tutorialMessage:this});\r\n\t}\r\n}\r\nTutorialMessage._instances=[];","import DOMHelper from '../reflection/DOMHelper';\r\nimport TutorialTimer from '../tutorials/TutorialTimer';\r\nimport TutorialMessage from '../tutorials/TutorialMessage';\r\nimport eventEnable from '../core/eventEnable';\r\nexport default class Tutorials{\r\n\tstatic get showing(){\r\n\t\treturn Tutorials._showing;\r\n\t}\r\n\tstatic set showing(value){\r\n\t\tTutorials._showing = value;\r\n\t\tif(!value){\r\n\t\t\tfor(var tutorialMessage of Array.from(Tutorials._showingTutorialMessages)){\r\n\t\t\t\ttutorialMessage.dispose();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tstatic dispatchUpdate(){\r\n\t\tTutorials.dispatchEvent({type:'update'});\r\n\t}\r\n\tstatic get showStep2(){\r\n\t\treturn Tutorials._showStep2;\r\n\t}\r\n\tstatic _updateShowStep2(){\r\n\t\tTutorials._showStep2 = Tutorials.hasClickedBirdsEyeViewLeftOrRightButton&&Tutorials.hasClickedFilter;\r\n\t\tif(Tutorials._showStep2){\r\n\t\t\tTutorials._hasDoneShowStep2=true;\r\n\t\t\tTutorials.dispatchEvent({type:'update'});\r\n\t\t}\r\n\t}\r\n\t\r\n\tstatic get showStep3(){\r\n\t\treturn Tutorials._showStep3;\r\n\t}\r\n\tstatic _updateShowStep3(){\r\n\t\tTutorials._showStep3 = Tutorials.hasExpandedPlotMenu&& Tutorials._hasDoneShowStep2;\r\n\t\tif(Tutorials._showStep3){\r\n\t\t\tTutorials._hasDoneShowStep3=true;\r\n\t\t\tTutorials.dispatchEvent({type:'update'});\r\n\t\t}\r\n\t}\r\n\tstatic get showStep3_1(){\r\n\t\treturn Tutorials._showStep3_1;\r\n\t}\r\n\tstatic _updateShowStep3_1(){\r\n\t\tTutorials._showStep3_1= Tutorials.hasClickedPlotMenuGallery&&Tutorials._hasDoneShowStep3;\r\n\t\tif(Tutorials._showStep3_1)\r\n\t\t\tTutorials.dispatchEvent({type:'update'});\r\n\t}\r\n\tstatic get showStep3_2(){\r\n\t\treturn Tutorials._showStep3_2;\r\n\t}\r\n\tstatic _updateShowStep3_2(){\r\n\t\tTutorials._showStep3_2= Tutorials.hasClickedPlotMenuFloorPlans&& Tutorials._hasDoneShowStep3\r\n\t\tif(Tutorials._showStep3_2)\r\n\t\t\tTutorials.dispatchEvent({type:'update'});\r\n\t}\r\n\tstatic get showStep4(){\r\n\t\treturn Tutorials._showStep4;\r\n\t}\r\n\tstatic _updateShowStep4(){\r\n\t\tTutorials._showStep4 = Tutorials.hasClickedPlotMenuFavourites;\r\n\t\tif(Tutorials._showStep4)\r\n\t\t\tTutorials.dispatchEvent({type:'update'});\r\n\t}\r\n\tstatic get showStep5(){\r\n\t\treturn Tutorials._showStep5;\r\n\t}\r\n\tstatic _updateShowStep5(){\r\n\t\tTutorials._showStep5 = Tutorials.hasClickedFavourites;\r\n\t\tif(Tutorials._showStep5)\r\n\t\t\tTutorials.dispatchEvent({type:'update'});\r\n\t}\r\n\tstatic get showStep6(){\r\n\t\treturn Tutorials._showStep6;\r\n\t}\r\n\tstatic _updateShowStep6(){\r\n\t\tTutorials._showStep6 = Tutorials.hasClickedGenerateBrochureForFavourites||Tutorials.hasClickedCompareFavourites;\r\n\t\tif(Tutorials._showStep6)\r\n\t\t\tTutorials.dispatchEvent({type:'update'});\r\n\t}\r\n\tstatic get showStep7(){\r\n\t\treturn Tutorials._showStep7&&(!Tutorials.showStep8);\r\n\t}\r\n\tstatic _updateShowStep7(){\r\n\t\tTutorials._showStep7 = Tutorials.haveBeenToOutside360;\r\n\t\tif(Tutorials._showStep7){\r\n\t\t\tTutorials.hasExpandedPlotMenu=false;\r\n\t\t\tTutorials.dispatchEvent({type:'update'});\r\n\t\t}\r\n\t}\r\n\tstatic get showStep8(){\r\n\t\treturn Tutorials._showStep8;\r\n\t}\r\n\tstatic _updateShowStep8(){\r\n\t\tTutorials._showStep8 = Tutorials.hasClickedGoToOutside360;\r\n\t\tif(Tutorials._showStep8){\r\n\t\t\tTutorials.dispatchEvent({type:'update'});\r\n\t\t}\r\n\t}\r\n\tstatic get hasClickedPlotMenuFavourites(){\r\n\t\treturn Tutorials._hasClickedPlotMenuFavourites;\r\n\t}\r\n\tstatic set hasClickedPlotMenuFavourites(value){\r\n\t\tTutorials._hasClickedPlotMenuFavourites = value;\r\n\t\tTutorials._updateShowStep4();\r\n\t}\r\n\tstatic get hasClickedPlotMenuGallery(){\r\n\t\treturn Tutorials._hasClickedPlotMenuGallery;\r\n\t}\r\n\tstatic set hasClickedPlotMenuGallery(value){\r\n\t\tTutorials._hasClickedPlotMenuGallery = value;\r\n\t\tTutorials._updateShowStep3_1();\r\n\t}\r\n\tstatic get haveBeenToOutside360(){\r\n\t\treturn Tutorials._haveBeenToOutside360;\r\n\t}\r\n\tstatic set haveBeenToOutside360(value){\r\n\t\tTutorials._haveBeenToOutside360 = value;\r\n\t\tTutorials._updateShowStep7();\r\n\t}\r\n\tstatic get hasClickedPlotMenuFloorPlans(){\r\n\t\treturn Tutorials._hasClickedPlotMenuFloorPlans;\r\n\t}\r\n\tstatic set hasClickedPlotMenuFloorPlans(value){\r\n\t\tTutorials._hasClickedPlotMenuFloorPlans = value;\r\n\t\tTutorials._updateShowStep3_2();\r\n\t}\r\n\tstatic get hasClickedFavourites(){\r\n\t\treturn Tutorials._hasClickedFavourites;\r\n\t}\r\n\tstatic set hasClickedFavourites(value){\r\n\t\tTutorials._hasClickedFavourites = value;\r\n\t\tTutorials._updateShowStep5();\r\n\t}\r\n\tstatic get hasClickedMenuBarFavourite(){\r\n\t\treturn Tutorials._hasClickedMenuBarFavourite;\r\n\t}\r\n\tstatic set hasClickedMenuBarFavourite(value){\r\n\t\tTutorials._hasClickedMenuBarFavourite = value;\r\n\t\t Tutorials._updateShowStep4();\r\n\t}\r\n\tstatic get hasClickedGenerateBrochureForFavourites(){\r\n\t\treturn Tutorials._hasClickedGenerateBrochureForFavourites;\r\n\t}\r\n\tstatic set hasClickedGenerateBrochureForFavourites(value){\r\n\t\tTutorials._hasClickedGenerateBrochureForFavourites = value;\r\n\t\t Tutorials._updateShowStep6();\r\n\t}\r\n\tstatic get doneWithMoveAroundOutside360Message(){\r\n\t\treturn Tutorials._doneWithMoveAroundOutside360Message;\r\n\t}\r\n\tstatic set doneWithMoveAroundOutside360Message(value){\r\n\t\tTutorials._doneWithMoveAroundOutside360Message = value;\r\n\t}\r\n\tstatic get hasClickedBirdsEyeViewLeftOrRightButton(){\r\n\t\treturn Tutorials._hasClickedBirdsEyeViewLeftOrRightButton;\r\n\t}\r\n\tstatic set hasClickedBirdsEyeViewLeftOrRightButton(value){\r\n\t\tTutorials._hasClickedBirdsEyeViewLeftOrRightButton = value;\r\n\t\tTutorials._updateShowStep2();\r\n\t}\r\n\tstatic get hasClickedCompareFavourites(){\r\n\t\treturn Tutorials._hasClickedCompareFavourites;\r\n\t}\r\n\tstatic set hasClickedCompareFavourites(value){\r\n\t\tTutorials._hasClickedCompareFavourites = value;\r\n\t\tTutorials._updateShowStep6();\r\n\t}\r\n\tstatic get canShowReturnToAerialViewMessage(){\r\n\t\treturn Tutorials._canShowReturnToAerialViewMessage;\r\n\t}\r\n\tstatic set canShowReturnToAerialViewMessage(value){\r\n\t\tTutorials._canShowReturnToAerialViewMessage = value;\r\n\t}\r\n\tstatic get hasClickedGoToOutside360(){\r\n\t\treturn Tutorials._hasClickedGoToOutside360;\r\n\t}\r\n\tstatic set hasClickedGoToOutside360(value){\r\n\t\tTutorials._hasClickedGoToOutside360 = value;\r\n\t\tTutorials._updateShowStep8();\r\n\t}\r\n\tstatic get hasClickedFilter(){\r\n\t\treturn Tutorials._hasClickedFilter;\r\n\t}\r\n\tstatic set hasClickedFilter(value){\r\n\t\tTutorials._hasClickedFilter = value;\r\n\t\tTutorials._updateShowStep2();\r\n\t}\r\n\tstatic get hasExpandedPlotMenu(){\r\n\t\treturn Tutorials._hasExpandedPlotMenu;\r\n\t}\r\n\tstatic set hasExpandedPlotMenu(value){\r\n\t\tTutorials._hasExpandedPlotMenu = value;\r\n\t\tTutorials._updateShowStep3();\r\n\t}\r\n\tstatic set nOutside360HotspotsClicked(value){\r\n\t\tif(value>=3){\r\n\t\t\tTutorials._canShowReturnToAerialViewMessage = true;\r\n\t\t}\r\n\t\tif(value>=2){\r\n\t\t\tTutorials._doneWithMoveAroundOutside360Message=true\r\n\t\t}\r\n\t\tTutorials._nOutside360HotspotsClicked=value;\r\n\t\tTutorials.dispatchEvent({type:'nOutside360HotspotsClickedChanged', value});\r\n\t}\r\n\tstatic get nOutside360HotspotsClicked(){\r\n\t\treturn Tutorials._nOutside360HotspotsClicked;\r\n\t}\r\n\t\r\n\tstatic addShowingTutorialMessage(tutorialMessage){\r\n\t\tlet handleDispose;\r\n\t\thandleDispose = ()=>{\r\n\t\t\ttutorialMessage.removeEventListener('dispose', handleDispose);\r\n\t\t\tconst index = Tutorials._showingTutorialMessages.indexOf(tutorialMessage);\r\n\t\t\tif(index<0)return;\r\n\t\t\tTutorials._showingTutorialMessages.splice(index, 1);\r\n\t\t};\r\n\t\ttutorialMessage.addEventListener('dispose', handleDispose);\r\n\t\tTutorials._showingTutorialMessages.push(tutorialMessage);\r\n\t}\r\n\tstatic closeAll(){\r\n\t\t\tTutorials._showing = false;\r\n\t\t\ttry{\r\n\t\t\t\tTutorials.dispatchUpdate();\r\n\t\t\t}catch(err){}\r\n\t}\r\n}\r\neventEnable(Tutorials);\r\nTutorials._nOutside360HotspotsClicked=0;\r\nTutorials._showing= false;\r\nTutorials._showingTutorialMessages = [];\r\nwindow.Tutorials = Tutorials;","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\nimport GoogleAnalytics from '../google/GoogleAnalytics';\r\nimport Tutorials from '../tutorials/Tutorials';\r\nimport TutorialMessage from '../tutorials/TutorialMessage';\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._directionButtonsRef=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._updateTutorialMessages= this._updateTutorialMessages.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\tTutorials.addEventListener('update', this._updateTutorialMessages);\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\tconst unit = this._siteJson.units.getPlotByNumber(plotNumber).unit;\r\n\t\tlet markerPosition = 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\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\tTutorials.hasExpandedPlotMenu=true;\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\tTutorials.hasExpandedPlotMenu=true;\r\n\t\tif(this._isDesktopAndShouldShowPlotDetailedInformationInstead()){\r\n\t\t\t\treturn;\r\n\t\t}\r\n\t\tif(this._getConfiguration().showPlotMenuOnClickInsteadOfHover){\r\n\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\tGoogleAnalytics.logEvent('clickedUnitMarkerOnAerial', {unitId:marker.unit.id});\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\tconst showPlotMenuOnClickInsteadOfHover = this._getConfiguration().showPlotMenuOnClickInsteadOfHover;\r\n\t\tthis._plotMenuRef.current.show({position:e.markerPosition,\r\n\t\tgetMouseInSourceBounds:marker.getMouseInBounds, untilClickOff:showPlotMenuOnClickInsteadOfHover,\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\tconst unitMarkers = this.state.unitMarkers;\r\n\t\tfor(var i=0; i);\r\n\t\t\tunitMarkers.push(unitMarker);\r\n\t\t\tif(i===0)\r\n\t\t\t\tthis._updateTutorialMessages(unitMarker);\r\n\t\t}\r\n\t\tthis._createdMarkers=true;\r\n\t\tthis.setState({unitMarkers:unitMarkers});\r\n\t}\r\n\t_updateTutorialMessages(unitMarker){\r\n\t\tthis. _tutorialMessageOnUnitMarker?.dispose();\r\n\t\tthis._tutorialMessageLeftRightButton?.dispose();\r\n\t\tsetTimeout(()=>{\r\n\t\t\tthis. _tutorialMessageOnUnitMarker?.dispose();\r\n\t\t\tconst unitMarker = this.state.unitMarkers[0];\r\n\t\t\tif(((Tutorials.showStep2&&!Tutorials.hasExpandedPlotMenu)||Tutorials.showStep7)&&(!Tutorials.plotMenuShowing)&&unitMarker?.ref?.current&&Tutorials.showing){\r\n\t\t\t\tthis._tutorialMessageOnUnitMarker = new TutorialMessage({\r\n\t\t\t\t\tmessage:Tutorials.showStep7?'View plot again':'View plot', elementOn:unitMarker.ref.current._element.current, \r\n\t\t\t\t\tclassName:'tutorial-message-view-favourites',\r\n\t\t\t\t\thasClose:true, callbackClose:()=>{\r\n\t\t\t\t\t\tTutorials.showing = false;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tfixInPlace:true\r\n\t\t\t\t});\r\n\t\t\t\tTutorials.addShowingTutorialMessage(this._tutorialMessageOnUnitMarker);\r\n\t\t\t}\r\n\t\t\tthis._tutorialMessageLeftRightButton?.dispose();\r\n\t\t\tif(this._directionButtonsRef.current&&Tutorials.showing&&!Tutorials.hasClickedBirdsEyeViewLeftOrRightButton){\r\n\t\t\t\tthis._tutorialMessageLeftRightButton = new TutorialMessage({\r\n\t\t\t\t\tmessage:'Rotate view with these buttons',\r\n\t\t\t\t\tclassName:'tutorial-message-birds-eye-view-directional-buttons',\t\t\t\t\t\r\n\t\t\t\t\telementOn:this._directionButtonsRef.current._elementRef.current,\t\t\t\t\t\t\r\n\t\t\t\t\thasClose:true, callbackClose:()=>{\r\n\t\t\t\t\t\tTutorials.showing = false;\r\n\t\t\t\t\t\tthis._tutorialMessageLeftRightButton?.dispose();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tfixInPlace:true\r\n\t\t\t\t});\r\n\t\t\t\tTutorials.addShowingTutorialMessage(this._tutorialMessageLeftRightButton);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t_handleClickLeft(){\r\n\t\tTutorials.hasClickedBirdsEyeViewLeftOrRightButton = true;\r\n\t\tthis._tutorialMessageLeftRightButton?.dispose();\r\n\t\tthis._birdsEyeViewIndex--;\r\n\t\tthis._load().catch(console.error);\r\n\t}\r\n\t_handleClickRight(){\r\n\t\tTutorials.hasClickedBirdsEyeViewLeftOrRightButton = true;\r\n\t\tthis._tutorialMessageLeftRightButton?.dispose();\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\tGoogleAnalytics.logEvent('usedDragDropMan', {});\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\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\tthis._updateTutorialMessages();\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, plotsArray}){\r\n\t\tthis.setState({plotsArray:plotsArray?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\treturn this._clickedOffHandle;\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\nimport Tutorials from '../tutorials/Tutorials';\r\nimport TutorialMessage from '../tutorials/TutorialMessage';\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._buttonStatusRef = React.createRef();\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\tTutorials.addEventListener('update', this._updateTutorialMessages);\r\n\t}\r\n\t_updateTutorialMessages(){\r\n\t\tthis._tutorialMessageStatus?.dispose();\r\n\t\tsetTimeout(()=>{\r\n\t\t\tthis._tutorialMessageStatus?.dispose();\r\n\t\t\tif(Tutorials.showing&&this._isShowing&&!Tutorials.hasClickedFilterStatus){\r\n\t\t\t\tthis._tutorialMessageStatus = new TutorialMessage({\r\n\t\t\t\t\tmessage:'Click to filter on availability', elementOn:this._buttonStatusRef.current._elementRef.current,\r\n\t\t\t\t\tclassName:'tutorial-message-status',\t\t\t\t\t\t\t\r\n\t\t\t\t\thasClose:true, callbackClose:()=>{\r\n\t\t\t\t\t\tTutorials.showing = false;\r\n\t\t\t\t\t\tthis._tutorialMessageStatus.dispose();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tfixInPlace:true\r\n\t\t\t\t});\r\n\t\t\t\tTutorials.addShowingTutorialMessage(this._tutorialMessageStatus);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\tset isShowing(value){\r\n\t\tthis._isShowing = value;\r\n\t\tthis._updateTutorialMessages();\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\tthis._updateTutorialMessages();\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._filtersButtonsRef.current&&(this._filtersButtonsRef.current.isShowing = true);\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._filtersButtonsRef.current&&(this._filtersButtonsRef.current.isShowing = false);\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\nimport isNullOrUndefined from '../core/isNullOrUndefined';\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(isNullOrUndefined(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\nimport AssetsManager from '../assets_management/AssetsManager';\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._createPriceIntervalsFromPlotsArrayOrdered = this._createPriceIntervalsFromPlotsArrayOrdered.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_createPriceIntervalsFromPlotsArrayOrdered(plotsInPriceOrder){\r\n\t\tvar index=0;\r\n\t\tconst priceRanges = [];\r\n\t\tlet currentPriceFrom =100000;\r\n\t\tlet priceIncrement=AssetsManager.configuration.priceIncrement;\r\n\t\tif(priceIncrement===null||priceIncrement===undefined||priceIncrement<=0)\r\n\t\t\tpriceIncrement=100000;\r\n\t\twhile(indexplotsInPriceOrder[index].price)\r\n\t\t\t{\r\n\t\t\t\t\r\n\t\t\t\tlet price;\r\n\t\t\t\tvar hadOneGreaterThanZero = false;\r\n\t\t\t\twhile(index0)hadOneGreaterThanZero=true;\r\n\t\t\t\t\tindex++;\r\n\t\t\t\t}\r\n\t\t\t\tif(hadOneGreaterThanZero)\r\n\t\t\t\t\tpriceRanges.push({from:currentPriceFrom, to:nextPrice});\r\n\t\t\t}\r\n\t\t\tcurrentPriceFrom = nextPrice;\r\n\t\t}\r\n\t\treturn priceRanges;\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\tlet desiredPriceIntervalsPlusDynamicallyAddedPriceIntervalsPrice =\r\n\t\t\tavailablePricesSettings.desiredIntervalsPrice;\r\n\t\tif(AssetsManager.configuration.priceIncrement||desiredPriceIntervalsPlusDynamicallyAddedPriceIntervalsPrice.length<1){\r\n\t\t\tthis._updateOptions(this._createPriceIntervalsFromPlotsArrayOrdered(plotsInPriceOrder), currencyConfiguration.currencyPrefix, currencyConfiguration.currencySuffix);\r\n\t\t\treturn;\r\n\t\t}\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 UnitMarkerKey from './UnitMarkerKey';\r\nimport Tutorials from '../tutorials/Tutorials';\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._unitMarkerKey = 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\tTutorials.hasClickedFilterStatus=true;\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, siteJson){\r\n\t\tconst plotStatusesForPlots = [];\r\n\t\tfor(var i=0; iPlotStatus.getDescription(a).localeCompare(PlotStatus.getDescription(b)))\r\n\t\t\t\t.map((plotStatus)=>{\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\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 './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}\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', RESIZED:'resized'};\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\tif (typeof window === `undefined` || typeof navigator === `undefined`) return false;\r\n\t\treturn /iPhone/i.test(navigator.userAgent || navigator.vendor || (window.opera && window.opera.toString() === `[object Opera]`))\r\n})();\r\nexport default isIphone;","const urlSearchParameters = new URLSearchParams(window.location.search);\r\nexport default class UrlParameters{\r\n\tstatic get salesforce(){\r\n\t\treturn urlSearchParameters.has('salesforce')?true:false;\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';\t\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\nimport Tutorials from '../tutorials/Tutorials';\r\nimport TutorialMessage from '../tutorials/TutorialMessage';\r\nimport isIphone from '../core/isIphone';\r\nimport UrlParameters from '../urls/UrlParameters';\r\nimport checkIfImageExists from '../core/checkIfImageExists';\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\tshowHouseGridSelector, playSiteVideo, showTwoDSitePlan, getConfiguration, showSuggestedSites,\r\n\t\t\tshowSpecification,\r\n\t\t\tshowLocalArea} = props;\r\n\t\teventEnable(this);\r\n\t\tthis._callbackShowSpecification =showSpecification;\r\n\t\tthis._getConfiguration = getConfiguration;\r\n\t\tthis._zoomMin=zoomMin;\r\n\t\tthis._zoomMax = zoomMax;\r\n\t\tthis._showHouseTypeGrid = UrlParameters.salesforce;\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._callbackShowHouseGridSelector = showHouseGridSelector;\r\n\t\tthis._callbackShowLocalArea = showLocalArea;\r\n\t\tthis._zoomButtonsRef=React.createRef();\r\n\t\tthis._starRef=React.createRef();\r\n\t\tthis._buttonSiteRef=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._handleClickButtonSpecification = this._handleClickButtonSpecification.bind(this);\r\n\t\tthis._handleClickButtonPlaySiteVideo = this._handleClickButtonPlaySiteVideo.bind(this);\r\n\t\tthis._handleClickButtonSuggestedSites = this._handleClickButtonSuggestedSites.bind(this);\r\n\t\tthis._handleClickButtonHelp = this._handleClickButtonHelp.bind(this);\r\n\t\tthis._handleClickShowLocalArea = this._handleClickShowLocalArea.bind(this);\r\n\t\tthis._updateTutorialMessages = this._updateTutorialMessages.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\tthis._dragDropStreetViewButtonRef = 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\tif(getConfiguration().hideBrochuresIconTillCustomerGeneratesBrochure){\r\n\t\t\tdocument.body.classList.add('hide-brochures-icon-till-customer-generates-brochure');\r\n\t\t}\r\n\t\twindow.addEventListener('resize', this._handleWindowResized);\r\n\t\tsetTimeout(()=>this._dispatchIsHorizontalChanged(isHorizontal), 0);\r\n\t\tTutorials.addEventListener('update', this._updateTutorialMessages);\r\n\t}\r\n\tcomponentDidMount(){\r\n\t\tthis._menuBarWindowEntries = new MenuBarWindowEntries({element:this._windowEntriesRef.current});\r\n\t\tcheckIfImageExists(Urls.assets+'specification.png', (exists)=>{\r\n\t\t\tif(exists)\r\n\t\t\t\tthis._elementRef.current?.classList.add('has-specification');\r\n\t\t});\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\tTutorials.hasClickedFilter=true;\r\n\t\tthis._tutorialMessageFilter?.dispose();\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\tif(this._showHouseTypeGrid)\r\n\t\t\tthis._callbackShowHouseGridSelector();\r\n\t\telse\r\n\t\t\tthis._callbackShowHouseTypes();\r\n\t}\r\n\t_handleClickButtonSpecification(){\r\n\t\tthis._callbackShowSpecification();\r\n\t}\r\n\t_handleClickShowLocalArea(){\r\n\t\tthis._callbackShowLocalArea();\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_handleClickButtonHelp(){\r\n\t\tTutorials.generalWalkthrough();\r\n\t}\r\n\t_onStarSelectedChange(selected){\r\n\t\tTutorials.hasClickedFavourites=true;\r\n\t\tthis._tutorialMessageFavourite?.dispose();\r\n\t\tthis._setFavouritesActive(selected);\r\n\t}/*\r\n\t\t\t\t*/\r\n\t_updateTutorialMessages(){\r\n\t\t\t\t\r\n\t\tthis._tutorialMessageOutside360?.dispose();\r\n\t\tthis._tutorialMessageFavourite?.dispose();\r\n\t\tsetTimeout(()=>{\r\n\t\t\tthis._tutorialMessageOutside360?.dispose();\r\n\t\t\tthis._tutorialMessageFilter?.dispose();\r\n\t\t\tthis._tutorialMessageFavourite?.dispose();\r\n\t\t\tif(Tutorials.showStep4&&this._starRef.current&&Tutorials.showing&&!Tutorials.hasClickedFavourites){\r\n\t\t\t\tthis._tutorialMessageFavourite = new TutorialMessage({\r\n\t\t\t\t\tmessage:'View favourites', elementOn:this._starRef.current._elementRef.current, \r\n\t\t\t\t\tclassName:'tutorial-message-view-favourites',\r\n\t\t\t\t\thasClose:true, callbackClose:()=>{\r\n\t\t\t\t\t\tTutorials.showing = false;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tfixInPlace:true\r\n\t\t\t\t});\r\n\t\t\t\tTutorials.addShowingTutorialMessage(this._tutorialMessageFavourite);\r\n\t\t\t}\r\n\t\t\tif(this._buttonSiteRef.current&&Tutorials.showing&&!Tutorials.hasClickedFilter){\r\n\t\t\t\tthis._tutorialMessageFilter = new TutorialMessage({\r\n\t\t\t\t\tmessage:'Filter plots', elementOn:this._buttonSiteRef.current._elementRef.current, \r\n\t\t\t\t\tclassName:'tutorial-message-filter',\r\n\t\t\t\t\thasClose:true, callbackClose:()=>{\r\n\t\t\t\t\t\tTutorials.showing = false;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tfixInPlace:true\r\n\t\t\t\t});\r\n\t\t\t\tTutorials.addShowingTutorialMessage(this._tutorialMessageFilter);\r\n\t\t\t}\r\n\t\t\tif(Tutorials.showStep6&&this._dragDropStreetViewButtonRef.current&&Tutorials.showing&&!Tutorials.haveBeenToOutside360){\r\n\t\t\t\tthis._tutorialMessageOutside360 = new TutorialMessage({\r\n\t\t\t\t\tmessage:'Click here or drag drop to walk around site!',\r\n\t\t\t\t\tclassName:'tutorial-message-menu-bar-outside-360',\r\n\t\t\t\t\telementOn:this._dragDropStreetViewButtonRef.current._elementRef.current, \r\n\t\t\t\t\thasClose:true, callbackClose:()=>{\r\n\t\t\t\t\t\tTutorials.showing = false;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tfixInPlace:true\r\n\t\t\t\t});\r\n\t\t\t\tTutorials.addShowingTutorialMessage(this._tutorialMessageOutside360);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t});\r\n\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\tthis._updateTutorialMessages();\r\n\t\t\r\n\t\tlet iconButtonFullScreen;\r\n\t\tif(isIphone){\r\n\t\t\t\tconst urlParams = new URLSearchParams(window.location.search);\r\n\t\t\tif(urlParams.get('fullscreen'))\r\n\t\t\t\ticonButtonFullScreen = null;\r\n\t\t\telse\r\n\t\t\t\ticonButtonFullScreen=(
    );\r\n\t\t}\r\n\t\telse\r\n\t\t\ticonButtonFullScreen = (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 specificationButton = (\r\n\t\t\t\t);\r\n\t\tconst buttonHouseTypes = configuration.houseTypesViewerEnabled||this._showHouseTypeGrid?(\r\n\t\t\t\t):null;\r\n\t\tconst localAreaButton = this._showHouseTypeGrid?():null;\r\n\t\tconst dragDropStreetViewButton = configuration.outside360Enabled?():null;\r\n\t\t\r\n\t\t\t\tconst buttonHelp = configuration.helpButtonEnabled?():null;\r\n\t\t\t\treturn (\r\n\t\t\t
    \r\n\t\t\t\t{iconButtonFullScreen}\r\n\t\t\t\t\t{buttonHelp}\r\n\t\t\t\t\r\n\t\t\t\t\t{suggestedSitesButton}\r\n\t\t\t\t\t\t{specificationButton}\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\t\t{localAreaButton}\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{dragDropStreetViewButton}\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}","export default function checkIfImageExists(url, callback) {\r\n const img = new Image();\r\n img.src = url;\r\n \r\n if (img.complete) {\r\n callback(true);\r\n } else {\r\n img.onload = () => {\r\n callback(true);\r\n };\r\n \r\n img.onerror = () => {\r\n callback(false);\r\n };\r\n }\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\nimport GoogleAnalytics from '../google/GoogleAnalytics';\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\tGoogleAnalytics.logEvent('played video', {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\tdocument.body.classList.add('video-player-visible');\r\n\t\t\tthis._element.classList.add('visible');\r\n\t\t}\r\n\t\telse{\r\n\t\t\tdocument.body.classList.remove('video-player-visible');\r\n\t\t\tthis._element.classList.remove('visible');\r\n\t\t}\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\tget showing(){\r\n\t\treturn this._showing;\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._showing = 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\nimport GoogleAnalytics from '../google/GoogleAnalytics';\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\tconst filterNames =[];\r\n\t\tthis._filters.forEach((filter)=>{\r\n\t\t\tplots = filter.filterPlots(plots);\r\n\t\t\tif(filter.isApplied);\r\n\t\t\t\tfilterNames.push(filter.menuType);\r\n\t\t});\r\n\t\tGoogleAnalytics.logEvent('filteredPlots', {appliedFilterNames:filterNames, remainingPlotNumbers:plots.map(plot=>plot.number)});\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\tget isApplied(){\r\n\t\treturn this._selectedPlot?true:false;\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 './Specification.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 Specification 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._handleClickButtonBack = this._handleClickButtonBack.bind(this);\r\n\t\tthis._getInsertedMenuItemsHandler = getInsertedMenuItemsHandler;\r\n\t\tthis.state = {visible:false};\r\n\t}\r\n\tcomponentDidMount(){\r\n\t\t\r\n\t}\r\n\tsetVisible(value){\r\n\t\tconsole.log('CALLED IT');\r\n\t\tconsole.log(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\t_handleClickButtonBack(){\r\n\t\tthis._callbackHide();\r\n\t}\r\n\tcloseCurrentConfigurator(){\r\n\t}\r\n\trender(){\r\n\t\tconst className=\"specification\"+(this.state.visible?\" visible\":\"\");\r\n\t\treturn (
    \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 './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}","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","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.showInExistingPosition = this.showInExistingPosition.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\tshowInExistingPosition(){\r\n\t\tsetTimeout(()=>{\r\n\t\t\tthis._showing = true;\r\n\t\t\tthis._setVisible(true);\r\n\t\t\tthis._setRelocated(true);\r\n\t\t}, 0);}\r\n\tget element(){\r\n\t\treturn this._elementRef.current;\r\n\t}\r\n\tget innerElement(){\r\n\t\treturn this._inner.current;\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\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.isAvailable;//(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\nimport GoogleAnalytics from '../google/GoogleAnalytics';\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&&plot){\r\n\t\t\tthis._tabPanelRef.current.setActive(plotMoreInformationType);\r\n\t\t\tswitch(plotMoreInformationType){\r\n\t\t\t\tcase PlotMoreInformationType.FLOOR_PLANS:\r\n\t\t\t\t\tGoogleAnalytics.logEvent('viewedFloorPlans', {plotNumber:plot.number});\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase PlotMoreInformationType.GALLERY:\r\n\t\t\t\t\tGoogleAnalytics.logEvent('viewedGallery', {plotNumber:plot.number});\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\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\tif(this.state.visible&&this._configuration.fullScreenGalleryAndFloorPlans&&(\r\n\t\t\t(this._currentPlotMoreInformationType===PlotMoreInformationType.GALLERY)||\r\n\t\t\t(this._currentPlotMoreInformationType===PlotMoreInformationType.FLOOR_PLANS)\r\n\t\t)){\r\n\t\t\tdocument.body.classList.add('full-screen-gallery-or-floor-plans-showing');\r\n\t\t}else{\r\n\t\t\tdocument.body.classList.remove('full-screen-gallery-or-floor-plans-showing');\r\n\t\t}\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}","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, agreedToFutureUpdates, agreedToPrivacyNotice, singlePlotBrochure,\r\n\t\tdebug, pageGroupIdsToInclude\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,\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\tagreedToFutureUpdates\r\n\t\t\t\t},\r\n\t\t\t\tsessionToken:SessionManager.instance.sessionToken,\r\n\t\t\t\tpageGroupIdsToInclude\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\nimport RunningMode from '../RunningMode';\r\nimport GoogleAnalytics from '../google/GoogleAnalytics';\r\nimport Tutorials from '../tutorials/Tutorials';\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\tdocument.body.classList.add('showing-brochure-generation-menu');\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\tdocument.body.classList.remove('showing-brochure-generation-menu');\r\n\t\tsetTimeout(Tutorials.dispatchUpdate, 0);\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 selectedPlots = (this._plotsShownFor?this._plotsShownFor:selectedPlotsArray);\r\n\t\t\tconst selectedPlotsEnabled = selectedPlots.filter(selectedPlot=>selectedPlot?.houseType?.brochureEnabled!==false);\r\n\t\t\tconst plotNumbers = selectedPlotsEnabled.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\t\r\n\t\t\tdocument.body.classList.add('has-generated-brochure');\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\tdebug:RunningMode.isDevelopment\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\tGoogleAnalytics.logEvent('generatedBrochure', {plotNumbers});\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:handle, 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.error(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, callbackClickedClose}= 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\t//element.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:resized, \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(callbackClickedClose){\r\n\t\t\t\t\tif(!callbackClickedClose())\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t}\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\tconst hasDefaults = (defaultX!==undefined&&defaultY!==undefined);\r\n\t\t\tstartPosition = hasDefaults?[defaultX, defaultY]:Windows.getStartPosition(this);\r\n\t\t}\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\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\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\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\tif(configuration.outside360Enabled){\r\n\t\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\t\tthis._smallButtonsElement.appendChild(this._iconButtonWalkmode.element);\r\n\t\t}\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\tif(configuration.brochureGeneratorUrl){\r\n\t\t\tconst buttonSendBrochure = document.createElement('button');\r\n\t\t\tbuttonSendBrochure.classList.add(\"button-send-brochure\");\r\n\t\t\tbuttonSendBrochure.addEventListener('click', this._handleClickSendBrochure);\r\n\t\t\tbuttonSendBrochure.innerHTML = 'Send Brochure';\r\n\t\t\tthis._smallButtonsElement.appendChild(buttonSendBrochure);\r\n\t\t}\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.isAvailable);//(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\t\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\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\tconst frontViewImage = this._siteJsonUnitPlot.unit.frontViewImage;\r\n\t\tlet dynamicImageDisplayer = new DynamicImageDisplayer({\r\n\t\t\tdynamicImage: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&&(streetViewImage.entries[0].relativePath!==frontViewImage.entries[0].relativePath)){\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\t\r\n\t\tif(!this._siteJsonUnitPlot.rooms)return;\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\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||value==='';\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\tconsole.log('URL WAS ');\r\n\t\tconsole.log(url);\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, configuration}=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._configuration = configuration;\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._tourOrConfiguratorUrlChanged = this._tourOrConfiguratorUrlChanged.bind(this);\r\n\t\tthis._handleClickButtonFullscreen = this._handleClickButtonFullscreen.bind(this);\r\n\t\tthis._element.appendChild(this._iframeElement);\r\n\t\tthis._configuratorUrl = Urls.getConfiguratorUrlForPlot(this._siteJsonUnitPlot, this._configuration);\r\n\t\tthis._propertyBindingTourUrl = PropertyBindingFactory.standard(this, this._houseType, 'tourUrl', this._tourOrConfiguratorUrlChanged);\r\n\t\tthis._propertyBindingConfiguratorUrl = PropertyBindingFactory.standard(this, this._houseType, 'configuratorUrl', this._tourOrConfiguratorUrlChanged);\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_tourOrConfiguratorUrlChanged(value){\r\n\t\tthis._configuratorUrl = Urls.getConfiguratorUrlForPlot(this._siteJsonUnitPlot, this._configuration);\r\n\t\tif(!this._configuratorUrl){\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 = this._configuratorUrl;\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 Urls from '../urls/Urls';\r\nimport UrlHelper from '../core/UrlHelper';\r\nimport E from '../ui_core/E';\r\nexport default class HouseGridSelectorInfo {\r\n\tconstructor({getWindowElement, configuration, showBrochureGenerationDialog}){\r\n\t\tthis._getWindowElement= getWindowElement;\r\n\t\tthis._configuration = configuration;\r\n\t\tthis.load= this.load.bind(this);\r\n\t\tthis._getHandleIframeMessage = this._getHandleIframeMessage.bind(this);\r\n\t\tthis.resized = this.resized.bind(this);\r\n\t\tthis._element = E.div('house-grid-selector-info');\r\n\t\tthis._imageWrapperElement = E.div(\"image-wrapper\");\r\n\t\tthis._img = E.img('image');\r\n\t\tthis._element.appendChild(this._imageWrapperElement);\r\n\t\tthis._imageWrapperElement.appendChild(this._img);\r\n\t\tthis._otherInfoElement = E.div('other-info');\r\n\t\tthis._element.appendChild(this._otherInfoElement);\r\n\t\tthis._nameElement = E.div('name');\r\n\t\tthis._otherInfoElement.appendChild(this._nameElement);\r\n\t\tthis._descriptionElement = E.div('description');\r\n\t\tthis._otherInfoElement.appendChild(this._descriptionElement);\r\n\t\tthis._offersElement = E.div('offers');\r\n\t\tthis._otherInfoElement.appendChild(this._offersElement);\r\n\t\tthis._currentFeatures =[];\r\n\t\tthis._featuresElement = E.div('features');\r\n\t\tthis._otherInfoElement.appendChild(this._featuresElement);\r\n\t\tthis._galleryIframe = document.createElement('iframe');\r\n\t\tthis._galleryIframe.classList.add('gallery');\r\n\t\tthis._galleryIframe.allow=\"fullscreen\";\r\n\t\t\r\n\t\tthis._floorPlansIframe = document.createElement('iframe');\r\n\t\tthis._floorPlansIframe.classList.add('floor-plans');\r\n\t\tthis._floorPlansIframe.allow=\"fullscreen\";\r\n\t\t\r\n\t\tthis._chooseYourStyleIframe = document.createElement('iframe');\r\n\t\tthis._chooseYourStyleIframe.classList.add('choose-your-style');\r\n\t\tthis._chooseYourStyleIframe.allow=\"fullscreen\";\r\n\t\t\r\n\t\tthis._configureYourHomeIframe = document.createElement('iframe');\r\n\t\tthis._configureYourHomeIframe.classList.add('configure-your-home');\r\n\t\tthis._configureYourHomeIframe.allow=\"fullscreen\";\r\n\t\t\r\n\t\tthis._otherInfoEntries = [\r\n\t\t\t{iframe:this._galleryIframe, getUrl:(houseType)=>houseType.galleryUrl, autoHeight:true},\r\n\t\t\t{ iframe:this._floorPlansIframe, getUrl:(houseType)=>houseType.floorPlansIframeUrl, autoHeight:true},\r\n\t\t\t{title:'choose your style', iframe:this._chooseYourStyleIframe, getUrl:(houseType)=>{\r\n\t\t\t\tif(houseType.chooseYourStyleIframeUrl)\r\n\t\t\t\t\treturn houseType.chooseYourStyleIframeUrl;\r\n\t\t\t\treturn houseType.chooseYourStyleVideoUrl;\r\n\t\t\t}, autoHeight:true},\r\n\t\t\t{title:'Configure Your House', iframe:this._configureYourHomeIframe,\r\n\t\t\tgetUrl:(houseType)=>{\r\n\t\t\t\tif(houseType.configuratorUrl)\r\n\t\t\t\t\treturn houseType.configuratorUrl;\r\n\t\t\t\tif(houseType.tourUrl)\r\n\t\t\t\t\treturn houseType.tourUrl;\r\n\t\t\t\treturn houseType.videoUrl;\r\n\t\t\t}, autoHeight:true}\r\n\t\t];\r\n\t\tthis._otherInfoEntries.forEach((e)=>{\r\n\t\t\tconst {title, iframe, autoHeight}=e;\r\n\t\t\tconst entryElement = E.div('entry');\r\n\t\t\tif(title){\r\n\t\t\t\tconst titleElement = E.div('title');\r\n\t\t\t\ttitleElement.textContent = title;\r\n\t\t\t\tentryElement.appendChild(titleElement);\r\n\t\t\t}\r\n\t\t\tentryElement.appendChild(iframe);\r\n\t\t\tthis._otherInfoElement.appendChild(entryElement);\r\n\t\t\te.entryElement = entryElement;\r\n\t\t\tif(autoHeight){\r\n\t\t\t\tconst handleMessage = this._getHandleIframeMessage(iframe);\r\n\t\t\t\twindow.addEventListener('message', handleMessage);\r\n\t\t\t\tiframe.frameborder=\"0\";\r\n\t\t\t\tiframe.scrolling=\"no\";\r\n\t\t\t}\r\n\t\t});\r\n\t\tif(configuration.brochureGeneratorUrl){\r\n\t\t\tconst buttonSendBrochure = document.createElement('button');\r\n\t\t\tbuttonSendBrochure.classList.add(\"button-send-brochure\");\r\n\t\t\tbuttonSendBrochure.addEventListener('click', ()=>showBrochureGenerationDialog({plot:this._firstPlot}));\r\n\t\t\tbuttonSendBrochure.innerHTML = 'Send Brochure';\r\n\t\t\tthis._otherInfoElement.appendChild(buttonSendBrochure);\r\n\t\t}\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n\tload(houseType){\r\n\t\tconst firstPlot = houseType.plots[0];\r\n\t\tthis._firstPlot = firstPlot;\r\n\t\tconst firstUnit = firstPlot.unit;\r\n\t\tthis._img.src = 'about:blank';\r\n\t\tthis._img.src = `${Urls.getAssetsForSite(this._configuration.siteSlug)}${UrlHelper.removeStartSlash(firstUnit.frontViewImage.getBestEntryToFitHeight(4000).relativePath)}`;\r\n\t\tthis._nameElement.textContent = houseType.name;\r\n\t\tthis._descriptionElement.textContent = houseType.about;\r\n\t\tif(houseType.offers){\r\n\t\t\tthis._offersElement.textContent = houseType.offers;\r\n\t\t\tthis._offersElement.classList.add('visible');\r\n\t\t}\r\n\t\telse{\r\n\t\t\tthis._offersElement.textContent ='';\r\n\t\t\tthis._offersElement.classList.remove('visible');\r\n\t\t}\r\n\t\tthis._currentFeatures.forEach(f=>this._featuresElement.removeChild(f));\r\n\t\tthis._currentFeatures =[];\r\n\t\tif(houseType.features){\r\n\t\t\thouseType.features.forEach(f=>{\r\n\t\t\t\tconst featureElement = E.div('feature');\r\n\t\t\t\tfeatureElement.textContent = `- ${f}`;\r\n\t\t\t\tthis._currentFeatures.push(featureElement);\r\n\t\t\t\tthis._featuresElement.appendChild(featureElement);\r\n\t\t\t});\r\n\t\t}\r\n\t\tthis._otherInfoEntries.forEach(({getUrl, entryElement, iframe})=>{\r\n\t\t\tconst url = getUrl(houseType);\r\n\t\t\tif(url){\r\n\t\t\t\tentryElement.style.display = 'block';\r\n\t\t\t\tiframe.src=url;\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\tentryElement.style.display = 'none';\r\n\t\t\t}\r\n\t\t});\r\n\t\tsetTimeout(this.resized, 0);\r\n\t}\r\n\tresized(){\r\n\t\tconst iframeHeight = this._getWindowElement().clientHeight;\r\n\t\tthis._chooseYourStyleIframe.style.height =iframeHeight +'px';\r\n\t\tthis._configureYourHomeIframe.style.height = iframeHeight+'px';\r\n\t}\r\n\t_getHandleIframeMessage(iframe){\r\n\t\treturn (message)=>{\r\n\t\t\tif (message.source !== iframe.contentWindow)\r\n\t\t\t\treturn;\r\n\t\t\tconst {data}=message;\r\n\t\t\tiframe.style.height = `${data.height}px`;\r\n\t\t};\r\n\t}\r\n}\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 WindowEventNames from '../window/WindowEventNames';\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 HouseGridSelectorInfo from '../house_types_viewer/HouseGridSelectorInfo';\r\nimport IconButton from '../components/IconButtonNonReact';\r\nimport eventEnable from '../core/eventEnable';\r\nimport getAbsolute from '../ui_core/getAbsolute';\r\nimport UrlParameters from '../urls/UrlParameters';\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\tconst resizeChildren = ()=>{\r\n\t\t\t\tthis._houseGridSelectorInfo?.resized();\r\n\t\t\t\tif(this._tour)\r\n\t\t\t\t\tthis._tour.element.style.height = (this._element.clientHeight+30)+'px';\r\n\t\t};\r\n\t\tthis._window.addEventListener(WindowEventNames.RESIZED, resizeChildren);\r\n\t\tthis._window.addEventListener(WindowEventNames.MAXIMIZED, resizeChildren);\r\n\t\tthis._window.addEventListener(WindowEventNames.UNMAXIMIZED, resizeChildren);\r\n\t\tthis._window.addEventListener(WindowEventNames.UNMINIMIZED, resizeChildren);\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\t\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._scrollableElement.addEventListener('scroll', this._dispatchScrolled);\r\n\t\t\r\n\t\tif(UrlParameters.salesforce){\r\n\t\t\tconst houseType = siteJsonUnitPlot.houseType;\r\n\t\t\tconsole.log('siteJsonUnitPlot');\r\n\t\t\tconsole.log(siteJsonUnitPlot);\r\n\t\t\tthis._houseGridSelectorInfo = new HouseGridSelectorInfo({getWindowElement:()=>this._element, configuration, showBrochureGenerationDialog});\r\n\t\t\tthis._scrollableElement.appendChild(this._houseGridSelectorInfo.element);\r\n\t\t\tthis._houseGridSelectorInfo.load(houseType);\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\r\n\t\t\tthis._summary = new PlotDetailedInformationSummary({siteJsonUnitPlot, addFavourite, \r\n\t\t\t\tremoveFavourite, showStreetView:this._handleShowStreetView, \r\n\t\t\t\tscrollToFloorPlans:this._scrollToFloorPlans, \r\n\t\t\t\tscrollToGallery:this._scrollToGallery,\r\n\t\t\t\tconfiguration, showBrochureGenerationDialog, enterHouse:this._handleEnterHouse});\r\n\t\t\tthis._gallery = new PlotDetailedInformationGallery({\r\n\t\t\t\tsiteJsonUnitPlot:siteJsonUnitPlot,\r\n\t\t\t\tshowImagesFullScreen,\r\n\t\t\t\tconfiguration\r\n\t\t\t});\r\n\t\t\tthis._floorPlans = new PlotDetailedInformationFloorPlans({\r\n\t\t\t\tsiteJsonUnitPlot:siteJsonUnitPlot,\r\n\t\t\t\tshowImagesFullScreen,\r\n\t\t\t\tconfiguration\r\n\t\t\t});\r\n\t\t\tthis._description = new PlotDetailedInformationDescription({\r\n\t\t\t\tsiteJsonUnitPlot:siteJsonUnitPlot\r\n\t\t\t});\r\n\t\t\tthis._video = new PlotDetailedInformationVideo({\r\n\t\t\t\tsiteJsonUnitPlot:siteJsonUnitPlot,\r\n\t\t\t\tconfiguration\r\n\t\t\t});\r\n\t\t\tthis._tour = new PlotDetailedInformationTour({\r\n\t\t\t\tsiteJsonUnitPlot:siteJsonUnitPlot,\r\n\t\t\t\tconfiguration\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis._sections = [this._gallery, this._floorPlans, this._description, this._video, this._tour];\r\n\t\t\tthis._sections.forEach(section=>\r\n\t\t\t\tthis._scrollableElement.appendChild(section.element));\t\r\n\t\t\tthis._tour.addEventListener('loaded', this.setSectionProportionRanges);\r\n\t\t\tthis._gallery.addEventListener('loaded', this.setSectionProportionRanges);\r\n\t\t\tthis._floorPlans.addEventListener('loaded', this.setSectionProportionRanges);\r\n\t\t\tthis._mainElement.insertBefore(this._summary.element, this._scrollableElement);\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t//this._scrollableElement.addEventListener('touchmove', this._dispatchScrolled);\r\n\t\t}\r\n\t\tthis._parentElement.appendChild(this._element);\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\tif(this._sections){\r\n\t\t\tthis._sectionProportionRanges = this._sections.map(section=>{\r\n\t\t\t\tconst sectionElementBounds = section.element.getBoundingClientRect();\r\n\t\t\t\tconst proportionFrom = (section.element.offsetTop)/scrollableElementHeight;\r\n\t\t\t\tconst proportionTo = (section.element.offsetTop+section.element.offsetHeight )/scrollableElementHeight;\r\n\t\t\t\treturn {proportionFrom, proportionTo, section};\r\n\t\t\t});\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\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}\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\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 GoogleAnalytics from '../google/GoogleAnalytics';\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\tGoogleAnalytics.logEvent('comparedPlots', {plotNumbers:plotDetailedInformations.map(plotDetailedInformation=>plotDetailedInformation.number)});\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 Dialog from './Dialog';\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\nimport Tutorials from '../tutorials/Tutorials';\r\nimport TutorialMessage from '../tutorials/TutorialMessage';\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, callbackComparing}=props;\r\n\t\tthis._getConfiguration = getConfiguration;\r\n\t\tthis._callbackComparing = callbackComparing;\r\n\t\tthis._callbackHide = onHide;\r\n\t\tthis._buttonCompareSelectedRef = React.createRef();\r\n\t\tthis._buttonSendMyFavouritesBrochureRef = React.createRef();\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._updateTutorialMessages = this._updateTutorialMessages.bind(this);\r\n\t\tthis.clear = this.clear.bind(this);\r\n\t\tthis.state={visible:false, entries:[]};\r\n\t\tTutorials.addEventListener('update', this._updateTutorialMessages);\r\n\t}\r\n\t_updateTutorialMessages(){\r\n\t\tthis._tutorialMessageSendMyFavouritesBrochure?.dispose();\r\n\t\tthis._tutorialMessageCompareSelected?.dispose();\r\n\t\tsetTimeout(()=>{\r\n\t\t\tthis._tutorialMessageSendMyFavouritesBrochure?.dispose();\r\n\t\t\tthis._tutorialMessageCompareSelected?.dispose();\r\n\t\t\tif(Tutorials.showStep5&&this.state.visible&&this._buttonSendMyFavouritesBrochureRef.current&&Tutorials.showing&&!Tutorials.hasClickedGenerateBrochureForFavourites){\r\n\t\t\t\tthis._tutorialMessageSendMyFavouritesBrochure = new TutorialMessage({\r\n\t\t\t\t\tmessage:'Generate a brochure for your favourites', elementOn:this._buttonSendMyFavouritesBrochureRef.current, \r\n\t\t\t\t\thasClose:true, callbackClose:()=>{\r\n\t\t\t\t\t\tTutorials.showing = false;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tfixInPlace:true\r\n\t\t\t\t});\r\n\t\t\t\tTutorials.addShowingTutorialMessage(this._tutorialMessageSendMyFavouritesBrochure);\r\n\t\t\t}\r\n\t\t\tif(Tutorials.showStep5&&this.state.visible&&this._buttonCompareSelectedRef.current&&Tutorials.showing&&!Tutorials.hasClickedCompareFavourites){\r\n\t\t\t\tthis._tutorialMessageCompareSelected = new TutorialMessage({\r\n\t\t\t\t\trightAlign:true,\r\n\t\t\t\t\tmessage:'Compare your favourites', elementOn:this._buttonCompareSelectedRef.current, \r\n\t\t\t\t\thasClose:true, callbackClose:()=>{\r\n\t\t\t\t\t\tTutorials.showing = false;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tfixInPlace:true\r\n\t\t\t\t});\r\n\t\t\t\tTutorials.addShowingTutorialMessage(this._tutorialMessageCompareSelected);\r\n\t\t\t}\r\n\t\t});\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\tclear(){\r\n\t\tthis.state.entries.forEach(favouriteEntry=>{\r\n\t\t\tfavouriteEntry.onRemove&&favouriteEntry.onRemove();\r\n\t\t});\r\n\t\tthis.setState({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; iselectedFavourite.payload);\r\n\t\tconst selectedPlotsBrochureEnabled = selectedPlots.filter(selectedPlot=>selectedPlot?.houseType?.brochureEnabled!==false);\r\n\t\tconst selectedPlotsBrochureDisabled = selectedPlots.filter(selectedPlot=>selectedPlot?.houseType?.brochureEnabled===false);\r\n\t\tif(selectedPlotsBrochureEnabled.length>=selectedPlots.length){\r\n\t\t\tthis._callbackShowSendFavouritesBrochure();\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif(selectedPlotsBrochureEnabled.length<1){\r\n\t\t\tDialog.create({preventInterraction:true, \r\n\t\t\toptions:[\r\n\t\t\t{text:\"Ok\", callback:()=>{}}], \r\n\t\t\t\tmessage:\"None of your favourite plots had a brochure!\", \r\n\t\t\t\ttitle:\"Warning\",\r\n\t\t\t\tonClickClose:()=>{}});\r\n\t\t\t\treturn;\r\n\t\t}\r\n\t\tconst stringSelectedPlotsWithoutBrochure = '('+selectedPlotsBrochureDisabled.map(selectedPlot=>selectedPlot.number).join(',')+')';\r\n\t\tconst stringSelectedPlotsWithBrochure = '('+selectedPlotsBrochureEnabled.map(selectedPlot=>selectedPlot.number).join(',')+')';\r\n\t\tDialog.create({preventInterraction:true, \r\n\t\toptions:[{text:\"Yes\", callback:this._callbackShowSendFavouritesBrochure},\r\n\t\t{text:\"No\", callback:()=>{}}], \r\n\t\t\tmessage:`Not all your plots have a brochure ${stringSelectedPlotsWithoutBrochure}. Send for the ones that do ${stringSelectedPlotsWithBrochure}?`, \r\n\t\t\ttitle:\"Warning\", onClickClose:()=>{}});\r\n\t}\r\n\t_handleClickCompare(){\r\n\t\tTutorials.hasClickedCompareFavourites=true;\r\n\t\tthis._tutorialMessageCompareSelected?.dispose();\r\n\t\tthis.hide();\r\n\t\tthis._callbackComparing();\r\n\t\tPlotComparisonManager.instance.compare(this.selectedFavourites.map(favourite=>favourite.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\tthis._updateTutorialMessages();\r\n\t\tconst sendMyFavouritesBrochureButton = this._getConfiguration().brochureGeneratorUrl?(\r\n\t\t\t\t\r\n\t\t\t\t):null;\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?\r\n\t():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{sendMyFavouritesBrochureButton}\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\tconst site= this._siteJson.models.getModelsByGroupCode('site');\r\n\t\tif(!site)\r\n\t\t\tthrow new Error('no \"site\" model');\r\n\t\treturn 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}, onStartFinger1:()=>{\r\n\t\t}, onStartFinger2:()=>{\r\n\t\t}, onMoveFinger1:()=>{\r\n\t\t}, onMoveFinger2:()=>{\r\n\t\t}, onEndFinger1:()=>{\r\n\t\t}, onEndFinger2:()=>{\r\n\t\t}\r\n\t\t, 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\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}\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\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\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\tthis._babylonScene.babylonModelAdded(babylonModel);\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 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\tconst p = this._camera.position;\r\n\t\tconst x = -p.x;\r\n\t\tconst z = -p.z;\r\n\t\tconst y = p.y;\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 eulerAngles = this._camera.rotationQuaternion.toEulerAngles();\r\n\t\tconst yawRadians =eulerAngles.y, pitchRadians=-eulerAngles.x;\r\n\t\tfor(var babylonModel of this._babylonModels){\r\n\t\t\tconst reasonsOut ={};\r\n\t\t\tconst objectIdsToShow = babylonModel.quadrants.getObjectIds({yawRadians, pitchRadians, x, y, z, reasonsOut});\r\n\t\t\tconst {reasons }= reasonsOut;\r\n\t\t\tif(reasons){\r\n\t\t\t\tconsole.log('reasons');\r\n\t\t\t\tconsole.log(reasons);\r\n\t\t\t\treasons.forEach(reason=>{\r\n\t\t\t\t\tconsole.log(reason.description);\r\n\t\t\t\t});\r\n\t\t\t}\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\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 = radians+(this._configuration.miniMapConeOffset!==undefined?this._configuration.miniMapConeOffset:(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 eventEnable from '../core/eventEnable';\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\nimport Tutorials from '../tutorials/Tutorials';\r\nimport TutorialMessage from '../tutorials/TutorialMessage';\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\teventEnable(this);\r\n\t\tconst {getInsertedMenuItemsHandler, getInsertedMenuItemsAtEndHandler, onBack, goToConfigurator, \r\n\t\t\tshowPlotMenu, showPlotDetailedInformation, configuration, hidePlotMenu}=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._hidePlotMenu = hidePlotMenu;\r\n\t\twindow.hidePlotMenu= hidePlotMenu;\r\n\t\tthis._showPlotDetailedInformation = showPlotDetailedInformation;\r\n\t\tthis._view360Ref = React.createRef();\r\n\t\tthis._miniMapRef= React.createRef();\r\n\t\tthis._buttonExitRef= React.createRef();\r\n\t\t//this._iframeRef = React.createRef();\r\n\t\tthis.state = {visible:false};\r\n\t\tthis._handleClickBack= this._handleClickBack.bind(this);\r\n\t\tthis._normalizeRadians= this._normalizeRadians.bind(this);\r\n\t\tthis._updateDoneWithTutorial= this._updateDoneWithTutorial.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\twindow._sitePlan360 = this;\r\n\t\tTutorials.addEventListener('nOutside360HotspotsClickedChanged', this._updateDoneWithTutorial);\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\tif(!siteJson.outside360)\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._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\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\tlet backClassName = \"site-plan-360-back-button\";\r\n\t\t\tif(this._backBeenClicked)\r\n\t\t\t\tbackClassName+=\" been-clicked\";\r\n\t\t\tthis._insertedMenuItemsRemoveHandle =\r\n\t\t\tthis._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\tTutorials.returnedFromOutside360 = true;\r\n\t\tthis._tutorialMessageExit?.dispose();\r\n\t\tthis._tutorialMessageMoveAroundOutside360?.dispose();\r\n\t\tthis._backBeenClicked = true;\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\tTutorials.nOutside360HotspotsClicked+=1;\r\n\t\t\t\tthis._tutorialMessageMoveAroundOutside360?.dispose();\r\n\t\t\t\tthis.dispatchEvent({type:'clickedoutside360movehotspot', scene360Hotspot});\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_updateDoneWithTutorial(recreateIfExists){\r\n\t\t\tif(this._tutorialMessageExit){\r\n\t\t\t\tif(!recreateIfExists)return;\r\n\t\t\t\tthis._tutorialMessageExit.dispose();\r\n\t\t\t}\r\n\t\t\tif(Tutorials.showing&&this.state.visible&&(Tutorials.canShowReturnToAerialViewMessage)&&(!Tutorials.returnedFromOutside360)){\r\n\t\t\t\tthis._tutorialMessageExit = new TutorialMessage({\r\n\t\t\t\t\tmessage:'Return to aerial view', elementOn:this._buttonExitRef.current._elementRef.current, \r\n\t\t\t\t\thasClose:true, callbackClose:()=>{\r\n\t\t\t\t\t\tTutorials.showing = false;\r\n\t\t\t\t\t\tthis._tutorialMessageExit.dispose();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tfixInPlace:true\r\n\t\t\t\t});\r\n\t\t\t\tTutorials.addShowingTutorialMessage(this._tutorialMessageExit);\r\n\t\t\t}\r\n\t}\r\n\t//\r\n\t\t\r\n\trender() {\r\n\t\tthis._tutorialMessageExit?.dispose();\r\n\t\tthis._tutorialMessageMoveAroundOutside360?.dispose();\r\n\t\tsetTimeout(()=>{\r\n\t\t\tthis._tutorialMessageExit?.dispose();\r\n\t\t\tthis._tutorialMessageMoveAroundOutside360?.dispose();\r\n\t\t\tif(Tutorials.showing&&this.state.visible&&!Tutorials.doneWithMoveAroundOutside360Message){\r\n\t\t\t\t\r\n\t\t\t\tthis._tutorialMessageMoveAroundOutside360 = new TutorialMessage({\r\n\t\t\t\t\ttop:'50px',\r\n\t\t\t\t\tcallbackClose:()=>{\r\n\t\t\t\t\t\tthis._tutorialMessageMoveAroundOutside360?.dispose();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tmessage:'Click and drag to rotate and click arrows to move around!',\r\n\t\t\t\t\tbuttons:[{text:'OK', callback:()=>{\r\n\t\t\t\t\t\tTutorials.doneWithMoveAroundOutside360Message=true;\r\n\t\t\t\t\t\tthis._tutorialMessageMoveAroundOutside360?.dispose();\r\n\t\t\t\t\t}}]\r\n\t\t\t\t});\r\n\t\t\t\tTutorials.addShowingTutorialMessage(this._tutorialMessageMoveAroundOutside360);\r\n\t\t\t}\r\n\t\t\tthis._updateDoneWithTutorial(true);\r\n\t\t});\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","import React, { Component } from 'react';\r\nimport './LocalArea.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 LocalArea 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\t//this.show = this.show.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\t_handleClickButtonBack(){\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 path = window.location.pathname.substr(0, window.location.pathname.indexOf('index.html'));\r\n\t\tconst url = path.length<1?null:window.location.origin+path+'localarea/index.html';\r\n\t\tconst className=\"local-area\"+(this.state.visible?\" visible\":\"\");\r\n\t\treturn (
    \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","const SitePlanVisibleType={BIRDS_EYE_VIEW:'birdsEyeView', OUTSIDE_360:'outside360',\r\n CONFIGURATOR:'configurator', THREE_D:'threeD', LOCAL_AREA:'localArea',\r\n SPECIFICATION:'specification'};\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\tcase SitePlanVisibleType.LOCAL_AREA:\r\n\t\t\treturn 'local-area-visible';\r\n\t\tcase SitePlanVisibleType.SPECIFICATION:\r\n\t\t\treturn 'specification-visible';\r\n\t}\r\n\treturn '';\r\n}\r\nexport default SitePlanVisibleType;","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\nimport stopEventPropagation from '../ui_core/stopEventPropagation';\r\nimport Tutorials from '../tutorials/Tutorials';\r\nimport TutorialMessage from '../tutorials/TutorialMessage';\r\nimport UrlParameters from '../urls/UrlParameters';\r\n\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._buttonShowStreetViewRef= React.createRef();\r\n\t\tthis._floorPlansButtonRef= React.createRef();\r\n\t\tthis._buttonGalleryRef= 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.showIfIsLoaded= this.showIfIsLoaded.bind(this);\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._updateTutorialMessages = this._updateTutorialMessages.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\tPlotMenu.instance = this;\r\n\t\tTutorials.addEventListener('update', this._updateTutorialMessages);\r\n\t}\r\n\t_updateTutorialMessages(){\r\n\t\tthis._tutorialMessageFavourite?.dispose();\r\n\t\tthis._tutorialMessageGoToOutside360?.dispose();\r\n\t\tthis._tutorialMessagePlotMenuFloorPlans?.dispose();\r\n\t\tthis._tutorialMessagePlotMenuGallery?.dispose();\r\n\t\tsetTimeout(()=>{\r\n\t\t\tthis._tutorialMessageFavourite?.dispose();\r\n\t\t\tthis._tutorialMessageGoToOutside360?.dispose();\r\n\t\t\tthis._tutorialMessagePlotMenuFloorPlans?.dispose();\r\n\t\t\tthis._tutorialMessagePlotMenuGallery?.dispose();\r\n\t\t\tif(!this.state.plot)return;\r\n\t\t\tif(Tutorials.showStep3_2&&Tutorials.showing&&!Tutorials.hasClickedPlotMenuFavourites){\r\n\t\t\t\tthis._tutorialMessageFavourite = new TutorialMessage({\r\n\t\t\t\t\tmessage:'Click to favourite', elementOn:this._star.current._elementRef.current,\r\n\t\t\t\t\tclassName:'tutorial-message-favourite',\t\t\t\t\t\t\t\r\n\t\t\t\t\thasClose:true, callbackClose:()=>{\r\n\t\t\t\t\t\tTutorials.showing = false;\r\n\t\t\t\t\t\tthis._tutorialMessageFavourite.dispose();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tfixInPlace:true\r\n\t\t\t\t});\r\n\t\t\t\tTutorials.addShowingTutorialMessage(this._tutorialMessageFavourite);\r\n\t\t\t}\r\n\t\t\tif(Tutorials.showStep3&&Tutorials.showing&&!Tutorials.hasClickedPlotMenuGallery){\r\n\t\t\t\tthis._tutorialMessagePlotMenuGallery = new TutorialMessage({\r\n\t\t\t\t\tmessage:'Click to see gallery', \r\n\t\t\t\t\telementOn:this._buttonGalleryRef.current._elementRef.current,\r\n\t\t\t\t\tclassName:'tutorial-message-plot-menu-gallery',\t\t\t\t\t\t\t\r\n\t\t\t\t\thasClose:true, callbackClose:()=>{\r\n\t\t\t\t\t\tTutorials.showing = false;\r\n\t\t\t\t\t\tthis._tutorialMessagePlotMenuGallery.dispose();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tfixInPlace:true\r\n\t\t\t\t});\r\n\t\t\t\tTutorials.addShowingTutorialMessage(this._tutorialMessagePlotMenuGallery);\r\n\t\t\t}\r\n\t\t\tif(Tutorials.showStep3_1&&Tutorials.showing&&!Tutorials.hasClickedPlotMenuFloorPlans){\r\n\t\t\t\tthis._tutorialMessagePlotMenuFloorPlans = new TutorialMessage({\r\n\t\t\t\t\tmessage:'Click to see floor plans', elementOn:this._floorPlansButtonRef.current._elementRef.current,\r\n\t\t\t\t\tclassName:'tutorial-message-floor-plans',\t\t\t\t\t\t\t\r\n\t\t\t\t\thasClose:true, callbackClose:()=>{\r\n\t\t\t\t\t\tTutorials.showing = false;\r\n\t\t\t\t\t\tthis._tutorialMessagePlotMenuFloorPlans.dispose();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tfixInPlace:true\r\n\t\t\t\t});\r\n\t\t\t\tTutorials.addShowingTutorialMessage(this._tutorialMessagePlotMenuFloorPlans);\r\n\t\t\t}\r\n\t\t\tif(Tutorials.showStep7&&this._configuration.outside360Enabled&&Tutorials.showing&&!Tutorials.hasClickedGoToOutside360){\r\n\t\t\t\tthis._tutorialMessageGoToOutside360 = new TutorialMessage({\r\n\t\t\t\t\tmessage:'Click to go to plot on outside 360', \r\n\t\t\t\t\telementOn:this._buttonShowStreetViewRef.current._elementRef.current, \r\n\t\t\t\t\trightAlign:true,\r\n\t\t\t\t\tclassName:'tutorial-message-plot-menu-outside-360',\r\n\t\t\t\t\thasClose:true, callbackClose:()=>{\r\n\t\t\t\t\t\tTutorials.showing = false;\r\n\t\t\t\t\t\tthis._tutorialMessageGoToOutside360.dispose();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tfixInPlace:true\r\n\t\t\t\t});\r\n\t\t\t\tTutorials.addShowingTutorialMessage(this._tutorialMessageGoToOutside360);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\tshow({position, getMouseInSourceBounds, siteJson, plot, unit, untilClickOff}){\r\n\t\tdocument.body.classList.remove('not-showing-plot-menu');\r\n\t\tthis._tutorialMessageFavourite?.dispose();\r\n\t\tthis._tutorialMessageGoToOutside360?.dispose();\r\n\t\tthis._tutorialMessagePlotMenuFloorPlans?.dispose();\r\n\t\tthis._tutorialMessagePlotMenuGallery?.dispose();\r\n\t\tTutorials.plotMenuShowing=true;\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, \r\n\t\t\t\tgetMouseInSourceBounds: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\tshowIfIsLoaded(){\r\n\t\tif((!this.state.siteJson)||(!this.state.plot))return;\r\n\t\tTutorials.plotMenuShowing=true;\r\n\t\tthis._popupMenu.current.showInExistingPosition();\r\n\t}\r\n\thide(){\r\n\t\tthis._tutorialMessageFavourite?.dispose();\r\n\t\tthis._tutorialMessageGoToOutside360?.dispose();\r\n\t\tthis._tutorialMessagePlotMenuFloorPlans?.dispose();\r\n\t\tthis._tutorialMessagePlotMenuGallery?.dispose();\r\n\t\tdocument.body.classList.add('not-showing-plot-menu');\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\tif(relativePath===undefined||relativePath===null)return null;\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\tTutorials.plotMenuShowing=false;\r\n\t\tthis._currentLoadingImageHandle?.dispose();\r\n\t\tthis._callbackOnHide&&this._callbackOnHide();\r\n\t\tthis._releasePlotActiveHandle();\r\n\t\tthis._tutorialMessageFavourite?.dispose();\r\n\t\tthis._tutorialMessageGoToOutside360?.dispose();\r\n\t\tthis._tutorialMessagePlotMenuFloorPlans?.dispose();\r\n\t\tthis._tutorialMessagePlotMenuGallery?.dispose();\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\tTutorials.hasClickedPlotMenuFavourites=true;\r\n\t\tthis._tutorialMessageFavourite?.dispose();\r\n\t\tthis._tutorialMessageGoToOutside360?.dispose();\r\n\t\tthis._tutorialMessagePlotMenuFloorPlans?.dispose();\r\n\t\tthis._tutorialMessagePlotMenuGallery?.dispose();\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\tTutorials.hasClickedGoToOutside360=true;\r\n\t\tthis._tutorialMessageFavourite?.dispose();\r\n\t\tthis._tutorialMessageGoToOutside360?.dispose();\r\n\t\tthis._tutorialMessagePlotMenuFloorPlans?.dispose();\r\n\t\tthis._tutorialMessagePlotMenuGallery?.dispose();\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\tif(!this._configuration.plotMenuHasCloseButton)\r\n\t\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\tif(!this._configuration.plotMenuHasCloseButton)\r\n\t\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\t\r\n\t\tthis._stopEventPropagation(e);\r\n\t\tif(!this._configuration.plotMenuHasCloseButton)\r\n\t\t\tthis.hide();\r\n\t\tTutorials.closeAll();\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, plot.houseType?.galleryUrl);\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 salesforce = UrlParameters.salesforce;\r\n\t\tthis._tutorialMessageFavourite?.dispose();\r\n\t\tthis._tutorialMessageGoToOutside360?.dispose();\r\n\t\tthis._tutorialMessagePlotMenuFloorPlans?.dispose();\r\n\t\tthis._tutorialMessagePlotMenuGallery?.dispose();\r\n\t\tconst hasOneOrMoreRoomImages=this.state.plot&&this.state.plot.hasOneOrMoreRoomImages;\r\n\t\tconst hasFloorPlans = this.state.plot&&this.state.plot.floorPlanImages&&this.state.plot.floorPlanImages.length>0;\r\n\t\tif(!hasOneOrMoreRoomImages)\r\n\t\t{\r\n\t\t\tTutorials.hasClickedPlotMenuGallery = true;\r\n\t\t}\r\n\t\tif(!hasFloorPlans)\r\n\t\t{\r\n\t\t\tTutorials.hasClickedPlotMenuFloorPlans = true;\r\n\t\t}\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\tconst brochureEnabled =this.state.plot?.houseType?( this.state.plot.houseType.brochureEnabled!==false):true;\r\n\t\t\tif(this._configuration.brochureGeneratorUrl&&brochureEnabled){\r\n\t\t\t\tbuttons.push(());\r\n\t\t\t\t\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(this._configuration.showPlotDetailedInformationOnClickPlotMenu){\r\n\t\t\t\r\n\t\t\t\tbuttons.push(());\r\n\t\t\t}\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\tif(this.state.plot?.houseType?.offers)\r\n\t\t\t\tbuttons.push(());\r\n\t\t}\r\n\t\tconst showPrice = (this.state.plot)&&(this.state.plot.isAvailable);//(!this.state.plot.isSold)&&(!this.state.plot.isReserved)&&(!this.state.plot.isExchanged);\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\tconst sqrft = this.state.plot?.houseType?.sqrft;\r\n\t\tconst sqrftElement = sqrft?(\r\n\t\t\t
    {sqrft}
    ):null;\r\n\t\t\tconst buttonShowStreetView = \r\n\t\t\t\tthis._configuration.outside360Enabled?():null;\r\n\t\t\tconst floorPlansButton = hasFloorPlans? (\r\n\t\t\t\t):null;\r\n\t\t\t\tconst hasCloseButton = this._configuration.plotMenuHasCloseButton;\r\n\t\t\t\tconst closeButton = hasCloseButton?({\r\n\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\tthis.hide(e);\r\n\t\t\t\t\t}}>):null;\r\n\t\t\t\tlet className =\"plot-menu\";\r\n\t\t\t\tif(hasCloseButton)\r\n\t\t\t\t\tclassName+=\" has-close-button\";\r\n\t\t\t\tthis._updateTutorialMessages();\r\n\t\tconst abovePriceHtml =this.state.plot?this.state.plot.abovePriceHtml:'';\r\n\t\tconst priceString = (!showPrice)||(this.state.plot.price<=0)?' ':this.state.plot.priceString+(this.state.plot.endOfPriceTextSnippet?` ${this.state.plot.endOfPriceTextSnippet}`:'');\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{closeButton}\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
    \r\n\t\t\t
    {priceString}
    \r\n\t\t\t\t{sqrftElement}\r\n\t\t\t\t{nBedrooms}\r\n\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t\t\t{buttonShowStreetView}\r\n\t\t\t\t{}}>\r\n\t\t\t\t\t{floorPlansButton}\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._plotStatusNameElement = document.createElement('div');\r\n\t\tthis._plotStatusNameElement.classList.add('name');\r\n\t\tthis._plotStatusNameElement.innerHTML = `${PlotStatus.getDescription(siteJsonUnitPlot.status)}`;\r\n\t\tthis._dotElement = document.createElement('div');\r\n\t\tthis._dotElement.classList.add('dot');\r\n\t\tthis._plotStatusElement.appendChild(this._dotElement);\r\n\t\tthis._plotStatusElement.appendChild(this._plotStatusNameElement);\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._nBedroomsElement = document.createElement('div');\r\n\t\tthis._nBedroomsElement.classList.add('n-bedrooms');\r\n\t\tconst nBathroomString = configuration.showNBathrooms?` and ${siteJsonUnitPlot.nBathrooms} Bathrooms`:'';\r\n\t\tthis._nBedroomsElement.innerHTML = ' '+String(siteJsonUnitPlot.nBedrooms)+' Bedrooms'+nBathroomString;\r\n\t\tthis._priceElement = document.createElement('div');\r\n\t\tthis._priceElement.classList.add('price');\r\n\t\tconst showPrice = (siteJsonUnitPlot)&&(siteJsonUnitPlot.isAvailable);\r\n\t\tthis._priceElement.innerHTML = (!showPrice)||(siteJsonUnitPlot.price<=0)?' ':siteJsonUnitPlot.priceString;\r\n\t\tthis._descriptionWrapperElement.appendChild(this._descriptionElement);\r\n\t\tthis._descriptionWrapperElement.appendChild(this._plotStatusElement);\r\n\t\tthis._bottomRowElement = document.createElement('div');\r\n\t\tthis._bottomRowElement.classList.add('bottom-row');\r\n\t\tthis._descriptionWrapperElement.appendChild(this._bottomRowElement);\r\n\t\tthis._bottomRowElement.appendChild(this._nBedroomsElement);\r\n\t\tif(showPrice)\r\n\t\t\tthis._bottomRowElement.appendChild(this._priceElement);\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 = 'Select Plot';\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._scrollableElement = document.createElement('div');\r\n\t\tthis._scrollableElement.classList.add('scrollable');\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\tif(!this._getConfiguration().hideFilteringIconsFromPlotAndHouseTypeMenu){\r\n\t\t\tthis._menuElement= document.createElement('div');\r\n\t\t\tthis._menuElement.classList.add('top-menu');\r\n\t\t\tthis._iconButtonMenu = new IconButtonNonReact({ \t\r\n\t\t\t\t\tclassName:\"button-menu\", \r\n\t\t\t\t\timgUrl:Urls.assets+'icons/UI_Button_Filter.png',\r\n\t\t\t\t\tonClick:showMenu\r\n\t\t\t});\r\n\t\t\tthis._menuElement.appendChild(this._iconButtonMenu.element);\r\n\t\t\tthis._innerElement.appendChild(this._menuElement);\r\n\t\t\tthis._filtersButtonsWrapperElement = document.createElement('div');\r\n\t\t\tthis._filtersButtonsWrapperElement.classList.add('filter-buttons-wrapper');\r\n\t\t\tthis._menuElement.appendChild(this._filtersButtonsWrapperElement);\r\n\t\t\tconst filtersButtonsFactory = React.createFactory(FiltersButtons);\r\n\t\t\tReactDOM.render(filtersButtonsFactory(\r\n\t\t\t{ \r\n\t\t\t\tsingleRow:true,\r\n\t\t\t\tclickClear:clearFilters, clickShowForSale, \r\n\t\t\t\tgetConfiguration, iMenuManager\r\n\t\t\t}),\r\n\t\t\tthis._filtersButtonsWrapperElement);\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\tsetTimeout(this._onResize, 0);\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._handleClickedEntry= this._handleClickedEntry.bind(this);\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\t\r\n\t\t\tthis._descriptionElement = document.createElement('div');\r\n\t\t\tthis._descriptionElement.classList.add('description');\r\n\t\t\tthis._descriptionTextElement = document.createElement('div');\r\n\t\t\tthis._descriptionTextElement.classList.add('description-text');\r\n\t\t\tthis._descriptionTextElement.innerHTML = `${firstHouseTypeWithName.name}`;\r\n\t\t\tthis._descriptionElement.appendChild(this._descriptionTextElement);\r\n\t\t\tthis._infoWrapperElement.appendChild(this._descriptionElement);\r\n\t\t\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._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._smallButtonsAndPriceElement = document.createElement('div');\r\n\t\tthis._smallButtonsAndPriceElement.classList.add('small-buttons-and-price-range');\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._smallButtonsAndPriceElement]\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\tthis._smallButtonsElement= document.createElement('div');\r\n\t\tthis._smallButtonsElement.classList.add('small-buttons');\r\n\t\tconst hasOneOrMoreRoomImages=firstPlot.hasOneOrMoreRoomImages;\r\n\t\tif(configuration.outside360Enabled){\r\n\t\t\tthis._iconButtonWalkmode = new IconButtonNonReact({ \t\r\n\t\t\t\t\tclassName:[\"button-show-street-view\", \"button-show\"], \r\n\t\t\t\t\timgUrl:Urls.assets+'icons/UI_Button_Walkmode.png',\r\n\t\t\t\t\tonClick:this._handleClickButtonWalkmode\r\n\t\t\t\t});\r\n\t\t\tthis._smallButtonsElement.appendChild(this._iconButtonWalkmode.element);\r\n\t\t}\t\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\t\r\n\t\tconst hasConfiguratorOrTour=Urls.getConfiguratorUrlForPlot(this._firstPlot, configuration)?true:false\r\n\t\tif(hasConfiguratorOrTour){\r\n\t\t\tthis._iconButtonEnterHouse = new IconButtonNonReact({\r\n\t\t\t\t\tclassName:[\"button-show-floor-plan\", \"button-show\"], \r\n\t\t\t\t\timgUrl:Urls.assets+'icons/UI_Button_Enter_House.png',\r\n\t\t\t\t\tonClick:this._handleShowConfigurator\r\n\t\t\t\t});\r\n\t\t\tthis._smallButtonsElement.appendChild(this._iconButtonEnterHouse.element);\r\n\t\t}\r\n\t\tthis._smallButtonsAndPriceElement.appendChild(this._smallButtonsElement);\r\n\t\tthis._smallButtonsAndPriceElement.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._checkboxElement.classList.add('star');\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\t\tthis._aboutElement = document.createElement('div');\r\n\t\t\tthis._aboutElement.classList.add('about');\r\n\t\t\tthis._aboutElement.innerHTML = firstPlot.about;\r\n\t\t\tthis._aboutElement.addEventListener('click', this._expandAbout);\r\n\t\t\tsetTimeout(()=>{\r\n\t\t\tthis._infoWrapperElement.appendChild(this._aboutElement);\r\n\t\t\t}, 0);\r\n\t\thouseTypeViewModel.addEventListener('selectedchanged', this._houseTypeViewModelSelectedChanged);\r\n\t\tthis._element.addEventListener('click', this._handleClickedEntry);\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\tif(e.value)\r\n\t\t\tthis._element.classList.add('selected');\r\n\t\telse\r\n\t\t\tthis._element.classList.remove('selected');\r\n\t}\r\n\t_handleClickedEntry(){\r\n\t\tthis._houseTypeViewModel.selected = !this._houseTypeViewModel.selected;\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\nimport ResizeWatchers from '../ui_core/ResizeWatchers';\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 = \"Select House type(s)\"\r\n\t\tthis._window = new GenericWindow({tooltipMessage:title, name:title, minWidth:280, maxWidth:800, minHeight:100, maxHeight:1000,\r\n\t\t\tdefaultWidth:configuration.hideHouseTypeDescriptionOnHouseTypesMenu?340: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\tthis._handleResized = this._handleResized.bind(this);\r\n\t\tResizeWatchers.add({element:this._element, onResized:this._handleResized,staggered:false});\r\n\t\t\r\n\t\t\r\n\t\tthis._entries = [];\r\n\t\tthis._scrollableElement = document.createElement('div');\r\n\t\tthis._scrollableElement.classList.add('scrollable');\r\n\t\t\r\n\t\tif(!configuration.hideFilteringIconsFromPlotAndHouseTypeMenu){\r\n\t\t\tthis._menuElement= document.createElement('div');\r\n\t\t\tthis._menuElement.classList.add('top-menu');\r\n\t\t\tthis._iconButtonMenu = new IconButtonNonReact({ \t\r\n\t\t\t\t\tclassName:\"button-menu\", \r\n\t\t\t\t\timgUrl:Urls.assets+'icons/UI_Button_Filter.png',\r\n\t\t\t\t\tonClick:showMenu\r\n\t\t\t});\r\n\t\t\tthis._menuElement.appendChild(this._iconButtonMenu.element);\r\n\t\t\tthis._iconButtonClearFilters = new IconButtonNonReact({ \t\r\n\t\t\t\t\tclassName:\"button-clear-filters\", \r\n\t\t\t\t\timgUrl:Urls.assets+'icons/UI_Button_Filter_Clear.png',\r\n\t\t\t\t\tonClick:clearFilters\r\n\t\t\t});\r\n\t\t\tthis._menuElement.appendChild(this._iconButtonClearFilters.element);\r\n\t\t\tthis._innerElement.appendChild(this._menuElement);\r\n\t\t}\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_handleResized(){\r\n\t\tif(this._element.offsetWidth<440)\r\n\t\t\tthis._element.classList.add('small-width');\r\n\t\telse\r\n\t\t\tthis._element.classList.remove('small-width')\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\tthis._handleResized()\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 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 E from '../ui_core/E';\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 HouseGridSelectorInfo from './HouseGridSelectorInfo';\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\t\r\n\t\tthis._handleClicked= this._handleClicked.bind(this);\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add('house-grid-selector-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 = firstUnit.frontViewImage?`${Urls.getAssetsForSite(configuration.siteSlug)}${UrlHelper.removeStartSlash(firstUnit.frontViewImage.getBestEntryToFitHeight(500).relativePath)}`:null;\r\n\r\n\t\tconst description = E.div('description');\r\n\t\tthis._nameElement = document.createElement('div');\r\n\t\tthis._nameElement.classList.add('name');\r\n\t\tconsole.log('houseTypes');\r\n\t\tconsole.log(houseTypes[0]);\r\n\t\tconst houseType = houseTypes[0];\r\n\t\tconst plots = houseType.plots;\r\n\t\tlet minPrice = null, maxPrice = null;\r\n\t\tconst mapStatusToNEntries = new Map();\r\n\t\tplots.forEach(p=>{\r\n\t\t\tlet statusNEntries = mapStatusToNEntries.get(p.status);\r\n\t\t\tif(statusNEntries){\r\n\t\t\t\tstatusNEntries.nEntries++;\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\tstatusNEntries = {nEntries:1, status:p.status};\r\n\t\t\t\tmapStatusToNEntries.set(p.status, statusNEntries);\r\n\t\t\t}\r\n\t\t\tif(p.status===PlotStatus.AVAILABLE){\r\n\t\t\t\tif(minPrice===null||minPrice===undefined||minPrice===0){\r\n\t\t\t\t\tminPrice = p.price;\r\n\t\t\t\t\tmaxPrice = p.price;\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tif(p.pricemaxPrice){\r\n\t\t\t\t\tmaxPrice = p.price;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t\tconst statusNEntries = Array.from(mapStatusToNEntries.values());\r\n\t\tthis._nameElement.textContent = houseTypes[0].name;\r\n\t\tthis._element.appendChild(this._imageWrapperElement);\r\n\t\tthis._imageWrapperElement.appendChild(this._img);\r\n\t\tdescription.appendChild(this._nameElement);\r\n\t\tconst nOfEachStatus = E.div('n-of-each-status');\r\n\t\tlet statusString = '';\r\n\t\tlet hasAvailable =false;\r\n\t\tstatusNEntries.forEach(s=>{\r\n\t\t\tif(statusString.length>0)\r\n\t\t\t\tstatusString+=', ';\r\n\t\t\tif(s.status===PlotStatus.AVAILABLE)\r\n\t\t\t\thasAvailable = true;\r\n\t\t\tstatusString+=`${s.nEntries} ${PlotStatus.getDescription(s.status)}`;\r\n\t\t});\r\n\t\tnOfEachStatus.textContent = statusString;\r\n\t\tdescription.appendChild(nOfEachStatus);\r\n\t\tconst priceRange = E.div('price-range');\r\n\t\tif(minPrice!==0&&hasAvailable){\r\n\t\t\tpriceRange.textContent = minPrice===maxPrice?`ÂŁ${minPrice}`:`ÂŁ${minPrice} - ÂŁ${maxPrice}`;\r\n\t\t}\r\n\t\tdescription.appendChild(priceRange);\r\n\t\tconst squareFeet = E.div('square-feet');\r\n\t\tsquareFeet.textContent = houseType.sqrft;\r\n\t\tdescription.appendChild(squareFeet);\r\n\t\tthis._element.appendChild(description);\r\n\t\tthis._element.addEventListener('click', this._handleClicked);\r\n\t\tthis._element.addEventListener('mouseenter', ()=>this._element.classList.add('hovering'));\r\n\t\tthis._element.addEventListener('mouseleave', ()=>this._element.classList.remove('hovering'));\r\n\t\t\r\n\t}\r\n\tget houseType(){\r\n\t\treturn this._houseTypes[0];\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","const HouseGridSelectorShowing = {\r\n\tEntries:'entries',\r\n\tInfo:'info'\r\n};\r\nHouseGridSelectorShowing.getClassName=function(value){\r\n\treturn `showing-${value}`;\r\n};\r\nexport default HouseGridSelectorShowing;","import React, { Component } from 'react';\r\nimport './HouseGridSelector.css';\r\nimport GenericWindow from '../window/GenericWindow';\r\nimport WindowEventNames from '../window/WindowEventNames';\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\nimport ResizeWatchers from '../ui_core/ResizeWatchers';\r\nimport E from '../ui_core/E';\r\nimport Configuration from '../configuration/Configuration';\r\nimport HouseGridSelectorEntry from './HouseGridSelectorEntry';\r\nimport HouseGridSelectorInfo from './HouseGridSelectorInfo';\r\nimport HouseGridSelectorShowing from './HouseGridSelectorShowing';\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, showBrochureGenerationDialog} = props;\r\n\t\tthis._configuration= configuration;\r\n\t\tthis._showImagesFullScreen=showImagesFullScreen;\r\n\t\tthis._showStreetView = showStreetView;\r\n\t\tthis._setColumnsClass = this._setColumnsClass.bind(this);\r\n\t\tthis._windowMinimized= this._windowMinimized.bind(this);\r\n\t\tthis._clickedWindowClose = this._clickedWindowClose.bind(this);\r\n\t\tthis._show = this._show.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 tooltipMessage=`${AssetsManager.configuration.siteName} - ${AssetsManager.configuration.companyAddressLine1}`;\r\n\t\tthis._siteNameElement = E.div('site-name');\r\n\t\tconsole.log(Configuration);\r\n\t\t//this._siteNameElement.textContent = AssetsManager.configuration.siteName;\r\n\t\tthis._locationElement = E.div('location');\r\n\t\tthis._locationElement.textContent = AssetsManager.configuration.companyAddressLine1;\r\n\t\t\r\n\t\tthis._window = new GenericWindow({tooltipMessage, name:' ',\r\n\t\t\tdefaultX:0, defaultY:0, minimized:!\r\n\t\t\tconfiguration.showHouseTypesViewerOnOpen, \r\n\t\t\tmaximized:true, minimizable:false,\r\n\t\t\tmaximizable:false, closeable:true, minimizeOnClose:true, resizable:false, dragable:false,\r\n\t\t\tcallbackClickedClose:this._clickedWindowClose,\r\n\t\t\ttype:WindowType.HOUSE_TYPE_VIEWER\r\n\t\t});\r\n\t\tthis._tabElement = this._window.getTabElement();\r\n\t\tthis._element = this._window.getElement();\r\n\t\tthis._element.classList.add('house-grid-selector');\r\n\t\tthis._innerElement =this._window.getMainElement();\r\n\t\tthis._innerElement.classList.add('inner');\r\n\t\tthis._innerTitleElement = E.div('inner-title');\r\n\t\tthis._innerTitleElement.appendChild(this._siteNameElement);\r\n\t\tconst seperator = E.div('seperator');\r\n\t\tseperator.textContent = ' - ';\r\n\t\tthis._innerTitleElement.appendChild(seperator);\r\n\t\tthis._innerTitleElement.appendChild(this._locationElement);\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._setShowing= this._setShowing.bind(this);\r\n\t\tthis.show = this.show.bind(this);\r\n\t\tthis.hide= this.hide.bind(this);\r\n\t\tthis._handleResized = this._handleResized.bind(this);\r\n\t\tResizeWatchers.add({element:this._element, onResized:this._handleResized,staggered:false});\r\n\t\t\r\n\t\tthis._window.addEventListener(WindowEventNames.MINIMIZED, this._windowMinimized);\r\n\t\tthis._entries = [];\r\n\t\tthis._scrollableElement = document.createElement('div');\r\n\t\tthis._scrollableElement.classList.add('scrollable');\r\n\t\tthis._houseTypeEntriesElement = E.div('house-type-entries');\r\n\t\tthis._scrollableElement.appendChild(this._houseTypeEntriesElement);\r\n\t\tthis._houseTypeEntriesElement.appendChild(this._innerTitleElement);\r\n\t\tthis._houseGridSelectorInfo = new HouseGridSelectorInfo({getWindowElement:()=>this._element, configuration:this._configuration, showBrochureGenerationDialog});\r\n\t\tthis._innerElement.appendChild(this._scrollableElement);\r\n\t\tthis._scrollableElement.appendChild(this._houseGridSelectorInfo.element);\r\n\t\tthis._setShowing(HouseGridSelectorShowing.Entries);\r\n\t\t\r\n\t}\r\n\tinitialize({siteJson, houseTypesViewModel}){\r\n\t\tthis._siteJson = siteJson;\r\n\t\tthis._createEntries(houseTypesViewModel);\r\n\t}\r\n\t_handleResized(){\r\n\t\tif(this._scrollableElement.offsetWidth<700){\r\n\t\t\tthis._setColumnsClass('one-columns');\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif(this._scrollableElement.offsetWidth<1050){\r\n\t\t\tthis._setColumnsClass('two-columns');\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif(this._scrollableElement.offsetWidth<1400){\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_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_createEntries(houseTypesViewModel){\r\n\tconst mapNBedroomsToEntries = new Map();\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 houseGridSelectorEntry = new HouseGridSelectorEntry({\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\tconst nBedrooms = allHouseTypePlots[0].nBedrooms;\r\n\t\t\tlet entriesNBedrooms = mapNBedroomsToEntries.get(nBedrooms);\r\n\t\t\tif(entriesNBedrooms){\r\n\t\t\t\tentriesNBedrooms.entries.push(houseGridSelectorEntry);\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\tentriesNBedrooms = {entries:[houseGridSelectorEntry], nBedrooms};\r\n\t\t\t\tmapNBedroomsToEntries.set(nBedrooms, entriesNBedrooms);\r\n\t\t\t}\r\n\t\t\tthis._entries.push(houseGridSelectorEntry);\r\n\t\t\thouseTypes.forEach(houseType=>\r\n\t\t\t\tthis._mapHouseTypeToEntry.set(houseType, houseGridSelectorEntry)\r\n\t\t\t);\r\n\t\t});\r\n\t\tconsole.log('mapNBedrooms');\r\n\t\tconsole.log(mapNBedroomsToEntries);\r\n\t\tconst nBedroomsAndEntries = Array.from(mapNBedroomsToEntries.values());\r\n\t\tnBedroomsAndEntries.sort((a, b)=>a.nBedrooms - b.nBedrooms);\r\n\t\tnBedroomsAndEntries.forEach(({nBedrooms, entries})=>{\r\n\t\t\tconst divNBedrooms = E.div('n-bedrooms-grouping');\r\n\t\t\tconst nBedroomsElement = E.div('n-bedrooms');\r\n\t\t\tnBedroomsElement.textContent=`${nBedrooms} Bedrooms`;\r\n\t\t\tdivNBedrooms.appendChild(nBedroomsElement);\r\n\t\t\tentries.forEach(e=>divNBedrooms.appendChild(e.element));\r\n\t\t\tthis._houseTypeEntriesElement.appendChild(divNBedrooms);\r\n\t\t});\r\n\t}\r\n\t_setShowing(value){\r\n\t\tif(this._currentlyShowingClassName){\r\n\t\t\tthis._element.classList.remove(this._currentlyShowingClassName);\r\n\t\t}\r\n\t\tthis._showing = value;\r\n\t\tthis._currentlyShowingClassName = HouseGridSelectorShowing.getClassName(value);\r\n\t\tthis._element.classList.add(this._currentlyShowingClassName);\r\n\t\tthis._scrollableElement.scrollTop = 0;\r\n\t}\r\n\t_windowMinimized(){\r\n\t\tdocument.body.classList.remove('house-grid-selector-visible');\r\n\t}\r\n\t_clickedEntry(entry){\r\n\t\tthis._setShowing(HouseGridSelectorShowing.Info);\r\n\t\tthis._houseGridSelectorInfo.load(entry.houseType);\r\n\t\tthis._scrollableElement.scrollTop = 0;\r\n\t}\r\n\t_clickedWindowClose(){\r\n\t\tif(this._showing===HouseGridSelectorShowing.Info){\r\n\t\t\tif(!this._wentDirectlyToInfo){\r\n\t\t\t\tthis._setShowing(HouseGridSelectorShowing.Entries);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn true;\r\n\t}\r\n\tshowInfo(){\r\n\t\tthis._wentDirectlyToInfo = true;\r\n\t\tthis._show();\r\n\t}\r\n\tshow(){\r\n\t\tthis._wentDirectlyToInfo=false;\r\n\t\tthis._show();\r\n\t}\r\n\t_show(){\r\n\t\tdocument.body.classList.add('house-grid-selector-visible');\r\n\t\tthis._window.unminimize();\r\n\t\tthis._window.bringToFront();\r\n\t\tthis._handleResized();\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\tdocument.body.classList.add('full-screen-images-viewer-visible');\r\n\t\t\tthis._element.classList.add('visible');\r\n\t\t}\r\n\t\telse {\r\n\t\t\tdocument.body.classList.remove('full-screen-images-viewer-visible');\r\n\t\t\tthis._element.classList.remove('visible');\r\n\t\t}\r\n\t}\r\n}\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 EmGalleryFullScreenImagesViewer {\r\n\tconstructor(){\r\n\t\tthis._galleryIframe = document.createElement('iframe');\r\n\t\tthis._galleryIframe.classList.add('gallery');\r\n\t\tthis._galleryIframe.allow=\"fullscreen\";\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add(\"full-screen-images-viewer\");\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._handleClickButtonClose= this._handleClickButtonClose.bind(this);\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._galleryIframe);\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\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({src}){\r\n\t\tthis._galleryIframe.src = src;\r\n\t\tthis._setVisible(true);\r\n\t}\r\n\t_setVisible(value){\r\n\t\tif(value){\r\n\t\t\tdocument.body.classList.add('full-screen-images-viewer-visible');\r\n\t\t\tthis._element.classList.add('visible');\r\n\t\t}\r\n\t\telse {\r\n\t\t\tdocument.body.classList.remove('full-screen-images-viewer-visible');\r\n\t\t\tthis._element.classList.remove('visible');\r\n\t\t}\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","const SiteSpecific = {}; export default SiteSpecific;","import ReactDOM from 'react-dom';\r\nimport React, { Component } from 'react';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport E from '../ui_core/E';\r\nimport Urls from '../urls/Urls';\r\nimport './SalesForceWelcomePage.css';\r\nexport default class SalesForceWelcomePage {\r\n\tconstructor({showHouseGrid, configuration}){\r\n\t\tthis._setVisible = this._setVisible.bind(this);\r\n\t\tthis.show = this.show.bind(this);\r\n\t\tthis._element = E.div('sales-force-welcome-page');\r\n\t\tconst developerIcon = E.img('developer-icon');\r\n\t\tdeveloperIcon.addEventListener('load', ()=>{this._element.classList.add('developer-icon-loaded');});\r\n\t\t//const siteIcon = E.img('site-icon');\r\n\t\t//siteIcon.addEventListener('load', ()=>{this._element.classList.add('site-icon-loaded');});\r\n\t\t//siteIcon.src = Urls.siteIcon;\r\n\t\tdeveloperIcon.src = Urls.developerIcon;\r\n\t\tconst buttonToSitePlan = E.button('button-site-plan');\r\n\t\tconst buttonToHouseGrid = E.button('button-house-grid');\r\n\t\tconst welcomeToElement = E.div('welcome-to');\r\n\t\twelcomeToElement.textContent=`Welcome to ${configuration.siteName}`;\r\n\t\t/*const siteNameElement = E.div('site-name');\r\n\t\tsiteNameElement.textContent=;*/\r\n\t\t//buttonToSitePlan.textContent='Site Plan';\r\n\t\tbuttonToSitePlan.textContent='Tap to Explore';\r\n\t\tthis._element.addEventListener('click', ()=>{\r\n\t\t\tthis._setVisible(false);\r\n\t\t});\r\n\t\t/*buttonToHouseGrid.addEventListener('click', ()=>{\r\n\t\t\tthis._setVisible(false);\r\n\t\t\tshowHouseGrid();\r\n\t\t});*/\r\n\t\tthis._element.appendChild(developerIcon);\r\n\t\t//this._element.appendChild(siteIcon);\r\n\t\t//this._element.appendChild(buttonToSitePlan);\r\n\t\tthis._element.appendChild(welcomeToElement);\r\n\t\t//this._element.appendChild(siteNameElement);\r\n\t\tthis._element.appendChild(buttonToSitePlan);\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\tshow(){\r\n\t\tthis._setVisible(true);\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 './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 Specification from './Specification';\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 LocalArea from './LocalArea';\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 HouseGridSelector from '../house_types_viewer/HouseGridSelector';\r\nimport UrlParameters from '../urls/UrlParameters';\r\nimport HouseTypesViewModel from '../view_models/HouseTypesViewModel';\r\nimport PlotStatus from '../site/PlotStatus';\r\nimport FullScreenImagesViewer from './FullScreenImagesViewer';\r\nimport EmGalleryFullScreenImagesViewer from './EmGalleryFullScreenImagesViewer';\r\nimport NearbySites from './NearbySites';\r\nimport Tutorials from '../tutorials/Tutorials';\r\nimport SiteSpecific from '../site_specific/current/SiteSpecific';\r\nimport E from '../ui_core/E';\r\nimport GoogleAnalytics from '../google/GoogleAnalytics';\r\nimport SalesForceWelcomePage from './SalesForceWelcomePage';\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\twindow.configuration = configuration;\r\n\t\tif(configuration.helpTutorialEnabled){\r\n\t\t\tTutorials.showing = true;\r\n\t\t}\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._localAreaRef = React.createRef();\r\n\t\tthis._specificationRef = 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._handleShowLocalArea= this._handleShowLocalArea.bind(this);\r\n\t\tthis._handleShowSpecification = this._handleShowSpecification.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._handleShowHouseGridSelector = this._handleShowHouseGridSelector.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._handleHideLocalArea = this._handleHideLocalArea.bind(this);\r\n\t\tthis._handleHideSpecification = this._handleHideSpecification.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._hidePlotMenu = this._hidePlotMenu.bind(this);\r\n\t\tthis.setFilterInSiteFromWhatAreYouLookingFor = this.setFilterInSiteFromWhatAreYouLookingFor.bind(this);\r\n\t\tthis._showPrivacyPolicy = this._showPrivacyPolicy.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\tthis._houseGridSelector?.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\tif(UrlParameters.salesforce){\r\n\t\t\t\t\tthis._emGalleryFullScreenImagesViewer = new EmGalleryFullScreenImagesViewer();\r\n\t\t\t\t\tthis._elementRef.current.appendChild(this._emGalleryFullScreenImagesViewer.element);\r\n\t\t\t\t\tthis._salesForceWelcomePage = new SalesForceWelcomePage({showHouseGrid:this._handleShowHouseGridSelector, configuration});\r\n\t\t\t\t\tdocument.body.appendChild(this._salesForceWelcomePage.element);\r\n\t\t\t\t\tconst buttonShowSalesForceWelcomePage= E.button('button-show-sales-force-welcome-page');\r\n\t\t\t\t\tlet cancelled;\r\n\t\t\t\t\t\r\n\t\t\t\t\tconst clearGoToWelcomePageTimeout=()=>{\r\n\t\t\t\t\t\tif(this._currentTimeoutGoToWelcomeScreenIfInactive){\r\n\t\t\t\t\t\t\tclearTimeout(this._currentTimeoutGoToWelcomeScreenIfInactive);\r\n\t\t\t\t\t\t\tthis._currentTimeoutGoToWelcomeScreenIfInactive = null;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t};\r\n\t\t\t\t\tlet nClicksShortSpaceTime = 0;\r\n\t\t\t\t\tconst goToWelcomePage = ()=>{\t\t\t\r\n\t\t\t\t\t\tnClicksShortSpaceTime = 0;\r\n\t\t\t\t\t\tclearGoToWelcomePageTimeout();\r\n\t\t\t\t\t\tthis._favouritesRef.current?.clear();\r\n\t\t\t\t\t\tthis._salesForceWelcomePage.show();\r\n\t\t\t\t\t};\r\n\t\t\t\t\tbuttonShowSalesForceWelcomePage.addEventListener('mousedown', ()=>{\r\n\t\t\t\t\t\tnClicksShortSpaceTime++;\r\n\t\t\t\t\t\tif(nClicksShortSpaceTime>=4)\r\n\t\t\t\t\t\t\tgoToWelcomePage();\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\tsetTimeout(()=>{\r\n\t\t\t\t\t\t\t\tif(nClicksShortSpaceTime>0)\r\n\t\t\t\t\t\t\t\t\tnClicksShortSpaceTime--\r\n\t\t\t\t\t\t\t}, 4000);\r\n\t\t\t\t\t});\r\n\t\t\t\t\tdocument.body.appendChild(buttonShowSalesForceWelcomePage);\r\n\t\t\t\t\tconst prepareToGoToWelcomeScreenIfInactive = ()=>{\r\n\t\t\t\t\t\tclearGoToWelcomePageTimeout();\r\n\t\t\t\t\t\tthis._currentTimeoutGoToWelcomeScreenIfInactive = setTimeout(()=>{\r\n\t\t\t\t\t\t\tgoToWelcomePage();\r\n\t\t\t\t\t\t}, 10*60000);\r\n\t\t\t\t\t};\r\n\t\t\t\t\tdocument.body.addEventListener('click', prepareToGoToWelcomeScreenIfInactive);\r\n\t\t\t\t\tprepareToGoToWelcomeScreenIfInactive();\r\n\t\t\t\t}\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\tif(AssetsManager.configuration.playSiteVideoOnOpen)\r\n\t\t\t\t\t\t\t\t\tsetTimeout(()=>this._handlePlaySiteVideo(), 0);\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\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\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\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\telse\r\n\t\t\tshow();\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, noPlotMenu){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tthis._previousSitePlanVisibleType = this._currentSitePlanVisibleType;\r\n\t\t\tif(this._previousSitePlanVisibleType)\r\n\t\t\t\tdocument.body.classList.remove(SitePlanVisibleType.getCssClassName(this._previousSitePlanVisibleType));\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\t\tif(!noPlotMenu)\r\n\t\t\t\t\t\tthis._plotMenuRef?.current?.showIfIsLoaded();\r\n\t\t\t\t\tthis._localAreaRef?.current?.setVisible(false);\r\n\t\t\t\t\tthis._specificationRef?.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\t\tthis._localAreaRef?.current?.setVisible(false);\r\n\t\t\t\t\tthis._specificationRef?.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\t\tthis._localAreaRef?.current?.setVisible(false);\r\n\t\t\t\t\tthis._specificationRef?.current?.setVisible(false);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase SitePlanVisibleType.LOCAL_AREA:\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(false);\r\n\t\t\t\t\tthis._localAreaRef?.current?.setVisible(true);\r\n\t\t\t\t\tthis._specificationRef?.current?.setVisible(false);\r\n\t\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\t\tthis._localAreaRef?.current?.setVisible(false);\r\n\t\t\t\t\tthis._specificationRef?.current?.setVisible(false);\r\n\t\t\t\tbreak;\r\n\t\t\t\tcase SitePlanVisibleType.SPECIFICATION:\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(false);\r\n\t\t\t\t\tthis._localAreaRef?.current?.setVisible(false);\r\n\t\t\t\t\tthis._specificationRef?.current?.setVisible(true);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tthis._currentSitePlanVisibleType = sitePlanVisibleType;\r\n\t\t\tif((this._previousSitePlanVisibleType!==this._currentSitePlanVisibleType)\r\n\t\t\t\t&&(!(this._getConfiguration().plotMenuHasCloseButton&&(sitePlanVisibleType==SitePlanVisibleType.CONFIGURATOR)))){\r\n\t\t\t\tPlotMenu.instance.hide();\r\n\t\t\t}\r\n\t\t\tdocument.body.classList.add(SitePlanVisibleType.getCssClassName(this._currentSitePlanVisibleType));\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&&!UrlParameters.salesforce){\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\tif(UrlParameters.salesforce){\r\n\t\t\tthis._houseGridSelector= new HouseGridSelector({\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\tshowBrochureGenerationDialog:this._handleShowBrochureGenerationDialog\r\n\t\t\t});\r\n\t\t\telement.appendChild(this._houseGridSelector.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\tif(this._emGalleryFullScreenImagesViewer&&plotMoreInformationType===PlotMoreInformationType.GALLERY)\r\n\t\t{\r\n\t\t\tthis._emGalleryFullScreenImagesViewer.show({src:plot.houseType?.galleryUrl});\r\n\t\t\treturn;\r\n\t\t}\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:()=>{\r\n\t\t\t\tplot.selected=false;\r\n\t\t\t\tGoogleAnalytics.logEvent('removedPlotFromFavourites', {plotNumber:plot.number});\r\n\t\t\t},\r\n\t\t\tonClick:()=>{this._handleClickedFavourite(plot)}\r\n\t\t}));\r\n\t\tGoogleAnalytics.logEvent('addedPlotToFavourites', {plotNumber:plot.number});\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._filtersRef.current.hide();\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\tGoogleAnalytics.logEvent('enteredPlot', {plotNumber});\r\n\t\tthis._configuratorRef.current.showConfiguratorForPlot({roomName:null, plot:plot});\r\n\t}\r\n\t_handleShowLocalArea(){\r\n\t\tthis._filtersRef.current?.hide();\r\n\t\tthis._setVisibleType(SitePlanVisibleType.LOCAL_AREA);\r\n\t\tGoogleAnalytics.logEvent('localArea', {});\r\n\t\t//this._localAreaRef.current.show();\r\n\t}\r\n\t_handleShowSpecification(){\r\n\t\tthis._filtersRef.current?.hide();\r\n\t\tthis._setVisibleType(SitePlanVisibleType.SPECIFICATION);\r\n\t\t\r\n\t}\r\n\t_handleHideLocalArea(){\r\n\t\tthis._setVisibleType(SitePlanVisibleType.BIRDS_EYE_VIEW, true);\r\n\t}\r\n\t_handleHideSpecification(){\r\n\t\tthis._setVisibleType(SitePlanVisibleType.BIRDS_EYE_VIEW, true);\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\t}\r\n\t}\r\n\t_handleShowOutside360(params){\r\n\t\tTutorials.haveBeenToOutside360=true;\r\n\t\tthis._filtersRef.current.hide();\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._filtersRef.current.hide();\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\tTutorials.haveBeenToOutside360=true;\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\tGoogleAnalytics.logEvent('viewedDefaultOutside360', {});\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\tGoogleAnalytics.logEvent('wentToPlotOutside360', {plotNumber:e.nearPlot.number});\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_handleShowHouseGridSelector(){\r\n\t\tthis._filtersRef.current?.hide();\r\n\t\tthis._houseGridSelector?.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_hidePlotMenu(){\r\n\t\tthis._plotMenuRef.current?.hide();\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, src){\r\n\t\tif(this._emGalleryFullScreenImagesViewer&&src){\r\n\t\t\tthis._emGalleryFullScreenImagesViewer.show({src});\r\n\t\t\treturn;\r\n\t\t}\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\t_showPrivacyPolicy(){\r\n\t\tthis._privacyPolicyRef.current.show();\r\n\t}\r\n\trender() {\r\n\t if(this._getConfiguration().isIX2D)\r\n\t\t\tdocument.body.classList.add('is-ix2d');\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\t\t+((!this._getConfiguration().hideBrochuresIconTillCustomerGeneratesBrochure)?'':' hide-brochures-icon-till-customer-generates-brochure');\r\n\t\tconst brochureGeneration = SiteSpecific.BrochureGeneration?\r\n\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={()=>{\r\n\t\t\t\t\tthis._brochuresMenu?.show({scrollToBottom:true});\r\n\t\t\t\t\t}}\r\n\t\t\t\tgetConfiguration={this._getConfiguration} showPrivacyPolicy={this._showPrivacyPolicy}/>)\r\n\t\t\t\t:\r\n\t\t\t\t\r\n\t\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\tconst plotMenu = this._getConfiguration()?\r\n\t\t\t()\r\n\t\t\t:null;\r\n\t\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\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\thidePlotMenu={this._hidePlotMenu}>\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\tthis._menuBarRef.current.insertedMenuItemsHandler}\r\n\t\t\t\tconfiguration={this._getConfiguration()}/>\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} \r\n\t\t\t\t\tshowHouseTypes={this._handleShowHouseTypes}\r\n\t\t\t\t\tshowHouseGridSelector={this._handleShowHouseGridSelector}\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\tshowLocalArea={this._handleShowLocalArea}\r\n\t\t\t\t\tshowSpecification={this._handleShowSpecification}>\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\r\n\t\t\t\t\t{brochureGeneration}\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{plotMenu}\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\tconst isAvailableOption = (!availableFeatureIds)||availableFeatureIds.indexOf(featureId)>=0;\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\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\tthis._toggleButtons.forEach(toggleButton=>{\r\n\t\t\tconst houseTypeViewModel = toggleButton.value;\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\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\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\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 Tutorials from './tutorials/Tutorials';\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\t//Tutorials.generalWalkthrough();\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":""}