// ==UserScript== // @name WME Place Interface Enhancements // @namespace https://greasyfork.org/users/30701-justins83-waze // @version 2022.11.13.01-ua // @description Enhancements to various Place interfaces // @include https://www.waze.com/editor* // @include https://www.waze.com/*/editor* // @include https://beta.waze.com/editor* // @include https://beta.waze.com/*/editor* // @exclude https://www.waze.com/user/editor* // @icon data:image/jpeg;base64,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 // @author JustinS83 // @grant none // @require https://greasyfork.org/scripts/24851-wazewrap/code/WazeWrap.js // @require https://greasyfork.org/scripts/27023-jscolor/code/JSColor.js // @require https://greasyfork.org/scripts/37486-wme-utils-hoursparser.js // @require https://greasyfork.org/scripts/38421-wme-utils-navigationpoint/code/WME%20Utils%20-%20NavigationPoint.js?version=251065 // @require https://greasyfork.org/scripts/39208-wme-utils-google-link-enhancer/code/WME%20Utils%20-%20Google%20Link%20Enhancer.js // @require https://greasyfork.org/scripts/375202-photo-viewer-db-interface/code/Photo%20Viewer%20DB%20Interface.js // @contributionURL https://github.com/WazeDev/Thank-The-Authors // @license GPLv3 // ==/UserScript== /* global W */ /* global OpenLayers */ /* ecmaVersion 2017 */ /* global $ */ /* global jscolor */ /* global I18n */ /* global _ */ /* global WazeWrap */ /* global GoogleLinkEnhancer */ /* global HoursParser */ /* global require */ /* global idbPVKeyval */ /* eslint curly: ["warn", "multi-or-nest"] */ /* jshint esversion: 11 */ var UpdateObject, MultiAction; (function() { 'use strict'; var curr_ver = GM_info.script.version; var settings = {}; var placeMenuSelector = "#primary-toolbar > div > div.toolbar-submenu.toolbar-group.toolbar-group-venues.ItemInactive > menu"; //var placementMode = false; var resCategory = "RESIDENCE_HOME"; var wazePL; let hoursparser; let GLE; var catalog = []; const updateMessage = ""; var lastSelectedFeature; //Layer definitions { var layerName = "WME PIE"; var newPlaceLayer, PLSpotEstimatorLayer, PLSpotEstimatorCalibrationLayer; var PIEPlaceNameLayer; var showStopPointsLayer; var closestSegmentLayer; } //Drawing definitions { var drawPoly, PLSpotEstimatordrawControl, PLSpotEstimatorCalibrationdrawControl; var isDrawing; // commented due to double definition (below) //var pointStyle = { // pointRadius: 6, // fillOpacity: 0, // strokeColor: '#00ece3', // strokeWidth: '2', // strokeLinecap: 'round' //}; //Closest segment var lineStyleToNavPoint = { strokeWidth: 3, strokeColor: '#00ece3', strokeLinecap: 'round', strokeDashstyle: 'dash' }, lineStyleToClosestSeg = { strokeWidth: 4, strokeColor: '#00ece3', strokeLinecap: 'round' }, pointStyleNavPoint = { externalGraphic: 'data:image/gif;base64,R0lGODlhFgAWAPZ/AD09PT8/Pj8/P0M9PUA/P1s9PUBAPz09Qz09Zz09c0M9SWc9bT9AQD1DT0FBQEJBQURDQkRDQ0JGRkZFRUlIRklIR0lISElJSVFPTFJPTlJQTVNQTlNRT1ZTT1lWUlhWU11ZVmFbSXNDW2FhT2diXUlDYUNJbVtDc1thYWBgYGFhYWxsbG1tbZE9PbZzPaRVVZFnSbZzQ7BtYbB/Z8J/Q7yFW4uRbZGLc8iLYdqkZ8iqeeCwZ+y8cz09iz09kT1Dlz1nlz1JpENbkUNztmGFvD2R1EOR1H+wyG2w4HO25nO27Hm88p2dnZ6enraXl7a2ts7Cl/jIi/LOkfjUkf/Ukf/Ul//gqv/mtoW22pe22pfCzovI8pfU+KTa/7zs/8LCwsLOzs7Ozs/Pz9rOzubUzuzazvLgyP/syP//1P/42v//2s7U5s744NTm+Nrs/87y/8j4/9T//+bm5v//4P//5v//7ODy/+b///Pz8/jy8v//8vL4////+Pj//////wAAACH5BAUAAH8ALAAAAAAWABYAAAf+gH+CgyQeFQ8AAAQTHiSDj48ZDAIAlJWVAhyQjw8CAitMYXh4YUwrlQ+bf54VX36vsK9fEwKpnAIgcrBpTll9sHIgDLZ/GQITurBUAD1xsXIWAhmCnq6wZjMACFhusV+VfxyfsHw5JjfaNiVcsSsCHRUATLA8Qm9WBUFxUydesEwAKhgQEOaVmhddYr3KYcTPrzC1KOFRIwOEAhRbYNXBEaIBCSR+8CRKhAdNi5FKNLoIEABAkZCJWobhQwbKAi3dYJXRAQRMGz8QIVQQMM+PHhpJ/NQZs6YPnRhL/gmo8AfAClhXRGCRwoxNjSF3YJ2iJsCanzMwMB0gEvbVE09GgsQhixVFQA84z6JdGERLRTI/VQb8cPZKjgoBECAROGY2zx5YT6IJUNXpU6hRpdzVUhXXk6VEngx44PwIxAQJiSRUAKEqEAA7', graphicWidth: 22, graphicHeight: 22 }, pointStyle = { pointRadius: 6, fillColor: 'white', fillOpacity: 1, strokeColor: '#00ece3', strokeWidth: '3', strokeLinecap: 'round' }; } function bootstrap(tries = 1) { if (W && W.map && W.model && W.loginManager.user && $ && jscolor && WazeWrap.Ready) init(); else if (tries < 1000) setTimeout(function () {bootstrap(tries++);}, 200); } bootstrap(); async function init(){ loadTranslations(); GLE = new GoogleLinkEnhancer(); hoursparser = new HoursParser(); var $section = $("
", {style:"padding:8px 16px", id:"WMEPIESettings"}); $section.html([ '' + I18n.t('pie.prefs.title') + '', '
' + curr_ver + '
', '
', '' + I18n.t('pie.filter.PlaceFilterPanel') + '', '
' + I18n.t('pie.filter.filter') + '
', '
', '
', '
', '
', '' + I18n.t('pie.prefs.PropertiesPanel') + '', '
', '
', '
', '
', '
', //!WazeWrap.isBetaEditor ? '
' : '', '

', '
', '' + I18n.t('pie.prefs.Zoom') + '
', '
', '
', '
', '
', '
', '
', //'
', '
', '
', '
', `
`, `
${I18n.t("pie.prefs.SimplifyFactor")}
`, `
`, '
', '
', '' + I18n.t('pie.prefs.NewPlaces') + '', '
', '
', '
', '
', '
', '
' + I18n.t('pie.prefs.LockLevel') + '
', '
', '
', '' + I18n.t('pie.prefs.MapChanges') + '', '
', '
', '
', '
', '
', `
`, '
', I18n.t('pie.prefs.FontSize') + ' px
', I18n.t('pie.prefs.FontColor') + '
', '
', I18n.t('pie.prefs.FontOutlineColor') + '
', I18n.t('pie.prefs.FontOutlineWidth') + ' ', '
', '
', '
', '
', '
', '
', '
', '
', '
', '
', '
', '' + I18n.t('pie.prefs.PlaceMenuCustomization') + '
', buildItemOption(1), buildItemOption(2), buildItemOption(3), buildItemOption(4), buildItemOption(5), buildItemOption(6), buildItemOption(7), buildItemOption(8), buildItemOption(9), buildItemOption(10), buildItemOption(11), buildItemOption(12), '
' ].join(' ')); UpdateObject = require("Waze/Action/UpdateObject"); MultiAction = require("Waze/Action/MultiAction"); //Load settings await loadSettings(); var style = new OpenLayers.Style({ //pointRadius: "${pointRadius}", // (duplicated key, see below) label : "${labelText}", fontFamily: "Tahoma, Arial, Verdana", labelOutlineColor: settings.PlaceNameFontOutline, labelOutlineWidth: Number(settings.PlaceNameFontOutlineWidth), labelAlign: 'cm', fontColor: settings.PlaceNameFontColor, fontOpacity: 1.0, fontSize: settings.PlaceNameFontSize + "px", labelYOffset: "${yOffset}", fontStyle: "${style}", fontWeight: (settings.PlaceNameFontBold ? 'bold' : ''), pointRadius: 0 }); PIEPlaceNameLayer = new OpenLayers.Layer.Vector("PIEPlaceNameLayer",{displayInLayerSwitcher: false, uniqueName: "__PIEPlaceNameLayer", styleMap: new OpenLayers.StyleMap(style)}); W.map.addLayer(PIEPlaceNameLayer); PIEPlaceNameLayer.setVisibility(true); newPlaceLayer = new OpenLayers.Layer.Vector(layerName,{displayInLayerSwitcher: false}); W.map.addLayer(newPlaceLayer); PLSpotEstimatorLayer = new OpenLayers.Layer.Vector("PIEPLSpotEstimatorLayer",{displayInLayerSwitcher: false, uniqueName: "__PIEPLSpotEstimatorLayer"}); //W.map.addLayer(PLSpotEstimatorLayer); PLSpotEstimatorLayer.setVisibility(true); PLSpotEstimatorCalibrationLayer= new OpenLayers.Layer.Vector("PIEPLSpotEstimatorCalibrationLayer",{displayInLayerSwitcher: false, uniqueName: "__PIEPLSpotEstimatorCalibrationLayer"}); //W.map.addLayer(PLSpotEstimatorCalibrationLayer); PLSpotEstimatorCalibrationLayer.setVisibility(true); showStopPointsLayer = new OpenLayers.Layer.Vector("PIEShowStopPointsLayer", {displayInLayerSwitcher: false, uniqueName: "__PIEShowStopPointsLayer"}); W.map.addLayer(showStopPointsLayer); showStopPointsLayer.setVisibility(true); closestSegmentLayer = new OpenLayers.Layer.Vector("PIEClosestSegment", {displayInLayerSwitcher: false, uniqueName:"__PIEClosesetSegmentLayer"}); W.map.addLayer(closestSegmentLayer); closestSegmentLayer.setVisibility(true); /*var ctl = W.map.controls.find(function(ctrl) { return ctrl.displayClass ==="WazeControlSelectHighlightFeature"; }); var ctlLayers = [].concat(ctl.layers); var myLayer = W.map.getLayersByName('PIEPlaceNameLayer')[0]; ctlLayers.push(myLayer); ctl.setLayer(ctlLayers);*/ //***** Set Google Link Enhancer translations ***** GLE.strings.closedPlace = I18n.t('pie.GLE.closedPlace'); GLE.strings.multiLinked = I18n.t('pie.GLE.multiLinked'); GLE.strings.linkedToThisPlace = I18n.t('pie.GLE.linkedToThisPlace'); GLE.strings.linkedNearby = I18n.t('pie.GLE.linkedNearby'); GLE.strings.linkedToXPlaces = I18n.t('pie.GLE.linkedToXPlaces'); GLE.strings.badLink = I18n.t('pie.GLE.badLink'); GLE.strings.tooFar = I18n.t('pie.GLE.tooFar'); injectCss(); new WazeWrap.Interface.Tab('PIE', $section.html(), init2); } function getActiveEditor(tries = 1) { return new Promise((resolve, reject) => { if (W.geometryEditing.activeEditor) resolve(W.geometryEditing.activeEditor); else { if(tries <= 10) setTimeout(() => resolve(getActiveEditor()), 100); } }); } function init2(){ $('#cboPlaceNameFontWeight').select2({placeholder: "No font weight set", allowClear: true}); $('#divPlaceNamesFontCustomization .select2-choices').css("font-size", "10px"); initColorPicker(); if ($('#colorPickerFont')[0].jscolor){ $('#colorPickerFont')[0].jscolor.fromString(settings.PlaceNameFontColor); $('#colorPickerFontOutline')[0].jscolor.fromString(settings.PlaceNameFontOutline); } //$('#divPlaceNamesFontCustomization .select2-input').remove() //Set up event handlers $('#_cbShowAreaPlaceSize').change(function() { if(this.checked) { attachPlaceSizeHandlers(); updatePlaceSizeDisplay(); $('#_cbShowAreaPlaceSizeImperial')[0].disabled = false; $('#_cbShowAreaPlaceSizeMetric')[0].disabled = false; } else { removePlaceSizeHandlers(); $('#AreaSize').remove(); $('#_cbShowAreaPlaceSizeImperial')[0].disabled = true; $('#_cbShowAreaPlaceSizeMetric')[0].disabled = true; } }); $('#_cbShowPlaceNames').change(function() { PIEPlaceNameLayer.setVisibility(this.checked); $('#_cbShowPlaceNamesPoint')[0].disabled = !this.checked; $('#_cbShowPlaceNamesArea')[0].disabled = !this.checked; $('#_cbShowPlaceNamesPLA')[0].disabled = !this.checked; $('#_cbShowPlaceNamesLock')[0].disabled = !this.checked; $('#_cbhidePlaceNamesWhenPlacesHidden')[0].disabled = !this.checked; DisplayPlaceNames(); }); $('[id^="_cbShowPlaceNames"]').change(function(){ DisplayPlaceNames(); }); $('#_cbhidePlaceNamesWhenPlacesHidden').change(function(){ DisplayPlaceNames(); }); $('#_cbShowExternalProviderTooltip').change(function(){ ToggleExternalProvidersCSS(this.checked); }); $('#_cbShowPlaceLocatorCrosshair').change(function(){ if(this.checked) registerEvents(ShowPlaceLocatorCrosshair); else unregisterEvents(ShowPlaceLocatorCrosshair); }); $('#_cbShowParkingLotButton').change(function(){ if(this.checked) registerEvents(ShowParkingLotButton); else unregisterEvents(ShowParkingLotButton); }); $('#_cbShowCopyPlaceButton').change(function(){ if(this.checked) registerEvents(ShowCopyPlaceButton); else unregisterEvents(ShowCopyPlaceButton); }); $('#_cbShowSearchButton').change(function(){ if(this.checked) registerEvents(ShowSearchButton); else unregisterEvents(ShowSearchButton); }); $('#_cbAddPlaceCategoriesButtons').change(function(){ if(this.checked) registerEvents(AddPlaceCategoriesButtons); else unregisterEvents(AddPlaceCategoriesButtons); }); $('#_cbMoveAddress').change(function(){ //This is now supported natively in WME (beta as of 2017-10-16) /*if(this.checked) registerEvents(MoveAddress); else unregisterEvents(MoveAddress);*/ }); $('#_cbMoveHNEntry').change(function(){ if(this.checked) registerEvents(MoveHNEntry); else unregisterEvents(MoveHNEntry); }); $('#_cbClearDescription').change(function(){ if(this.checked) registerEvents(ShowClearDescription); else unregisterEvents(ShowClearDescription); }); $('#_cbShowPLSpotEstimatorButton').change(function(){ if(this.checked) registerEvents(ShowPLSpotEstimatorButton); else unregisterEvents(ShowPLSpotEstimatorButton); }); $('#_cbShowNavPointClosestSegmentOnHover').change(function(){ if(this.checked) WazeWrap.Events.register("mousemove", null, drawNavPointClosestSegmentLines); else WazeWrap.Events.unregister("mousemove", null, drawNavPointClosestSegmentLines); }); $('#_cbShowClosestSegmentSelected').change(function(){ if(this.checked){ WazeWrap.Events.register('afterundoaction', this, checkSelection); WazeWrap.Events.register('afteraction', this, checkSelection); WazeWrap.Events.register('selectionchanged', this, checkSelection); W.model.venues.on('objectschanged', ObjectsChanged); } else{ WazeWrap.Events.unregister('afterundoaction', this, checkSelection); WazeWrap.Events.unregister('afteraction', this, checkSelection); WazeWrap.Events.unregister('selectionchanged', this, checkSelection); W.model.venues.off('objectschanged', ObjectsChanged); } }); $('#_cbOpenPUR').change(function(){ if(this.checked) WazeWrap.Events.register('selectionchanged', this, openPUR); else WazeWrap.Events.unregister('selectionchanged', this, openPUR); }); $('#_cbEnableGLE').change(function(){ if(this.checked) GLE.enable(); else GLE.disable(); $('#_cbGLEShowTempClosed')[0].disabled = !this.checked; }); $('#_cbGLEShowTempClosed').change(function(){ GLE.showTempClosedPOIs = this.checked; }); $('#_cbEnablePhotoViewer').change(function(){ if(this.checked) $('#launchDiv').css('display', 'block'); else{ hide_visio(); $('#launchDiv').css('display', 'none'); } }); $('#_cbEnlargeGeoHandles').change(function(){ if(this.checked) changeGeoHandleStyle(8); else changeGeoHandleStyle(6); unregisterEvents(enlargeVirtualVerticies); registerEvents(enlargeVirtualVerticies); }); $('#_cbHidePaymentType').change(function(){ if(this.checked) registerEvents(HidePaymentTypePlaceSelected); else unregisterEvents(HidePaymentTypePlaceSelected); }); $('#_cbGeometryMods').change(function(){ if(this.checked) registerEvents(InsertGeometryMods); else unregisterEvents(InsertGeometryMods); }); //Load settings to interface setChecked('_cbShowAreaPlaceSize', settings.ShowAreaPlaceSize); setChecked('_cbShowAreaPlaceSizeImperial', settings.ShowAreaPlaceSizeImperial); setChecked('_cbShowAreaPlaceSizeMetric', settings.ShowAreaPlaceSizeMetric); setChecked('_cbShowLockButtonsRPP', settings.ShowLockButtonsRPP); setChecked('_cbEditRPPAfterCreated', settings.EditRPPAfterCreated); setChecked('_cbUseStreetFromClosestSeg', settings.UseStreetFromClosestSeg); setChecked('_cbUseCityFromClosestSeg', settings.UseCityFromClosestSeg); setChecked('_cbShowPlaceLocatorCrosshair', settings.ShowPlaceLocatorCrosshair); setChecked('_cbShowParkingLotButton', settings.ShowParkingLotButton); setChecked('_cbShowCopyPlaceButton', settings.ShowCopyPlaceButton); setChecked('_cbShowExternalProviderTooltip', settings.ShowExternalProviderTooltip); setChecked('_cbUseAltCity', settings.UseAltCity); setChecked('_cbShowSearchButton', settings.ShowSearchButton); setChecked('_cbAddPlaceCategoriesButtons', settings.AddPlaceCategoriesButtons); setChecked('_cbSkipPLR', settings.SkipPLR); setChecked('_cbShowPlaceNames', settings.ShowPlaceNames); setChecked('_cbShowPlaceNamesPoint', settings.ShowPlaceNamesPoint); setChecked('_cbShowPlaceNamesArea', settings.ShowPlaceNamesArea); setChecked('_cbShowPlaceNamesPLA', settings.ShowPlaceNamesPLA); setChecked('_cbShowPlaceNamesLock', settings.ShowPlaceNamesLock); setChecked('_cbClearDescription', settings.ClearDescription); setChecked('_cbPlaceNameFontBold', settings.PlaceNameFontBold); setChecked('_cbPlaceLocatorCrosshairProdPL', settings.PlaceLocatorCrosshairProdPL); //setChecked('_cbMoveAddress', settings.MoveAddress); //Native support as of 2017-10-24 setChecked('_cbMoveHNEntry', settings.MoveHNEntry); setChecked('_cbShowPLSpotEstimatorButton', settings.ShowPLSpotEstimatorButton); setChecked('_cbShowNavPointClosestSegmentOnHover', settings.ShowNavPointClosestSegmentOnHover); setChecked('_cbShowClosestSegmentSelected', settings.ShowClosestSegmentSelected); setChecked('_cbEnableGLE', settings.EnableGLE); setChecked('_cbOpenPUR', settings.OpenPUR); setChecked('_cbHidePaymentType', settings.HidePaymentType); setChecked('_cbGeometryMods', settings.GeometryMods); setChecked('_cbEnablePhotoViewer', settings.EnablePhotoViewer); setChecked('_cbHideShopAndServices', settings.HideShopAndServices); setChecked('_cbEnlargeGeoHandles', settings.EnlargeGeoHandles); setChecked('_cbhidePlaceNamesWhenPlacesHidden', settings.hidePlaceNamesWhenPlacesHidden); setChecked('_cbGLEShowTempClosed', settings.GLEShowTempClosed); $('#_cbGLEShowTempClosed')[0].disabled = !settings.EnableGLE; if(settings.ShowPlaceNames){ $('#_cbShowPlaceNamesPoint')[0].disabled = false; $('#_cbShowPlaceNamesArea')[0].disabled = false; $('#_cbShowPlaceNamesPLA')[0].disabled = false; $('#_cbShowPlaceNamesLock')[0].disabled = false; $('#_cbhidePlaceNamesWhenPlacesHidden')[0].disabled = false; } if (settings.PlaceZoom < 12) settings.PlaceZoom = parseInt(settings.PlaceZoom) + 12; $('#piePlaceZoom')[0].value = settings.PlaceZoom; $('#pieDefaultLockLevel')[0].value = settings.DefaultLockLevel; $('#piePlaceNameFontSize')[0].value = settings.PlaceNameFontSize; $('#piePlaceNameFontOutlineWidth')[0].value = settings.PlaceNameFontOutlineWidth; $('#pieSimplifyFactor')[0].value = settings.SimplifyFactor; if(settings.ShowNavPointClosestSegmentOnHover) WazeWrap.Events.register("mousemove", null, drawNavPointClosestSegmentLines); if(settings.ShowAreaPlaceSize){ $('#_cbShowAreaPlaceSizeImperial')[0].disabled = false; $('#_cbShowAreaPlaceSizeMetric')[0].disabled = false; attachPlaceSizeHandlers(); } if(settings.ShowPlaceLocatorCrosshair){ registerEvents(ShowPlaceLocatorCrosshair); //JUSTIN //ShowPlaceLocatorCrosshair(); //in case the user opened a PL with a Place selected } if(settings.ShowParkingLotButton){ registerEvents(ShowParkingLotButton); ShowParkingLotButton(); //in case the user opened a PL with a Place selected } if(settings.ShowCopyPlaceButton){ registerEvents(ShowCopyPlaceButton); ShowCopyPlaceButton(); } if(settings.ShowExternalProviderTooltip){ //registerEvents(ShowExternalProviderTooltip); //ShowExternalProviderTooltip(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(mutation) { if ($(mutation.target).hasClass('select2-chosen')) ShowExternalProviderTooltip(); }); }); observer.observe(document.getElementById('edit-panel'), { childList: true, subtree: true }); } if(settings.ShowSearchButton){ registerEvents(ShowSearchButton); ShowSearchButton(); //in case the user opened a PL with a Place selected } if(settings.AddPlaceCategoriesButtons){ registerEvents(AddPlaceCategoriesButtons); AddPlaceCategoriesButtons(); } if(settings.ClearDescription){ registerEvents(ShowClearDescription); ShowClearDescription(); } //Native support as of 2017-10-24 /*if(settings.MoveAddress){ registerEvents(MoveAddress); MoveAddress(); }*/ if(settings.MoveHNEntry){ registerEvents(MoveHNEntry); MoveHNEntry(); } if(settings.ShowPLSpotEstimatorButton){ registerEvents(ShowPLSpotEstimatorButton); ShowPLSpotEstimatorButton(); } if(settings.ShowExternalProviderTooltip) ToggleExternalProvidersCSS(true); if(settings.ShowClosestSegmentSelected){ WazeWrap.Events.register('afterundoaction', null, checkSelection); WazeWrap.Events.register('afteraction', null, checkSelection); WazeWrap.Events.register('selectionchanged', null, checkSelection); W.model.venues.on('objectschanged', ObjectsChanged); } if(settings.OpenPUR) WazeWrap.Events.register('selectionchanged', null, openPUR); GLE.showTempClosedPOIs = settings.showTempClosedPOIs; if(settings.EnableGLE) GLE.enable(); //if(settings.EnablePhotoViewer) SetupPhotoViewer(); if(settings.EnlargeGeoHandles){ changeGeoHandleStyle(8); registerEvents(enlargeVirtualVerticies); } if(settings.HidePaymentType){ registerEvents(HidePaymentTypePlaceSelected); HidePaymentTypePlaceSelected(); } if(settings.GeometryMods){ registerEvents(InsertGeometryMods); InsertGeometryMods(); } $('.pieSettingsCheckbox').change(function() { var settingName = $(this)[0].id.substr(3); settings[settingName] = this.checked; saveSettings(); }); $('#piePlaceZoom').change(function(){ var settingName = $(this)[0].id.substr(3); settings[settingName] = $(this)[0].value; saveSettings(); }); $('#pieDefaultLockLevel').change(function(){ settings[$(this)[0].id.substr(3)] = $(this)[0].value; saveSettings(); }); $('#_cbPlaceNameFontBold').change(function(){ PIEPlaceNameLayer.styleMap.styles.default.defaultStyle.fontWeight = (this.checked ? 'bold' :''); DisplayPlaceNames(); }); $('#piePlaceNameFontSize').focusout(function(){ var fontSize = $(this)[0].value; if(fontSize == "" || fontSize == "0") $(this)[0].value = 12; settings[$(this)[0].id.substr(3)] = fontSize; saveSettings(); PIEPlaceNameLayer.styleMap.styles.default.defaultStyle.fontSize = fontSize + "px"; DisplayPlaceNames(); }); $('#piePlaceNameFontOutlineWidth').focusout(function(){ var outlineWidth = $(this)[0].value; if(outlineWidth == "" || outlineWidth == "0") $(this)[0].value = 3; settings[$(this)[0].id.substr(3)] = outlineWidth; saveSettings(); PIEPlaceNameLayer.styleMap.styles.default.defaultStyle.labelOutlineWidth = outlineWidth; DisplayPlaceNames(); }); $('#piePlaceNameFontSize').keypress(function(event) { if ((event.which < 48 || event.which > 57)) event.preventDefault(); }); $('#piePlaceNameFontOutlineWidth').keypress(function(event) { if ((event.which < 48 || event.which > 57)) event.preventDefault(); }); $('#pieSimplifyFactor').focusout(function(){ let factor = $(this)[0].value; if(factor == "") $(this)[0].value = 5; if(factor > 10) factor = 10; if(factor<0) factor = 0; settings[$(this)[0].id.substr(3)] = factor; }); var i; //Whenever a Place item is changed, read the settings and save to localStorage $('[id^="pieItem"]').change(function(){ for(i=0;i<12;i++) settings.NewPlacesList[i] = $('#pieItem'+(i+1))[0].value; saveSettings(); buildNewPlaceList(); }); //Load settings into Place Customization list options for(i=0; i<12;i++) $('#pieItem'+(i+1))[0].value = settings.NewPlacesList[i]; //Build our new menu buildNewPlaceList(); //coming back from the HN edit mode now rebuilds the Place menu. W.editingMediator.on('change:editingHouseNumbers', buildNewPlaceList); /********* SHORTCUTS *********/ new WazeWrap.Interface.Shortcut('CreateResidentialPlaceShortcut', 'Creates a resdiential Place point', 'wmepie', 'Place Interface Enhancements', settings.CreateResidentialPlaceShortcut, function(){startPlacementMode(resCategory, true);}, null).add(); new WazeWrap.Interface.Shortcut('CreateParkingLotShortcut', 'Creates a parking lot Place', 'wmepie', 'Place Interface Enhancements', settings.CreateParkingLotShortcut, function(){startPlacementMode("PARKING_LOT", false);}, null).add(); new WazeWrap.Interface.Shortcut('HideAreaPlacesShortcut', 'Toggle hiding area Places', 'wmepie', 'Place Interface Enhancements', settings.ToggleAreaPlacesShortcut, ToggleHideAreaPlaces, null).add(); new WazeWrap.Interface.Shortcut('OrthogonalizeShortcut', 'Orthogonalize Area Place', 'wmepie', 'Place Interface Enhancements', settings.OrthogonalizeShortcut, OrthogonalizePlace, null).add(); new WazeWrap.Interface.Shortcut('SimplifyPlaceShortcut', 'Simplify Area Place', 'wmepie', 'Place Interface Enhancements', settings.SimplifyPlaceShortcut, SimplifyPlace, null).add(); new WazeWrap.Interface.Shortcut('CreateItem1Shortcut', 'Create Item 1', 'wmepie', 'Place Interface Enhancements', settings.CreateItem1Shortcut, function(){PlaceMenuShortcut(1);}, null).add(); new WazeWrap.Interface.Shortcut('CreateItem2Shortcut', 'Create Item 2', 'wmepie', 'Place Interface Enhancements', settings.CreateItem2Shortcut, function(){PlaceMenuShortcut(2);}, null).add(); new WazeWrap.Interface.Shortcut('CreateItem3Shortcut', 'Create Item 3', 'wmepie', 'Place Interface Enhancements', settings.CreateItem3Shortcut, function(){PlaceMenuShortcut(3);}, null).add(); new WazeWrap.Interface.Shortcut('CreateItem4Shortcut', 'Create Item 4', 'wmepie', 'Place Interface Enhancements', settings.CreateItem4Shortcut, function(){PlaceMenuShortcut(4);}, null).add(); new WazeWrap.Interface.Shortcut('CreateItem5Shortcut', 'Create Item 5', 'wmepie', 'Place Interface Enhancements', settings.CreateItem5Shortcut, function(){PlaceMenuShortcut(5);}, null).add(); new WazeWrap.Interface.Shortcut('CreateItem6Shortcut', 'Create Item 6', 'wmepie', 'Place Interface Enhancements', settings.CreateItem6Shortcut, function(){PlaceMenuShortcut(6);}, null).add(); new WazeWrap.Interface.Shortcut('CreateItem7Shortcut', 'Create Item 7', 'wmepie', 'Place Interface Enhancements', settings.CreateItem7Shortcut, function(){PlaceMenuShortcut(7);}, null).add(); new WazeWrap.Interface.Shortcut('CreateItem8Shortcut', 'Create Item 8', 'wmepie', 'Place Interface Enhancements', settings.CreateItem8Shortcut, function(){PlaceMenuShortcut(8);}, null).add(); new WazeWrap.Interface.Shortcut('CreateItem9Shortcut', 'Create Item 9', 'wmepie', 'Place Interface Enhancements', settings.CreateItem9Shortcut, function(){PlaceMenuShortcut(9);}, null).add(); new WazeWrap.Interface.Shortcut('CreateItem10Shortcut', 'Create Item 10', 'wmepie', 'Place Interface Enhancements', settings.CreateItem10Shortcut, function(){PlaceMenuShortcut(10);}, null).add(); new WazeWrap.Interface.Shortcut('CreateItem11Shortcut', 'Create Item 11', 'wmepie', 'Place Interface Enhancements', settings.CreateItem11Shortcut, function(){PlaceMenuShortcut(11);}, null).add(); new WazeWrap.Interface.Shortcut('CreateItem12Shortcut', 'Create Item 12', 'wmepie', 'Place Interface Enhancements', settings.CreateItem12Shortcut, function(){PlaceMenuShortcut(12);}, null).add(); $("#piePlaceFilter").on("propertychange keyup paste input", UpdatePlaceFilter); $('input[type=radio][name=PlaceFilterToggle]').change(UpdatePlaceFilter); window.addEventListener("beforeunload", function() { checkShortcutsChanged(); //saveSettings(); }, false); let extprovobserver = new MutationObserver(function(mutations) { mutations.forEach(function(mutation) { /*if ($(mutation.target).hasClass('external-providers-view')) if(W.loginManager.user.normalizedLevel === 1) $('.external-providers-view').parent().parent().remove(); */ for (var i = 0; i < mutation.addedNodes.length; i++) { var addedNode = mutation.addedNodes[i]; // Only fire up if it's a node if (addedNode.nodeType === Node.ELEMENT_NODE && ($(addedNode).hasClass('address-edit-view') || $(addedNode).hasClass('conversation-view'))) { //Hide the suggested categories for Shopping / Services due to the amount of vertical space it takes up - is often used as a valid category if(WazeWrap.hasPlaceSelected()) if (settings.HideShopAndServices && WazeWrap.getSelectedFeatures()[0].model.attributes.categories.length === 1 && WazeWrap.getSelectedFeatures()[0].model.attributes.categories[0] === 'SHOPPING_AND_SERVICES') $('.suggested-categories').remove(); updatePlaceSizeDisplay(); AddPlaceCategoriesButtons(); AddHoursParserInterface(); AddMakePrimaryButtons(); if(settings.ShowPlaceLocatorCrosshair) ShowPlaceLocatorCrosshair(); if(settings.ShowSearchButton) ShowSearchButton(); if(settings.ShowParkingLotButton) ShowParkingLotButton(); if(settings.ShowCopyPlaceButton) ShowCopyPlaceButton(); if(settings.GeometryMods) InsertGeometryMods(); } else if(addedNode.nodeType === Node.ELEMENT_NODE && $(addedNode).hasClass('payment-checkbox')){ if(settings.HidePaymentType) _hidePaymentType(); } } }); }); extprovobserver.observe(document.getElementById('edit-panel'), { childList: true, subtree: true }); WazeWrap.Events.register("selectionchanged", null, function(){ if(W.selectionManager.getSelectedFeatures.length > 0) lastSelectedFeature = W.selectionManager.getSelectedFeatures()[0].model.type; if(WazeWrap.hasPlaceSelected()){ //Trim whitespace from start and end of house number field on Places $('.form-control.house-number').focusout(function(){ $('.form-control.house-number')[0].value = $('.form-control.house-number')[0].value.trim(); }); //Make Website label a clickable link to the set website let placeURL = WazeWrap.getSelectedFeatures()[0].model.attributes.url || ""; $('input[name="url"]').focusout(function(){ placeURL = $('input[name="url"]')[0].value.trim(); if(placeURL == ""){ $('input[name="url"]').parent().parent().find('label').unwrap(); return; } if(!placeURL.startsWith("http")) placeURL = "https://" + placeURL; if($('#websiteLink').length == 0) $('input[name="url"]').parent().parent().find('label').wrap(''); else $('#websiteLink').attr('href', placeURL); }); if(placeURL != ""){ if(!placeURL.startsWith("http")) placeURL = "https://" + placeURL; $('input[name="url"]').parent().parent().find('label').wrap(''); $('input[name="url"]').parent().parent().find('label').css('text-decoration', 'underline'); $('input[name="url"]').parent().parent().find('label').css('cursor', 'pointer'); } //Hide the suggested categories for Shopping / Services due to the amount of vertical space it takes up - is often used as a valid category if (settings.HideShopAndServices && WazeWrap.getSelectedFeatures()[0].model.attributes.categories.length === 1 && WazeWrap.getSelectedFeatures()[0].model.attributes.categories[0] === 'SHOPPING_AND_SERVICES' ) $('.suggested-categories').remove(); } }); //No one really uses this and it is causing issues due to the rotate handle persisting after de-selecting a MC /*W.selectionManager.events.register("selectionchanged", null, function(){ let selectedItems = WazeWrap.getSelectedFeatures(); if(selectedItems.length > 0 && selectedItems[0].model.type === "mapComment") getActiveEditor().then(val => { if((val.mode & OpenLayers.Control.ModifyFeature.ROTATE) == 0){ val.mode |= OpenLayers.Control.ModifyFeature.ROTATE; val.resetVertices(); } }); });*/ //Obsoleted by WME update released 2017-10-24 /*var observer = new MutationObserver(function(mutations) { mutations.forEach(function(mutation) { if ($('#dialog-region').find('.venue-image-dialog').length > 0 && $('#detailsWrap').length == 0) ImageDialogEnhancement(); }); });*/ //observer.observe(document.getElementById('dialog-region'), { childList: true, subtree: true }); //Highlight the categories box when the old hospital category is present /*W.selectionManager.events.register("selectionchanged", null, highlightObsoleteHospitalCategory); W.model.actionManager.events.register("afterundoaction",null, highlightObsoleteHospitalCategory); W.model.actionManager.events.register("afterclearactions",null, highlightObsoleteHospitalCategory); W.model.actionManager.events.register("afteraction",null, highlightObsoleteHospitalCategory);*/ WazeWrap.Events.register("zoomend", null, DisplayPlaceNames); WazeWrap.Events.register("changelayer", null, DisplayPlaceNames); //Shamelessly copied from URO+ var MO_MPLayer = new MutationObserver(MPLayerChanged); MO_MPLayer.observe(W.map.problemLayer.div,{childList : true}); wazePL = document.querySelector('.WazeControlPermalink>a.fa-link'); if(wazePL == null) wazePL = document.querySelector('.permalink'); wazePL.id = 'wazePermalink'; /******** Hours Parser ************/ registerEvents(AddHoursParserInterface); AddHoursParserInterface(); registerEvents(AddMakePrimaryButtons); AddMakePrimaryButtons(); WazeWrap.Events.register("change:mode", null, function(x, modeID){ if(modeID === 1) //in event mode GLE.disable(); else{ if(settings.EnableGLE) GLE.enable(); } }); WazeWrap.Interface.ShowScriptUpdate("WME Place Interface Enhancements", GM_info.script.version, updateMessage, "", "https://www.waze.com/forum/viewtopic.php?f=819&t=215990"); } function handleEventModeChange(){ } function SetupPhotoViewer(){ //Black background let mainDiv=document.createElement('div'); mainDiv.id='photoViewerMainDiv'; $(mainDiv).css({'float':'right','position':'absolute','left':'0px','top':'0px','width':'100%','height':'100%','background-color':'rgb(0, 0, 0, 0.85)','z-index':'1005','overflow-y':'auto','display':'none', 'font-size':'13px'}); $('#map').append(mainDiv); //Div options let optDiv=document.createElement('div'); optDiv.id='options'; $(optDiv).css({'position':'absolute','top':'0','width':'100%','height':'100%','z-index':'1011','background-color':'rgb(0, 0, 0, 0.85)', 'display':'none'}); /*optDiv.onclick = function(){ $(optDiv).css('display', 'none'); };*/ $('#map').append(optDiv); let optDiv2=document.createElement('div'); optDiv2.className = 'photoViewerOptionsContainer'; $(optDiv2).css({'text-align':'center','width':'500px', 'position':'relative', 'top':'30px', 'background-color':'black', 'color':'white', 'margin':'0 auto', 'border':'1px solid white', 'border-radius':'12px', 'padding':'10px'}); optDiv2.innerHTML = '
Sort by
Sort order
Keep position after picture deletion
Show whitelisted Places
' + '
' + '
'; optDiv.appendChild(optDiv2); $('#photoViewerCancel').click(function(){ $(optDiv).css('display', 'none'); }); let topbar = document.createElement('div'); $(topbar).css({'position':'sticky', 'top':'0px', 'width':'100%', 'height':'23px'}); mainDiv.appendChild(topbar); //Button to quit let quit=document.createElement('button'); quit.innerHTML=I18n.translations[I18n.currentLocale()].merge_places.actions.cancel; $(quit).css({'float':'right','height':'23px','line-height':'23px','margin':'3px','padding':'0 10px','background-color':'#26bae8','color':'white','border':'0','border-radius':'13px'}); quit.onclick = hide_visio; topbar.appendChild(quit); //Button for script options let param=document.createElement('button'); param.innerHTML=''; $(param).css({'float':'right','height':'22px','line-height':'22px','margin':'3px','background-color':'#354148','color':'white','border':'0','border-radius':'11px'}); param.onclick=(function(){ $(optDiv).css('display', 'block'); }); topbar.appendChild(param); //Quantity let quantities=document.createElement('div'); $(quantities).css({'float':'right','height':'22px','line-height':'22px','margin':'3px','padding':'0 8px','background-color':'#354148','color':'white','border':'0','border-radius':'11px'}); let placeqty = document.createElement('div'); $(placeqty).css({'color':'white','display':'inline-block', 'margin-right':'5px'}); placeqty.innerHTML=' '; quantities.appendChild(placeqty); let imageqty = document.createElement('div'); $(imageqty).css({'display':'inline-block'}); imageqty.innerHTML=' '; quantities.appendChild(imageqty); topbar.appendChild(quantities); //Refresh let refresh=document.createElement('div'); refresh.innerHTML=''; $(refresh).css({'float':'right','height':'22px','line-height':'22px','margin':'3px','padding':'0 8px','background-color':'#354148','color':'white','border':'0','border-radius':'11px', 'cursor':'pointer'}); refresh.id="refreshScan"; $(refresh).click(Photos_scan); topbar.appendChild(refresh); let showDiv=document.createElement('div'); showDiv.id='showDiv'; showDiv.style.padding='5px'; mainDiv.appendChild(showDiv); //Icon near chat let launchDiv=document.createElement('div'); launchDiv.id='launchDiv'; $(launchDiv).css({'z-index':'10000 !important', 'title':'test','bottom':'20px','left':'70px','position':'absolute','font-weight':'400', 'display': (settings.EnablePhotoViewer ? 'block' : 'none')}); let tmpdiv=document.createElement('div'); $(tmpdiv).css({'height':'40px','position':'absolute','bottom':'0px','transition':'all 0.3s'}); tmpdiv.onmouseenter=togglePhotoViewerMouseEvent; launchDiv.appendChild(tmpdiv); let launchButton=document.createElement('button'); $(launchButton).css({'filter':'filter:grayscale(100%)','border':'none','background-color':'white','border-radius':'8px 8px 8px 8px','width':'43px','height':'40px'}); launchButton.innerHTML=''; launchButton.id = "photoViewerButton"; tmpdiv.appendChild(launchButton); $('#map').append(launchDiv); $('#sortBy')[0].value = settings.sortBy; $('#sortOrder')[0].value = settings.sortOrder; setChecked('photoViewerPreserveLayout', settings.PhotoViewerPreserveLayout); setChecked('photoViewerShowHiddenPlaces', settings.PhotoViewerShowHiddenPlaces); $('#photoViewerSave').click(function(){ settings.sortBy = $('#sortBy')[0].value; settings.sortOrder = $('#sortOrder')[0].value; settings.PhotoViewerPreserveLayout = isChecked('photoViewerPreserveLayout'); settings.PhotoViewerShowHiddenPlaces = isChecked('photoViewerShowHiddenPlaces'); saveSettings(); $(optDiv).css('display', 'none'); Photos_scan(); }); } function togglePhotoViewerMouseEvent(){ //if the Places category is not enabled or all of the Place options are not enabled, don't allow opening the viewer - nothing will display. if(!$("#layer-switcher-group_places").prop('checked') || (!$("#layer-switcher-item_parking_places").prop('checked') && !$("#layer-switcher-item_residential_places").prop('checked') && !$('#layer-switcher-item_venues').prop('checked'))){ $('#photoViewerButton').css('cursor', 'not-allowed'); $('#photoViewerButton').attr('title','Enable the Places layers to use this tool'); $('#photoViewerButton').off(); } else{ $('#photoViewerButton').css('cursor', 'pointer'); $('#photoViewerButton').attr('title',''); $("#photoViewerButton").unbind('click'); $('#photoViewerButton').click(show_visio); } } function hide_visio() { $("#photoViewerMainDiv").css('display', 'none'); $("#chat-overlay").css('display', 'block'); $("#launchDiv").css('display', 'inline-block'); $('#photoViewerZoom').remove(); } function show_visio() { $('.save-popover-container').css('z-index', 1011); $('.changes-log-region').css('z-index', 1012); $("#photoViewerMainDiv").css('display', 'block'); $("#chat-overlay").css('display', 'none'); $("#launchDiv").css('display', 'none'); Photos_scan(); } function dynamicSort(property) { var sortOrder = 1; if(property[0] === "-") { sortOrder = -1; property = property.substr(1); } return function (a,b) { if(sortOrder == -1){ if(property === "name") return b.attributes[property].localeCompare(a.attributes[property]); else if(property === "ImageCount") return (parseInt(b.attributes.images.length) - parseInt(a.attributes.images.length)); else return (parseInt(b.attributes[property]) - parseInt(a.attributes[property])); } else{ if(property === "name") return a.attributes[property].localeCompare(b.attributes[property]); else if(property === "ImageCount") return (parseInt(a.attributes.images.length) - parseInt(b.attributes.images.length)); else return (parseInt(a.attributes[property]) - parseInt(b.attributes[property])); } }; } function Photos_scan(){ catalog=[]; let venues = []; for (let poi in W.model.venues.objects) venues.push(W.model.venues.getObjectById(poi)); venues.sort(dynamicSort((settings.sortOrder === "sortDesc" ? "-" : "") + settings.sortBy.substr(6))); for (let i=0; i -1) matchCount++; } if(matchCount === vattr.images.length) //if all images are in the "okayed" list, skip displaying this Place continue; } } let venueDiv=document.createElement('div'); $(venueDiv).css({'float':'left','min-width':'200px','height':'220px','margin':'0 10px 10px 0','padding':'5px','border-radius':'10px','background-color':'black','color':'white', 'overflow-y':'auto'}); if (vattr.approved) { venueDiv.style.border='1px solid #26bae8'; //venueDiv.title='This POI is approved'; } else { venueDiv.style.border='1px solid #f00'; venueDiv.title='This POI is not approved'; } if (vattr.adLocked) { venueDiv.style.backgroundColor='#600'; venueDiv.title=I18n.translations[I18n.currentLocale()].objects.venue.fields.adLocked; //continue; Hide POI if it's adloacked (option) } $('#showDiv').append(venueDiv); // POI's Name let venueName =document.createElement('span'); venueName.style.float='left'; venueName.innerHTML=vattr.name;// + ` (${parseInt(vattr.lockRank) + 1})`; if(vattr.categories[0] === "RESIDENCE_HOME"){ let address = venue.getAddress(); venueName.innerHTML=`${address.attributes.houseNumber} ${address.attributes.street.name}`; } venueDiv.appendChild(venueName); if(vattr.approved){ // Whitelist button let venueCheck=document.createElement('span'); venueCheck.style.float='right'; venueCheck.style.marginRight='5px'; venueCheck.style.cursor='pointer'; venueCheck.innerHTML=''; venueCheck.addEventListener("click", function (venue, venueDiv) { return async function () { await idbPVKeyval.set(`Places`, { placeID: venue.attributes.id, placeName: venue.attributes.name, placePicturesIDs: venue.attributes.images.map(function(image){ if(image.attributes.approved) return image.id; }) }); if(!settings.PhotoViewerShowHiddenPlaces && ((matchCount > 0 && matchCount === vattr.images.length) || matchCount == 0)){ if(settings.PhotoViewerPreserveLayout) $(this).parent().css('visibility', 'hidden'); else $(this).parent().remove(); $("#placessqty").html($("#placessqty").html()-1); $("#imagesqty").html($("#imagesqty").html() - parseInt(venue.attributes.images.length)); } else if(settings.PhotoViewerShowHiddenPlaces) $(this).parent().find('.approvedImage.pvImage').css('border-color', '#fff'); //turn the border white on the images that are not in a PUR }; }(venue, venueDiv), false); venueDiv.appendChild(venueCheck); } else{ let purActions=document.createElement('span'); purActions.style.float='right'; purActions.style.marginRight='5px'; purActions.style.cursor='pointer'; let purApprove = document.createElement('i'); purApprove.className = "fa fa-check"; purApprove.title = "Approve this PUR"; purApprove.style.color = "#0f0"; purApprove.venue = venue; purApprove.addEventListener("click", function(evt){ let ven = evt.target.venue; W.model.actionManager.add(new(require("Waze/Action/UpdatePlaceUpdate"))(ven, ven.attributes.venueUpdateRequests[0], true)); $($(this).parent().parent()).css("border", "1px solid #0f0"); $($(this).parent().parent().find("img")).css("border", "1px solid #0f0"); $(this).parent().remove(); }, false); purActions.appendChild(purApprove); let purReject = document.createElement('i'); purReject.className = "fa fa-times"; purReject.title = "Reject this PUR"; purReject.style.color = "#f00"; purReject.venue = venue; purReject.addEventListener("click", function(evt){ let ven = evt.target.venue; W.model.actionManager.add(new(require("Waze/Action/UpdatePlaceUpdate"))(ven, ven.attributes.venueUpdateRequests[0], false)); $(this).parent().parent().remove(); }, false); purActions.appendChild(purReject); venueDiv.appendChild(purActions); } // Check to localize POI let venuePos=document.createElement('span'); venuePos.style.float='right'; venuePos.style.margin='0 5px'; venuePos.style.cursor='pointer'; venuePos.innerHTML=''; // title="'+ I18n.translations[I18n.currentLocale()].geolocation.focus-btn +'" venuePos.id=catalog[i]; venuePos.addEventListener("click", function (geo, id) { return function () { hide_visio(); let lon=(((geo.left+geo.right)/2)+geo.right)/2; let lat=(((geo.bottom+geo.top)/2)+geo.bottom)/2; let geoXY=new OpenLayers.LonLat(lon, lat).transform('EPSG:3857', 'EPSG:4326'); let xy = OpenLayers.Layer.SphericalMercator.forwardMercator(geoXY.lon,geoXY.lat); W.map.setCenter(xy, 5); W.selectionManager.unselectAll(); let venueList = []; venueList.push(W.model.venues.objects[id]); W.selectionManager.setSelectedModels(venueList); }; }(vattr.geometry.bounds, catalog[i]), false); venueDiv.appendChild(venuePos); let tmp=document.createElement('div'); tmp.style.clear='both';venueDiv.appendChild(tmp); let venueLock = document.createElement('div'); venueLock.innerHTML = `${I18n.translations[I18n.currentLocale()].edit.segment.fields.lock}: ${vattr.lockRank+1}`; venueDiv.appendChild(venueLock); //Show differents categories let venueCat=document.createElement('div'); for (let j=0; I18n.translations[I18n.currentLocale()].venues.categories[vattr.categories[j]]; j++) venueCat.innerHTML += `${I18n.translations[I18n.currentLocale()].venues.categories[vattr.categories[j]]}${j < vattr.categories.length-1 ? ',' : ''} `; venueCat.innerHTML+='
'; venueDiv.appendChild(venueCat); //Show differents images for (let k=0; vattr.images[k]; k++) { let imgDIV = document.createElement('div'); imgDIV.id = vattr.images[k].attributes.id; $(imgDIV).addClass('pvImage'); $(imgDIV).css({'float': 'left', 'padding-right':'3px'}); if(k > 0) $(imgDIV).css('margin-left', '5px'); let venueImg=document.createElement('img'); $(venueImg).css({'float':'left','max-width':'180px','height':'140px','margin':'5px','cursor':'pointer'}); venueImg.src='https://venue-image.waze.com/thumbs/thumb347_'+vattr.images[k].attributes.id; if (vattr.images[k].attributes.approved===true) { let picIsWhitelisted = typeof myplace !== 'undefined' && myplace.placePicturesIDs.indexOf(vattr.images[k].id) > -1; imgDIV.style.border = `1px solid ${picIsWhitelisted ? "#fff" : "#0f0"}`; $(imgDIV).addClass('approvedImage'); if(picIsWhitelisted) imgDIV.title='This image has been whitelisted'; } else { imgDIV.style.border='1px solid #f00'; imgDIV.title='This image is not approved'; } venueImg.addEventListener("click", function (imageid, venue, approved) { return function () { Photos_zoom(venue, imageid, approved); W.selectionManager.unselectAll(); //Disabling selecting the Place when viewing the expanded picture //let venueList = []; //venueList.push(W.model.venues.objects[idvenue]); //W.selectionManager.setSelectedModels(venueList); $("#venue-edit-photos").css('display', 'block'); $("#venue-edit-general").css('display', 'none'); }; }(vattr.images[k].attributes.id, venue, vattr.images[k].attributes.approved), false); if(vattr.images[k].attributes.approved){ //Add a trash can icon to delete a picture if the picture is approved on the Place (not a PUR) let deleteImg = document.createElement('i'); $(deleteImg).addClass('fa fa-trash-o'); $(deleteImg).css({'float':'right', 'cursor':'pointer', 'title':'Delete photo'}); $(deleteImg).prop({ 'data-id': vattr.id, 'data-imageID': vattr.images[k].attributes.id}); $(deleteImg).click(function(){ let imageID = $(this).prop('data-imageID'); DeleteImage(venue, imageID); }); imgDIV.appendChild(deleteImg); } else { if(vattr.approved){ let purActions=document.createElement('span'); purActions.style.float='right'; purActions.style.marginRight='5px'; purActions.style.cursor='pointer'; let purApprove = document.createElement('i'); purApprove.className = "fa fa-check"; purApprove.title = "Approve this picture"; purApprove.style.color = "#0f0"; purApprove.venue = venue; purApprove.currImage = vattr.images[k].attributes.id; purApprove.addEventListener("click", function(evt){ processPlacePUR(evt, true); $($(this).parent().parent()).css("border", "1px solid #0f0"); $(this).parent().remove(); }, false); purActions.appendChild(purApprove); var br = document.createElement('br'); purActions.appendChild(br); let purReject = document.createElement('i'); purReject.className = "fa fa-times"; purReject.title = "Reject this picture"; purReject.style.color = "#f00"; purReject.venue = venue; purReject.currImage = vattr.images[k].attributes.id; purReject.addEventListener("click", function(evt){ processPlacePUR(evt, false); $(this).parent().remove(); }, false); purActions.appendChild(purReject); imgDIV.appendChild(purActions); } } picCount++; imgDIV.appendChild(venueImg); venueDiv.appendChild(imgDIV); } c++; } $("#placessqty").html(c); $("#imagesqty").html(picCount); } function processPlacePUR(evt, approve){ let ven = evt.target.venue; let currImage = evt.target.currImage; let pur; let venURs = ven.attributes.venueUpdateRequests; for(let i=0; i= 0; i--){ if(newimages[i].id === imageID) newimages.splice(i,1); } W.model.actionManager.add(new UpdateObject(venue,{images:newimages})); if(newimages.length > 0){ if(settings.PhotoViewerPreserveLayout) $(`#${imageID}`).css('visibility', 'hidden'); else $(`#${imageID}`).remove(); $("#imagesqty").html($("#imagesqty").html()-1); } else{ if(settings.PhotoViewerPreserveLayout) $(`#${imageID}`).parent().css('visibility', 'hidden'); else $(`#${imageID}`).parent().remove(); $("#placessqty").html($("#placessqty").html()-1); $("#imagesqty").html($("#imagesqty").html()-1); } } function onScreen(obj) { if (obj.geometry) return(W.map.getExtent().intersectsBounds(obj.geometry.getBounds())); return(false); } function Photos_zoom(venue, id, approved){ let zoom = document.createElement('div'); let zoomPicIndex = null; let images = venue.attributes.images; for(let i=0;i${approved ? '' : ''}`; zoom.appendChild(imageDIV); let zoomDateDiv = document.createElement('div'); zoomDateDiv.setAttribute('id', 'zoomDate'); $(zoomDateDiv).css({'text-align':'center', 'position':'relative', 'top':'30px', 'color':'white'}); let d = new Date(images[zoomPicIndex].attributes.date); zoomDateDiv.innerHTML = `${d.toLocaleString()}`; zoom.appendChild(zoomDateDiv); if(venue.attributes.images.length > 1){ let zoomNavDiv = document.createElement('div'); $(zoomNavDiv).css({'text-align':'center', 'position':'relative', 'top':'30px'}); zoomNavDiv.innerHTML = ''; zoom.appendChild(zoomNavDiv); } zoom.onclick=(function(){ zoom.remove(); }); $('#map').append(zoom); $('#zoomDelete').click(function(){ DeleteImage(venue, id); }); $("#zoomPrev").click(function(){ if(zoomPicIndex > 0){ zoomPicIndex--; $('#zoomImage').attr('src', `https://venue-image.waze.com/thumbs/thumb700_${images[zoomPicIndex].id}`); id = images[zoomPicIndex].id; let d = new Date(images[zoomPicIndex].attributes.date); $('#zoomDate').text(d.toLocaleString()); } event.stopPropagation(); }); $("#zoomNext").click(function(){ if(zoomPicIndex < (images.length - 1)){ zoomPicIndex++; $('#zoomImage').attr('src', `https://venue-image.waze.com/thumbs/thumb700_${images[zoomPicIndex].id}`); id = images[zoomPicIndex].id; let d = new Date(images[zoomPicIndex].attributes.date); $('#zoomDate').text(d.toLocaleString()); } event.stopPropagation(); }); } function PlaceMenuShortcut(itemNum){ if(WazeWrap.hasPlaceSelected()){ //add the category to the Place let selected = WazeWrap.getSelectedFeatures()[0].model; let newCategories = [].concat(selected.attributes.categories); let catToAdd; if($(`#piePlaceMainItem${itemNum}`).length > 0) catToAdd = $(`#piePlaceMainItem${itemNum}`)[0].getAttribute("data-category"); else catToAdd = $(`#piePlaceAreaItem${itemNum}`)[0].getAttribute("data-category"); if(selected.attributes.categories.indexOf(catToAdd) === -1){ //if the category isn't already on the Place, add it newCategories.push(catToAdd); W.model.actionManager.add(new UpdateObject(selected, {categories: newCategories})); } } else{ //start new Place placement mode if($(`#piePlaceMainItem${itemNum}`).length > 0) $(`#piePlaceMainItem${itemNum}`).click(); else if($(`#piePlaceAreaItem${itemNum}`).length > 0) $(`#piePlaceAreaItem${itemNum}`).click(); } } function AddHoursParserInterface(){ if(WazeWrap.hasPlaceSelected()){ var $PIEHoursParser = $("
", {style:"min-height:20px"}); if(!$('#PIEHoursParserDiv').length){ $PIEHoursParser.html([ '
', '', '', '', '', '
' ].join(' ')); $('.opening-hours > div > .add.waze-btn').parent().append($PIEHoursParser.html()); $('#PIEAppendHours').click(function(){ addHours(false);}); $('#PIEReplaceHours').click(function(){ addHours(true);}); // Enter = Add hours, shift || ctrl + Enter = new line $("#PIE-hourspaste").keydown(function(event){ if (event.keyCode === 13) { if (event.ctrlKey) { // Simulate a newline event (shift + enter) var text = this.value; var selStart = this.selectionStart; this.value = text.substr(0, selStart) + '\n' + text.substr(this.selectionEnd, text.length-1); this.selectionStart = selStart+1; this.selectionEnd = selStart+1; return true; } else if(!(event.shiftKey||event.ctrlKey) && $('#PIE-hourspaste').val() !== '' ){ event.stopPropagation(); event.preventDefault(); event.returnValue = false; event.cancelBubble = true; addHours(false); return false; } } }); } } } function addHours(replaceAll = false) { var pasteHours = $('#PIE-hourspaste').val(); if (pasteHours.trim() === "") return; if(!I18n.translations[I18n.locale].date.day_names){ I18n.translations[I18n.locale].date.day_names = []; _.forOwn(I18n.translations[I18n.locale].date, (v,k) => { if(k.indexOf("day_names_") > -1) { I18n.translations[I18n.locale].date.day_names.push(v); } }); } var englishNames = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat']; var lngDate = I18n.translations[I18n.locale].date.day_names.map(function(value) { return value.toLowerCase(); }); var lngFullDate = I18n.translations[I18n.locale].date.abbr_day_names.map(function(value) { return value.toLowerCase(); }); for (var i = 0; i < englishNames.length; i++) { pasteHours = pasteHours.replace(lngDate[i], englishNames[i]); pasteHours = pasteHours.replace(lngFullDate[i], englishNames[i]); } if(!replaceAll) pasteHours = pasteHours + ',' + getOpeningHours(WazeWrap.getSelectedFeatures()[0].model).join(','); var parserResult = hoursparser.parseHours(pasteHours); if (parserResult.hours && parserResult.overlappingHours === false && parserResult.sameOpenAndCloseTimes === false && parserResult.parseError === false) { W.model.actionManager.add(new UpdateObject(WazeWrap.getSelectedFeatures()[0].model, { openingHours: parserResult.hours })); $('#PIEHoursParserError').empty(); } else { $('#PIE-hourspaste').css({'background-color':'#FDD'});//.attr({title:bannButt.noHours.getTitle(parserResult.hours)}); if(parserResult.overlappingHours) $('#PIEHoursParserError').text(I18n.t('pie.hoursParser.errorOverlappingHours')); else if(parserResult.sameOpenAndCloseTimes) $('#PIEHoursParserError').text(I18n.t('pie.hoursParser.errorSameOpenClose')); else $('#PIEHoursParserError').text(I18n.t('pie.hoursParser.errorCannotParse')); } } //******* Taken from WMEPH for hours parsing // Formats "hour object" into a string. function formatOpeningHour(hourEntry) { var dayNames = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday']; var hours = hourEntry.fromHour + '-' + hourEntry.toHour; return hourEntry.days.map(day => dayNames[day] + ' ' + hours).join(', '); } // Pull natural text from opening hours function getOpeningHours(venue) { return venue && venue.attributes.openingHours && venue.attributes.openingHours.map(formatOpeningHour); } function changeGeoHandleStyle(radius){ let handleStyle; let rules = W.map.getLayerByUniqueName("venues").styleMap.styles.default.rules; for(let i=0; i< rules.length; i++){ if(rules[i].id === "Waze_Rule_14"){ handleStyle = rules[i]; break; } } if(handleStyle){ handleStyle.symbolizer.pointRadius = radius; W.map.getLayerByUniqueName("venues").redraw(); } } function enlargeVirtualVerticies(){ if(WazeWrap.hasPlaceSelected()){ setTimeout(function(){ if(settings.EnlargeGeoHandles){ W.map.controls.find(function(c){ return c.displayClass === "olControlModifyFeature";}).virtualStyle.pointRadius = 6; } else{ W.map.controls.find(function(c){ return c.displayClass === "olControlModifyFeature";}).virtualStyle.pointRadius = 4; } W.map.controls.find(function(c){ return c.displayClass === "olControlModifyFeature";}).resetVertices(); unregisterEvents(enlargeVirtualVerticies); }, 50); } } //*******/ function UpdatePlaceFilter(){ let index = W.map.venueLayer.styleMap.styles.default.rules.findIndex(function(e){ return e.name == "PIEPlaceFilter";}); if(index > -1) { W.map.venueLayer.styleMap.styles.default.rules.splice(index, 1); W.map.venueLayer.redraw(); } if($('#piePlaceFilter').val().trim() != "") { let myRule = new W.Rule({ filter: new OpenLayers.Filter.Comparison({ type: '==', evaluate: function(venue) { if($("#_rbHidePlaces").prop("checked")) return (new RegExp($('#piePlaceFilter').val(), "ig").exec(venue.model.attributes.name)); else return !(new RegExp($('#piePlaceFilter').val(), "ig").exec(venue.model.attributes.name)); } }), symbolizer: { display: 'none' }, name: "PIEPlaceFilter" }); W.map.venueLayer.styleMap.styles['default'].rules.push(myRule); W.map.venueLayer.redraw(); } DisplayPlaceNames(); } function ToggleHideAreaPlaces(){ let index = W.map.venueLayer.styleMap.styles.default.rules.findIndex(function(e){ return e.name == "PIEHide";}); if(index === -1) { let myRule = new W.Rule({ filter: new OpenLayers.Filter.Comparison({ type: '==', evaluate: function(venue) { return (venue.geometry != null ? /POLYGON/i.test(venue.geometry.id) : false); } }), symbolizer: { display: 'none' }, name: "PIEHide" }); W.map.venueLayer.styleMap.styles['default'].rules.push(myRule); W.map.venueLayer.redraw(); } else{ W.map.venueLayer.styleMap.styles.default.rules.splice(index, 1); W.map.venueLayer.redraw(); } DisplayPlaceNames(); //refresh the name display } var highlightedVenue, highlighting; function drawNavPointClosestSegmentLines(){ try{ highlighting = false; if(highlightedVenue !== null) if(highlightedVenue === W.map.venueLayer.getFeatureBy("renderIntent","highlight")) highlighting = true; else showStopPointsLayer.removeAllFeatures(); highlightedVenue = W.map.venueLayer.getFeatureBy("renderIntent","highlight"); if(highlightedVenue !== null && highlightedVenue.model && highlighting === false && W.map.getZoom() >= 16){ let isArea = !highlightedVenue.model.isPoint(); let navPoint; if(highlightedVenue.model.getNavigationPoints().length > 0) navPoint = highlightedVenue.model.getNavigationPoints()[0]._point; else{ if(isArea) navPoint = highlightedVenue.model.geometry.getCentroid(); else navPoint = highlightedVenue.model.geometry.clone(); } //nav point to closest segment let closestSeg = WazeWrap.Geometry.findClosestSegment(navPoint,false, false); let lineFeature = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.LineString([navPoint, closestSeg.closestPoint]), {}, lineStyleToClosestSeg); let pointFeature = new OpenLayers.Feature.Vector(closestSeg.closestPoint, {}, pointStyle); showStopPointsLayer.addFeatures([lineFeature, pointFeature]); //place center to nav point let startPt = highlightedVenue.geometry; if(isArea) startPt = highlightedVenue.model.geometry.getCentroid(); lineFeature = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.LineString([startPt, navPoint]), {}, lineStyleToNavPoint); pointFeature = new OpenLayers.Feature.Vector(navPoint, {}, pointStyleNavPoint); if(highlightedVenue.model.attributes.entryExitPoints.length > 0 || isArea) showStopPointsLayer.addFeatures([lineFeature, pointFeature]); } if(highlightedVenue === null || W.map.getZoom() < 16) showStopPointsLayer.removeAllFeatures(); } catch(err){ console.error(err.message); } } function ObjectsChanged(){ if(W.map.getLayerByUniqueName('venues').selectedFeatures.length >0) getActiveEditor().then(val => { if(placeIsPoint && val.vertices.length > 0){ removeDragCallbacks(); checkSelection(); } }); } function handleNavPointOffScreen() { if (selectedItem !== WazeWrap.getSelectedFeatures().first() || WazeWrap.Geometry.isGeometryInMapExtent(new OpenLayers.Geometry.Point(ClosestSegmentNavPoint.lonlat.lon, ClosestSegmentNavPoint.lonlat.lat))) { W.map.events.unregister('moveend', window, handleNavPointOffScreen); checkSelection(); } } function clearClosesetSegmentLayerFeatures() { return closestSegmentLayer.features.length > 0 && closestSegmentLayer.removeAllFeatures(); } function checkConditions() { var a = W.map.getZoom() > 15, b = W.map.venueLayer.getVisibility(), c = closestSegmentLayer.getVisibility(), d = !$('#map-lightbox > div').is(':visible'),//$('#map-lightbox > div').length === 0,/* Check for HN editing */ e = (WazeWrap.hasSelectedFeatures() && WazeWrap.getSelectedFeatures()[0].model.type !== "bigJunction"); if (a && b && c && d && e) return true; else return false; } function drawLine(start, end, lStyle, pStyle) { var lineFeature, pointFeature; lineFeature = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.LineString([start, end]), {}, lStyle); pointFeature = new OpenLayers.Feature.Vector(end, {}, pStyle); closestSegmentLayer.addFeatures([lineFeature, pointFeature]); } function findNearestSegment(navPoint) { var closestSegment = {}; if(navPoint.element) navPoint = new OpenLayers.Geometry.Point(W.geometryEditing.activeEditor._navigationPointMarker.lonlat.lon, W.geometryEditing.activeEditor._navigationPointMarker.lonlat.lat); closestSegment = WazeWrap.Geometry.findClosestSegment(navPoint,false, false); clearClosesetSegmentLayerFeatures(); drawLine(navPoint, closestSegment.closestPoint, lineStyleToClosestSeg, pointStyle); } var placeIsPoint = false; function checkSelection() { var ClosestSegmentNavPoint; if (!checkConditions()) removeDragCallbacks(); else { getActiveEditor().then(val => { if (WazeWrap.hasSelectedFeatures()) { let selectedItem = WazeWrap.getSelectedFeatures()[0]; if ('venue' !== selectedItem.model.type) { removeDragCallbacks(); clearClosesetSegmentLayerFeatures(); } else { placeIsPoint = selectedItem.model.isPoint(); if (placeIsPoint) { //Event when the Place is moved /* val.dragControl.onDrag = function (e, t) { val.dragVertex.apply(val, [e, t]); let entryExitPoint = selectedItem.model.geometry.clone(); if(selectedItem.model.getNavigationPoints().length > 0) entryExitPoint = selectedItem.model.attributes.entryExitPoints[0]._point; findNearestSegment(entryExitPoint); };*/ let entryExitPoint = selectedItem.model.geometry.clone(); if(selectedItem.model.getNavigationPoints().length > 0) entryExitPoint = selectedItem.model.attributes.entryExitPoints[0]._point; findNearestSegment(entryExitPoint); } else { if(selectedItem.model.getNavigationPoints().length === 0) findNearestSegment(selectedItem.model.geometry.getCentroid()); else{ for(let i=0;i
' + $('#pieItem' + (i+1))[0].options[$('#pieItem' + (i+1))[0].selectedIndex].innerHTML + '
'); else{ //$(placeMenuSelector).append('
' + $('#pieItem' + (i+1))[0].options[$('#pieItem' + (i+1))[0].selectedIndex].innerHTML + '
'); else{ if(cat === resCategory) //force point //$(placeMenuSelector).append('
' + $('#pieItem' + (i+1))[0].options[$('#pieItem' + (i+1))[0].selectedIndex].innerHTML + '
'); $(placeMenuSelector).append('
' + $('#pieItem' + (i+1))[0].options[$('#pieItem' + (i+1))[0].selectedIndex].innerHTML + '
'); else //Parking lot & gas station - force area $(placeMenuSelector).append('
' + $('#pieItem' + (i+1))[0].options[$('#pieItem' + (i+1))[0].selectedIndex].innerHTML + '
'); //$(placeMenuSelector).append('
' + $('#pieItem' + (i+1))[0].options[$('#pieItem' + (i+1))[0].selectedIndex].innerHTML + '
'); } } $('[id^="piePlaceMainItem"]').click(function(e){ $('.toolbar-group-venues').removeClass('open'); startPlacementMode($('#' + this.id).data("category"), true); }); $('[id^="piePlaceAreaItem"]').click(function(e){ e.stopPropagation(); $('.toolbar-group-venues').removeClass('open'); startPlacementMode($('#' + this.id).data("category"), false); }); } function initColorPicker(tries){ tries = tries || 1; if ($('#colorPickerFont')[0].jscolor ) { $('#colorPickerFont')[0].jscolor.fromString(settings.PlaceNameFontColor); $('[id^="colorPicker"]')[0].jscolor.closeText = 'Close'; $('#colorPickerFont')[0].jscolor.onChange = jscolorChanged; $('#colorPickerFontOutline')[0].jscolor.fromString(settings.PlaceNameFontOutline); $('#colorPickerFontOutline')[0].jscolor.onChange = jscolorChanged; } else if (tries < 1000) setTimeout(function () {initColorPicker(tries++);}, 200); } function jscolorChanged(){ settings.PlaceNameFontColor = "#" + $('#colorPickerFont')[0].jscolor.toString(); settings.PlaceNameFontOutline = "#" + $('#colorPickerFontOutline')[0].jscolor.toString(); saveSettings(); PIEPlaceNameLayer.styleMap.styles.default.defaultStyle.fontColor = settings.PlaceNameFontColor; PIEPlaceNameLayer.styleMap.styles.default.defaultStyle.labelOutlineColor = settings.PlaceNameFontOutline; DisplayPlaceNames(); } function registerEvents(handler){ WazeWrap.Events.register("selectionchanged", null, handler); //W.selectionManager.events.register("selectionchanged", null, handler); WazeWrap.Events.register("afterundoaction",null, handler); WazeWrap.Events.register("afterclearactions",null, handler); WazeWrap.Events.register("afteraction",null, handler); } function unregisterEvents(handler){ WazeWrap.Events.unregister("selectionchanged", null, handler); //W.selectionManager.events.unregister("selectionchanged", null, handler); WazeWrap.Events.unregister("afterundoaction",null, handler); WazeWrap.Events.unregister("afterclearactions",null, handler); WazeWrap.Events.unregister("afteraction",null, handler); } function ToggleExternalProvidersCSS(truthiness){ if(truthiness) injectCSSWithID('pieExternalProvidersTweaks', '#edit-panel .external-providers-view .select2-container {width:90%; margin-bottom:2px;}'); else{ var styles = document.getElementById('pieExternalProvidersTweaks'); if(styles) styles.parentNode.removeChild(styles); } } function DisplayPlaceNames(){ PIEPlaceNameLayer.removeAllFeatures(); var showPoint, showArea, showLock, showNames, showPLA, hideNames; showNames = isChecked('_cbShowPlaceNames'); showPoint = isChecked('_cbShowPlaceNamesPoint'); showArea = isChecked('_cbShowPlaceNamesArea'); showLock = isChecked('_cbShowPlaceNamesLock'); showPLA = isChecked('_cbShowPlaceNamesPLA'); hideNames = isChecked('_cbhidePlaceNamesWhenPlacesHidden'); if(showNames){ var isPoint; for (var placeID in W.model.venues.objects) { var venue = W.model.venues.getObjectById(placeID); isPoint = venue.isPoint(); if((isPoint && W.map.getZoom() >= 17) || (!isPoint && W.map.getZoom() >= 15)){ if(WazeWrap.Geometry.isGeometryInMapExtent(venue.geometry)){ if( (isPoint && showPoint) || (!isPoint && showArea && !venue.isParkingLot()) || (!isPoint && showPLA && venue.isParkingLot())){ let placeFilter = $('#piePlaceFilter').val(); if(placeFilter.length > 0){ let nameMatch = RegExp($('#piePlaceFilter').val(), "ig").exec(venue.attributes.name); if(nameMatch && $("#_rbHidePlaces").prop("checked")) continue; else if(!nameMatch && !$("#_rbHidePlaces").prop("checked")) //no name match and show only continue; } let textLoc; if(isPoint) textLoc = new OpenLayers.Geometry.Point(venue.geometry.x, venue.geometry.y); else textLoc = venue.geometry.getCentroid(); let placeName =WordWrap(venue.attributes.name.trim() + (showLock ? ' (L' + (venue.attributes.lockRank + 1) + ')' : '')); if(venue.attributes.categories[0] === "RESIDENCE_HOME") placeName = venue.attributes.houseNumber + (venue.attributes.name.trim() !== '' ? ' - ' + venue.attributes.name : '') + (showLock ? ' (L' + (venue.attributes.lockRank + 1) + ')' : ''); let placeNameLabel = new OpenLayers.Feature.Vector(textLoc,{display: 'block',labelText: placeName.trim(), yOffset:(isPoint ? -13 - placeName.split("\n").length * 5 : 0)}); PIEPlaceNameLayer.addFeatures([placeNameLabel]); } } } } } } function WordWrap(text){ var newName = ""; if(text !== ""){ var splitName = text.match(/(.{1,35})(?:\s|$)/g); for(var i=0;i', {style:"min-height:20px"}); $PIECreatePLA.html([ '
Create Suggested PLA
', ].join(' ')); setTimeout(function(){$('#panel-container > div > div > div.actions > div > div > form').append($PIECreatePLA); $('#PIECreatePLAButton').click(function(){createPLAFromMP(markerID);});}, 150); } } } //Shamelessly copied from URO+ function GetMarkerType(className){ var markerType = null; if(className.indexOf('user-generated') !== -1) markerType = 'ur'; else if(className.indexOf('map-problem') !== -1) markerType = 'mp'; else if(className.indexOf('place-update') !== -1) markerType = 'pur'; return markerType; } function createPLAFromMP(MPID){ var pos = W.model.problemDetails.objects[MPID].venueGeom; var PlaceObject = require("Waze/Feature/Vector/Landmark"); var AddPlace = require("Waze/Action/AddLandmark"); var NewPlace = new PlaceObject(); var points = []; var i; for(i=0;i 0 && WazeWrap.getSelectedFeatures()[0].model.type === "venue"){ if(_.includes(WazeWrap.getSelectedFeatures()[0].model.attributes.categories,"HOSPITAL_MEDICAL_CARE")){ $('.select2-choices').css('animation-iteration-count', 'infinite'); $('.select2-choices').attr('title', 'The "Hospital / Medical Care" category is no longer valid.\n\nPlease change it to "Hospital / Urgent Care" or "Doctor / Clinic", whichever is most appropriate'); $('.select2-choices').tooltip(); } } } var newPlaceCategory = ""; function startPlacementMode(category, isPoint){ if(W.editingMediator.attributes.editingHouseNumbers) //don't allow creating Places in HN edit mode return; if(category === "PARKING_LOT"){ if(!$("#layer-switcher-item_parking_places").prop('checked')){ if(!$("#layer-switcher-group_places").prop('checked')) $("#layer-switcher-group_places").click(); $("#layer-switcher-item_parking_places").click(); } } else if(category === resCategory) { if(!$("#layer-switcher-item_residential_places").prop('checked')){ if(!$("#layer-switcher-group_places").prop('checked')) $("#layer-switcher-group_places").click(); $("#layer-switcher-item_residential_places").click(); } } $('#edit-buttons > div > div.toolbar-button.waze-icon-place.toolbar-submenu.toolbar-group.toolbar-group-venues.ItemInactive').removeClass("open"); newPlaceCategory = category; var polyDrawFeatureOptions = {callbacks : {"done": doneHandler}}; if(isPoint){ $(".olMapViewport").on('mousemove', MouseMoveHandler); $(".olMapViewport").click(function(){endPlacementMode(category, isPoint);}); /*drawPoly = new OpenLayers.Control.DrawFeature(newPlaceLayer, OpenLayers.Handler.Polygon, polyDrawFeatureOptions); W.map.addControl(drawPoly); drawPoly.activate();*/ } else{ if(drawPoly != null && drawPoly.events != null) drawPoly.deactivate(); drawPoly = new OpenLayers.Control.DrawFeature(newPlaceLayer, OpenLayers.Handler.Polygon, polyDrawFeatureOptions); W.map.addControl(drawPoly); drawPoly.activate(); } document.addEventListener('keyup', keyUpHandler, false); } var businessPLAPlaceName, businessPLAPlaceAddress;//, businessPLAPlacePhone, businessPLAPlaceURL; function startBusinessPLAPlacementMode(){ var polyDrawFeatureOptions = {callbacks : {"done": doneHandlerBusinessPLAPlace}}; drawPoly = new OpenLayers.Control.DrawFeature(newPlaceLayer, OpenLayers.Handler.Polygon, polyDrawFeatureOptions); W.map.addControl(drawPoly); drawPoly.activate(); document.addEventListener('keyup', keyUpHandler, false); } function doneHandlerBusinessPLAPlace(geom){ drawPoly.destroy(); BusinessPLAMode = false; CreateBusinesPLAPlace(geom, businessPLAPlaceName, businessPLAPlaceAddress);//, businessPLAPlacePhone, businessPLAPlaceURL); } function CreateBusinesPLAPlace(geom, name, address){//, phone, url){ drawPoly.destroy(); var PlaceObject = require("Waze/Feature/Vector/Landmark"); var AddPlace = require("Waze/Action/AddLandmark"); var multiaction = new MultiAction(); multiaction.setModel(W.model); var NewPlace = new PlaceObject(); var points = []; var i; for(i=0;i 0){ //segment has alt names for(var j=0;j 0) { $('.full-address').trigger("click"); $('.house-number:first').focus(); } else if (rppTries < 1000) { console.log("not found"); setTimeout(function () {editRPPAddress(++rppTries);}, 200); } } function buildItemOption(itemNumber){ var $section = $("
", {style:"padding:8px 16px", id:"piePlaceCat" + itemNumber}); $section.html([ I18n.t('pie.prefs.Item') + " ", itemNumber, buildItemList(itemNumber), '
' ].join(' ')); return $section.html(); } function buildLockLevelsList(){ var $lockLevels = $("
"); for(var i=0;i" + (i+1) + ""); return $lockLevels.html(); } //implementd natively as of 2019-01-22 /*function attachRPPLockButtonHandlers(){ $('#pieRPPLockButtonsContainer').remove(); W.selectionManager.events.register("selectionchanged", null, addLockButtons); W.model.actionManager.events.register("afterundoaction",null, addLockButtons); W.model.actionManager.events.register("afterclearactions",null, addLockButtons); W.model.actionManager.events.register("afteraction",null, addLockButtons); }*/ function attachPlaceSizeHandlers(){ WazeWrap.Events.register("selectionchanged", null, updatePlaceSizeDisplay); WazeWrap.Events.register("afteraction",null, updatePlaceSizeDisplay); WazeWrap.Events.register("afterundoaction",null, updatePlaceSizeDisplay); WazeWrap.Events.register("afterclearactions",null, updatePlaceSizeDisplay); W.model.actionManager.events.register("noActions",null, noActions); updatePlaceSizeDisplay(); } function removePlaceSizeHandlers(){ WazeWrap.Events.unregister("selectionchanged", null, updatePlaceSizeDisplay); WazeWrap.Events.unregister("afteraction",null, updatePlaceSizeDisplay); WazeWrap.Events.unregister("afterundoaction",null, updatePlaceSizeDisplay); WazeWrap.Events.unregisterWazeWrap.Events.unregister("afterclearactions",null, updatePlaceSizeDisplay); W.model.actionManager.events.unregister("noActions",null, noActions); } function openPUR(){ if(WazeWrap.hasPlaceSelected() && $('.pending-changes-alert').length > 0){ if(WazeWrap.getSelectedFeatures()[0].model.attributes.venueUpdateRequests.length > 0 && (typeof WazeWrap.getSelectedFeatures()[0].model.state === 'undefined' || WazeWrap.getSelectedFeatures()[0].model.state === null)) W.commands.execute("place_updates:list", WazeWrap.getSelectedFeatures()[0].model); // W.model.venues.get(WazeWrap.getSelectedFeatures()[0].model.attributes.id) } } function _hidePaymentType(){ if(WazeWrap.hasSelectedFeatures() && _.includes(WazeWrap.getSelectedFeatures()[0].model.attributes.categories, "PARKING_LOT")){ let attr = WazeWrap.getSelectedFeatures()[0].model.attributes; if(attr.categoryAttributes.PARKING_LOT.costType && attr.categoryAttributes.PARKING_LOT.costType === "FREE"){ if(!$('#venue-edit-more-info > div > form > fieldset > div:nth-child(3) > div:nth-child(2)').hasClass("collapse")) $('#venue-edit-more-info > div > form > fieldset > div:nth-child(3) > div:nth-child(2)').addClass("collapse"); } else{ if($('#venue-edit-more-info > div > form > fieldset > div:nth-child(3) > div:nth-child(2)').hasClass("collapse")) $('#venue-edit-more-info > div > form > fieldset > div:nth-child(3) > div:nth-child(2)').removeClass("collapse"); } } } function HidePaymentTypePlaceSelected(){ if(WazeWrap.hasSelectedFeatures() && WazeWrap.getSelectedFeatures()[0].model.type === "venue") _hidePaymentType(); } function OrthogonalizePlace(){ if(WazeWrap.hasPlaceSelected() && WazeWrap.getSelectedFeatures()[0].model.geometry.toString().match(/^POLYGON/)){ let selected = WazeWrap.getSelectedFeatures()[0].model; var newGeom = WazeWrap.Util.OrthogonalizeGeometry(selected.geometry.clone().components[0].components); var UFG = require("Waze/Action/UpdateFeatureGeometry"); var originalGeometry = selected.geometry.clone(); if(!GeomArraysEqual(originalGeometry.components[0].components, newGeom)){ selected.geometry.components[0].components = [].concat(newGeom); selected.geometry.components[0].clearBounds(); var action = new UFG(selected, W.model.venues, originalGeometry, selected.geometry); W.model.actionManager.add(action); } } } function GeomArraysEqual(geom1, geom2){ if(geom1.length != geom2.length) return false; for(let i=0; i Math.abs(deltaLimit)) return true; return false; } function round(val, decimals){ let multiplier = 1; for(let i=0; i", {style:"padding:8px 16px"}); $section.html([ '
', //Main div '
', '
', '

Standard (lat, lon)

', '
', !WazeWrap.hasMapCommentSelected() ? '' : '', '
', '

Waze (lon lat)

', '
', !WazeWrap.hasMapCommentSelected() ? '' : '', '
', '

WKT

', '
', !WazeWrap.hasMapCommentSelected() ? '' : '', '
', '
', //end content div '
' //end main div ].join(' ')); $("#WazeMap").append($section.html()); updateGeometryInputs(); $('#pieBtnApplyStandardGeom').click(function(){ let lines = $('#piePlaceGeomStandard').val().split('\n'); for(var i = 0;i < lines.length;i++){ if(! /^(-?\d*(?:\.\d*)?),\s?(-?\d*(?:\.\d*))$/.test(lines[i])){ WazeWrap.Alerts.error(GM_info.script.name, "Incorrectly formatted coordinates"); return; } let coords = lines[i].match(/^(-?\d*(?:\.\d*)?),\s?(-?\d*(?:\.\d*))$/); let pt = WazeWrap.Geometry.ConvertTo900913(coords[2], coords[1]); lines[i] = new OpenLayers.Geometry.Point(pt.lon, pt.lat); } saveNewPlaceGeometry(lines); updateGeometryInputs(); }); $('#pieBtnApplyWazeGeom').click(function(){ let lines = $('#piePlaceGeomWaze').val().split('\n'); for(var i = 0;i < lines.length;i++){ if(lines[i].length > 0){ lines[i] = lines[i].replace(/\t/, " "); if(! /^(-?\d*(?:\.\d*)?)\s+(-?\d*(?:\.\d*))$/.test(lines[i])){ WazeWrap.Alerts.error(GM_info.script.name, "Incorrectly formatted coordinates"); return; } let coords = lines[i].match(/^(-?\d*(?:\.\d*)?)\s+(-?\d*(?:\.\d*))$/); let pt = WazeWrap.Geometry.ConvertTo900913(coords[1], coords[2]); lines[i] = new OpenLayers.Geometry.Point(pt.lon, pt.lat); } } saveNewPlaceGeometry(lines); updateGeometryInputs(); }); $('#pieBtnApplyWKTGeom').click(function(){ let lines = $('#piePlaceGeomWKT').val().match(/POLYGON\(\((.*)\)\)/)[1].split(','); for(var i = 0;i < lines.length;i++){ if(! /^(-?\d*(?:\.\d*)?)\s(-?\d*(?:\.\d*))$/.test(lines[i].trim())){ WazeWrap.Alerts.error(GM_info.script.name, "Incorrectly formatted coordinates"); return; } let coords = lines[i].trim().match(/^(-?\d*(?:\.\d*)?)\s(-?\d*(?:\.\d*))$/); let pt = WazeWrap.Geometry.ConvertTo900913(coords[1], coords[2]); lines[i] = new OpenLayers.Geometry.Point(pt.lon, pt.lat); } saveNewPlaceGeometry(lines); updateGeometryInputs(); }); $('#pieGeomClose').click(function(){ $('#pieViewEditGeom').remove(); }); } function saveNewPlaceGeometry(newGeom){ let selected = WazeWrap.getSelectedFeatures()[0].model; let originalGeometry = selected.geometry.clone(); let ls = new OpenLayers.Geometry.LineString(newGeom); let newGeometry = new OpenLayers.Geometry.Polygon(new OpenLayers.Geometry.LinearRing(ls.components)); let UFG = require("Waze/Action/UpdateFeatureGeometry"); W.model.actionManager.add(new UFG(selected, W.model.venues, originalGeometry, newGeometry)); } function updateGeometryInputs(){ let currPlace = W.selectionManager.getSelectedFeatures()[0]; let currPlaceGeom = currPlace.model.geometry.components[0].clone().components; let standardGeom = "", WMEGeom = "", WKTGeom = ""; WKTGeom = "POLYGON("; let coord; for(let i=0; i 0){ WKTGeom += ", "; if(i < currPlaceGeom.length - 1){ standardGeom += "\n"; WMEGeom += "\n"; } } coord = currPlaceGeom[i]; if(i < currPlaceGeom.length-1){ //coord = coord.transform(W.map.getProjectionObject(), W.map.getOLMap().displayProjection); coord = coord.transform(W.map.getProjectionObject(), W.Config.map.projection.remote); standardGeom += `${coord.y}, ${coord.x}`; WMEGeom += `${coord.x} ${coord.y}`; } WKTGeom += `${coord.x} ${coord.y}`; } WKTGeom += ")"; $('#piePlaceGeomWKT').val(WKTGeom); $('#piePlaceGeomStandard').val(standardGeom); $('#piePlaceGeomWaze').val(WMEGeom); } function InsertGeometryMods(){ $('#pieGeometryMods').remove(); $('#pieViewEditGeom').remove(); //remove the Place geometry window when the option is disabled or a Place is de-selected if((WazeWrap.hasPlaceSelected() || WazeWrap.hasMapCommentSelected()) && WazeWrap.getSelectedFeatures()[0].model.geometry.toString().match(/^POLYGON/)){ let $GeomMods = $(`
${!WazeWrap.hasMapCommentSelected() ? ' ' : ''}
`); if(W.selectionManager.getSelectedFeatures()[0].model.type === "mapComment") $('#edit-panel > div > div > div.tab-content form.attributes-form').before($GeomMods); else $('#venue-edit-general > div.form-group:nth-child(1)').before($GeomMods); $('#pieorthogonalize').click(function(){ OrthogonalizePlace(); }); $('#piesimplifyplace').click(function(){ SimplifyPlace(); }); $('#pieEditGeom').click(function(){ ViewEditPlaceGeom(); }); $('#pieClearGeom').click(function(){ let selected = WazeWrap.getSelectedFeatures()[0].model; let centerLonLat = selected.geometry.bounds.getCenterLonLat(); let newGeom = OpenLayers.Geometry.Polygon.createRegularPolygon(new OpenLayers.Geometry.Point(centerLonLat.lon, centerLonLat.lat), 20, 4, null).components[0].components; let UFG = require("Waze/Action/UpdateFeatureGeometry"); let originalGeometry = selected.geometry.clone(); selected.geometry.components[0].components = [].concat(newGeom); selected.geometry.components[0].clearBounds(); let action = new UFG(selected, W.model.venues, originalGeometry, selected.geometry); W.model.actionManager.add(action); }); $('#pierotate').click(function(){ settings.Rotate = !settings.Rotate; $('#pierotate').css('color', settings.Rotate ? 'rgb(0,180,0)': 'black'); saveSettings(); getActiveEditor().then(val => { if((val.mode & OpenLayers.Control.ModifyFeature.ROTATE) == 0) val.mode |= OpenLayers.Control.ModifyFeature.ROTATE; else val.mode &= ~OpenLayers.Control.ModifyFeature.ROTATE; val.resetVertices(); }); }); $('#pieresize').click(function(){ settings.Resize = !settings.Resize; $('#pieresize').css('color', settings.Resize ? 'rgb(0,180,0)': 'black'); saveSettings(); getActiveEditor().then(val => { if((val.mode & OpenLayers.Control.ModifyFeature.RESIZE) == 0) val.mode |= OpenLayers.Control.ModifyFeature.RESIZE; else val.mode &= ~OpenLayers.Control.ModifyFeature.RESIZE; val.resetVertices(); }); }); //activate the changes when a Place is selected if(settings.Rotate){ getActiveEditor().then(val => { if((val.mode & OpenLayers.Control.ModifyFeature.ROTATE) == 0) val.mode |= OpenLayers.Control.ModifyFeature.ROTATE; val.resetVertices(); }); } if(settings.Resize){ getActiveEditor().then(val => { if((val.mode & OpenLayers.Control.ModifyFeature.RESIZE) == 0) val.mode |= OpenLayers.Control.ModifyFeature.RESIZE; val.resetVertices(); }); } } else if(!WazeWrap.hasSelectedFeatures() && W.geometryEditing.activeEditor && lastSelectedFeature == "venue"){ if(W.geometryEditing.activeEditor.radiusHandle) W.geometryEditing.activeEditor.radiusHandle.destroy(); } } function ShowPlaceLocatorCrosshair(){ $('#pieCrosshairs').remove(); if(WazeWrap.getSelectedFeatures().length > 0){ if(WazeWrap.getSelectedFeatures()[0].model.type === "venue"){ var $crosshairs; if(_.includes(WazeWrap.getSelectedFeatures()[0].model.attributes.categories,"RESIDENCE_HOME")){ $('.venue > .tab-content').css('position', 'relative'); $crosshairs = $('
'); //$('.address-edit.side-panel-section').before($crosshairs); $('.venue > .tab-content').append($crosshairs); } else{ $crosshairs = $('
'); $('#venue-edit-general wz-text-input[name="name"]').after($crosshairs); } $('#pieCrosshairs').click(function(){ CenterOnPlace(WazeWrap.getSelectedFeatures()[0].model, settings.PlaceZoom); }); $('#pieCrosshairs').mouseenter(function(e) { //var changedThisPl = getKMLPermalink(wazePL.getAttribute('href')); window.addEventListener('keydown', copyPLHotkeyEvent, false); }); $('#pieCrosshairs').mouseleave('mouseleave', function() { window.removeEventListener('keydown', copyPLHotkeyEvent); }); } } } var copyPLHotkeyEvent = function(e) { if ((e.metaKey || e.ctrlKey) && (e.which === 67)) copyToClipboard(getPermalink(wazePL.getAttribute('href'))); }; var BusinessPLAMode = false; function ShowParkingLotButton(){ $('#piePLAButton').remove(); if(WazeWrap.getSelectedFeatures().length > 0){ if(WazeWrap.getSelectedFeatures()[0].model.type === "venue"){ var $PLAButton; if(!(_.includes(WazeWrap.getSelectedFeatures()[0].model.attributes.categories,"RESIDENCE_HOME") || _.includes(WazeWrap.getSelectedFeatures()[0].model.attributes.categories,"PARKING_LOT"))){ $PLAButton = $('
'); $('#venue-edit-general wz-text-input[name="name"]').after($PLAButton); $('#piePLAButton').click(function(){ if(!BusinessPLAMode){ BusinessPLAMode = true; businessPLAPlaceName = WazeWrap.getSelectedFeatures()[0].model.attributes.name; businessPLAPlaceAddress = WazeWrap.getSelectedFeatures()[0].model.getAddress().attributes; //businessPLAPlacePhone = WazeWrap.getSelectedFeatures()[0].model.attributes.phone; //businessPLAPlaceURL = WazeWrap.getSelectedFeatures()[0].model.attributes.url; startBusinessPLAPlacementMode(); if(!$("#layer-switcher-item_parking_places").prop('checked')){ if(!$("#layer-switcher-group_places").prop('checked')) $("#layer-switcher-group_places").click(); $("#layer-switcher-item_parking_places").click(); } } }); } } } } var extProviderTries = 0; function ShowExternalProviderTooltip(){ if(isChecked('_cbShowExternalProviderTooltip')) if(WazeWrap.getSelectedFeatures().length > 0 && WazeWrap.getSelectedFeatures()[0].model.type === "venue"){ if($('.select2-container.uuid').length > 0) for(var i=0; i < $('.select2-container.uuid').find('span.select2-chosen').length; i++){ extProviderTries = 0; ReadExtProviderText(i, extProviderTries); } } } var calibratingAngledWidth = false; function ShowPLSpotEstimatorButton(){ $('.PIEParkingSpotEstimatorButton').remove(); if(WazeWrap.getSelectedFeatures().length > 0){ if(WazeWrap.getSelectedFeatures()[0].model.type === "venue" && WazeWrap.getSelectedFeatures()[0].model.attributes.categories.includes("PARKING_LOT")){ var $ParkingSpotEstimatorButton; $ParkingSpotEstimatorButton = $('
#
'); $('#venue-edit-general wz-text-input[name="name"]').after($ParkingSpotEstimatorButton); $('select[name="estimatedNumberOfSpots"]').before($ParkingSpotEstimatorButton.clone()); $('.PIEParkingSpotEstimatorButton').click(ShowPLSpotEstimator); totalSpots = 0; } } else $('#PIEParkingSpotEstimator').remove();//if they de-select the Place, remove the tool from the screen } function startPLSpotEstimatorDrawMode(){ let polyDrawFeatureOptions = {callbacks : {"done": PLSpotEstimatordoneHandler, "point": pointHandler}}; PLSpotEstimatorLayer.setZIndex(1000); PLSpotEstimatordrawControl = new OpenLayers.Control.DrawFeature(PLSpotEstimatorLayer, OpenLayers.Handler.Path, polyDrawFeatureOptions); W.map.addControl(PLSpotEstimatordrawControl); PLSpotEstimatordrawControl.activate(); $('div#WazeMap.view-area.olMap').keydown(PLSpotEstimatorkeyUpHandler); } function startPLSpotEstimatorCalibrationMode(){ let polyDrawFeatureOptions = {callbacks : {"done": PLSpotEstimatorCalibrationdoneHandler, "point": pointHandler}}; W.map.addLayer(PLSpotEstimatorCalibrationLayer); PLSpotEstimatorCalibrationLayer.setZIndex(1005); PLSpotEstimatorCalibrationdrawControl = new OpenLayers.Control.DrawFeature(PLSpotEstimatorCalibrationLayer, OpenLayers.Handler.Path, polyDrawFeatureOptions); W.map.addControl(PLSpotEstimatorCalibrationdrawControl); PLSpotEstimatorCalibrationdrawControl.activate(); $('div#WazeMap.view-area.olMap').keydown(PLSpotEstimatorCalibrationkeyUpHandler); } function pointHandler() { isDrawing = true; } function PLSpotEstimatorkeyUpHandler(e){ if (e.keyCode == 27){ if (isDrawing) { PLSpotEstimatordrawControl.cancel(); isDrawing = false; } else { disablePLSpotEstimatorDrawMode(); if(PLSpotEstimatordrawControl !== "undefined") PLSpotEstimatordrawControl.destroy(); $('#PIE90DegreeSpotWidthDraw').removeClass("PSESelected"); $('#PIEAngledSpotWidthDraw').removeClass("PSESelected"); } e.stopPropagation(); } else if(e.keyCode == 90 && e.ctrlKey) //ctrl+z PLSpotEstimatordrawControl.undo(); else if(e.keyCode == 89 && e.ctrlKey) //ctrl+y PLSpotEstimatordrawControl.redo(); else if(e.keyCode == 13) //enter PLSpotEstimatordrawControl.finishSketch(); } function PLSpotEstimatorCalibrationkeyUpHandler(e){ if (e.keyCode == 27){ //esc if (isDrawing) { PLSpotEstimatorCalibrationdrawControl.cancel(); isDrawing = false; } else { disablePLSpotEstimatorCalibrationDrawMode(); if(PLSpotEstimatorCalibrationdrawControl !== "undefined") PLSpotEstimatorCalibrationdrawControl.destroy(); $('#PIE90DegreeSpotWidthCalibration').removeClass("PSESelected"); $('#PIEAngledSpotWidthCalibration').removeClass("PSESelected"); } e.stopPropagation(); } else if(e.keyCode == 90 && e.ctrlKey) PLSpotEstimatorCalibrationdrawControl.undo(); else if(e.keyCode == 89 && e.ctrlKey) PLSpotEstimatorCalibrationdrawControl.redo(); else if(e.keyCode == 13) PLSpotEstimatorCalibrationdrawControl.finishSketch(); } function disablePLSpotEstimatorDrawMode(){ $("#map").off('click'); if(PLSpotEstimatordrawControl){ PLSpotEstimatordrawControl.deactivate(); PLSpotEstimatordrawControl.destroy(); } PLSpotEstimatorLayer.removeAllFeatures(); W.map.removeLayer(PLSpotEstimatorLayer); $('div#WazeMap.view-area.olMap').off('keydown'); } function disablePLSpotEstimatorCalibrationDrawMode(){ $("#map").off('click'); if(PLSpotEstimatorCalibrationdrawControl){ PLSpotEstimatorCalibrationdrawControl.deactivate(); PLSpotEstimatorCalibrationdrawControl.destroy(); } PLSpotEstimatorCalibrationLayer.removeAllFeatures(); $('div#WazeMap.view-area.olMap').off('keydown'); } var totalSpots = 0; function PLSpotEstimatordoneHandler(geom){ let style = {strokeWidth: 3, strokeColor: '#ee9900'}; PLSpotEstimatorLayer.addFeatures(new OpenLayers.Feature.Vector(geom,{}, style)); let spots = Math.round(WazeWrap.Geometry.calculateDistance(geom.components)/($('#PIE90DegreeSpotWidthDraw').hasClass("PSESelected") ? $('#PIE90DegreeSpotWidth')[0].value : $('#PIEAngledSpotWidth')[0].value)); totalSpots += spots; $('#PIEPLSpotEstimatorTotal')[0].innerText = totalSpots; if(totalSpots > 0) $('#PIESetParkingSpacesToPlace').prop('disabled', false); isDrawing = false; } function PLSpotEstimatorCalibrationdoneHandler(geom){ var style = {strokeWidth: 3, strokeColor: '#00ee00'}; PLSpotEstimatorCalibrationLayer.addFeatures(new OpenLayers.Feature.Vector(geom,{}, style)); let totalLength = 0; PLSpotEstimatorCalibrationLayer.features.forEach(function(f) { let length = Math.round(WazeWrap.Geometry.calculateDistance(f.geometry.components)*100)/100; totalLength += length; }); if(calibratingAngledWidth){ $('#PIEAngledSpotWidth')[0].value = totalLength; settings.PLAngledSpotWidth = totalLength; } else{ $('#PIE90DegreeSpotWidth')[0].value = totalLength; settings.PLNormalSpotWidth = totalLength; } saveSettings(); $('#PIE90DegreeSpotWidthCalibration').removeClass("PSESelected"); $('#PIEAngledSpotWidthCalibration').removeClass("PSESelected"); isDrawing = false; disablePLSpotEstimatorCalibrationDrawMode(); } function ShowPLSpotEstimator(){ if($('#PIEParkingSpotEstimator').length > 0) $('#PIEParkingSpotEstimator').remove(); else{ if(WazeWrap.getSelectedFeatures().length > 0){ if(WazeWrap.getSelectedFeatures()[0].model.type === "venue" && WazeWrap.getSelectedFeatures()[0].model.attributes.categories.includes("PARKING_LOT")){ W.map.addLayer(PLSpotEstimatorLayer); PLSpotEstimatorLayer.setZIndex(1000); var $PLSpotEstimator = $('
'); $PLSpotEstimator.html([ '
', '' + I18n.t('pie.prefs.PSEParkingSpaceEstimator') + '', '
', '
', '
' + I18n.t('pie.prefs.PSELayoutType') + '

' + I18n.t('pie.prefs.PSESpotWidth') + '
', '
' + I18n.t('pie.prefs.PSE90degree') + '


', '
' + I18n.t('pie.prefs.PSEAngled') + '


', '
', '
', '
' + I18n.t('pie.prefs.PSEEstimatedNumOfSpots') + '0
', '
' ].join(' ')); $("#WazeMap").append($PLSpotEstimator.html()); $("#PIECloseParkingSpotEstimator").click(function(){ $('#PIEParkingSpotEstimator').remove(); disablePLSpotEstimatorDrawMode(); disablePLSpotEstimatorCalibrationDrawMode(); if(PLSpotEstimatordrawControl != null) PLSpotEstimatordrawControl.destroy(); if(PLSpotEstimatorCalibrationdrawControl != null) PLSpotEstimatorCalibrationdrawControl.destroy(); }); $('#PIEParkingSpotEstimator').keydown(function(e){ disablePLSpotEstimatorDrawMode(); disablePLSpotEstimatorCalibrationDrawMode(); if(PLSpotEstimatordrawControl != null) PLSpotEstimatordrawControl.destroy(); if(PLSpotEstimatorCalibrationdrawControl != null) PLSpotEstimatorCalibrationdrawControl.destroy(); $('#PIE90DegreeSpotWidthDraw').removeClass("PSESelected"); $('#PIEAngledSpotWidthDraw').removeClass("PSESelected"); $('#PIE90DegreeSpotWidthCalibration').removeClass("PSESelected"); $('#PIEAngledSpotWidthCalibration').removeClass("PSESelected"); }); $('#PIE90DegreeSpotWidth')[0].value = settings.PLNormalSpotWidth; $('#PIEAngledSpotWidth')[0].value = settings.PLAngledSpotWidth; $('#PIESetParkingSpacesToPlace').click(function(){ let spotCount = $('#PIEPLSpotEstimatorTotal')[0].innerText; if(spotCount != "0"){ let myPlace = WazeWrap.getSelectedFeatures()[0].model; let existingAttr = myPlace.attributes.categoryAttributes.PARKING_LOT; let newAttr = {}; if (existingAttr) { for (var prop in existingAttr) { let value = existingAttr[prop]; if (Array.isArray(value)) value = [].concat(value); newAttr[prop] = value; } } let spotPropValue; spotCount = parseInt(spotCount); if(spotCount < 11) spotPropValue = "R_1_TO_10"; else if(spotCount < 31) spotPropValue = "R_11_TO_30"; else if(spotCount < 61) spotPropValue = "R_31_TO_60"; else if(spotCount < 101) spotPropValue = "R_61_TO_100"; else if(spotCount < 301) spotPropValue = "R_101_TO_300"; else if(spotCount < 601) spotPropValue = "R_301_TO_600"; else if(spotCount >= 601) spotPropValue = "R_600_PLUS"; newAttr.estimatedNumberOfSpots = spotPropValue; W.model.actionManager.add(new UpdateObject(myPlace, {'categoryAttributes': {PARKING_LOT: newAttr}})); } }); $('#PIE90DegreeSpotWidth').focusout(function(){ let width = $(this)[0].value; if(width == "" || width == "0") $(this)[0].value = 3.44; settings.PLNormalSpotWidth = width; saveSettings(); }); $('#PIEAngledSpotWidth').focusout(function(){ let width = $(this)[0].value; if(width == "" || width == "0") $(this)[0].value = 3; settings.PLAngledSpotWidth = width; saveSettings(); }); $('#PIE90DegreeSpotWidthDraw').click(function() { if (PLSpotEstimatordrawControl && PLSpotEstimatordrawControl.active) { PLSpotEstimatordrawControl.deactivate(); PLSpotEstimatordrawControl.destroy(); $('div#WazeMap.view-area.olMap').off('keyup'); $('#PIE90DegreeSpotWidthDraw').removeClass("PSESelected"); $('#PIEAngledSpotWidthDraw').removeClass("PSESelected"); } else { $('#PIEAngledSpotWidthDraw').removeClass("PSESelected"); $('#PIE90DegreeSpotWidthCalibration').removeClass("PSESelected"); $('#PIEAngledSpotWidthCalibration').removeClass("PSESelected"); $('#PIE90DegreeSpotWidthDraw').addClass("PSESelected"); startPLSpotEstimatorDrawMode(); } }); $('#PIEAngledSpotWidthDraw').click(function() { if (PLSpotEstimatordrawControl && PLSpotEstimatordrawControl.active) { PLSpotEstimatordrawControl.deactivate(); PLSpotEstimatordrawControl.destroy(); $('div#WazeMap.view-area.olMap').off('keyup'); $('#PIEAngledSpotWidthDraw').removeClass("PSESelected"); $('#PIE90DegreeSpotWidthDraw').removeClass("PSESelected"); } else { $('#PIE90DegreeSpotWidthDraw').removeClass("PSESelected"); $('#PIE90DegreeSpotWidthCalibration').removeClass("PSESelected"); $('#PIEAngledSpotWidthCalibration').removeClass("PSESelected"); $('#PIEAngledSpotWidthDraw').addClass("PSESelected"); startPLSpotEstimatorDrawMode(); } }); $('#PIE90DegreeSpotWidthCalibration').click(function(){ if(PLSpotEstimatordrawControl){ PLSpotEstimatordrawControl.deactivate(); PLSpotEstimatordrawControl.destroy(); $('#PIE90DegreeSpotWidthDraw').removeClass("PSESelected"); $('#PIEAngledSpotWidthDraw').removeClass("PSESelected"); } if(PLSpotEstimatorCalibrationdrawControl){ PLSpotEstimatorCalibrationdrawControl.deactivate(); PLSpotEstimatorCalibrationdrawControl.destroy(); $('#PIE90DegreeSpotWidthCalibration').removeClass("PSESelected"); $('#PIEAngledSpotWidthCalibration').removeClass("PSESelected"); } $('#PIE90DegreeSpotWidthCalibration').addClass("PSESelected"); calibratingAngledWidth = false; startPLSpotEstimatorCalibrationMode(); }); $('#PIEAngledSpotWidthCalibration').click(function(){ if(PLSpotEstimatordrawControl){ PLSpotEstimatordrawControl.deactivate(); PLSpotEstimatordrawControl.destroy(); $('#PIE90DegreeSpotWidthDraw').removeClass("PSESelected"); $('#PIEAngledSpotWidthDraw').removeClass("PSESelected"); } if(PLSpotEstimatorCalibrationdrawControl){ PLSpotEstimatorCalibrationdrawControl.deactivate(); PLSpotEstimatorCalibrationdrawControl.destroy(); $('#PIE90DegreeSpotWidthCalibration').removeClass("PSESelected"); $('#PIEAngledSpotWidthCalibration').removeClass("PSESelected"); } $('#PIEAngledSpotWidthCalibration').addClass("PSESelected"); calibratingAngledWidth = true; startPLSpotEstimatorCalibrationMode(); }); } } else{ disablePLSpotEstimatorDrawMode(); disablePLSpotEstimatorCalibrationDrawMode(); } } } function ReadExtProviderText(index, extProviderTries){ var providersList = $('.select2-container.uuid').find('span.select2-chosen'); if($('.select2-container.uuid').find('span.select2-chosen')[index].innerHTML == " " && extProviderTries <= 20) setTimeout(function(){ReadExtProviderText(index, extProviderTries++);}, 50); else{ if($('#' + providersList[index].id).parent().parent().data('original-title') == null){ $('#' + providersList[index].id).parent().parent().attr('title', $('.select2-container.uuid').find('span.select2-chosen')[index].innerText); $('#' + providersList[index].id).parent().parent().tooltip(); } else $('#' + providersList[index].id).parent().parent().attr('data-original-title', $('.select2-container.uuid').find('span.select2-chosen')[index].innerText); } } function ShowCopyPlaceButton(){ $('#pieCopyPlaceButton').remove(); if(WazeWrap.getSelectedFeatures().length > 0){ //WazeWrap.getSelectedFeatures()[0].model.attributes.id.match(/(\d+\.){2}\d+/) if(WazeWrap.getSelectedFeatures()[0].model.type === "venue"){// && (typeof WazeWrap.getSelectedFeatures()[0].model.attributes.id === "string")){ //id is only a string if the Place has been saved - don't allow copying unsaved Places var $PlaceCopyButton; if(!_.includes(WazeWrap.getSelectedFeatures()[0].model.attributes.categories,"RESIDENCE_HOME")){ $PlaceCopyButton = $('
'); $('#venue-edit-general wz-text-input[name="name"]').after($PlaceCopyButton); $('#pieCopyPlaceButton').click(function(){ var PlaceObject = require("Waze/Feature/Vector/Landmark"); var AddPlace = require("Waze/Action/AddLandmark"); var NewPlace = new PlaceObject(); var oldPlace = WazeWrap.getSelectedFeatures()[0].model; NewPlace.attributes.name = oldPlace.attributes.name + " (copy)"; NewPlace.attributes.phone = oldPlace.attributes.phone; NewPlace.attributes.url = oldPlace.attributes.url; NewPlace.attributes.categories = [].concat(oldPlace.attributes.categories); NewPlace.attributes.aliases = [].concat(oldPlace.attributes.aliases); NewPlace.attributes.description = oldPlace.attributes.description; NewPlace.attributes.houseNumber = oldPlace.attributes.houseNumber; NewPlace.attributes.lockRank = oldPlace.attributes.lockRank; NewPlace.attributes.geometry = oldPlace.attributes.geometry.clone(); let convertedCoords; if(oldPlace.attributes.geometry.toString().match(/^POLYGON/)){ for(var i=0; i