$(document).ready(function () {
$(".inbox-mark-unread").on("ajax:success", function (event, data) {
- $("#inboxanchor").remove();
- $(".user-button").before(data.inboxanchor);
-
- $("#inbox-count").replaceWith(data.inbox_count);
-
- $(this).parents(".inbox-row").removeClass("inbox-row").addClass("inbox-row-unread");
+ updateHtml(data);
+ updateReadState(this, false);
});
$(".inbox-mark-read").on("ajax:success", function (event, data) {
- $("#inboxanchor").remove();
- $(".user-button").before(data.inboxanchor);
+ updateHtml(data);
+ updateReadState(this, true);
+ });
- $("#inbox-count").replaceWith(data.inbox_count);
+ $(".inbox-destroy").on("ajax:success", function (event, data) {
+ updateHtml(data);
- $(this).parents(".inbox-row-unread").removeClass("inbox-row-unread").addClass("inbox-row");
+ $(this).closest("tr").fadeOut(800, "linear", function () {
+ $(this).remove();
+ });
});
- $(".inbox-destroy").on("ajax:success", function (event, data) {
+ function updateHtml(data) {
$("#inboxanchor").remove();
$(".user-button").before(data.inboxanchor);
$("#inbox-count").replaceWith(data.inbox_count);
-
- $(this).parents(".inbox-row, .inbox-row-unread").fadeOut(800, "linear", function () {
- $(this).remove();
- });
- });
+ }
+
+ function updateReadState(target, isRead) {
+ $(target).closest("tr")
+ .toggleClass("inbox-row", isRead)
+ .toggleClass("inbox-row-unread", !isRead)
+ .find(".inbox-mark-unread").prop("hidden", !isRead).end()
+ .find(".inbox-mark-read").prop("hidden", isRead);
+ }
});
//= require leaflet.locatecontrol/src/L.Control.Locate
$(document).ready(function () {
+ var defaultHomeZoom = 12;
+ var map, marker, deleted_lat, deleted_lon;
+
if ($("#map").length) {
- var map = L.map("map", {
+ map = L.map("map", {
attributionControl: false,
zoomControl: false
}).addLayer(new L.OSM.Mapnik());
.addClass("control-button");
if (OSM.home) {
- map.setView([OSM.home.lat, OSM.home.lon], 12);
+ map.setView([OSM.home.lat, OSM.home.lon], defaultHomeZoom);
} else {
map.setView([0, 0], 0);
}
if ($("#map").hasClass("set_location")) {
- var marker = L.marker([0, 0], { icon: OSM.getUserIcon() });
+ marker = L.marker([0, 0], {
+ icon: OSM.getUserIcon(),
+ keyboard: false,
+ interactive: false
+ });
if (OSM.home) {
marker.setLatLng([OSM.home.lat, OSM.home.lon]);
}
map.on("click", function (e) {
- if ($("#updatehome").is(":checked")) {
- var zoom = map.getZoom(),
- precision = OSM.zoomPrecision(zoom),
- location = e.latlng.wrap();
+ if (!$("#updatehome").is(":checked")) return;
+
+ var zoom = map.getZoom(),
+ precision = OSM.zoomPrecision(zoom),
+ location = e.latlng.wrap();
+
+ $("#home_lat").val(location.lat.toFixed(precision));
+ $("#home_lon").val(location.lng.toFixed(precision));
+
+ deleted_lat = null;
+ deleted_lon = null;
+ respondToHomeUpdate();
+ }).on("moveend", function () {
+ var lat = $("#home_lat").val().trim(),
+ lon = $("#home_lon").val().trim(),
+ location;
+
+ try {
+ if (lat && lon) {
+ location = L.latLng(lat, lon);
+ }
+ } catch (error) {
+ // keep location undefined
+ }
- $("#home_message").hide();
- $("#home_lat").val(location.lat.toFixed(precision));
- $("#home_lon").val(location.lng.toFixed(precision));
+ $("#home_show").prop("disabled", !location || isCloseEnoughToMapCenter(location));
+ });
- marker.setLatLng(e.latlng);
- marker.addTo(map);
- }
+ $("#home_lat, #home_lon").on("input", function () {
+ deleted_lat = null;
+ deleted_lon = null;
+ respondToHomeUpdate();
+ });
+
+ $("#home_show").click(function () {
+ var lat = $("#home_lat").val(),
+ lon = $("#home_lon").val();
+
+ map.setView([lat, lon], defaultHomeZoom);
+ });
+
+ $("#home_delete").click(function () {
+ var lat = $("#home_lat").val(),
+ lon = $("#home_lon").val();
+
+ $("#home_lat, #home_lon").val("");
+ deleted_lat = lat;
+ deleted_lon = lon;
+ respondToHomeUpdate();
+ $("#home_undelete").trigger("focus");
+ });
+
+ $("#home_undelete").click(function () {
+ $("#home_lat").val(deleted_lat);
+ $("#home_lon").val(deleted_lon);
+ deleted_lat = null;
+ deleted_lon = null;
+ respondToHomeUpdate();
+ $("#home_delete").trigger("focus");
});
} else {
$("[data-user]").each(function () {
}
}
+ function respondToHomeUpdate() {
+ var lat = $("#home_lat").val().trim(),
+ lon = $("#home_lon").val().trim(),
+ location;
+
+ try {
+ if (lat && lon) {
+ location = L.latLng(lat, lon);
+ }
+ $("#home_lat, #home_lon").removeClass("is-invalid");
+ } catch (error) {
+ if (lat && isNaN(lat)) $("#home_lat").addClass("is-invalid");
+ if (lon && isNaN(lon)) $("#home_lon").addClass("is-invalid");
+ }
+
+ $("#home_message").toggleClass("invisible", Boolean(location));
+ $("#home_show").prop("hidden", !location);
+ $("#home_delete").prop("hidden", !location);
+ $("#home_undelete").prop("hidden", !(!location && deleted_lat && deleted_lon));
+ if (location) {
+ marker.setLatLng([lat, lon]);
+ marker.addTo(map);
+ map.panTo([lat, lon]);
+ } else {
+ marker.removeFrom(map);
+ }
+ }
+
+ function isCloseEnoughToMapCenter(location) {
+ var inputPt = map.latLngToContainerPoint(location),
+ centerPt = map.latLngToContainerPoint(map.getCenter());
+
+ return centerPt.distanceTo(inputPt) < 10;
+ }
+
function updateAuthUID() {
var provider = $("select#user_auth_provider").val();
/* Rules for messages pages */
.messages {
- button[type="submit"] {
- margin: auto;
- white-space: nowrap;
- }
-
.inbox-row {
background: $offwhite;
}
}
}
-.inbox-row .inbox-mark-read {
- display: none;
-}
-
-.inbox-sent {
- white-space: nowrap;
-}
-
-.inbox-mark-unread,
-.inbox-mark-read,
-.inbox-delete {
- width: 1%;
-}
-
-.inbox-row-unread .inbox-mark-unread {
- display: none;
-}
-
.search_form {
background-color: $lightgrey;
@lon = @diary_entry.longitude
@lat = @diary_entry.latitude
@zoom = 12
- elsif current_user.home_lat.nil? || current_user.home_lon.nil?
+ elsif !current_user.has_home?
@lon = params[:lon] || -0.1
@lat = params[:lat] || 51.5
@zoom = params[:zoom] || 4
if current_user
data[:user] = current_user.id.to_json
- data[:user_home] = { :lat => current_user.home_lat, :lon => current_user.home_lon } unless current_user.home_lon.nil? || current_user.home_lat.nil?
+ data[:user_home] = { :lat => current_user.home_lat, :lon => current_user.home_lon } if current_user.has_home?
end
data[:location] = session[:location] if session[:location]
@preferred_languages ||= Locale.list(languages)
end
+ def has_home?
+ home_lat && home_lon
+ end
+
def nearby(radius = Settings.nearby_radius, num = Settings.nearby_users)
- if home_lon && home_lat
+ if has_home?
gc = OSM::GreatCircle.new(home_lat, home_lon)
sql_for_area = QuadTile.sql_for_area(gc.bounds(radius), "home_")
sql_for_distance = gc.sql_for_distance("home_lat", "home_lon")
end
def update_tile
- self.home_tile = QuadTile.tile_for_point(home_lat, home_lon) if home_lat && home_lon
+ self.home_tile = QuadTile.tile_for_point(home_lat, home_lon) if has_home?
end
end
end
if current_user && current_user == user && can?(:details, User)
- if user.home_lat && user.home_lon
+ if user.has_home?
json.home do
json.lat user.home_lat
json.lon user.home_lon
end
end
if current_user && current_user == user && can?(:details, User)
- if user.home_lat && user.home_lon
+ if user.has_home?
xml.tag! "home", :lat => user.home_lat,
:lon => user.home_lon,
:zoom => user.home_zoom
<div class="col">
<p class='text-muted mb-0'>
<%= link_to contact.display_name, user_path(contact) %>
- <% if @user.home_lon and @user.home_lat and contact.home_lon and contact.home_lat %>
+ <% if @user.has_home? and contact.has_home? %>
<% distance = @user.distance(contact) %>
<% if distance < 1 %>
(<%= t ".m away", :count => (distance * 1000).round %>)
<div class="row">
<% if current_user and @user.id == current_user.id %>
<div class="col-md order-md-last">
- <% if @user.home_lat.nil? or @user.home_lon.nil? %>
+ <% if !@user.has_home? %>
<div id="map" class="content_map border border-grey">
<p class="m-3"><%= t(".no_home_location_html", :edit_profile_link => link_to(t(".edit_your_profile"), edit_profile_path)) %></p>
</div>
<% unless (banner = next_banner()).nil? %>
-<%= link_to (image_tag banner[:img], :alt => banner[:alt], :title => banner[:alt]), banner[:link] %>
+<%= link_to (image_tag banner[:img], :srcset => banner[:srcset], :alt => banner[:alt], :title => banner[:alt]), banner[:link] %>
<button type="button" class="btn-close position-absolute top-0 end-0 p-4" id="<%= banner_cookie(banner[:id]) %>" aria-label="<%= t("javascripts.close") %>"></button>
<% end %>
<% content_for(:body_class) { "map-layout" } %>
-<% if current_user and !current_user.home_lon.nil? and !current_user.home_lat.nil? %>
+<% if current_user&.has_home? %>
<% content_for :greeting do %>
<%= link_to t("layouts.home"),
"#",
<tr id="inbox-<%= message_summary.id %>" class="inbox-row<%= "-unread" unless message_summary.message_read? %>">
- <td class="inbox-sender"><%= link_to message_summary.sender.display_name, user_path(message_summary.sender) %></td>
- <td class="inbox-subject"><%= link_to message_summary.title, message_path(message_summary) %></td>
- <td class="inbox-sent"><%= l message_summary.sent_on, :format => :friendly %></td>
- <td class="inbox-mark-unread"><%= button_to t(".unread_button"), message_mark_path(message_summary, :mark => "unread"), :remote => true, :class => "btn btn-sm btn-primary" %></td>
- <td class="inbox-mark-read"><%= button_to t(".read_button"), message_mark_path(message_summary, :mark => "read"), :remote => true, :class => "btn btn-sm btn-primary" %></td>
- <td class="inbox-destroy"><%= button_to t(".destroy_button"), message_path(message_summary, :referer => request.fullpath), :method => :delete, :remote => true, :class => "btn btn-sm btn-danger" %></td>
+ <td><%= link_to message_summary.sender.display_name, user_path(message_summary.sender) %></td>
+ <td><%= link_to message_summary.title, message_path(message_summary) %></td>
+ <td class="text-nowrap"><%= l message_summary.sent_on, :format => :friendly %></td>
+ <td class="text-nowrap d-flex justify-content-end gap-1">
+ <%= button_to t(".unread_button"), message_mark_path(message_summary, :mark => "unread"), :remote => true, :class => "btn btn-sm btn-primary", :form => { :class => "inbox-mark-unread", :hidden => !message_summary.message_read? } %>
+ <%= button_to t(".read_button"), message_mark_path(message_summary, :mark => "read"), :remote => true, :class => "btn btn-sm btn-primary", :form => { :class => "inbox-mark-read", :hidden => message_summary.message_read? } %>
+ <%= button_to t(".destroy_button"), message_path(message_summary, :referer => request.fullpath), :method => :delete, :remote => true, :class => "btn btn-sm btn-danger", :form_class => "inbox-destroy" %>
+ </td>
</tr>
<tr class="inbox-row">
- <td class="inbox-sender"><%= link_to sent_message_summary.recipient.display_name, user_path(sent_message_summary.recipient) %></td>
- <td class="inbox-subject"><%= link_to sent_message_summary.title, message_path(sent_message_summary) %></td>
- <td class="inbox-sent"><%= l sent_message_summary.sent_on, :format => :friendly %></td>
- <td class="inbox-destroy"><%= button_to t(".destroy_button"), message_path(sent_message_summary, :referer => request.fullpath), :method => :delete, :remote => true, :class => "btn btn-sm btn-danger" %></td>
+ <td><%= link_to sent_message_summary.recipient.display_name, user_path(sent_message_summary.recipient) %></td>
+ <td><%= link_to sent_message_summary.title, message_path(sent_message_summary) %></td>
+ <td class="text-nowrap"><%= l sent_message_summary.sent_on, :format => :friendly %></td>
+ <td class="text-nowrap d-flex justify-content-end gap-1">
+ <%= button_to t(".destroy_button"), message_path(sent_message_summary, :referer => request.fullpath), :method => :delete, :remote => true, :class => "btn btn-sm btn-danger", :form_class => "inbox-destroy" %>
+ </td>
</tr>
<h4><%= render :partial => "message_count" %></h4>
<% if current_user.messages.size > 0 %>
- <table class="table table-sm">
+ <table class="table table-sm align-middle">
<thead>
<tr>
<th><%= t ".from" %></th>
<th><%= t ".subject" %></th>
<th><%= t ".date" %></th>
- <th></th>
- <th></th>
</tr>
</thead>
<tbody>
<h4><%= t ".messages", :count => current_user.sent_messages.size %></h4>
<% if current_user.sent_messages.size > 0 %>
- <table class="table table-sm">
+ <table class="table table-sm align-middle">
<thead>
<tr>
<th><%= t ".to" %></th>
<th><%= t ".subject" %></th>
<th><%= t ".date" %></th>
- <th></th>
</tr>
</thead>
<tbody>
<fieldset>
<legend><%= t ".home location" -%></legend>
- <p id="home_message" class="text-muted"<% if current_user.home_lat and current_user.home_lon %> hidden<% end %>><%= t ".no home location" %></p>
+ <p id="home_message" class="text-muted m-0<% if current_user.has_home? %> invisible<% end %>"><%= t ".no home location" %></p>
<div class="row">
<%= f.text_field :home_lat, :wrapper_class => "col-sm-4", :id => "home_lat" %>
<%= f.text_field :home_lon, :wrapper_class => "col-sm-4", :id => "home_lon" %>
+ <div class="col-sm-4 pt-2 align-self-end">
+ <button type="button" id="home_show" class="btn btn-outline-primary"<% unless current_user.has_home? %> hidden<% end %> disabled><%= t ".show" %></button>
+ <button type="button" id="home_delete" class="btn btn-outline-primary"<% unless current_user.has_home? %> hidden<% end %>><%= t ".delete" %></button>
+ <button type="button" id="home_undelete" class="btn btn-outline-primary" hidden><%= t ".undelete" %></button>
+ </div>
</div>
<div class="form-check">
- <input class="form-check-input" type="checkbox" name="updatehome" value="1" <% unless current_user.home_lat and current_user.home_lon %> checked="checked" <% end %> id="updatehome" />
+ <input class="form-check-input" type="checkbox" name="updatehome" value="1" <% unless current_user.has_home? %> checked <% end %> id="updatehome" />
<label class="form-check-label" for="updatehome"><%= t ".update home location on click" %></label>
</div>
<%= tag.div "", :id => "map", :class => "content_map set_location border border-grey rounded" %>
home location: "Home Location"
no home location: "You have not entered your home location."
update home location on click: "Update home location when I click on the map?"
+ show: "Show"
+ delete: "Delete"
+ undelete: "Undo delete"
update:
success: Profile updated.
failure: Couldn't update profile.
get changeset_show_path(changeset)
assert_response :success, "cannot get first changeset"
- assert_select "osm[version='#{Settings.api_version}'][generator='OpenStreetMap server']", 1
+ assert_select "osm[version='#{Settings.api_version}'][generator='#{Settings.generator}']", 1
assert_select "osm>changeset[id='#{changeset.id}']", 1
assert_select "osm>changeset>@open", "true"
assert_select "osm>changeset>@created_at", changeset.created_at.xmlschema
get changeset_show_path(changeset), :params => { :include_discussion => true }
assert_response :success, "cannot get first changeset with comments"
- assert_select "osm[version='#{Settings.api_version}'][generator='OpenStreetMap server']", 1
+ assert_select "osm[version='#{Settings.api_version}'][generator='#{Settings.generator}']", 1
assert_select "osm>changeset[id='#{changeset.id}']", 1
assert_select "osm>changeset>@open", "true"
assert_select "osm>changeset>@created_at", changeset.created_at.xmlschema
get changeset_show_path(changeset), :params => { :include_discussion => true }
assert_response :success, "cannot get closed changeset with comments"
- assert_select "osm[version='#{Settings.api_version}'][generator='OpenStreetMap server']", 1
+ assert_select "osm[version='#{Settings.api_version}'][generator='#{Settings.generator}']", 1
assert_select "osm>changeset[id='#{changeset.id}']", 1
assert_select "osm>changeset>@open", "false"
assert_select "osm>changeset>@created_at", changeset.created_at.xmlschema
assert_not_nil js
assert_equal Settings.api_version, js["version"]
- assert_equal "OpenStreetMap server", js["generator"]
+ assert_equal Settings.generator, js["generator"]
assert_equal changeset.id, js["changeset"]["id"]
assert js["changeset"]["open"]
assert_equal changeset.created_at.xmlschema, js["changeset"]["created_at"]
js = ActiveSupport::JSON.decode(@response.body)
assert_not_nil js
assert_equal Settings.api_version, js["version"]
- assert_equal "OpenStreetMap server", js["generator"]
+ assert_equal Settings.generator, js["generator"]
assert_equal changeset.id, js["changeset"]["id"]
assert js["changeset"]["open"]
assert_equal changeset.created_at.xmlschema, js["changeset"]["created_at"]
assert_not_nil js
assert_equal Settings.api_version, js["version"]
- assert_equal "OpenStreetMap server", js["generator"]
+ assert_equal Settings.generator, js["generator"]
assert_equal changeset.id, js["changeset"]["id"]
assert_not js["changeset"]["open"]
assert_equal changeset.created_at.xmlschema, js["changeset"]["created_at"]
"can't upload a simple valid creation to changeset: #{@response.body}"
# check the returned payload
- assert_select "diffResult[version='#{Settings.api_version}'][generator='OpenStreetMap server']", 1
+ assert_select "diffResult[version='#{Settings.api_version}'][generator='#{Settings.generator}']", 1
assert_select "diffResult>node", 1
assert_select "diffResult>way", 1
assert_select "diffResult>relation", 1
"can't do a conditional delete of in use objects: #{@response.body}"
# check the returned payload
- assert_select "diffResult[version='#{Settings.api_version}'][generator='OpenStreetMap server']", 1
+ assert_select "diffResult[version='#{Settings.api_version}'][generator='#{Settings.generator}']", 1
assert_select "diffResult>node", 1
assert_select "diffResult>way", 1
assert_select "diffResult>relation", 1
"failed to return error in XML format"
# check the returned payload
- assert_select "osmError[version='#{Settings.api_version}'][generator='OpenStreetMap server']", 1
+ assert_select "osmError[version='#{Settings.api_version}'][generator='#{Settings.generator}']", 1
assert_select "osmError>status", 1
assert_select "osmError>message", 1
end
assert_not_nil js
assert_equal Settings.api_version, js["version"]
- assert_equal "OpenStreetMap server", js["generator"]
+ assert_equal Settings.generator, js["generator"]
assert_equal 2, js["changesets"].count
# check that the correct error is given when we provide both UID and name
assert_response :success
# count one osm element
- assert_select "osm[version='#{Settings.api_version}'][generator='OpenStreetMap server']", 1
+ assert_select "osm[version='#{Settings.api_version}'][generator='#{Settings.generator}']", 1
# we should have only the expected number of relations
assert_select "osm>relation", expected_relations.size
resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.6.2.tgz#1816b5f6948029c5eaacb0703b850ee0cb37d8f8"
integrity sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==
-"@eslint/eslintrc@^2.1.1":
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.1.tgz#18d635e24ad35f7276e8a49d135c7d3ca6a46f93"
- integrity sha512-9t7ZA7NGGK8ckelF0PQCfcxIUzs1Md5rrO6U/c+FIQNanea5UZC0wqKXH4vHBccmu4ZJgZ2idtPeW7+Q2npOEA==
+"@eslint/eslintrc@^2.1.2":
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.2.tgz#c6936b4b328c64496692f76944e755738be62396"
+ integrity sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==
dependencies:
ajv "^6.12.4"
debug "^4.3.2"
minimatch "^3.1.2"
strip-json-comments "^3.1.1"
-"@eslint/js@^8.46.0":
- version "8.46.0"
- resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.46.0.tgz#3f7802972e8b6fe3f88ed1aabc74ec596c456db6"
- integrity sha512-a8TLtmPi8xzPkCbp/OGFUo5yhRkHM2Ko9kOWP4znJr0WAhWyThaw3PnwX4vOTWOAMsV2uRt32PPDcEz63esSaA==
+"@eslint/js@^8.47.0":
+ version "8.47.0"
+ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.47.0.tgz#5478fdf443ff8158f9de171c704ae45308696c7d"
+ integrity sha512-P6omY1zv5MItm93kLM8s2vr1HICJH8v0dvddDhysbIuZ+vcjOHg5Zbkf1mTkcmi2JA9oBG2anOkRnW8WJTS8Og==
"@humanwhocodes/config-array@^0.11.10":
version "0.11.10"
esrecurse "^4.3.0"
estraverse "^5.2.0"
-eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.2:
- version "3.4.2"
- resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.2.tgz#8c2095440eca8c933bedcadf16fefa44dbe9ba5f"
- integrity sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw==
+eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3:
+ version "3.4.3"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800"
+ integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
eslint@^8.0.0:
- version "8.46.0"
- resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.46.0.tgz#a06a0ff6974e53e643acc42d1dcf2e7f797b3552"
- integrity sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg==
+ version "8.47.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.47.0.tgz#c95f9b935463fb4fad7005e626c7621052e90806"
+ integrity sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==
dependencies:
"@eslint-community/eslint-utils" "^4.2.0"
"@eslint-community/regexpp" "^4.6.1"
- "@eslint/eslintrc" "^2.1.1"
- "@eslint/js" "^8.46.0"
+ "@eslint/eslintrc" "^2.1.2"
+ "@eslint/js" "^8.47.0"
"@humanwhocodes/config-array" "^0.11.10"
"@humanwhocodes/module-importer" "^1.0.1"
"@nodelib/fs.walk" "^1.2.8"
doctrine "^3.0.0"
escape-string-regexp "^4.0.0"
eslint-scope "^7.2.2"
- eslint-visitor-keys "^3.4.2"
+ eslint-visitor-keys "^3.4.3"
espree "^9.6.1"
esquery "^1.4.2"
esutils "^2.0.2"