WME Add Uturns from node

Add uturns from node

目前為 2016-02-08 提交的版本,檢視 最新版本

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         WME Add Uturns from node
// @version      0.1
// @description  Add uturns from node
// @author       ixxvivxxi
// @include      https://www.waze.com/editor/*
// @include      https://www.waze.com/*/editor/*
// @include      https://editor-beta.waze.com/editor/*
// @include      https://editor-beta.waze.com/*/editor/*
// @grant        none
// @namespace    https://greasyfork.org/ru/scripts/16950-wme-add-uturns-from-node

// ==/UserScript==

function Uturns_bootstrap()
{
	var bGreasemonkeyServiceDefined = false;

	try
	{
		if ("object" === typeof Components.interfaces.gmIGreasemonkeyService)
		{
			bGreasemonkeyServiceDefined = true;
		}
	}
	catch (err)
	{
		//Ignore.
	}
	if ( "undefined" === typeof unsafeWindow  ||  ! bGreasemonkeyServiceDefined)
	{
		unsafeWindow    = ( function ()
		{
			var dummyElem   = document.createElement('p');
			dummyElem.setAttribute ('onclick', 'return window;');
			return dummyElem.onclick ();
		} ) ();
	}
	/* begin running the code! */
	setTimeout(startUturns,999);
}
function startUturns() {

    Waze.selectionManager.events.register("selectionchanged", null, showButton);
    var wazeActionModifyConnection= require("Waze/Action/ModifyConnection")
  

    function showButton() {
        if(Waze.selectionManager.selectedItems.length == 0 || Waze.selectionManager.selectedItems.length > 1) return;
        if(Waze.selectionManager.selectedItems[0].model.type == "node") {

           $('.side-panel-section:first-child').append('<button id="addUturns" class="btn btn-default">add uturns</button>');
        }

    }

  $('#sidebar').on('click', '#addUturns', function(event) {
      var node = Waze.selectionManager.selectedItems[0].model;
      var segIDs = node.attributes.segIDs;
      
      for (var i = 0; i < segIDs.length; i++) {
          var segment = Waze.model.segments.objects[segIDs[i]];
          
          if (segment.attributes.fromNodeID == node.attributes.id) {
              console.log('А', segment.attributes.id);
              
              segment.attributes.fromConnections[segment.attributes.id] = true;
              Waze.model.actionManager.add(new wazeActionModifyConnection(segment.attributes.id, segment.getFromNode(), segment.attributes.id,segment.getFromNode()));
          } else {
              console.log('B', segment.attributes.id);
              segment.attributes.toConnections[segment.attributes.id] = true;
              Waze.model.actionManager.add(new wazeActionModifyConnection(segment.attributes.id, segment.getToNode(), segment.attributes.id, segment.getToNode()));
          }

      }

  });

  function addPOIs() {


       $(".more-actions .edit-house-numbers").click();

        setTimeout(function() {
          $('#map-lightbox .toolbar .cancel').click();

          for (var key in Waze.model.houseNumbers.objects) {

           if (Waze.model.houseNumbers.objects[key].numbers.length > 0) {
            for (var i=0; i<Waze.model.houseNumbers.objects[key].numbers.length; i++) {
              var number = Waze.model.houseNumbers.objects[key].numbers[i].number;
              var hasPOI = false;
							var hasRH = false;


              for (var idVenue in Waze.model.venues.objects) {
								var venue = Waze.model.venues.objects[idVenue];
								var hasRH_ = false;
								var normalCategory = true;
								for (var ic = 0; ic < venue.attributes.categories.length; ic++) {
									var category = venue.attributes.categories[ic];
									if (category == "PARKING_LOT" || category == "PARK" || category == "RIVER_STREAM" || category == "FOREST_GROVE" || category == "NATURAL_FEATURES" || category == "SEA_LAKE_POOL") {
										normalCategory = false;
									}
									if (category == "RESIDENCE_HOME" && venue.attributes.houseNumber == number.toString() && venue.attributes.streetID == address.street.id ) {
										hasRH_ = true;
										hasRH = true;

									}
								}


								if (normalCategory && !hasRH_ && venue.geometry.bounds.containsLonLat(Waze.model.houseNumbers.objects[key].numbers[i].geometry.toLonLat()) ) {

									hasPOI = true;
									if (venue.attributes.streetID != address.street.id) {
										var newAddressAtts={streetName: address.street.name, emptyStreet: false, cityName: address.city.name, emptyCity: false, stateID: address.state.id, countryID: address.country.id};
								    Waze.model.actionManager.add(new wazeActionUpdateFeatureAddress(venue, newAddressAtts, {streetIDField: 'streetID'} ));
									}

									var newAtts = {};
									var haveChanges = false;
									if (venue.attributes.houseNumber != number.toString() && number.indexOf(" ") == -1) {
										newAtts.houseNumber = number;
										haveChanges = true;
									}
									if (venue.attributes.name != number.toString() && venue.attributes.name == "") {
										newAtts.name = number;
										haveChanges = true;
									}
									var aliases = venue.attributes.aliases;
									if (hasChar(number)) {

										var length = venue.attributes.aliases.length;
										var street = number + " " + address.street.name;

										var hasAliasAddress = false;
										for (var ia = 0; ia < length; ia++) {
											if (street == venue.attributes.aliases[ia]) {
												hasAliasAddress = true;
											}
										}
										if (!hasAliasAddress) {
											aliases.push(street);
											haveChanges = true;
										}

										if ((address.country.id == 37 || address.country.id == 186) && number.indexOf("/") != -1) {
											hasAliasAddress = false;
											var street = number.replace('/', 'к') + " " + address.street.name;
											for (var ia = 0; ia < length; ia++) {
												if (street == venue.attributes.aliases[ia]) {
													hasAliasAddress = true;
												}
											}
											if (!hasAliasAddress) {
												aliases.push(street);
												haveChanges = true;
											}
											hasAliasAddress = false;
											var street = number.replace('/', ' корпус ') + " " + address.street.name;
											for (var ia = 0; ia < length; ia++) {
												if (street == venue.attributes.aliases[ia]) {
													hasAliasAddress = true;
												}
											}
											if (!hasAliasAddress) {
												aliases.push(street);
												haveChanges = true;
											}
			              }
									}

									if (haveChanges) {
										newAtts.aliases = aliases;
										Waze.model.actionManager.add(new wazeActionUpdateObject(venue, newAtts));
									}
								}
              }
							if (!hasRH && number.indexOf(" ") == -1  && !hasChar(number)) {

								var poi = new wazefeatureVectorLandmark();
								poi.geometry = Waze.model.houseNumbers.objects[key].numbers[i].geometry.clone();
								poi.geometry.x = poi.geometry.x + 2;
								poi.geometry.y = poi.geometry.y + 2;
								poi.attributes.categories = ["OTHER"];
								Waze.model.actionManager.add(new wazeActionAddLandmark(poi));

								var newAddressAtts={streetName: address.street.name, emptyStreet: false, cityName: address.city.name, emptyCity: false, stateID: address.state.id, countryID: address.country.id};
								Waze.model.actionManager.add(new wazeActionUpdateFeatureAddress(poi, newAddressAtts, {streetIDField: 'streetID'} ));
								Waze.model.actionManager.add(new wazeActionUpdateObject(poi, {houseNumber: number, residential: true}));

							}

              if (!hasPOI && hasChar(number)) {
								var poi = new wazefeatureVectorLandmark();
                poi.geometry = Waze.model.houseNumbers.objects[key].numbers[i].geometry.clone();
                poi.attributes.categories = ["OTHER"];
                poi.attributes.name = number;
                poi.attributes.aliases.push(number + " " + address.street.name);

								if ((address.country.id == 37 || address.country.id == 186) && number.indexOf("/") != -1) {
									poi.attributes.aliases.push(number.replace('/', 'к') + " " + address.street.name);
									poi.attributes.aliases.push(number.replace('/', ' корпус ') + " " + address.street.name);
								}

                Waze.model.actionManager.add(new wazeActionAddLandmark(poi));
								var newAddressAtts={streetName: address.street.name, emptyStreet: false, cityName: address.city.name, emptyCity: false, stateID: address.state.id, countryID: address.country.id};
								Waze.model.actionManager.add(new wazeActionUpdateFeatureAddress(poi, newAddressAtts, {streetIDField: 'streetID'} ));
								if (number.indexOf(" ") == -1) {
									Waze.model.actionManager.add(new wazeActionUpdateObject(poi, {houseNumber: number}));
								}
              }
            }
          }
        }
         }, 3000);

    }

    function addAltNames(arr) {
        if ($('.alias-name').length>0) {
            $("#landmark-edit-general .aliases-view .delete").click();
        }
        for (var i = 0; i < arr.length; i++) {

            $("#landmark-edit-general .aliases-view .add").click();

          var elem;
          $('#landmark-edit-general .aliases-view input[type=text]').each(function(index){
              if(i == index) {elem = $(this);}
          });
          elem.val(arr[i]);
          elem.change();
        }
    }

    function isChar(number) {
      var reg = /([0-9])[А-Яа-я]/;
      switch (true) {
        case reg.test(number):
          return true;
          break;
        default:
          return false;
      }
    }

    function hasChar(number) {
      var reg = /[а-яА-Яa-zA-Z/-]/;
      switch (true) {
        case reg.test(number):
          return true;
          break;
        default:
          return false;
      }
    }

}

Uturns_bootstrap();