// ==UserScript==
// @name WME Place Interface Enhancements
// @namespace https://greasyfork.org/users/30701-justins83-waze
// @version 0.7.7.2
// @description Enhancements to various Place interfaces
// @include https://www.waze.com/editor/*
// @include https://www.waze.com/*/editor/*
// @include https://beta.waze.com/*
// @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
// @license GPLv3
// @downloadURL none
// ==/UserScript==
var UpdateObject, MultiAction;
(function() {
'use strict';
var settings = {};
var placeMenuSelector = "#edit-buttons > div > div.toolbar-button.waze-icon-place.toolbar-submenu.toolbar-group.toolbar-group-venues.ItemInactive > menu";
var pointStyle = {
pointRadius: 6,
fillOpacity: 0,
strokeColor: '#00ece3',
strokeWidth: '2',
strokeLinecap: 'round'
};
var layerName = "WME PIE";
var newPlaceLayer;
var placementMode = false;
var drawPoly;
function bootstrap(tries) {
tries = tries || 1;
if (window.W &&
window.W.map &&
window.W.model &&
window.W.loginManager.user &&
$) {
init();
} else if (tries < 1000) {
setTimeout(function () {bootstrap(tries++);}, 200);
}
}
bootstrap();
function init(){
var $section = $("
", {style:"padding:8px 16px", id:"WMEPIESettings"});
$section.html([
'
WME Place Interface Enhancements
',
'
',
'
',
'
',
'Zoom
',
'
',
'
',
'
',
''
].join(' '));
UpdateObject = require("Waze/Action/UpdateObject");
MultiAction = require("Waze/Action/MultiAction");
newPlaceLayer = new OL.Layer.Vector(layerName,{displayInLayerSwitcher: false});
W.map.addLayer(newPlaceLayer);
injectCss();
new WazeWrap.Interface.Tab('PIE', $section.html(), init2);
}
function buildNewPlaceList(){
//Clear out the Places menu
$(placeMenuSelector).empty();
var cat = "";
var icon = "";
var i;
for(i=0;i<11;i++){
icon = "";
cat = $('#pieItem' + (i+1))[0].value;
icon = $('#pieItem' + (i+1))[0].options[$('#pieItem' + (i+1))[0].selectedIndex].getAttribute("data-icon");
if(cat !== "PARKING_LOT" && cat !== "RESIDENCE_HOME")
$(placeMenuSelector).append('
');
else{
if(cat === "RESIDENCE_HOME") //force point
$(placeMenuSelector).append('
');
else //Parking lot - force area
$(placeMenuSelector).append('
');
}
}
$('[id^="piePlaceMainItem"]').click(function(e){
startPlacementMode($('#' + this.id).data("category"), true);
});
$('[id^="piePlaceAreaItem"]').click(function(e){
e.stopPropagation();
startPlacementMode($('#' + this.id).data("category"), false);
});
}
function init2(){
//Load settings
loadSettings();
//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;
}
});
$('#_cbShowLockButtonsRPP').change(function() {
if(this.checked) {
attachRPPLockButtonHandlers();
}
else
{
$('#pieRPPLockButtonsContainer').remove();
W.selectionManager.events.unregister("selectionchanged", null, addLockButtons);
W.model.actionManager.events.unregister("afterundoaction",null, addLockButtons);
W.model.actionManager.events.unregister("afterclearactions",null, addLockButtons);
W.model.actionManager.events.unregister("afteraction",null, addLockButtons);
}
});
$('#_cbShowPlaceLocatorCrosshair').change(function(){
if(this.checked){
W.selectionManager.events.register("selectionchanged", null, ShowPlaceLocatorCrosshair);
W.model.actionManager.events.register("afterundoaction",null, ShowPlaceLocatorCrosshair);
W.model.actionManager.events.register("afterclearactions",null, ShowPlaceLocatorCrosshair);
W.model.actionManager.events.register("afteraction",null, ShowPlaceLocatorCrosshair);
}
else{
W.selectionManager.events.unregister("selectionchanged", null, ShowPlaceLocatorCrosshair);
W.model.actionManager.events.unregister("afterundoaction",null, ShowPlaceLocatorCrosshair);
W.model.actionManager.events.unregister("afterclearactions",null, ShowPlaceLocatorCrosshair);
W.model.actionManager.events.unregister("afteraction",null, ShowPlaceLocatorCrosshair);
}
});
$('#_cbShowSearchButton').change(function(){
if(this.checked){
W.selectionManager.events.register("selectionchanged", null, ShowSearchButton);
W.model.actionManager.events.register("afterundoaction",null, ShowSearchButton);
W.model.actionManager.events.register("afterclearactions",null, ShowSearchButton);
W.model.actionManager.events.register("afteraction",null, ShowSearchButton);
}
else{
W.selectionManager.events.unregister("selectionchanged", null, ShowSearchButton);
W.model.actionManager.events.unregister("afterundoaction",null, ShowSearchButton);
W.model.actionManager.events.unregister("afterclearactions",null, ShowSearchButton);
W.model.actionManager.events.unregister("afteraction",null, ShowSearchButton);
}
});
$('#_cbAddPlaceCategoriesButtons').change(function(){
if(this.checked){
W.selectionManager.events.register("selectionchanged", null, AddPlaceCategoriesButtons);
W.model.actionManager.events.register("afterundoaction",null, AddPlaceCategoriesButtons);
W.model.actionManager.events.register("afterclearactions",null, AddPlaceCategoriesButtons);
W.model.actionManager.events.register("afteraction",null, AddPlaceCategoriesButtons);
}
else{
W.selectionManager.events.unregister("selectionchanged", null, AddPlaceCategoriesButtons);
W.model.actionManager.events.unregister("afterundoaction",null, AddPlaceCategoriesButtons);
W.model.actionManager.events.unregister("afterclearactions",null, AddPlaceCategoriesButtons);
W.model.actionManager.events.unregister("afteraction",null, AddPlaceCategoriesButtons);
}
});
//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('_cbUseAltCity', settings.UseAltCity);
setChecked('_cbShowSearchButton', settings.ShowSearchButton);
setChecked('_cbAddPlaceCategoriesButtons', settings.AddPlaceCategoriesButtons);
setChecked('_cbSkipPLR', settings.SkipPLR);
$('#piePlaceZoom')[0].value = settings.PlaceZoom;
$('#pieDefaultLockLevel')[0].value = settings.DefaultLockLevel;
if(settings.ShowAreaPlaceSize){
$('#_cbShowAreaPlaceSizeImperial')[0].disabled = false;
$('#_cbShowAreaPlaceSizeMetric')[0].disabled = false;
attachPlaceSizeHandlers();
}
if(settings.ShowPlaceLocatorCrosshair){
W.selectionManager.events.register("selectionchanged", null, ShowPlaceLocatorCrosshair);
W.model.actionManager.events.register("afterundoaction",null, ShowPlaceLocatorCrosshair);
W.model.actionManager.events.register("afterclearactions",null, ShowPlaceLocatorCrosshair);
W.model.actionManager.events.register("afteraction",null, ShowPlaceLocatorCrosshair);
ShowPlaceLocatorCrosshair(); //in case the user opened a PL with a Place selected
}
if(settings.ShowSearchButton){
W.selectionManager.events.register("selectionchanged", null, ShowSearchButton);
W.model.actionManager.events.register("afterundoaction",null, ShowSearchButton);
W.model.actionManager.events.register("afterclearactions",null, ShowSearchButton);
W.model.actionManager.events.register("afteraction",null, ShowSearchButton);
ShowSearchButton(); //in case the user opened a PL with a Place selected
}
if(settings.AddPlaceCategoriesButtons){
W.selectionManager.events.register("selectionchanged", null, AddPlaceCategoriesButtons);
W.model.actionManager.events.register("afterundoaction",null, AddPlaceCategoriesButtons);
W.model.actionManager.events.register("afterclearactions",null, AddPlaceCategoriesButtons);
W.model.actionManager.events.register("afteraction",null, AddPlaceCategoriesButtons);
AddPlaceCategoriesButtons();
}
if(settings.ShowLockButtonsRPP)
attachRPPLockButtonHandlers();
$('.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();
});
var i;
//Whenever a Place item is changed, read the settings and save to localStorage
$('[id^="pieItem"]').change(function(){
for(i=0;i<11;i++){
settings.NewPlacesList[i] = $('#pieItem'+(i+1))[0].value;
}
saveSettings();
buildNewPlaceList();
});
//Load settings into Place Customization list options
for(i=0; i<11;i++)
$('#pieItem'+(i+1))[0].value = settings.NewPlacesList[i];
//Build our new menu
buildNewPlaceList();
new WazeWrap.Interface.Shortcut('CreateResidentialPlaceShortcut', 'Creates a resdiential Place point', 'wmepie', 'Place Interface Enhancements', settings.CreateResidentialPlaceShortcut, function(){startPlacementMode("RESIDENCE_HOME", 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();
window.addEventListener("beforeunload", function() {
saveSettings();
}, false);
}
var areaCategory = "";
function startPlacementMode(category, isPoint){
$('#edit-buttons > div > div.toolbar-button.waze-icon-place.toolbar-submenu.toolbar-group.toolbar-group-venues.ItemInactive').removeClass("open");
if(isPoint){
$("#map").on('mousemove', MouseMoveHandler);
$("#map").click(function(){endPlacementMode(category, isPoint);});
}
else{
areaCategory = category;
var polyDrawFeatureOptions = {callbacks : {"done": doneHandler}};
drawPoly = new OpenLayers.Control.DrawFeature(newPlaceLayer, OpenLayers.Handler.Polygon, polyDrawFeatureOptions);
W.map.addControl(drawPoly);
drawPoly.activate();
}
document.addEventListener('keyup', keyUpHandler, false);
}
function doneHandler(geom){
drawPoly.destroy();
createPlace(geom, areaCategory, false);
}
function keyUpHandler(e){
if (e.keyCode == 27){
disablePlacementMode();
if(drawPoly !== "undefined")
drawPoly.destroy();
}
else if(e.keyCode == 90 && e.ctrlKey)
drawPoly.undo();
else if(e.keyCode == 89 && e.ctrlKey)
drawPoly.redo();
else if(e.keyCode == 13)
drawPoly.finishSketch();
}
function disablePlacementMode(){
$("#map").off('click');//, endPlacementMode);
$("#map").off('mousemove', MouseMoveHandler);
clearLayer();
document.removeEventListener('keyup', keyUpHandler);
}
function endPlacementMode(category, isPoint){
disablePlacementMode();
createPlace(getMousePos900913(), category, isPoint);
}
function getMousePos900913(){
var mousePosition = $('.WazeControlMousePosition').text().split(" ");
return WazeWrap.Geometry.ConvertTo900913(mousePosition[0], mousePosition[1]);
}
function MouseMoveHandler(e){
clearLayer();
drawCircle(getMousePos900913());
}
function clearLayer() {
var layer = W.map.getLayersByName(layerName)[0];
layer.removeAllFeatures();
}
function drawCircle(e){
var pointFeature = new OL.Feature.Vector(new OL.Geometry.Point(e.lon, e.lat), {}, pointStyle);
W.map.getLayersByName(layerName)[0].addFeatures([pointFeature]);
}
function createPlace(pos, category, isPoint){
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();
if(isPoint)
NewPlace.geometry = new OL.Geometry.Point(pos.lon, pos.lat);
else{
var points = [];
var i;
for(i=0;i
0){ //segment has alt names
for(var j=0;j 0) {
$('.edit-button').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([
'Item ',
itemNumber,
buildItemList(itemNumber),
''
].join(' '));
return $section.html();
}
function buildLockLevelsList(){
var $lockLevels = $("
");
for(var i=0;i
" + (i+1) + "");
}
return $lockLevels.html();
}
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(){
W.selectionManager.events.register("selectionchanged", null, updatePlaceSizeDisplay);
W.model.actionManager.events.register("afteraction",null, updatePlaceSizeDisplay);
W.model.actionManager.events.register("afterundoaction",null, updatePlaceSizeDisplay);
W.model.actionManager.events.register("afterclearactions",null, updatePlaceSizeDisplay);
W.model.actionManager.events.register("noActions",null, noActions);
updatePlaceSizeDisplay();
}
function removePlaceSizeHandlers(){
W.selectionManager.events.unregister("selectionchanged", null, updatePlaceSizeDisplay);
W.model.actionManager.events.unregister("afteraction",null, updatePlaceSizeDisplay);
W.model.actionManager.events.unregister("afterundoaction",null, updatePlaceSizeDisplay);
W.model.actionManager.events.unregister("afterclearactions",null, updatePlaceSizeDisplay);
W.model.actionManager.events.unregister("noActions",null, noActions);
}
function ShowPlaceLocatorCrosshair(){
$('#pieCrosshairs').remove();
if(W.selectionManager.selectedItems.length > 0){
if(W.selectionManager.selectedItems[0].model.type === "venue"){
var panelWidth = $('#landmark-edit-general').width();
var $crosshairs = $('
');
$('#landmark-edit-general > form > div:nth-child(1) > i').after($crosshairs);
$('#pieCrosshairs').click(function(){
CenterOnPlace(W.selectionManager.selectedItems[0].model, settings.PlaceZoom);
});
}
}
}
function ShowSearchButton(){
$('#pieSearchButton').remove();
if(W.selectionManager.selectedItems.length > 0){
if(W.selectionManager.selectedItems[0].model.type === "venue"){
var $search = $('
');
$('#landmark-edit-general > div > div > div').before($search);
$('#pieSearchButton').click(function(){
var address = $('.full-address')[0].innerHTML;
var noCity = I18n.translations[I18n.currentLocale()].edit.address.no_city;
var noStreet = I18n.translations[I18n.currentLocale()].edit.address.no_street;
address = address.replace(noCity + ",","");
if(address !== I18n.translations[I18n.currentLocale()].edit.landmark.no_address)
$('.search-query')[0].value = address;
});
}
}
}
function AddPlaceCategoriesButtons(){
$('#piePlaceCategoriesButtonsContainer').remove();
if(W.selectionManager.selectedItems.length > 0){
if(W.selectionManager.selectedItems[0].model.type === "venue"){
var $container = $('',{id:'piePlaceCategoriesButtonsContainer', style:'white-space: nowrap;'});
var categoryOptions = $('[id^=pieItem]');
var $button = $('
',{id:'btnPlaceCatClear', title:'Clear current categories', style:'display:inline-block; cursor:pointer'}).click(function() { onPlaceCategoriesButtonsClick(this.id); });
$button.append('
');
$container.append($button);
for(var i=0;i
',{id:divid, title:name.replace('&', '&'), style:'display:inline-block; cursor:pointer', 'data-category':categoryOptions[i].value}).click(function() { onPlaceCategoriesButtonsClick(this.id); });
$button.append('');
$container.append($button);
}
}
}
$('.categories.controls').before($container);
}
}
function onPlaceCategoriesButtonsClick(buttonid){
if(buttonid === "btnPlaceCatClear"){
var blankCategories = []; //W.selectionManager.selectedItems[0].model.attributes.categories.clone();
//console.log(blankCategories.length);
//blankCategories.splice(0, blankCategories.length);
//console.log(blankCategories);
W.model.actionManager.add(new UpdateObject(W.selectionManager.selectedItems[0].model, { categories: blankCategories }));
}
else{
var newCategories = W.selectionManager.selectedItems[0].model.attributes.categories.clone();
console.log($('#'+buttonid)[0].getAttribute("data-category"));
newCategories.push($('#'+buttonid)[0].getAttribute("data-category"));
W.model.actionManager.add(new UpdateObject(W.selectionManager.selectedItems[0].model, {categories: newCategories}));
}
}
function CenterOnPlace(venue, zoom){
var centroid = venue.geometry.getCentroid();
W.map.setCenter([centroid.x, centroid.y], zoom);
}
function isChecked(checkboxId) {
return $('#' + checkboxId).is(':checked');
}
function setChecked(checkboxId, checked) {
$('#' + checkboxId).prop('checked', checked);
}
function noActions(){
setTimeout(updatePlaceSizeDisplay, 100 ); //have to put in a delay for when the user uses undo to clear all actions - WME updates on top of my changes otherwise.
}
function updatePlaceSizeDisplay(){
var count = W.selectionManager.selectedItems.length;
var metersArea = 0;
var bold = false;
if(count === 1){
var venue = W.selectionManager.selectedItems[0];
var isArea = venue.geometry.toString().match(/^POLYGON/);
//var isPoint = venue.geometry.toString().match(/^POINT/);
if(venue.model.type === "venue" && isArea){
if($('#AreaSize'))
$('#AreaSize').remove();
metersArea = W.selectionManager.selectedItems[0].model.geometry.getGeodesicArea(W.map.getProjectionObject());
if(metersArea > 0 && isArea){
var ftArea = Math.round(metersArea * 10.76391 *100)/100;
var list = $('#landmark-edit-general > ul')[0];
var newList = document.createElement("UL");
newList.id = "AreaSize";
var newItem = document.createElement("LI");
if(isChecked("_cbShowAreaPlaceSizeMetric")){
newItem.innerHTML = "Area: " + metersArea.toFixed(2) + " m2";
newList.appendChild(newItem);
}
if(isChecked("_cbShowAreaPlaceSizeImperial")){
newItem = document.createElement("LI");
newItem.innerHTML = "Area: " + ftArea.toFixed(2) + " ft2";
newList.appendChild(newItem);
}
if(metersArea < 500){
newItem = document.createElement("LI");
newItem.innerHTML = "Places smaller than 500 m2/5382 ft2 will not show in the client";
newList.appendChild(newItem);
}
if(list.before != null)
list.before(newList);
else{
var parent = $('#landmark-edit-general > ul')[0].parentNode;
parent.insertBefore(newList,$('#landmark-edit-general > ul')[0]);
}
$('#AreaSize').addClass("list-unstyled");
$('#AreaSize').addClass("additional-attributes");
}
}
}
}
function loadSettings() {
var loadedSettings = $.parseJSON(localStorage.getItem("WMEPIE_Settings"));
var defaultSettings = {
ShowAreaPlaceSize: false,
ShowAreaPlaceSizeImperial: false,
ShowAreaPlaceSizeMetric: false,
ShowLockButtonsRPP: true,
NewPlacesList: W.Config.venues.categories.clone(),
EditRPPAfterCreated: false,
UseStreetFromClosestSeg: false,
UseCityFromClosestSeg: false,
ShowPlaceLocatorCrosshair: false,
PlaceZoom: 6,
DefaultLockLevel: 0,
CreateResidentialPlaceShortcut: "A+r",
CreateParkingLotShortcut: "A+p",
UseAltCity: false,
ShowSearchButton: false,
AddPlaceCategoriesButtons: false,
SkipPLR: false
};
settings = loadedSettings ? loadedSettings : defaultSettings;
for (var prop in defaultSettings) {
if (!settings.hasOwnProperty(prop))
settings[prop] = defaultSettings[prop];
}
if(settings.ShowAreaPlaceSizeImperial === false && settings.ShowAreaPlaceSizeMetric === false)
if(Waze.prefs.attributes.isImperial)
settings.ShowAreaPlaceSizeImperial = true;
else
settings.ShowAreaPlaceSizeMetric = true;
}
function saveSettings() {
if (localStorage) {
var localsettings = {
ShowAreaPlaceSize: settings.ShowAreaPlaceSize,
ShowAreaPlaceSizeImperial: settings.ShowAreaPlaceSizeImperial,
ShowAreaPlaceSizeMetric: settings.ShowAreaPlaceSizeMetric,
ShowLockButtonsRPP: settings.ShowLockButtonsRPP,
NewPlacesList: settings.NewPlacesList,
EditRPPAfterCreated: settings.EditRPPAfterCreated,
UseStreetFromClosestSeg: settings.UseStreetFromClosestSeg,
UseCityFromClosestSeg: settings.UseCityFromClosestSeg,
ShowPlaceLocatorCrosshair: settings.ShowPlaceLocatorCrosshair,
PlaceZoom: settings.PlaceZoom,
DefaultLockLevel: settings.DefaultLockLevel,
CreateResidentialPlaceShortcut: settings.CreateResidentialPlaceShortcut,
CreateParkingLotShortcut: settings.CreateParkingLotShortcut,
UseAltCity: settings.UseAltCity,
ShowSearchButton: settings.ShowSearchButton,
AddPlaceCategoriesButtons: settings.AddPlaceCategoriesButtons,
SkipPLR: settings.SkipPLR
};
for (var name in Waze.accelerators.Actions) {
var TempKeys = "";
if (Waze.accelerators.Actions[name].group == 'wmepie') {
console.log(name);
if (Waze.accelerators.Actions[name].shortcut) {
if (Waze.accelerators.Actions[name].shortcut.altKey === true) {
TempKeys += 'A';
}
if (Waze.accelerators.Actions[name].shortcut.shiftKey === true) {
TempKeys += 'S';
}
if (Waze.accelerators.Actions[name].shortcut.ctrlKey === true) {
TempKeys += 'C';
}
if (TempKeys !== "") {
TempKeys += '+';
}
if (Waze.accelerators.Actions[name].shortcut.keyCode) {
TempKeys += Waze.accelerators.Actions[name].shortcut.keyCode;
}
} else {
TempKeys = "-1";
}
localsettings[name] = TempKeys;
}
}
localStorage.setItem("WMEPIE_Settings", JSON.stringify(localsettings));
}
}
//Using the same display for lock buttons as ClickSaver (with permission from MapoMatic) - thanks MoM!
function addLockButtons() {
if(W.selectionManager.selectedItems.length > 0){
var item = W.selectionManager.selectedItems[0];
var isRPP = (item.model.type === "venue" && item.model.attributes.residential === true);
if(isRPP){
var attr = item.model.attributes;
var autoRank = attr.rank;
var manualRank = attr.lockRank;
var firstManualRank = manualRank;
var userRank = WazeWrap.User.Rank() - 1;
var maxAutoRank = autoRank;
var disabled = false;
var $div = $('#pieRPPLockButtonsContainer');
$div.remove();
$div = $('',{id:'pieRPPLockButtonsContainer',style:'margin-bottom:5px;'});
$div.append('
');
var btnInfos = [];
for(var iBtn=0;iBtn<=6;iBtn++){btnInfos.push({r:iBtn,val:iBtn});}
btnInfos.forEach(function(btnInfo){
var selected = (btnInfo.val == manualRank);
disabled = userRank < btnInfo.val;
if (btnInfo.val !== 6) {
$div.append(
$('
', {
class:'btn btn-lh' + (selected ? ' btn-lh-selected':'') + (btnInfo.r < 6 & (userRank < btnInfo.r || disabled) ? ' disabled' : '')
})
.text(btnInfo.hasOwnProperty('title') ? btnInfo.title : btnInfo.r + 1)
.data('val',btnInfo.hasOwnProperty('val') ? btnInfo.val : btnInfo.r + 1)
.hover(function() {})
.click(function() {
if((userRank >= $(this).data('val')) && (btnInfo.r < 6)) {
W.model.actionManager.add(new UpdateObject(item.model,{lockRank:($(this).data('val'))}));
addLockButtons();
}
})
);
}
});
$('#landmark-edit-general > div').after($div);
}
}
}
function buildItemList(itemNumber){
var $places = $("
");
$places.html([
''
].join(' '));
return $places.html();
}
function injectCss() {
var css = [
// Lock button formatting
'.btn-lh {cursor:pointer;padding:1px 6px;height:22px;border:solid 1px #c1c1c1;margin-right:3px;}',
'.btn.btn-lh.btn-lh-selected {background-color:#6999ae;color:white}',
'.btn.btn-lh.btn-lh-selected:hover {color:white}',
'.btn.btn-lh.disabled {color:#909090;background-color:#f7f7f7;}',
'.btn.btn-lh.btn-lh-selected.disabled {color:white;background-color:#6999ae;}',
//Settings Panel
'#sidebar .controls-container.pie-controls-container {padding: 0px;}'
].join(' ');
$('').appendTo('head');
}
function listPlaces(){
var category = "";
for(i=0; i