WME Add alt address for housing

Добавление альтернативных названий (адресов)

目前為 2015-09-19 提交的版本,檢視 最新版本

// ==UserScript==
// @name         WME Add alt address for housing
// @version      0.6
// @description  Добавление альтернативных названий (адресов)
// @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/12229-wme-add-alt-address-for-housing
// ==/UserScript==

function altAddress_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(startAltAddress,999);
}



function startAltAddress() {
    
    Waze.selectionManager.events.register("selectionchanged", null, showTitle);
    var wazeActionAddLandmark = require("Waze/Action/AddLandmark");
    var wazefeatureVectorLandmark = require("Waze/Feature/Vector/Landmark");
    var wazefeatureEditorLandmark = require("Waze/Presenter/FeatureEditor/Landmark");
    var streetName = "";
    var countryID = 0;
    
    function showTitle() {
        
        if(Waze.selectionManager.selectedItems.length == 0 || Waze.selectionManager.selectedItems.length > 1) return;
        if(Waze.selectionManager.selectedItems[0].model.type == "segment") {
           // streetName = "";
            //streetName = Waze.model.streets.objects[Waze.selectionManager.selectedItems[0].model.attributes.primaryStreetID].name;
           // countryID = 0;
           // countryID = Waze.model.cities.objects[Waze.model.streets.objects[Waze.selectionManager.selectedItems[0].model.attributes.primaryStreetID].cityID].countryID;
           var countryID = Waze.selectionManager.selectedItems[0].model.getAddress().country.id;
           var title = "Add POI addresses";
           if (countryID == 37 || countryID == 186) {
             title = "Добавить адресные POI";
           }
           $('.street-actions').append('<button id="addPOIs" class="btn btn-default">' + title + '</button>');

        }
        if(Waze.selectionManager.selectedItems[0].model.type == "venue") {
            var other = false;
            for (var i = 0; i < Waze.selectionManager.selectedItems[0].model.attributes.categories.length; i++) {
                if (Waze.selectionManager.selectedItems[0].model.attributes.categories[i] == "OTHER") {
                    other = true;
                }
            }
            if (!other) {return;}
            
            var elem = $('<button class="btn btn-default add-alt-address">Добавить альтернативные адреса</button>').bind( "click", function(event) {
              event.preventDefault();
              var name = $("#landmark-edit-general input[name='name']").val(),
              arr = name.split(' '),
              length = arr.length,
              arrNames = [],
              str = '';
                if (length > 1) {
                    for (var i = 1; i < length; i++) {
                      str = str + ' ' + arr[i];
                    }
                    str = str.trim();
                    
                    if (arr[0].indexOf("/") != -1) {
                      arrNames.push(str + ' ' + arr[0]);
                      arrNames.push(arr[0]. replace('/', 'к')  + ' ' + str); 
                      arrNames.push(str  + ' ' + arr[0]. replace('/', 'к'));
                      arrNames.push(str  + ' ' + arr[0]. replace('/', ' корпус '));
                      addAltNames(arrNames);  
                    } else if (isChar(arr[0])) {
                       arrNames.push(str + ' ' + arr[0]);
                       addAltNames(arrNames); 
                    }
                }
            });
            
            $("#landmark-edit-general .aliases-view").append(elem);
        }
        
    }  
    
  $('#sidebar').on('click', '#addPOIs', function(event) {
    event.preventDefault();
    addPOIs();
  });
        
  function addPOIs() {
    $('#toolbar #layer-switcher .reload-button').click(); 
    setTimeout(function() {
        
      $(".street-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 streetName = Waze.model.segments.objects[Waze.model.houseNumbers.objects[key].numbers[i].parent.id].getAddress().street.name;
              
              var address = number + " " + streetName;
              for (var idVenue in Waze.model.venues.objects) {
                if (Waze.model.venues.objects[idVenue].attributes.name.toLowerCase() == address.toLowerCase()) {
                  hasPOI = true;
                //console.log(hasPOI, Waze.model.venues.objects[idVenue].attributes.name.toLowerCase(), namestr.toLowerCase());
                } 
              }
            
              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 + " " + streetName;
                poi.attributes.aliases.push(streetName + " " + number);
                console.log(number + " " + streetName);  
                var countryID = Waze.model.segments.objects[Waze.model.houseNumbers.objects[key].numbers[i].parent.id].getAddress().country.id;   
                if ((countryID == 37 || countryID == 186) && number.indexOf("/") != -1) {
                    
                  poi.attributes.aliases.push(number.replace('/', 'к') + ' ' + streetName); 
                  poi.attributes.aliases.push(streetName + ' ' + number.replace('/', 'к'));
                  poi.attributes.aliases.push(streetName + ' ' + number.replace('/', ' корпус '));
                }
                Waze.model.actionManager.add(new wazeActionAddLandmark(poi));
              }
            }    
          }
        } 
        }, 3000);
      }, 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;
      }
    }
   
}

altAddress_bootstrap();