您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Find place that match filter criteria
当前为
// ==UserScript== // @name WME Wide-Angle Lens Places // @namespace https://gf.qytechs.cn/en/users/19861-vtpearce // @description Find place that match filter criteria // @author vtpearce and crazycaveman // @include https://www.waze.com/editor // @include /^https:\/\/(www|beta)\.waze\.com\/(?!user\/)(.{2,6}\/)?editor.*$/ // @version 1.3.6 // @grant none // @copyright 2017 vtpearce // @license CC BY-SA 4.0 // ==/UserScript== /*global W, OL, $, WazeWrap, WMEWAL*/ var WMEWAL_Places; (function (WMEWAL_Places) { var Operation; (function (Operation) { Operation[Operation["Equal"] = 1] = "Equal"; Operation[Operation["NotEqual"] = 2] = "NotEqual"; })(Operation || (Operation = {})); var pluginName = "WMEWAL-Places"; WMEWAL_Places.Title = "Places"; WMEWAL_Places.MinimumZoomLevel = 5; WMEWAL_Places.SupportsSegments = false; WMEWAL_Places.SupportsVenues = true; var settingsKey = "WMEWALPlacesSettings"; var savedSettingsKey = "WMEWALPlacesSavedSettings"; var settings = null; var savedSettings = []; var places; var nameRegex = null; var cityRegex = null; var state; var stateName; var lastModifiedBy; var lastModifiedByName; var initCount = 0; var Version = "1.2.3"; function GetTab() { var rpp = "RESIDENCE_HOME"; var html = "<table style='border-collapse:separate;border-spacing:0px 1px;'>"; html += "<tbody>"; html += "<tr><td style='font-size:1.2em'><b>Output To:</b></td></tr>"; html += "<tr><td style='padding-left:20px'>" + "<select id='_wmewalPlacesOutputTo'>" + "<option value='csv'>CSV File</option>" + "<option value='tab'>Browser Tab</option>" + "<option value='both'>Both CSV File and Browser Tab</option></select></td></tr>"; html += "<tr><td style='border-top: 1px solid; font-size: 1.2em'><b>Saved Filters</b></td></tr>"; html += "<tr><td style='padding-left: 20px; padding-bottom: 8px'>" + "<select id='_wmewalPlacesSavedSettings'/><br/>" + "<button class='btn btn-primary' id='_wmewalPlacesLoadSetting' title='Load'>Load</button>" + "<button class='btn btn-primary' style='margin-left: 4px;' id='_wmewalPlacesSaveSetting' title='Save'>Save</button>" + "<button class='btn btn-primary' style='margin-left: 4px;' id='_wmewalPlacesDeleteSetting' title='Delete'>Delete</button></td></tr>"; html += "<tr><td style='border-top: 1px solid; padding-top: 4px;font-size:1.2em'><b>Filters</b></td></tr>"; html += "<tr><td><b>Category:</b></td></tr>"; html += "<tr><td style='padding-left:20px'>" + "<select id='_wmewalPlacesCategory'>" + "<option value=''></option>"; for (var topIx = 0; topIx < W.Config.venues.categories.length; topIx++) { var topCategory = W.Config.venues.categories[topIx]; html += ("<option value='" + topCategory + "'>" + I18n.t("venues.categories." + topCategory) + "</option>"); var subCategories = W.Config.venues.subcategories[topCategory]; for (var subIx = 0; subIx < subCategories.length; subIx++) { var subCategory = W.Config.venues.subcategories[topCategory][subIx]; html += ("<option value='" + subCategory + "'>--" + I18n.t("venues.categories." + subCategory) + "</option>"); } } html += "<option value='" + rpp + "'>" + I18n.t("venues.categories." + rpp) + "</option>"; html += "</select></td></tr>"; html += "<tr><td><b>Lock Level:</b></td></tr>" + "<tr><td style='padding-left: 20px'>" + "<select id='_wmewalPlacesLockLevelOp'>" + "<option value='" + Operation.Equal.toString() + "' selected='selected'>=</option>" + "<option value='" + Operation.NotEqual.toString() + "'><></option></select>" + "<select id='_wmewalPlacesLockLevel'>" + "<option value=''></option>" + "<option value='1'>1</option>" + "<option value='2'>2</option>" + "<option value='3'>3</option>" + "</select></td></tr>"; html += "<tr><td><b>Name RegEx</b></td></tr>"; html += "<tr><td style='padding-left: 20px'>" + "<input type='text' id='_wmewalPlacesName' class='wal-textbox'/><br/>" + "<input id='_wmewalPlacesIgnoreCase' type='checkbox'/>" + "<label for='_wmewalPlacesIgnoreCase' style='padding-left: 20px'>Ignore case</label></td>"; html += "<tr><td><b>City RegEx:</b></td></tr>"; html += "<tr><td style='padding-left: 20px'><input type='text' id='_wmewalPlacesCity' class='wal-textbox'/><br/>" + "<input id='_wmewalPlacesCityIgnoreCase' type='checkbox'/>" + "<label for='_wmewalPlacesCityIgnoreCase' style='margin-left: 8px'>Ignore case</label></td></tr>"; html += "<tr><td><b>State:</b></td></tr>"; html += "<tr><td style='padding-left:20px'>" + "<select id='_wmewalPlacesStateOp'>" + "<option value='" + Operation.Equal.toString() + "' selected='selected'>=</option>" + "<option value='" + Operation.NotEqual.toString() + "'><></option></select>" + "<select id='_wmewalPlacesState'/>"; html += "<tr><td><b>Type:</b></td></tr>" + "<tr><td style='padding-left: 20px'><select id='_wmewalPlacesType'>" + "<option value=''></option>" + "<option value='area'>" + I18n.t("edit.landmark.type.area") + "</option>" + "<option value='point'>" + I18n.t("edit.landmark.type.point") + "</option>" + "</select></td></tr>"; html += "<tr><td><b>Last Modified By:</b></td></tr>"; html += "<tr><td class='wal-indent'>" + "<select id='_wmewalPlacesLastModifiedBy'/></td></tr>"; html += "<tr><td><input id='_wmewalPlacesEditable' type='checkbox'/>" + "<label for='_wmewalPlacesEditable' style='padding-left: 20px'>Editable by me</label></td></tr>"; html += "<tr><td><input type='checkbox' id='_wmewalPlacesNoHouseNumber'/>" + "<label for='_wmewalPlacesNoHouseNumber' style='padding-left: 20px'>Missing House Number</label></td></tr>"; html += "<tr><td><input type='checkbox' id='_wmewalPlacesNoStreet'/>" + "<label for='_wmewalPlacesNoStreet' style='padding-left: 20px'>Missing Street</label></td></tr>"; html += "<tr><td><input type='checkbox' id='_wmewalPlacesAdLocked'/>" + "<label for='_wmewalPlacesAdLocked' style='padding-left: 20px'>Ad Locked</label></td></tr>"; html += "<tr><td ><input type='checkbox' id='_wmewalPlacesUpdateRequests'/>" + "<label for='_wmewalPlacesUpdateRequests' style='padding-left: 20px'>Has Update Requests</label></td></tr>"; html += "<tr><td ><input type='checkbox' id='_wmewalPlacesPendingApproval'/>" + "<label for='_wmewalPlacesPendingApproval' style='padding-left: 20px'>Pending Approval</label></td></tr>"; return html; } WMEWAL_Places.GetTab = GetTab; function TabLoaded() { updateStates(); updateUsers(); updateUI(); updateSavedSettingsList(); $("#_wmewalPlacesState").on("focus", updateStates); $("#_wmewalPlacesLastModifiedBy").on("focus", updateUsers); $("#_wmewalPlacesLoadSetting").on("click", loadSetting); $("#_wmewalPlacesSaveSetting").on("click", saveSetting); $("#_wmewalPlacesDeleteSetting").on("click", deleteSetting); } WMEWAL_Places.TabLoaded = TabLoaded; function updateStates() { var selectState = $("#_wmewalPlacesState"); // Preserve current selection var currentId = parseInt(selectState.val()); selectState.empty(); var stateObjs = []; stateObjs.push({ id: null, name: "" }); for (var s in W.model.states.objects) { if (W.model.states.objects.hasOwnProperty(s)) { var st = W.model.states.getObjectById(parseInt(s)); if (st.id !== 1 && st.name.length !== 0) { stateObjs.push({ id: st.id, name: st.name }); } } } stateObjs.sort(function (a, b) { if (a.id == null) { return -1; } else { return a.name.localeCompare(b.name); } }); for (var ix = 0; ix < stateObjs.length; ix++) { var so = stateObjs[ix]; var stateOption = $("<option/>").text(so.name).attr("value", so.id || ""); if (currentId != null && so.id === currentId) { stateOption.attr("selected", "selected"); } selectState.append(stateOption); } } function updateUsers() { var selectLastModifiedBy = $("#_wmewalPlacesLastModifiedBy"); // Preserve current selection var currentId = parseInt(selectLastModifiedBy.val()); selectLastModifiedBy.empty(); var userObjs = []; userObjs.push({ id: null, name: "" }); for (var uo in W.model.users.objects) { if (W.model.users.objects.hasOwnProperty(uo)) { var u = W.model.users.getObjectById(parseInt(uo)); if (u.type === "user" && u.userName !== null && typeof u.userName !== "undefined") { userObjs.push({ id: u.id, name: u.userName }); } } } userObjs.sort(function (a, b) { if (a.id == null) { return -1; } else { return a.name.localeCompare(b.name); } }); for (var ix = 0; ix < userObjs.length; ix++) { var o = userObjs[ix]; var userOption = $("<option/>").text(o.name).attr("value", o.id); if (currentId != null && o.id == null) { userOption.attr("selected", "selected"); } selectLastModifiedBy.append(userOption); } } function updateSavedSettingsList() { var s = $("#_wmewalPlacesSavedSettings"); s.empty(); for (var ixSaved = 0; ixSaved < savedSettings.length; ixSaved++) { var opt = $("<option/>").attr("value", ixSaved).text(savedSettings[ixSaved].Name); s.append(opt); } } function updateUI() { $("#_wmewalPlacesOutputTo").val(settings.OutputTo); $("#_wmewalPlacesCategory").val(settings.Category); $("#_wmewalPlacesLockLevel").val(settings.LockLevel); $("#_wmewalPlacesLockLevelOp").prop("checked", settings.LockLevelOperation || Operation.Equal); $("#_wmewalPlacesName").val(settings.Regex || ""); $("#_wmewalPlacesIgnoreCase").prop("checked", settings.RegexIgnoreCase); $("#_wmewalPlacesCity").val(settings.CityRegex || ""); $("#_wmewalPlacesCityIgnoreCase").prop("checked", settings.CityRegexIgnoreCase); $("#_wmewalPlacesState").val(settings.State); $("#_wmewalPlacesStateOp").val(settings.StateOperation || Operation.Equal); $("#_wmewalPlacesType").val(settings.PlaceType); $("#_wmewalPlacesEditable").prop("checked", settings.EditableByMe); $("#_wmewalPlacesNoHouseNumber").prop("checked", settings.NoHouseNumber); $("#_wmewalPlacesAdLocked").prop("checked", settings.AdLocked); $("#_wmewalPlacesUpdateRequests").prop("checked", settings.UpdateRequests); $("#_wmewalPlacesPendingApproval").prop("checked", settings.PendingApproval); $("#_wmewalPlacesNoStreet").prop("checked", settings.NoStreet); $("#_wmewalPlacesLastModifiedBy").val(settings.LastModifiedBy); } function loadSetting() { var selectedSetting = parseInt($("#_wmewalPlacesSavedSettings").val()); if (selectedSetting == null || isNaN(selectedSetting) || selectedSetting < 0 || selectedSetting > savedSettings.length) { return; } settings.OutputTo = $("#_wmewalPlacesOutputTo").val(); var savedSetting = savedSettings[selectedSetting].Setting; for (var name_1 in savedSetting) { if (settings.hasOwnProperty(name_1)) { settings[name_1] = savedSetting[name_1]; } } updateUI(); } function validateSettings() { var allOk = true; var message = ""; var ignoreCase = $("#_wmewalPlacesIgnoreCase").prop("checked"); var pattern = $("#_wmewalPlacesName").val(); var r; if (pattern.length !== 0) { try { r = (ignoreCase ? new RegExp(pattern, "i") : new RegExp(pattern, "i")); } catch (error) { message = "Name RegEx is invalid"; allOk = false; } } ignoreCase = $("#_wmewalPlacesCityIgnoreCase").prop("checked"); pattern = $("#_wmewalPlacesCity").val(); if (pattern.length !== 0) { try { r = (ignoreCase ? new RegExp(pattern, "i") : new RegExp(pattern, "i")); } catch (error) { message += ((message.length > 0 ? "\n" : "") + "City RegEx is invalid"); allOk = false; } } var selectedState = $("#_wmewalPlacesState").val(); if (selectedState != null && selectedState.length !== 0) { if (W.model.states.getObjectById(selectedState) == null) { message += ((message.length > 0 ? "\n" : "") + "Invalid state selection"); allOk = false; } } var selectedUser = $("#_wmewalPlacesLastModifiedBy").val(); if (selectedUser != null && selectedUser.length > 0) { if (W.model.users.getObjectById(selectedUser) == null) { message += ((message.length > 0 ? "\n" : "") + "Invalid last modified user"); } } if (!allOk) { alert(pluginName + ": " + message); } return allOk; } function saveSetting() { if (validateSettings()) { var s = { Regex: null, RegexIgnoreCase: $("#_wmewalPlacesIgnoreCase").prop("checked"), Category: null, NoHouseNumber: $("#_wmewalPlacesNoHouseNumber").prop("checked"), State: null, StateOperation: parseInt($("#_wmewalPlacesStateOp").val()), LockLevel: null, LockLevelOperation: parseInt($("#_wmewalPlacesLockLevelOp").val()), EditableByMe: $("#_wmewalPlacesEditable").prop("checked"), AdLocked: $("#_wmewalPlacesAdLocked").prop("checked"), UpdateRequests: $("#_wmewalPlacesUpdateRequests").prop("checked"), PlaceType: null, PendingApproval: $("#_wmewalPlacesPendingApproval").prop("checked"), CityRegex: null, CityRegexIgnoreCase: $("#_wmewalPlacesCityIgnoreCase").prop("checked"), NoStreet: $("#_wmewalPlacesNoStreet").prop("checked"), LastModifiedBy: null }; var pattern = $("#_wmewalPlacesName").val(); s.Regex = pattern.length > 0 ? pattern : null; pattern = $("#_wmewalPlacesCity").val(); s.CityRegex = pattern.length > 0 ? pattern : null; var selectedState = $("#_wmewalPlacesState").val(); if (selectedState != null && selectedState.length > 0) { s.State = W.model.states.getObjectById(parseInt(selectedState)).id; } var selectedUser = $("#_wmewalPlacesLastModifiedBy").val(); if (selectedUser != null && selectedUser.length > 0) { s.LastModifiedBy = W.model.users.getObjectById(selectedUser).id; } var selectedLockLevel = $("#_wmewalPlacesLockLevel").val(); if (selectedLockLevel != null && selectedLockLevel.length > 0) { s.LockLevel = parseInt(selectedLockLevel); } s.PlaceType = $("#_wmewalPlacesType").val(); if (s.PlaceType.length === 0) { s.PlaceType = null; } s.Category = $("#_wmewalPlacesCategory").val(); if (s.Category.length === 0) { s.Category = null; } var sName = prompt("Enter a name for this setting"); if (sName == null) { return; } // Check to see if there is already a name that matches this for (var ixSetting = 0; ixSetting < savedSettings.length; ixSetting++) { if (savedSettings[ixSetting].Name === sName) { if (confirm("A setting with this name already exists. Overwrite?")) { savedSettings[ixSetting].Setting = s; updateSavedSettings(); } else { alert("Please pick a new name."); } return; } } var savedSetting = { Name: sName, Setting: s }; savedSettings.push(savedSetting); updateSavedSettings(); } } function deleteSetting() { var selectedSetting = parseInt($("#_wmewalPlacesSavedSettings").val()); if (selectedSetting == null || isNaN(selectedSetting) || selectedSetting < 0 || selectedSetting > savedSettings.length) { return; } if (confirm("Are you sure you want to delete this saved setting?")) { savedSettings.splice(selectedSetting, 1); updateSavedSettings(); } } function ScanStarted() { var allOk = validateSettings(); if (allOk) { places = []; settings.OutputTo = $("#_wmewalPlacesOutputTo").val(); settings.RegexIgnoreCase = $("#_wmewalPlacesIgnoreCase").prop("checked"); var pattern = $("#_wmewalPlacesName").val(); settings.Regex = null; nameRegex = null; if (pattern.length > 0) { settings.Regex = pattern; nameRegex = (settings.RegexIgnoreCase ? new RegExp(pattern, "i") : new RegExp(pattern)); } settings.CityRegexIgnoreCase = $("#_wmewalPlacesCityIgnoreCase").prop("checked"); pattern = $("#_wmewalPlacesCity").val(); settings.CityRegex = null; cityRegex = null; if (pattern.length !== 0) { settings.CityRegex = pattern; cityRegex = (settings.CityRegexIgnoreCase ? new RegExp(pattern, "i") : new RegExp(pattern)); } var selectedState = $("#_wmewalPlacesState").val(); state = null; settings.State = null; stateName = null; if (selectedState != null && selectedState.length !== 0) { state = W.model.states.getObjectById(selectedState); settings.State = state.id; stateName = state.name; } settings.StateOperation = parseInt($("#_wmewalPlacesStateOp").val()); var selectedUser = $("#_wmewalPlacesLastModifiedBy").val(); lastModifiedBy = null; settings.LastModifiedBy = null; lastModifiedByName = null; if (selectedUser != null && selectedUser.length > 0) { lastModifiedBy = W.model.users.getObjectById(parseInt(selectedUser)); settings.LastModifiedBy = lastModifiedBy.id; lastModifiedByName = lastModifiedBy.userName; } var selectedLockLevel = $("#_wmewalPlacesLockLevel").val(); settings.LockLevel = null; if (selectedLockLevel != null && selectedLockLevel.length !== 0) { settings.LockLevel = parseInt(selectedLockLevel); } settings.LockLevelOperation = parseInt($("#_wmewalPlacesLockLevelOp").val()); settings.PlaceType = $("#_wmewalPlacesType").val(); if (settings.PlaceType.length === 0) { settings.PlaceType = null; } settings.Category = $("#_wmewalPlacesCategory").val(); if (settings.Category.length === 0) { settings.Category = null; } settings.NoHouseNumber = $("#_wmewalPlacesNoHouseNumber").prop("checked"); settings.EditableByMe = $("#_wmewalPlacesEditable").prop("checked"); settings.AdLocked = $("#_wmewalPlacesAdLocked").prop("checked"); settings.UpdateRequests = $("#_wmewalPlacesUpdateRequests").prop("checked"); settings.PendingApproval = $("#_wmewalPlacesPendingApproval").prop("checked"); settings.NoStreet = $("#_wmewalPlacesNoStreet").prop("checked"); updateSettings(); } return allOk; } WMEWAL_Places.ScanStarted = ScanStarted; function ScanExtent(segments, venues) { var def = $.Deferred(); for (var ix = 0; ix < venues.length; ix++) { var venue = venues[ix]; if (venue != null) { var categories = Object.getOwnPropertyNames(venue.getCategorySet()); var address = venue.getAddress(); if ((settings.LockLevel == null || (settings.LockLevelOperation === Operation.Equal && (venue.attributes.lockRank || 0) + 1 === settings.LockLevel) || (settings.LockLevelOperation === Operation.NotEqual && (venue.attributes.lockRank || 0) + 1 !== settings.LockLevel)) && (!settings.EditableByMe || venue.arePropertiesEditable() || venue.areUpdateRequestsEditable()) && (settings.PlaceType == null || (settings.PlaceType === "point" && venue.isPoint() && !venue.is2D()) || (settings.PlaceType === "area" && !venue.isPoint() && venue.is2D())) && (nameRegex == null || nameRegex.test(venue.attributes.name)) && (!settings.NoHouseNumber || address == null || address.attributes == null || address.attributes.houseNumber == null) && (!settings.AdLocked || venue.attributes.adLocked) && (!settings.UpdateRequests || venue.hasOpenUpdateRequests()) && (!settings.PendingApproval || !venue.isApproved()) && (!settings.NoStreet || address == null || address.attributes == null || address.attributes.street == null || address.attributes.street.isEmpty || address.attributes.street.name == null)) { if (state != null) { if (address != null && address.attributes != null && !address.attributes.isEmpty && address.attributes.state != null) { if (settings.StateOperation === Operation.Equal && address.attributes.state.id !== state.id || settings.StateOperation === Operation.NotEqual && address.attributes.state.id === state.id) { continue; } } else if (settings.StateOperation === Operation.Equal) { continue; } } if (settings.LastModifiedBy != null) { if (venue.attributes.updatedBy != null) { if (venue.attributes.updatedBy !== settings.LastModifiedBy) { continue; } } else if (venue.attributes.createdBy !== settings.LastModifiedBy) { continue; } } if (settings.Category != null) { var categoryMatch = categories.find(function (e) { return e.localeCompare(settings.Category) === 0; }); if (typeof categoryMatch === "undefined" || categoryMatch == null || categoryMatch.length === 0) { continue; } } if (cityRegex != null) { var nameMatched = false; if (address != null && !address.attributes.isEmpty) { if (address.attributes.city != null && address.attributes.city.hasName()) { nameMatched = cityRegex.test(address.attributes.city.attributes.name); } } if (!nameMatched) { continue; } } if (!WMEWAL.IsVenueInArea(venue)) { continue; } var lastEditorID = venue.attributes.updatedBy || venue.attributes.createdBy; var lastEditor = W.model.users.getObjectById(lastEditorID); var place = { id: venue.attributes.id, mainCategory: venue.getMainCategory(), name: venue.attributes.name, lockLevel: venue.getLockRank() + 1, pointGeometry: venue.getPointGeometry(), // navigationPoint: venue.getNavigationPoint(), categories: categories, adLocked: venue.attributes.adLocked, hasOpenUpdateRequests: venue.hasOpenUpdateRequests(), placeType: ((venue.isPoint() && !venue.is2D()) ? I18n.t("edit.landmark.type.point") : I18n.t("edit.landmark.type.area")), isApproved: venue.isApproved(), city: ((address && !address.attributes.isEmpty && address.attributes.city.hasName()) ? address.attributes.city.attributes.name : "No City"), state: ((address && !address.attributes.isEmpty) ? address.attributes.state.name : "No State"), houseNumber: venue.attributes.houseNumber || "", streetName: ((address && !address.attributes.isEmpty && !address.attributes.street.isEmpty) ? address.attributes.street.name : "") || "", hasExternalProvider: venue.attributes.externalProviderIDs != null && venue.attributes.externalProviderIDs.length > 0, lastEditor: (lastEditor && lastEditor.userName) || "" }; places.push(place); } } } def.resolve(); return def.promise(); } WMEWAL_Places.ScanExtent = ScanExtent; function ScanComplete() { if (places.length === 0) { alert(pluginName + ": No places found."); } else { places.sort(function (a, b) { return a.name.localeCompare(b.name); }); var outputTo = $("#_wmewalPlacesOutputTo").val(); var isCSV = (outputTo === "csv" || outputTo === "both"); var isTab = (outputTo === "tab" || outputTo === "both"); var lineArray = void 0; var columnArray = void 0; var w = void 0; var fileName = void 0; if (isCSV) { lineArray = []; columnArray = ["Name,Categories,City,State,Lock Level,Type,Ad Locked,Has Open Update Requests,Pending Approval,Street,House Number,Has External Provider Link,Last Editor,Latitude,Longitude,Permalink"]; lineArray.push(columnArray); fileName = "Places_" + WMEWAL.areaName; fileName += ".csv"; } if (isTab) { w = window.open(); w.document.write("<html><head><title>Places</title></head><body>"); w.document.write("<h2>Area: " + WMEWAL.areaName + "</h2>"); w.document.write("<b>Filters</b>"); if (settings.Category != null) { w.document.write("<br/>Category: " + I18n.t("venues.categories." + settings.Category)); } if (settings.LockLevel != null) { w.document.write("<br/>Lock Level " + (settings.LockLevelOperation === Operation.NotEqual ? "does not equal " : "equals ") + settings.LockLevel.toString()); } if (settings.Regex != null) { w.document.write("<br/>Name matches " + settings.Regex); if (settings.RegexIgnoreCase) { w.document.write(" (ignoring case)"); } } if (cityRegex != null) { w.document.write("<br/>City Name matches: " + settings.CityRegex); if (settings.CityRegexIgnoreCase) { w.document.write(" (ignoring case)"); } } if (stateName != null) { w.document.write("<br/>State " + (settings.StateOperation === Operation.NotEqual ? "does not equal " : "equals ") + stateName); } if (settings.PlaceType != null) { w.document.write("<br/>Type " + I18n.t("edit.landmark.type." + settings.PlaceType)); } if (settings.LastModifiedBy != null) { w.document.write("<br/>Last modified by " + lastModifiedByName); } if (settings.NoHouseNumber) { w.document.write("<br/>No house number"); } if (settings.AdLocked) { w.document.write("<br/>Ad locked"); } if (settings.UpdateRequests) { w.document.write("<br/>Has update requests"); } if (settings.PendingApproval) { w.document.write("<br/>Pending approval"); } w.document.write("<table style='border-collapse: separate; border-spacing: 8px 0px'><thead><tr><th>Name</th><th>Categories</th><th>City</th><th>State</th>"); w.document.write("<th>Lock Level</th><th>Type</th><th>Ad Locked</th><th>Has Open Update Requests</th><th>Pending Approval</th><th>Street</th><th>House Number</th><th>Has External Provider Link</th><th>Last Editor</th><th>Latitude</th><th>Longitude</th><th>Permalink</th></tr><thead><tbody>"); } for (var ixPlace = 0; ixPlace < places.length; ixPlace++) { var place = places[ixPlace]; var plPlace = getPlacePL(place); var latlon = OL.Layer.SphericalMercator.inverseMercator(place.pointGeometry.x, place.pointGeometry.y); var categories = ""; for (var ixCategory = 0; ixCategory < place.categories.length; ixCategory++) { if (ixCategory > 0) { categories += ", "; } categories += I18n.t("venues.categories." + place.categories[ixCategory]); } if (isCSV) { columnArray = ["\"" + place.name + "\"", "\"" + categories + "\"", "\"" + place.city + "\"", "\"" + place.state + "\"", place.lockLevel.toString(), place.placeType, (place.adLocked ? "Yes" : "No"), (place.hasOpenUpdateRequests ? "Yes" : "No"), (place.isApproved ? "No" : "Yes"), place.streetName, place.houseNumber, (place.hasExternalProvider ? "Yes" : "No"), "\"" + place.lastEditor + "\"", latlon.lat.toString(), latlon.lon.toString(), "\"" + plPlace + "\""]; lineArray.push(columnArray); } if (isTab) { w.document.write("<tr><td>" + place.name + "</td><td>" + categories + "</td>"); w.document.write("<td>" + place.city + "</td>"); w.document.write("<td>" + place.state + "</td>"); w.document.write("<td>" + place.lockLevel.toString() + "</td>"); w.document.write("<td>" + place.placeType + "</td>"); w.document.write("<td>" + (place.adLocked ? "Yes" : "No") + "</td>"); w.document.write("<td>" + (place.hasOpenUpdateRequests ? "Yes" : "No") + "</td>"); w.document.write("<td>" + (place.isApproved ? "No" : "Yes") + "</td>"); w.document.write("<td>" + place.streetName + "</td>"); w.document.write("<td>" + place.houseNumber + "</td>"); w.document.write("<td>" + (place.hasExternalProvider ? "Yes" : "No") + "</td>"); w.document.write("<td>" + place.lastEditor + "</td>"); w.document.write("<td>" + latlon.lat.toString() + "</td>"); w.document.write("<td>" + latlon.lon.toString() + "</td>"); w.document.write("<td><a href=\'" + plPlace + "\' target=\'_blank\'>Permalink</a></td></tr>"); } } if (isCSV) { var csvContent = lineArray.join("\n"); //var encodedUri = "data:text/csv;charset=utf-8," + encodeURIComponent(csvContent); var blob = new Blob([csvContent], {type: "data:text/csv;charset=utf-8;"}); var link = document.createElement("a"); var url = URL.createObjectURL(blob); link.setAttribute("href", url); link.setAttribute("download", fileName); var node = document.body.appendChild(link); link.click(); document.body.removeChild(node); } if (isTab) { w.document.write("</tbody></table></body></html>"); w.document.close(); w = null; } } } WMEWAL_Places.ScanComplete = ScanComplete; function ScanCancelled() { ScanComplete(); } WMEWAL_Places.ScanCancelled = ScanCancelled; function Init() { console.group(pluginName + ": Initializing"); initCount++; var objectToCheck = ["OL", "W.location", "W.Config.venues", "WMEWAL.RegisterPlugIn"]; for (var i = 0; i < objectToCheck.length; i++) { var path = objectToCheck[i].split("."); var object = window; for (var j = 0; j < path.length; j++) { object = object[path[j]]; if (typeof object === "undefined" || object == null) { console.warn(path[j] + " NOT OK"); if (initCount < 60) { console.groupEnd(); window.setTimeout(Init, 1000); } else { console.error("Giving up on initialization"); console.groupEnd(); } return; } } console.log(objectToCheck[i] + " OK"); } if (typeof Storage !== "undefined") { if (localStorage[settingsKey]) { settings = JSON.parse(localStorage[settingsKey]); } if (localStorage[savedSettingsKey]) { try { savedSettings = JSON.parse(WMEWAL.LZString.decompressFromUTF16(localStorage[savedSettingsKey])); } catch (e) {} if (typeof savedSettings === "undefined" || savedSettings === null || savedSettings.length === 0) { console.debug(pluginName + ": decompressFromUTF16 failed, attempting decompress"); localStorage[savedSettingsKey +"Backup"] = localStorage[savedSettingsKey]; try { savedSettings = JSON.parse(WMEWAL.LZString.decompress(localStorage[savedSettingsKey])); } catch (e) {} if (typeof savedSettings === "undefined" || savedSettings === null || savedSettings.length === 0) { console.debug(pluginName + ": decompress failed, savedSettings unrecoverable. Using blank"); savedSettings = []; } updateSavedSettings(); } for (var ix = 0; ix < savedSettings.length; ix++) { if (savedSettings[ix].Setting.hasOwnProperty("OutputTo")) { delete savedSettings[ix].Setting.OutputTo; } } } } if (settings == null) { settings = { OutputTo: "csv", Regex: null, RegexIgnoreCase: true, Category: null, NoHouseNumber: false, State: null, StateOperation: Operation.Equal, LockLevel: null, LockLevelOperation: Operation.Equal, EditableByMe: true, AdLocked: false, UpdateRequests: false, PlaceType: null, PendingApproval: false, CityRegex: null, CityRegexIgnoreCase: true, NoStreet: false, LastModifiedBy: null, Version: Version }; } else { if (!settings.hasOwnProperty("NoStreet")) { settings.NoStreet = false; } if (!settings.hasOwnProperty("LastModifiedBy")) { settings.LastModifiedBy = null; } if (!settings.hasOwnProperty("Version")) { settings.Version = Version; updateSettings(); } } console.log("Initialized"); console.groupEnd(); if (compareVersions(settings.Version, Version) < 0) { var versionHistory = "WME WAL Places Plugin\nv" + Version + "\n\nWhat's New\n--------"; if (compareVersions(settings.Version, "1.2.3")) { versionHistory += "\nv1.2.3: Updates to supported latest WME."; } alert(versionHistory); settings.Version = Version; updateSettings(); } WMEWAL.RegisterPlugIn(WMEWAL_Places); } function getPlacePL(place) { var latlon = OL.Layer.SphericalMercator.inverseMercator(place.pointGeometry.x, place.pointGeometry.y); var url = "https://www.waze.com/editor/?env=" + W.location.code + "&lon=" + latlon.lon + "&lat=" + latlon.lat + "&zoom=5&mode=0&venues=" + place.id; return url; } function updateSettings() { if (typeof Storage !== "undefined") { localStorage[settingsKey] = JSON.stringify(settings); } } function updateSavedSettings() { if (typeof Storage !== "undefined") { localStorage[savedSettingsKey] = WMEWAL.LZString.compressToUTF16(JSON.stringify(savedSettings)); } updateSavedSettingsList(); } function compareVersions(v1, v2) { var v1Parts = v1.split("."); var v2Parts = v2.split("."); for (; v1Parts.length < v2Parts.length;) { v1Parts.push(".0"); } for (; v2Parts.length < v1Parts.length;) { v2Parts.push(".0"); } for (var ix = 0; ix < v1Parts.length; ix++) { var v1Element = parseInt(v1Parts[ix]); var v2Element = parseInt(v2Parts[ix]); if (v1Element < v2Element) { return -1; } else if (v1Element > v2Element) { return 1; } } return 0; } Init(); })(WMEWAL_Places || (WMEWAL_Places = {}));
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址