您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Enhancements to various Place interfaces
当前为
- // ==UserScript==
- // @name WME Place Interface Enhancements
- // @namespace https://greasyfork.org/users/30701-justins83-waze
- // @version 0.2.0
- // @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*
- // @author JustinS83
- // @grant none
- // @require https://greasyfork.org/scripts/24851-wazewrap/code/WazeWrap.js
- // @license GPLv3
- // ==/UserScript==
- (function() {
- 'use strict';
- var settings = {};
- // Your code here...
- function bootstrap(tries) {
- tries = tries || 1;
- if (window.W &&
- window.W.map &&
- window.W.model &&
- $) {
- init();
- } else if (tries < 1000) {
- setTimeout(function () {bootstrap(tries++);}, 200);
- }
- }
- bootstrap();
- function init(){
- var $section = $("<div>", {style:"padding:8px 16px", id:"WMEPIESettings"});
- $section.html([
- '<b>WME Place Interface Enhancements</b>',
- '<div class="controls-container" id="divAreaPlaceSizeControls">',
- '<div id="divShowAreaPlaceSize" class="controls-container"><input type="checkbox" id="_cbShowAreaPlaceSize" class="pieSettingsCheckbox" /><label for="_cbShowAreaPlaceSize">Show area Place size</label></div>',
- '<div id="divShowAreaPlaceSizeImperial"class="controls-container" style="padding-left:30px;"><input type="checkbox" id="_cbShowAreaPlaceSizeImperial" class="pieSettingsCheckbox" disabled /><label for ="_cbShowAreaPlaceSizeImperial"> Show imperial </label></div>',
- '<div id="divShowAreaPlaceSizeMetric" class="controls-container" style="padding-left:30px;"><input type="checkbox" id="_cbShowAreaPlaceSizeMetric" class="pieSettingsCheckbox" disabled /><label for ="_cbShowAreaPlaceSizeMetric"> Show metric</label></div>',
- '</div>',
- '<div class="controls-container" id="divShowLockButtonsRPP"><input type="checkbox" id="_cbShowLockButtonsRPP" class="pieSettingsCheckbox" /><label for="_cbShowLockButtonsRPP">Show lock buttons for RPPs</label></div>',
- '<div class="controls-container" id="divPlaceMenuCustomization>',
- '</div>'
- ].join(' '));
- new WazeWrap.Interface.Tab('PIE', $section.html(), init2);
- }
- function init2(){
- //First load settings
- loadSettings();
- //Second 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
- {
- $('#RPPOptionPlaceLockButtonsContainer').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);
- }
- });
- //Third load settings to interface
- setChecked('_cbShowAreaPlaceSize', settings.ShowAreaPlaceSize);
- setChecked('_cbShowAreaPlaceSizeImperial', settings.ShowAreaPlaceSizeImperial);
- setChecked('_cbShowAreaPlaceSizeMetric', settings.ShowAreaPlaceSizeMetric);
- setChecked('_cbShowLockButtonsRPP', settings.ShowLockButtonsRPP);
- if(settings.ShowAreaPlaceSize){
- $('#_cbShowAreaPlaceSizeImperial')[0].disabled = false;
- $('#_cbShowAreaPlaceSizeMetric')[0].disabled = false;
- attachPlaceSizeHandlers();
- }
- if(settings.ShowLockButtonsRPP)
- attachRPPLockButtonHandlers();
- $('.pieSettingsCheckbox').change(function() {
- var settingName = $(this)[0].id.substr(3);
- settings[settingName] = this.checked;
- saveSettings();
- });
- }
- function attachRPPLockButtonHandlers(){
- $('#RPPOptionPlaceLockButtonsContainer').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 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) + " m<sup>2</sup>";
- newList.append(newItem);
- }
- if(isChecked("_cbShowAreaPlaceSizeImperial")){
- newItem = document.createElement("LI");
- newItem.innerHTML = "Area: " + ftArea.toFixed(2) + " ft<sup>2</sup>";
- newList.append(newItem);
- }
- if(metersArea < 500){
- newItem = document.createElement("LI");
- newItem.innerHTML = "<span style='color:red; font-weight:bold;'>Places smaller than 500 m<sup>2</sup>/5382 ft<sup>2</sup> will not show in the client</span>";
- newList.append(newItem);
- }
- list.before(newList);
- $('#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
- };
- 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
- };
- 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){
- console.log("adding!!!");
- 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 = $('#RPPOptionPlaceLockButtonsContainer');
- $div.remove();
- $div = $('<div>',{id:'RPPOptionPlaceLockButtonsContainer',style:'margin-bottom:5px;'});
- $div.append('<label class="control-label">Lock</label>');
- 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(
- $('<div>', {
- 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 listPlaces(){
- var category = "";
- for(i=0; i<W.Config.venues.categories.length; i++){
- category = W.Config.venues.categories[i];
- console.log(category + " Main");
- var subCategories = W.Config.venues.subcategories[category];
- for(var j=0; j<subCategories.length;j++){
- console.log(subCategories[j]);
- }
- }
- }
- })();