Merge branch 'main' into production

This commit is contained in:
Mouse Reeve 2021-05-20 18:21:58 -07:00
commit 8bb815d5b3
51 changed files with 2242 additions and 1071 deletions

View file

@ -2,7 +2,6 @@
from django.contrib import admin
from bookwyrm import models
admin.site.register(models.SiteSettings)
admin.site.register(models.User)
admin.site.register(models.FederatedServer)
admin.site.register(models.Connector)

View file

@ -58,6 +58,13 @@ class Connector(AbstractConnector):
Mapping("bio", formatter=get_description),
]
def get_book_data(self, remote_id):
data = get_data(remote_id)
if data.get("type", {}).get("key") == "/type/redirect":
remote_id = self.base_url + data.get("location")
return get_data(remote_id)
return data
def get_remote_id_from_data(self, data):
"""format a url from an openlibrary id field"""
try:
@ -75,8 +82,11 @@ class Connector(AbstractConnector):
except KeyError:
raise ConnectorException("Invalid book data")
url = "%s%s/editions" % (self.books_url, key)
data = get_data(url)
return pick_default_edition(data["entries"])
data = self.get_book_data(url)
edition = pick_default_edition(data["entries"])
if not edition:
raise ConnectorException("No editions for work")
return edition
def get_work_from_edition_data(self, data):
try:
@ -84,7 +94,7 @@ class Connector(AbstractConnector):
except (IndexError, KeyError):
raise ConnectorException("No work found for edition")
url = "%s%s" % (self.books_url, key)
return get_data(url)
return self.get_book_data(url)
def get_authors_from_data(self, data):
"""parse author json and load or create authors"""
@ -143,7 +153,7 @@ class Connector(AbstractConnector):
def load_edition_data(self, olkey):
"""query openlibrary for editions of a work"""
url = "%s/works/%s/editions" % (self.books_url, olkey)
return get_data(url)
return self.get_book_data(url)
def expand_book_data(self, book):
work = book

View file

@ -4,4 +4,7 @@ from bookwyrm import models
def site_settings(request): # pylint: disable=unused-argument
"""include the custom info about the site"""
return {"site": models.SiteSettings.objects.get()}
return {
"site": models.SiteSettings.objects.get(),
"active_announcements": models.Announcement.active_announcements(),
}

View file

@ -269,6 +269,12 @@ class SiteForm(CustomForm):
exclude = []
class AnnouncementForm(CustomForm):
class Meta:
model = models.Announcement
exclude = ["remote_id"]
class ListForm(CustomForm):
class Meta:
model = models.List

View file

@ -0,0 +1,56 @@
# Generated by Django 3.2 on 2021-05-20 19:34
import bookwyrm.models.fields
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0074_auto_20210511_1829"),
]
operations = [
migrations.CreateModel(
name="Announcement",
fields=[
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("created_date", models.DateTimeField(auto_now_add=True)),
("updated_date", models.DateTimeField(auto_now=True)),
(
"remote_id",
bookwyrm.models.fields.RemoteIdField(
max_length=255,
null=True,
validators=[bookwyrm.models.fields.validate_remote_id],
),
),
("preview", models.CharField(max_length=255)),
("content", models.TextField(blank=True, null=True)),
("event_date", models.DateTimeField(blank=True, null=True)),
("start_date", models.DateTimeField(blank=True, null=True)),
("end_date", models.DateTimeField(blank=True, null=True)),
("active", models.BooleanField(default=True)),
(
"user",
models.ForeignKey(
on_delete=django.db.models.deletion.PROTECT,
to=settings.AUTH_USER_MODEL,
),
),
],
options={
"abstract": False,
},
),
]

View file

@ -25,6 +25,7 @@ from .federated_server import FederatedServer
from .import_job import ImportJob, ImportItem
from .site import SiteSettings, SiteInvite, PasswordReset, InviteRequest
from .announcement import Announcement
cls_members = inspect.getmembers(sys.modules[__name__], inspect.isclass)
activity_models = {

View file

@ -0,0 +1,28 @@
""" admin announcements """
from django.db import models
from django.db.models import Q
from django.utils import timezone
from .base_model import BookWyrmModel
class Announcement(BookWyrmModel):
"""The admin has something to say"""
user = models.ForeignKey("User", on_delete=models.PROTECT)
preview = models.CharField(max_length=255)
content = models.TextField(null=True, blank=True)
event_date = models.DateTimeField(blank=True, null=True)
start_date = models.DateTimeField(blank=True, null=True)
end_date = models.DateTimeField(blank=True, null=True)
active = models.BooleanField(default=True)
@classmethod
def active_announcements(cls):
"""announcements that should be displayed"""
now = timezone.now()
return cls.objects.filter(
Q(start_date__isnull=True) | Q(start_date__lte=now),
Q(end_date__isnull=True) | Q(end_date__gte=now),
active=True,
)

View file

@ -88,10 +88,11 @@ body {
.transition-y.is-hidden {
display: block !important;
visibility: hidden !important;
height: 0;
width: 0;
margin: 0;
padding: 0;
height: 0 !important;
width: 0 !important;
margin: 0 !important;
padding: 0 !important;
overflow: auto;
}
.transition-x,

View file

@ -1,7 +1,5 @@
{% extends 'layout.html' %}
{% load i18n %}
{% load bookwyrm_tags %}
{% load humanize %}
{% load i18n %}{% load bookwyrm_tags %}{% load humanize %}{% load utilities %}
{% block title %}{{ book.title }}{% endblock %}

View file

@ -1,5 +1,4 @@
{% spaceless %}
{% load i18n %}
<dl>

View file

@ -88,6 +88,7 @@
<div class="column is-half">
<section class="block">
<h2 class="title is-4">{% trans "Metadata" %}</h2>
<p class="mb-2">
<label class="label" for="id_title">{% trans "Title:" %}</label>
<input type="text" name="title" value="{{ form.title.value|default:'' }}" maxlength="255" class="input" required="" id="id_title">
@ -117,11 +118,23 @@
<p class="help is-danger">{{ error | escape }}</p>
{% endfor %}
<p class="mb-2"><label class="label" for="id_series_number">{% trans "Series number:" %}</label> {{ form.series_number }} </p>
<p class="mb-2">
<label class="label" for="id_series_number">{% trans "Series number:" %}</label>
{{ form.series_number }}
</p>
{% for error in form.series_number.errors %}
<p class="help is-danger">{{ error | escape }}</p>
{% endfor %}
<p class="mb-2">
<label class="label" for="id_languages">{% trans "Languages:" %}</label>
{{ form.languages }}
<span class="help">{% trans "Separate multiple values with commas." %}</span>
</p>
{% for error in form.languages.errors %}
<p class="help is-danger">{{ error | escape }}</p>
{% endfor %}
<p class="mb-2">
<label class="label" for="id_publishers">{% trans "Publisher:" %}</label>
{{ form.publishers }}
@ -216,18 +229,27 @@
{% for error in form.isbn_13.errors %}
<p class="help is-danger">{{ error | escape }}</p>
{% endfor %}
<p class="mb-2"><label class="label" for="id_isbn_10">{% trans "ISBN 10:" %}</label> {{ form.isbn_10 }} </p>
{% for error in form.isbn_10.errors %}
<p class="help is-danger">{{ error | escape }}</p>
{% endfor %}
<p class="mb-2"><label class="label" for="id_openlibrary_key">{% trans "Openlibrary key:" %}</label> {{ form.openlibrary_key }} </p>
<p class="mb-2"><label class="label" for="id_openlibrary_key">{% trans "Openlibrary ID:" %}</label> {{ form.openlibrary_key }} </p>
{% for error in form.openlibrary_key.errors %}
<p class="help is-danger">{{ error | escape }}</p>
{% endfor %}
<p class="mb-2"><label class="label" for="id_inventaire_id">{% trans "Inventaire ID:" %}</label> {{ form.inventaire_id }} </p>
{% for error in form.inventaire_id.errors %}
<p class="help is-danger">{{ error | escape }}</p>
{% endfor %}
<p class="mb-2"><label class="label" for="id_oclc_number">{% trans "OCLC Number:" %}</label> {{ form.oclc_number }} </p>
{% for error in form.oclc_number.errors %}
<p class="help is-danger">{{ error | escape }}</p>
{% endfor %}
<p class="mb-2"><label class="label" for="id_asin">{% trans "ASIN:" %}</label> {{ form.asin }} </p>
{% for error in form.ASIN.errors %}
<p class="help is-danger">{{ error | escape }}</p>

View file

@ -1,11 +1,11 @@
{% extends 'layout.html' %}
{% load i18n %}
{% load i18n %}{% load utilities %}
{% block title %}{% blocktrans with book_title=work.title %}Editions of {{ book_title }}{% endblocktrans %}{% endblock %}
{% block title %}{% blocktrans with book_title=work|book_title %}Editions of {{ book_title }}{% endblocktrans %}{% endblock %}
{% block content %}
<div class="block">
<h1 class="title">{% blocktrans with work_path=work.local_path work_title=work.title %}Editions of <a href="{{ work_path }}">"{{ work_title }}"</a>{% endblocktrans %}</h1>
<h1 class="title">{% blocktrans with work_path=work.local_path work_title=work|book_title %}Editions of <a href="{{ work_path }}">"{{ work_title }}"</a>{% endblocktrans %}</h1>
</div>
{% include 'book/edition_filters.html' %}
@ -22,7 +22,7 @@
<div class="column my-3-mobile ml-3-tablet mr-auto">
<h2 class="title is-5 mb-1">
<a href="{{ book.local_path }}" class="has-text-black">
{{ book.title }}
{{ book|book_title }}
</a>
</h2>

View file

@ -1,5 +1,5 @@
{% extends 'snippets/filters_panel/filter_field.html' %}
{% load i18n %}
{% load i18n %}{% load utilities %}
{% block filter %}
<label class="label is-block" for="id_format">{% trans "Format:" %}</label>
@ -8,7 +8,7 @@
<option value="">{% trans "Any" %}</option>
{% for format in formats %}{% if format %}
<option value="{{ format }}" {% if request.GET.format == format %}selected{% endif %}>
{{ format|title }}
{{ format|book_title }}
</option>
{% endif %}{% endfor %}
</select>

View file

@ -49,7 +49,3 @@
</div>
{% endblock %}
{% block scripts %}
<script src="/static/js/localstorage.js"></script>
{% endblock %}

View file

@ -1,5 +1,4 @@
{% load layout %}
{% load i18n %}
{% load layout %}{% load i18n %}
<!DOCTYPE html>
<html lang="{% get_lang %}">
<head>
@ -182,6 +181,15 @@
</div>
</nav>
{% if request.user.is_authenticated and active_announcements.exists %}
<div class="block is-flex-grow-1">
<div class="container">
{% for announcement in active_announcements %}
{% include 'snippets/announcement.html' with announcement=announcement %}
{% endfor %}
</div>
</div>
{% endif %}
<div class="section is-flex-grow-1">
<div class="container">
@ -230,6 +238,7 @@
var csrf_token = '{{ csrf_token }}';
</script>
<script src="/static/js/bookwyrm.js"></script>
<script src="/static/js/localstorage.js"></script>
{% block scripts %}{% endblock %}
</body>
</html>

View file

@ -28,9 +28,9 @@
</div>
<div class="column is-narrow">
{% trans "Open" as button_text %}
{% include 'snippets/toggle/open_button.html' with text=button_text small=True controls_text="more-results-panel" controls_uid=result_set.connector.identifier class="is-small" icon_with_text="arrow-down" pressed=forloop.first %}
{% include 'snippets/toggle/open_button.html' with text=button_text controls_text="more-results-panel" controls_uid=result_set.connector.identifier class="is-small" icon_with_text="arrow-down" pressed=forloop.first %}
{% trans "Close" as button_text %}
{% include 'snippets/toggle/close_button.html' with text=button_text small=True controls_text="more-results-panel" controls_uid=result_set.connector.identifier class="is-small" icon_with_text="arrow-up" pressed=forloop.first %}
{% include 'snippets/toggle/close_button.html' with text=button_text controls_text="more-results-panel" controls_uid=result_set.connector.identifier class="is-small" icon_with_text="arrow-up" pressed=forloop.first %}
</div>
</header>
{% endif %}

View file

@ -43,6 +43,10 @@
{% if perms.bookwyrm.edit_instance_settings %}
<h2 class="menu-label">{% trans "Instance Settings" %}</h2>
<ul class="menu-list">
<li>
{% url 'settings-announcements' as url %}
<a href="{{ url }}"{% if url in request.path %} class="is-active" aria-selected="true"{% endif %}>{% trans "Announcements" %}</a>
</li>
<li>
{% url 'settings-site' as url %}
<a href="{{ url }}"{% if url in request.path %} class="is-active" aria-selected="true"{% endif %}>{% trans "Site Settings" %}</a>

View file

@ -0,0 +1,70 @@
{% extends 'settings/admin_layout.html' %}
{% load i18n %}{% load humanize %}
{% block title %}{% trans "Announcement" %} - {{ announcement.preview }}{% endblock %}
{% block header %}
{% trans "Announcement" %}
<a href="{% url 'settings-announcements' %}" class="has-text-weight-normal help">{% trans "Back to list" %}</a>
{% endblock %}
{% block edit-button %}
{% trans "Edit Announcement" as button_text %}
<div class="field has-addons">
<div class="control">
{% include 'snippets/toggle/open_button.html' with controls_text="edit-announcement" icon_with_text="pencil" text=button_text focus="edit-announcement-header" %}
</div>
<form class="control" action="{% url 'settings-announcements-delete' announcement.id %}" method="post">
{% csrf_token %}
<button type="submit" class="button is-danger">
<span class="icon icon-x" aria-hidden="true"></span>
<span>{% trans "Delete" %}</span>
</button>
</form>
</div>
{% endblock %}
{% block panel %}
<form name="edit-announcement" method="post" action="{% url 'settings-announcements' announcement.id %}" class="block">
{% include 'settings/announcement_form.html' with controls_text="edit-announcement" %}
</form>
<div class="block content">
<dl>
<div class="is-flex notification pt-1 pb-1 mb-0 {% if announcement in active_announcements %}is-success{% else %}is-danger{% endif %}">
<dt class="mr-1 has-text-weight-bold">{% trans "Visible:" %}</dt>
<dd>
{% if announcement in active_announcements %}
{% trans "True" %}
{% else %}
{% trans "False" %}
{% endif %}
</dd>
</div>
{% if announcement.start_date %}
<div class="is-flex notificationi pt-1 pb-1 mb-0 has-background-white">
<dt class="mr-1 has-text-weight-bold">{% trans "Start date:" %}</dt>
<dd>{{ announcement.start_date|naturalday }}</dd>
</div>
{% endif %}
{% if announcement.end_date %}
<div class="is-flex notification pt-1 pb-1 mb-0 has-background-white">
<dt class="mr-1 has-text-weight-bold">{% trans "End date:" %}</dt>
<dd>{{ announcement.end_date|naturalday }}</dd>
</div>
{% endif %}
<div class="is-flex notification pt-1 pb-1 has-background-white">
<dt class="mr-1 has-text-weight-bold">{% trans "Active:" %}</dt>
<dd>{{ announcement.active }}</dd>
</div>
</dl>
<hr aria-hidden="true">
{% include 'snippets/announcement.html' with announcement=announcement pressed=True admin_mode=True %}
</div>
{% endblock %}

View file

@ -0,0 +1,68 @@
{% extends 'components/inline_form.html' %}
{% load i18n %}
{% block header %}
{% trans "Create Announcement" %}
{% endblock %}
{% block form %}
{% csrf_token %}
<input type="hidden" name="user" value="{{ request.user.id }}">
<p>
<label class="label" for="id_preview">Preview:</label>
{{ form.preview }}
{% for error in form.preview.errors %}
<p class="help is-danger">{{ error | escape }}</p>
{% endfor %}
</p>
<p>
<label class="label" for="id_content">Content:</label>
{{ form.content }}
{% for error in form.content.errors %}
<p class="help is-danger">{{ error | escape }}</p>
{% endfor %}
</p>
<p>
<label class="label" for="id_event_date">Event date:</label>
<input type="date" name="event_date" value="{{ form.event_date.value }}" class="input" id="id_event_date">
{% for error in form.event_date.errors %}
<p class="help is-danger">{{ error | escape }}</p>
{% endfor %}
</p>
<hr aria-hidden="true">
<div class="columns">
<div class="column">
<p>
<label class="label" for="id_start_date">Start date:</label>
<input type="date" name="start_date" class="input" id="id_start_date">
{% for error in form.start_date.errors %}
<p class="help is-danger">{{ error | escape }}</p>
{% endfor %}
</p>
</div>
<div class="column">
<p>
<label class="label" for="id_end_date">End date:</label>
<input type="date" name="end_date" class="input" id="id_end_date">
{% for error in form.end_date.errors %}
<p class="help is-danger">{{ error | escape }}</p>
{% endfor %}
</p>
</div>
<div class="column is-narrow">
<p>
<label class="label" for="id_active">Active:</label>
{{ form.active }}
{% for error in form.active.errors %}
<p class="help is-danger">{{ error | escape }}</p>
{% endfor %}
</p>
</div>
</div>
<div class="field has-addons">
<div class="control">
<button type="submit" class="button is-primary">{% trans "Save" %}</button>
</div>
</div>
{% endblock %}

View file

@ -0,0 +1,54 @@
{% extends 'settings/admin_layout.html' %}
{% load i18n %}{% load humanize %}
{% block title %}{% trans "Announcements" %}{% endblock %}
{% block header %}{% trans "Announcements" %}{% endblock %}
{% block edit-button %}
{% trans "Create Announcement" as button_text %}
{% include 'snippets/toggle/open_button.html' with controls_text="create-announcement" icon_with_text="plus" text=button_text focus="create-announcement-header" %}
</a>
{% endblock %}
{% block panel %}
<form name="create-announcement" method="post" action="{% url 'settings-announcements' %}" class="block">
{% include 'settings/announcement_form.html' with controls_text="create-announcement" %}
</form>
<table class="table is-striped">
<tr>
<th>
{% url 'settings-announcements' as url %}
{% trans "Date added" as text %}
{% include 'snippets/table-sort-header.html' with field="created_date" sort=sort text=text %}
</th>
<th>
{% trans "Preview" as text %}
{% include 'snippets/table-sort-header.html' with field="preview" sort=sort text=text %}
</th>
<th>
{% trans "Start date" as text %}
{% include 'snippets/table-sort-header.html' with field="start_date" sort=sort text=text %}
</th>
<th>
{% trans "End date" as text %}
{% include 'snippets/table-sort-header.html' with field="end_date" sort=sort text=text %}
</th>
<th>
{% trans "Status" as text %}
{% include 'snippets/table-sort-header.html' with field="active" sort=sort text=text %}
</th>
</tr>
{% for announcement in announcements %}
<tr>
<td>{{ announcement.created_date|naturalday }}</td>
<td><a href="{% url 'settings-announcements' announcement.id %}">{{ announcement.preview }}</a></td>
<td>{{ announcement.start_date|naturaltime|default:'' }}</td>
<td>{{ announcement.end_date|naturaltime|default:'' }}</td>
<td>{% if announcement.active %}{% trans "active" %}{% else %}{% trans "inactive" %}{% endif %}</td>
</tr>
{% endfor %}
</table>
{% include 'snippets/pagination.html' with page=announcements path=request.path %}
{% endblock %}

View file

@ -10,7 +10,7 @@
{% if server.status == "blocked" %}<span class="icon icon-x has-text-danger is-size-5" title="{% trans 'Blocked' %}"><span class="is-sr-only">{% trans "Blocked" %}</span></span>
{% endif %}
<a href="{% url 'settings-federation' %}" class="has-text-weight-normal help">{% trans "Back to server list" %}</a>
<a href="{% url 'settings-federation' %}" class="has-text-weight-normal help">{% trans "Back to list" %}</a>
{% endblock %}
{% block panel %}

View file

@ -0,0 +1,38 @@
{% load humanize %}{% load i18n %}{% load utilities %}
{% with announcement.id|uuid as uuid %}
<aside
class="notification mb-1 p-3{% if not admin_mode %} is-hidden{% endif %} transition-y"
{% if not admin_mode %}data-hide="hide-announcement-{{ announcement.id }}"{% endif %}
>
<div class="columns mb-0">
<div class="column pb-0">
{% if announcement.event_date %}
<strong>{{ announcement.event_date|naturalday|title }}:</strong>
{% endif %}
{{ announcement.preview }}
</div>
{% if announcement.content %}
<div class="column is-narrow pb-0">
{% trans "Open" as button_text %}
{% include 'snippets/toggle/open_button.html' with text=button_text controls_text="announcement" class="is-small" controls_uid=uuid icon_with_text="arrow-down" %}
{% trans "Close" as button_text %}
{% include 'snippets/toggle/close_button.html' with text=button_text controls_text="announcement" class="is-small" controls_uid=uuid icon_with_text="arrow-up" %}
</div>
{% endif %}
</div>
{% if announcement.content %}
<div class="mb-2 mt-2 {% if not pressed %}is-hidden{% endif %}" id="announcement-{{ uuid }}">
<div class="box is-shadowless mb-0">
{{ announcement.content|safe }}
</div>
</div>
{% endif %}
<div class="is-flex mt-0 help">
<p>{% blocktrans with user_path=announcement.user.local_path username=announcement.user.display_name %}Posted by <a href="{{ user_path }}">{{ username }}</a>{% endblocktrans %}</p>
{% if not admin_mode %}
<span class="mr-2 ml-2" aria-hidden="true">&middot;</span>
<a class="set-display" data-id="hide-announcement-{{ announcement.id }}" data-value="true">{% trans "Dismiss message" %}</a>
{% endif %}
</div>
</aside>
{% endwith %}

View file

@ -1,8 +1,8 @@
{% load i18n %}
{% load utilities %}
{% if book.authors %}
{% blocktrans with path=book.local_path title=book|title %}<a href="{{ path }}">{{ title }}</a> by {% endblocktrans %}{% include 'snippets/authors.html' with book=book %}
{% blocktrans with path=book.local_path title=book|book_title %}<a href="{{ path }}">{{ title }}</a> by {% endblocktrans %}{% include 'snippets/authors.html' with book=book %}
{% else %}
<a href="{{ book.local_path }}">{{ book|title }}</a>
<a href="{{ book.local_path }}">{{ book|book_title }}</a>
{% endif %}

View file

@ -48,7 +48,7 @@
{% if status.book %}
{% if status.status_type == 'GeneratedNote' or status.status_type == 'Rating' %}
<a href="{{ status.book.local_path }}">{{ status.book|title }}</a>{% if status.status_type == 'Rating' %}: {% include 'snippets/stars.html' with rating=status.rating %}
<a href="{{ status.book.local_path }}">{{ status.book|book_title }}</a>{% if status.status_type == 'Rating' %}: {% include 'snippets/stars.html' with rating=status.rating %}
<span
itemprop="reviewRating"
itemscope
@ -59,7 +59,7 @@
{% if status.book %}
{% if status.status_type == 'GeneratedNote' or status.status_type == 'Rating' %}
<a href="{{ status.book.local_path }}">{{ status.book|title }}</a>{% if status.status_type == 'Rating' %}:
<a href="{{ status.book.local_path }}">{{ status.book|book_title }}</a>{% if status.status_type == 'Rating' %}:
<span
itemprop="reviewRating"
itemscope
@ -78,7 +78,7 @@
{% endif %}
{% elif status.mention_books %}
<a href="{{ status.mention_books.first.local_path }}">
{{ status.mention_books.first.title }}
{{ status.mention_books.first|book_title }}
</a>
{% endif %}
{% include 'snippets/stars.html' with rating=status.rating %}
@ -87,7 +87,7 @@
{% include 'snippets/book_titleby.html' with book=status.book %}
{% endif %}
{% elif status.mention_books %}
<a href="{{ status.mention_books.first.local_path }}">{{ status.mention_books.first|title }}</a>
<a href="{{ status.mention_books.first.local_path }}">{{ status.mention_books.first|book_title }}</a>
{% endif %}
</h3>

View file

@ -18,7 +18,7 @@ def get_user_identifier(user):
return user.localname if user.localname else user.username
@register.filter(name="title")
@register.filter(name="book_title")
def get_title(book):
"""display the subtitle if the title is short"""
if not book:

View file

@ -0,0 +1,137 @@
""" test for app action functionality """
from django.template.response import TemplateResponse
from django.test import TestCase
from django.test.client import RequestFactory
from bookwyrm import forms, models, views
class AnnouncementViews(TestCase):
"""every response to a get request, html or json"""
def setUp(self):
"""we need basic test data and mocks"""
self.factory = RequestFactory()
self.local_user = models.User.objects.create_user(
"mouse@local.com",
"mouse@mouse.mouse",
"password",
local=True,
localname="mouse",
)
models.SiteSettings.objects.create()
def test_announcements_page(self):
"""there are so many views, this just makes sure it LOADS"""
models.Announcement.objects.create(preview="hi", user=self.local_user)
view = views.Announcements.as_view()
request = self.factory.get("")
request.user = self.local_user
request.user.is_superuser = True
result = view(request)
self.assertIsInstance(result, TemplateResponse)
result.render()
self.assertEqual(result.status_code, 200)
def test_announcements_page_empty(self):
"""there are so many views, this just makes sure it LOADS"""
view = views.Announcements.as_view()
request = self.factory.get("")
request.user = self.local_user
request.user.is_superuser = True
result = view(request)
self.assertIsInstance(result, TemplateResponse)
result.render()
self.assertEqual(result.status_code, 200)
def test_announcement_page(self):
"""there are so many views, this just makes sure it LOADS"""
announcement = models.Announcement.objects.create(
preview="hi", user=self.local_user
)
view = views.Announcement.as_view()
request = self.factory.get("")
request.user = self.local_user
request.user.is_superuser = True
result = view(request, announcement.id)
self.assertIsInstance(result, TemplateResponse)
result.render()
self.assertEqual(result.status_code, 200)
def test_create_announcement(self):
"""create a new announcement"""
view = views.Announcements.as_view()
form = forms.AnnouncementForm()
form.data["preview"] = "hi hi"
form.data["start_date"] = "2021-05-20"
form.data["user"] = self.local_user.id
request = self.factory.post("", form.data)
request.user = self.local_user
request.user.is_superuser = True
view(request)
announcement = models.Announcement.objects.get()
self.assertEqual(announcement.preview, "hi hi")
self.assertEqual(announcement.start_date.year, 2021)
self.assertEqual(announcement.start_date.month, 5)
self.assertEqual(announcement.start_date.day, 20)
def test_edit_announcement(self):
"""edit an announcement"""
announcement = models.Announcement.objects.create(
preview="hi", user=self.local_user
)
view = views.Announcement.as_view()
form = forms.AnnouncementForm(instance=announcement)
form.data["preview"] = "hi hi"
form.data["start_date"] = "2021-05-20"
form.data["user"] = self.local_user.id
request = self.factory.post("", form.data)
request.user = self.local_user
request.user.is_superuser = True
view(request, announcement.id)
announcement.refresh_from_db()
self.assertEqual(announcement.preview, "hi hi")
self.assertEqual(announcement.start_date.year, 2021)
self.assertEqual(announcement.start_date.month, 5)
self.assertEqual(announcement.start_date.day, 20)
def test_delete_announcement(self):
"""delete an announcement"""
announcement = models.Announcement.objects.create(
preview="hi", user=self.local_user
)
view = views.delete_announcement
request = self.factory.post("")
request.user = self.local_user
request.user.is_superuser = True
view(request, announcement.id)
self.assertFalse(models.Announcement.objects.exists())
def test_view_announcement(self):
"""display announcement on other pages"""
view = views.User.as_view()
request = self.factory.get("")
request.user = self.local_user
result = view(request, self.local_user.localname)
self.assertIsInstance(result, TemplateResponse)
result.render()
self.assertEqual(result.status_code, 200)

View file

@ -53,6 +53,17 @@ class Views(TestCase):
self.assertEqual(data[0]["title"], "Test Book")
self.assertEqual(data[0]["key"], "https://%s/book/%d" % (DOMAIN, self.book.id))
def test_search_no_query(self):
"""just the search page"""
view = views.Search.as_view()
# we need a connector for this, sorry
request = self.factory.get("")
with patch("bookwyrm.views.search.is_api_request") as is_api:
is_api.return_value = False
response = view(request)
self.assertIsInstance(response, TemplateResponse)
response.render()
def test_search_books(self):
"""searches remote connectors"""
view = views.Search.as_view()

View file

@ -56,6 +56,21 @@ urlpatterns = [
),
# admin
re_path(r"^settings/site-settings/?$", views.Site.as_view(), name="settings-site"),
re_path(
r"^settings/announcements/?$",
views.Announcements.as_view(),
name="settings-announcements",
),
re_path(
r"^settings/announcements/(?P<announcement_id>\d+)/?$",
views.Announcement.as_view(),
name="settings-announcements",
),
re_path(
r"^settings/announcements/(?P<announcement_id>\d+)/delete/?$",
views.delete_announcement,
name="settings-announcements-delete",
),
re_path(
r"^settings/email-preview/?$",
views.site.email_preview,

View file

@ -1,4 +1,5 @@
""" make sure all our nice views are available """
from .announcements import Announcements, Announcement, delete_announcement
from .authentication import Login, Register, Logout
from .author import Author, EditAuthor
from .block import Block, unblock

View file

@ -0,0 +1,97 @@
""" make announcements """
from django.contrib.auth.decorators import login_required, permission_required
from django.core.paginator import Paginator
from django.shortcuts import get_object_or_404, redirect
from django.template.response import TemplateResponse
from django.utils.decorators import method_decorator
from django.views import View
from bookwyrm import forms, models
from bookwyrm.settings import PAGE_LENGTH
# pylint: disable=no-self-use
@method_decorator(login_required, name="dispatch")
@method_decorator(
permission_required("bookwyrm.edit_instance_settings", raise_exception=True),
name="dispatch",
)
class Announcements(View):
"""tell everyone"""
def get(self, request):
"""view and create announcements"""
announcements = models.Announcement.objects
sort = request.GET.get("sort", "-created_date")
sort_fields = [
"created_date",
"preview",
"start_date",
"end_date",
"active",
]
if sort in sort_fields + ["-{:s}".format(f) for f in sort_fields]:
announcements = announcements.order_by(sort)
data = {
"announcements": Paginator(announcements, PAGE_LENGTH).get_page(
request.GET.get("page")
),
"form": forms.AnnouncementForm(),
"sort": sort,
}
return TemplateResponse(request, "settings/announcements.html", data)
def post(self, request):
"""edit the site settings"""
form = forms.AnnouncementForm(request.POST)
if form.is_valid():
form.save()
# reset the create form
form = forms.AnnouncementForm()
data = {
"announcements": Paginator(
models.Announcement.objects.all(), PAGE_LENGTH
).get_page(request.GET.get("page")),
"form": form,
}
return TemplateResponse(request, "settings/announcements.html", data)
@method_decorator(login_required, name="dispatch")
@method_decorator(
permission_required("bookwyrm.edit_instance_settings", raise_exception=True),
name="dispatch",
)
class Announcement(View):
"""edit an announcement"""
def get(self, request, announcement_id):
"""view announcement"""
announcement = get_object_or_404(models.Announcement, id=announcement_id)
data = {
"announcement": announcement,
"form": forms.AnnouncementForm(instance=announcement),
}
return TemplateResponse(request, "settings/announcement.html", data)
def post(self, request, announcement_id):
"""edit announcement"""
announcement = get_object_or_404(models.Announcement, id=announcement_id)
form = forms.AnnouncementForm(request.POST, instance=announcement)
if form.is_valid():
announcement = form.save()
data = {
"announcement": announcement,
"form": form,
}
return TemplateResponse(request, "settings/announcement.html", data)
@login_required
@permission_required("bookwyrm.edit_instance_settings", raise_exception=True)
def delete_announcement(_, announcement_id):
"""delete announcement"""
announcement = get_object_or_404(models.Announcement, id=announcement_id)
announcement.delete()
return redirect("settings-announcements")

View file

@ -319,7 +319,10 @@ def upload_cover(request, book_id):
def set_cover_from_url(url):
"""load it from a url"""
image_file = get_image(url)
try:
image_file = get_image(url)
except: # pylint: disable=bare-except
return None
if not image_file:
return None
image_name = str(uuid4()) + "." + url.split(".")[-1]

View file

@ -120,9 +120,9 @@ class GetStartedUsers(View):
)
if user_results.count() < 5:
suggested_users = get_suggested_users(request.user)
user_results = list(user_results) + list(get_suggested_users(request.user))
data = {
"suggested_users": list(user_results) + list(suggested_users),
"suggested_users": user_results,
}
return TemplateResponse(request, "get_started/users.html", data)

View file

@ -7,6 +7,7 @@ from django.http import HttpResponseBadRequest
from django.shortcuts import get_object_or_404, redirect
from django.template.response import TemplateResponse
from django.utils.decorators import method_decorator
from django.utils.translation import gettext_lazy as _
from django.views import View
from bookwyrm import forms, models
@ -62,8 +63,8 @@ class Import(View):
include_reviews,
privacy,
)
except (UnicodeDecodeError, ValueError):
return HttpResponseBadRequest("Not a valid csv file")
except (UnicodeDecodeError, ValueError, KeyError):
return HttpResponseBadRequest(_("Not a valid csv file"))
importer.start_import(job)

View file

@ -27,7 +27,7 @@ class PasswordResetRequest(View):
"""create a password reset token"""
email = request.POST.get("email")
try:
user = models.User.objects.get(email=email)
user = models.User.objects.get(email=email, email__isnull=False)
except models.User.DoesNotExist:
data = {"error": _("No user with that email address was found.")}
return TemplateResponse(request, "password_reset_request.html", data)

View file

@ -7,8 +7,8 @@ from .helpers import get_user_from_username, privacy_filter
class RssFeed(Feed):
"""serialize user's posts in rss feed"""
description_template = "snippets/rss_content.html"
title_template = "snippets/rss_title.html"
description_template = "rss/content.html"
title_template = "rss/title.html"
def get_object(self, request, username):
"""the user who's posts get serialized"""

View file

@ -36,7 +36,7 @@ class Search(View):
)
return JsonResponse([r.json() for r in book_results], safe=False)
if not search_type:
if query and not search_type:
search_type = "user" if "@" in query else "book"
endpoints = {

View file

@ -21,7 +21,7 @@ from .reading import edit_readthrough
class CreateStatus(View):
"""the view for *posting*"""
def get(self, request):
def get(self, request, status_type): # pylint: disable=unused-argument
"""compose view (used for delete-and-redraft"""
book = get_object_or_404(models.Edition, id=request.GET.get("book"))
data = {"book": book}

View file

@ -95,7 +95,7 @@ class Followers(View):
data = {
"user": user,
"is_self": request.user.id == user.id,
"follow_list": paginated.page(request.GET.get("page", 1)),
"follow_list": paginated.get_page(request.GET.get("page")),
}
return TemplateResponse(request, "user/relationships/followers.html", data)
@ -114,7 +114,7 @@ class Following(View):
data = {
"user": user,
"is_self": request.user.id == user.id,
"follow_list": paginated.page(request.GET.get("page", 1)),
"follow_list": paginated.get_page(request.GET.get("page")),
}
return TemplateResponse(request, "user/relationships/following.html", data)

Binary file not shown.

File diff suppressed because it is too large Load diff

View file

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 0.0.1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-05-14 15:12-0700\n"
"POT-Creation-Date: 2021-05-20 14:40-0700\n"
"PO-Revision-Date: 2021-02-28 17:19-0800\n"
"Last-Translator: Mouse Reeve <mousereeve@riseup.net>\n"
"Language-Team: English <LL@li.org>\n"
@ -47,29 +47,29 @@ msgstr ""
msgid "Unlimited"
msgstr ""
#: bookwyrm/forms.py:293
#: bookwyrm/forms.py:299
msgid "List Order"
msgstr ""
#: bookwyrm/forms.py:294
#: bookwyrm/forms.py:300
msgid "Book Title"
msgstr ""
#: bookwyrm/forms.py:295 bookwyrm/templates/snippets/create_status_form.html:34
#: bookwyrm/forms.py:301 bookwyrm/templates/snippets/create_status_form.html:34
#: bookwyrm/templates/user/shelf/shelf.html:84
#: bookwyrm/templates/user/shelf/shelf.html:115
msgid "Rating"
msgstr ""
#: bookwyrm/forms.py:297 bookwyrm/templates/lists/list.html:101
#: bookwyrm/forms.py:303 bookwyrm/templates/lists/list.html:101
msgid "Sort By"
msgstr ""
#: bookwyrm/forms.py:301
#: bookwyrm/forms.py:307
msgid "Ascending"
msgstr ""
#: bookwyrm/forms.py:302
#: bookwyrm/forms.py:308
msgid "Descending"
msgstr ""
@ -83,7 +83,7 @@ msgstr ""
msgid "%(value)s is not a valid username"
msgstr ""
#: bookwyrm/models/fields.py:165 bookwyrm/templates/layout.html:156
#: bookwyrm/models/fields.py:165 bookwyrm/templates/layout.html:155
msgid "username"
msgstr ""
@ -136,34 +136,34 @@ msgstr ""
msgid "Edit Author"
msgstr ""
#: bookwyrm/templates/author/author.html:33
#: bookwyrm/templates/author/author.html:32
#: bookwyrm/templates/author/edit_author.html:38
msgid "Aliases:"
msgstr ""
#: bookwyrm/templates/author/author.html:39
#: bookwyrm/templates/author/author.html:38
msgid "Born:"
msgstr ""
#: bookwyrm/templates/author/author.html:45
#: bookwyrm/templates/author/author.html:44
msgid "Died:"
msgstr ""
#: bookwyrm/templates/author/author.html:52
#: bookwyrm/templates/author/author.html:51
msgid "Wikipedia"
msgstr ""
#: bookwyrm/templates/author/author.html:56
#: bookwyrm/templates/book/book.html:81
#: bookwyrm/templates/author/author.html:55
#: bookwyrm/templates/book/book.html:78
msgid "View on OpenLibrary"
msgstr ""
#: bookwyrm/templates/author/author.html:61
#: bookwyrm/templates/book/book.html:84
#: bookwyrm/templates/author/author.html:60
#: bookwyrm/templates/book/book.html:81
msgid "View on Inventaire"
msgstr ""
#: bookwyrm/templates/author/author.html:75
#: bookwyrm/templates/author/author.html:74
#, python-format
msgid "Books by %(name)s"
msgstr ""
@ -200,8 +200,9 @@ msgid "Name:"
msgstr ""
#: bookwyrm/templates/author/edit_author.html:40
#: bookwyrm/templates/book/edit_book.html:128
#: bookwyrm/templates/book/edit_book.html:165
#: bookwyrm/templates/book/edit_book.html:132
#: bookwyrm/templates/book/edit_book.html:141
#: bookwyrm/templates/book/edit_book.html:178
msgid "Separate multiple values with commas."
msgstr ""
@ -226,11 +227,11 @@ msgid "Author Identifiers"
msgstr ""
#: bookwyrm/templates/author/edit_author.html:74
#: bookwyrm/templates/book/edit_book.html:223
msgid "Openlibrary key:"
msgstr ""
#: bookwyrm/templates/author/edit_author.html:79
#: bookwyrm/templates/book/edit_book.html:243
msgid "Inventaire ID:"
msgstr ""
@ -243,12 +244,13 @@ msgid "Goodreads key:"
msgstr ""
#: bookwyrm/templates/author/edit_author.html:98
#: bookwyrm/templates/book/book.html:127
#: bookwyrm/templates/book/edit_book.html:241
#: bookwyrm/templates/book/book.html:124
#: bookwyrm/templates/book/edit_book.html:263
#: bookwyrm/templates/lists/form.html:42
#: bookwyrm/templates/preferences/edit_user.html:70
#: bookwyrm/templates/settings/announcement_form.html:65
#: bookwyrm/templates/settings/edit_server.html:68
#: bookwyrm/templates/settings/federated_server.html:94
#: bookwyrm/templates/settings/federated_server.html:98
#: bookwyrm/templates/settings/site.html:97
#: bookwyrm/templates/snippets/readthrough.html:77
#: bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html:42
@ -259,11 +261,11 @@ msgid "Save"
msgstr ""
#: bookwyrm/templates/author/edit_author.html:99
#: bookwyrm/templates/book/book.html:128 bookwyrm/templates/book/book.html:180
#: bookwyrm/templates/book/book.html:125 bookwyrm/templates/book/book.html:174
#: bookwyrm/templates/book/cover_modal.html:32
#: bookwyrm/templates/book/edit_book.html:242
#: bookwyrm/templates/book/edit_book.html:264
#: bookwyrm/templates/moderation/report_modal.html:34
#: bookwyrm/templates/settings/federated_server.html:95
#: bookwyrm/templates/settings/federated_server.html:99
#: bookwyrm/templates/snippets/delete_readthrough_modal.html:17
#: bookwyrm/templates/snippets/goal_form.html:32
#: bookwyrm/templates/snippets/readthrough.html:78
@ -274,102 +276,98 @@ msgstr ""
msgid "Cancel"
msgstr ""
#: bookwyrm/templates/book/book.html:33
#: bookwyrm/templates/book/book.html:31
#: bookwyrm/templates/discover/large-book.html:25
#: bookwyrm/templates/discover/small-book.html:19
msgid "by"
msgstr ""
#: bookwyrm/templates/book/book.html:41 bookwyrm/templates/book/book.html:42
#: bookwyrm/templates/book/book.html:39 bookwyrm/templates/book/book.html:40
msgid "Edit Book"
msgstr ""
#: bookwyrm/templates/book/book.html:60
#: bookwyrm/templates/book/book.html:57
#: bookwyrm/templates/book/cover_modal.html:5
msgid "Add cover"
msgstr ""
#: bookwyrm/templates/book/book.html:64
#: bookwyrm/templates/book/book.html:61
msgid "Failed to load cover"
msgstr ""
#: bookwyrm/templates/book/book.html:104
#: bookwyrm/templates/book/book.html:101
#, python-format
msgid "(%(review_count)s review)"
msgid_plural "(%(review_count)s reviews)"
msgstr[0] ""
msgstr[1] ""
#: bookwyrm/templates/book/book.html:116
#: bookwyrm/templates/book/book.html:113
msgid "Add Description"
msgstr ""
#: bookwyrm/templates/book/book.html:123
#: bookwyrm/templates/book/edit_book.html:107
#: bookwyrm/templates/book/book.html:120
#: bookwyrm/templates/book/edit_book.html:108
#: bookwyrm/templates/lists/form.html:12
msgid "Description:"
msgstr ""
#: bookwyrm/templates/book/book.html:137
#: bookwyrm/templates/book/book.html:134
#, python-format
msgid "<a href=\"%(path)s/editions\">%(count)s editions</a>"
msgstr ""
#: bookwyrm/templates/book/book.html:145
#: bookwyrm/templates/book/book.html:142
#, python-format
msgid "This edition is on your <a href=\"%(path)s\">%(shelf_name)s</a> shelf."
msgstr ""
#: bookwyrm/templates/book/book.html:151
#: bookwyrm/templates/book/book.html:148
#, python-format
msgid "A <a href=\"%(book_path)s\">different edition</a> of this book is on your <a href=\"%(shelf_path)s\">%(shelf_name)s</a> shelf."
msgstr ""
#: bookwyrm/templates/book/book.html:162
#: bookwyrm/templates/book/book.html:159
msgid "Your reading activity"
msgstr ""
#: bookwyrm/templates/book/book.html:165
#: bookwyrm/templates/book/book.html:162
msgid "Add read dates"
msgstr ""
#: bookwyrm/templates/book/book.html:170
msgid "You don't have any reading activity for this book."
msgstr ""
#: bookwyrm/templates/book/book.html:177
#: bookwyrm/templates/book/book.html:171
msgid "Create"
msgstr ""
#: bookwyrm/templates/book/book.html:203
#: bookwyrm/templates/book/book.html:181
msgid "You don't have any reading activity for this book."
msgstr ""
#: bookwyrm/templates/book/book.html:200
msgid "Reviews"
msgstr ""
#: bookwyrm/templates/book/book.html:208
#: bookwyrm/templates/book/book.html:205
msgid "Your reviews"
msgstr ""
#: bookwyrm/templates/book/book.html:214
#: bookwyrm/templates/book/book.html:211
msgid "Your comments"
msgstr ""
#: bookwyrm/templates/book/book.html:220
#: bookwyrm/templates/book/book.html:217
msgid "Your quotes"
msgstr ""
#: bookwyrm/templates/book/book.html:255
msgid "rated it"
msgstr ""
#: bookwyrm/templates/book/book.html:276
#: bookwyrm/templates/book/book.html:253
msgid "Subjects"
msgstr ""
#: bookwyrm/templates/book/book.html:288
#: bookwyrm/templates/book/book.html:265
msgid "Places"
msgstr ""
#: bookwyrm/templates/book/book.html:299 bookwyrm/templates/layout.html:65
#: bookwyrm/templates/book/book.html:276 bookwyrm/templates/layout.html:64
#: bookwyrm/templates/lists/lists.html:5 bookwyrm/templates/lists/lists.html:12
#: bookwyrm/templates/search/layout.html:25
#: bookwyrm/templates/search/layout.html:50
@ -377,37 +375,37 @@ msgstr ""
msgid "Lists"
msgstr ""
#: bookwyrm/templates/book/book.html:310
#: bookwyrm/templates/book/book.html:287
msgid "Add to list"
msgstr ""
#: bookwyrm/templates/book/book.html:320
#: bookwyrm/templates/book/book.html:297
#: bookwyrm/templates/book/cover_modal.html:31
#: bookwyrm/templates/lists/list.html:164
msgid "Add"
msgstr ""
#: bookwyrm/templates/book/book_identifiers.html:8
#: bookwyrm/templates/book/book_identifiers.html:7
msgid "ISBN:"
msgstr ""
#: bookwyrm/templates/book/book_identifiers.html:15
#: bookwyrm/templates/book/edit_book.html:227
#: bookwyrm/templates/book/book_identifiers.html:14
#: bookwyrm/templates/book/edit_book.html:248
msgid "OCLC Number:"
msgstr ""
#: bookwyrm/templates/book/book_identifiers.html:22
#: bookwyrm/templates/book/edit_book.html:231
#: bookwyrm/templates/book/book_identifiers.html:21
#: bookwyrm/templates/book/edit_book.html:253
msgid "ASIN:"
msgstr ""
#: bookwyrm/templates/book/cover_modal.html:17
#: bookwyrm/templates/book/edit_book.html:179
#: bookwyrm/templates/book/edit_book.html:192
msgid "Upload cover:"
msgstr ""
#: bookwyrm/templates/book/cover_modal.html:23
#: bookwyrm/templates/book/edit_book.html:185
#: bookwyrm/templates/book/edit_book.html:198
msgid "Load cover from url:"
msgstr ""
@ -463,81 +461,89 @@ msgstr ""
msgid "Back"
msgstr ""
#: bookwyrm/templates/book/edit_book.html:92
#: bookwyrm/templates/book/edit_book.html:93
msgid "Title:"
msgstr ""
#: bookwyrm/templates/book/edit_book.html:100
#: bookwyrm/templates/book/edit_book.html:101
msgid "Subtitle:"
msgstr ""
#: bookwyrm/templates/book/edit_book.html:113
#: bookwyrm/templates/book/edit_book.html:114
msgid "Series:"
msgstr ""
#: bookwyrm/templates/book/edit_book.html:120
#: bookwyrm/templates/book/edit_book.html:122
msgid "Series number:"
msgstr ""
#: bookwyrm/templates/book/edit_book.html:126
#: bookwyrm/templates/book/edit_book.html:130
msgid "Languages:"
msgstr ""
#: bookwyrm/templates/book/edit_book.html:139
msgid "Publisher:"
msgstr ""
#: bookwyrm/templates/book/edit_book.html:135
#: bookwyrm/templates/book/edit_book.html:148
msgid "First published date:"
msgstr ""
#: bookwyrm/templates/book/edit_book.html:143
#: bookwyrm/templates/book/edit_book.html:156
msgid "Published date:"
msgstr ""
#: bookwyrm/templates/book/edit_book.html:152
#: bookwyrm/templates/book/edit_book.html:165
msgid "Authors"
msgstr ""
#: bookwyrm/templates/book/edit_book.html:158
#: bookwyrm/templates/book/edit_book.html:171
#, python-format
msgid "Remove <a href=\"%(path)s\">%(name)s</a>"
msgstr ""
#: bookwyrm/templates/book/edit_book.html:163
#: bookwyrm/templates/book/edit_book.html:176
msgid "Add Authors:"
msgstr ""
#: bookwyrm/templates/book/edit_book.html:164
#: bookwyrm/templates/book/edit_book.html:177
msgid "John Doe, Jane Smith"
msgstr ""
#: bookwyrm/templates/book/edit_book.html:170
#: bookwyrm/templates/book/edit_book.html:183
#: bookwyrm/templates/user/shelf/shelf.html:77
msgid "Cover"
msgstr ""
#: bookwyrm/templates/book/edit_book.html:198
#: bookwyrm/templates/book/edit_book.html:211
msgid "Physical Properties"
msgstr ""
#: bookwyrm/templates/book/edit_book.html:199
#: bookwyrm/templates/book/edit_book.html:212
#: bookwyrm/templates/book/format_filter.html:5
msgid "Format:"
msgstr ""
#: bookwyrm/templates/book/edit_book.html:207
#: bookwyrm/templates/book/edit_book.html:220
msgid "Pages:"
msgstr ""
#: bookwyrm/templates/book/edit_book.html:214
#: bookwyrm/templates/book/edit_book.html:227
msgid "Book Identifiers"
msgstr ""
#: bookwyrm/templates/book/edit_book.html:215
#: bookwyrm/templates/book/edit_book.html:228
msgid "ISBN 13:"
msgstr ""
#: bookwyrm/templates/book/edit_book.html:219
#: bookwyrm/templates/book/edit_book.html:233
msgid "ISBN 10:"
msgstr ""
#: bookwyrm/templates/book/edit_book.html:238
msgid "Openlibrary ID:"
msgstr ""
#: bookwyrm/templates/book/editions.html:4
#, python-format
msgid "Editions of %(book_title)s"
@ -592,12 +598,17 @@ msgstr ""
msgid "Published by %(publisher)s."
msgstr ""
#: bookwyrm/templates/book/rating.html:13
msgid "rated it"
msgstr ""
#: bookwyrm/templates/components/inline_form.html:8
#: bookwyrm/templates/components/modal.html:11
#: bookwyrm/templates/feed/feed_layout.html:69
#: bookwyrm/templates/get_started/layout.html:19
#: bookwyrm/templates/get_started/layout.html:52
#: bookwyrm/templates/search/book.html:32
#: bookwyrm/templates/snippets/announcement.html:18
msgid "Close"
msgstr ""
@ -619,7 +630,7 @@ msgstr ""
#: bookwyrm/templates/directory/directory.html:4
#: bookwyrm/templates/directory/directory.html:9
#: bookwyrm/templates/layout.html:93
#: bookwyrm/templates/layout.html:92
msgid "Directory"
msgstr ""
@ -633,6 +644,7 @@ msgid "You can opt-out at any time in your <a href=\"%(path)s\">profile settings
msgstr ""
#: bookwyrm/templates/directory/directory.html:29
#: bookwyrm/templates/snippets/announcement.html:34
#: bookwyrm/templates/snippets/goal_card.html:22
msgid "Dismiss message"
msgstr ""
@ -723,7 +735,7 @@ msgid "Join %(name)s"
msgstr ""
#: bookwyrm/templates/discover/landing_layout.html:51
#: bookwyrm/templates/login.html:48
#: bookwyrm/templates/login.html:51
msgid "This instance is closed"
msgstr ""
@ -819,7 +831,7 @@ msgid "Direct Messages with <a href=\"%(path)s\">%(username)s</a>"
msgstr ""
#: bookwyrm/templates/feed/direct_messages.html:10
#: bookwyrm/templates/layout.html:88
#: bookwyrm/templates/layout.html:87
msgid "Direct Messages"
msgstr ""
@ -875,7 +887,7 @@ msgid "Updates"
msgstr ""
#: bookwyrm/templates/feed/feed_layout.html:10
#: bookwyrm/templates/layout.html:59
#: bookwyrm/templates/layout.html:58
#: bookwyrm/templates/user/shelf/books_header.html:3
msgid "Your books"
msgstr ""
@ -949,7 +961,7 @@ msgstr ""
#: bookwyrm/templates/get_started/books.html:17
#: bookwyrm/templates/get_started/users.html:18
#: bookwyrm/templates/get_started/users.html:19
#: bookwyrm/templates/layout.html:38 bookwyrm/templates/layout.html:39
#: bookwyrm/templates/layout.html:37 bookwyrm/templates/layout.html:38
#: bookwyrm/templates/lists/list.html:124
#: bookwyrm/templates/search/layout.html:4
#: bookwyrm/templates/search/layout.html:9
@ -1078,7 +1090,7 @@ msgid "%(username)s's %(year)s Books"
msgstr ""
#: bookwyrm/templates/import.html:5 bookwyrm/templates/import.html:9
#: bookwyrm/templates/layout.html:98
#: bookwyrm/templates/layout.html:97
msgid "Import Books"
msgstr ""
@ -1179,7 +1191,7 @@ msgid "Imported"
msgstr ""
#: bookwyrm/templates/invite.html:4 bookwyrm/templates/invite.html:12
#: bookwyrm/templates/login.html:43
#: bookwyrm/templates/login.html:46
msgid "Create an Account"
msgstr ""
@ -1204,23 +1216,23 @@ msgstr ""
msgid "Matching Books"
msgstr ""
#: bookwyrm/templates/layout.html:34
#: bookwyrm/templates/layout.html:33
msgid "Search for a book or user"
msgstr ""
#: bookwyrm/templates/layout.html:48 bookwyrm/templates/layout.html:49
#: bookwyrm/templates/layout.html:47 bookwyrm/templates/layout.html:48
msgid "Main navigation menu"
msgstr ""
#: bookwyrm/templates/layout.html:62
#: bookwyrm/templates/layout.html:61
msgid "Feed"
msgstr ""
#: bookwyrm/templates/layout.html:103
#: bookwyrm/templates/layout.html:102
msgid "Settings"
msgstr ""
#: bookwyrm/templates/layout.html:112
#: bookwyrm/templates/layout.html:111
#: bookwyrm/templates/settings/admin_layout.html:31
#: bookwyrm/templates/settings/manage_invite_requests.html:15
#: bookwyrm/templates/settings/manage_invites.html:3
@ -1228,61 +1240,61 @@ msgstr ""
msgid "Invites"
msgstr ""
#: bookwyrm/templates/layout.html:119
#: bookwyrm/templates/layout.html:118
msgid "Admin"
msgstr ""
#: bookwyrm/templates/layout.html:126
#: bookwyrm/templates/layout.html:125
msgid "Log out"
msgstr ""
#: bookwyrm/templates/layout.html:134 bookwyrm/templates/layout.html:135
#: bookwyrm/templates/layout.html:133 bookwyrm/templates/layout.html:134
#: bookwyrm/templates/notifications.html:6
#: bookwyrm/templates/notifications.html:11
msgid "Notifications"
msgstr ""
#: bookwyrm/templates/layout.html:155 bookwyrm/templates/layout.html:159
#: bookwyrm/templates/layout.html:154 bookwyrm/templates/layout.html:158
#: bookwyrm/templates/login.html:17
#: bookwyrm/templates/snippets/register_form.html:4
msgid "Username:"
msgstr ""
#: bookwyrm/templates/layout.html:160
#: bookwyrm/templates/layout.html:159
msgid "password"
msgstr ""
#: bookwyrm/templates/layout.html:161 bookwyrm/templates/login.html:36
#: bookwyrm/templates/layout.html:160 bookwyrm/templates/login.html:36
msgid "Forgot your password?"
msgstr ""
#: bookwyrm/templates/layout.html:164 bookwyrm/templates/login.html:10
#: bookwyrm/templates/layout.html:163 bookwyrm/templates/login.html:10
#: bookwyrm/templates/login.html:33
msgid "Log in"
msgstr ""
#: bookwyrm/templates/layout.html:172
#: bookwyrm/templates/layout.html:171
msgid "Join"
msgstr ""
#: bookwyrm/templates/layout.html:198
#: bookwyrm/templates/layout.html:206
msgid "About this server"
msgstr ""
#: bookwyrm/templates/layout.html:202
#: bookwyrm/templates/layout.html:210
msgid "Contact site admin"
msgstr ""
#: bookwyrm/templates/layout.html:206
#: bookwyrm/templates/layout.html:214
msgid "Documentation"
msgstr ""
#: bookwyrm/templates/layout.html:213
#: bookwyrm/templates/layout.html:221
#, python-format
msgid "Support %(site_name)s on <a href=\"%(support_link)s\" target=\"_blank\">%(support_title)s</a>"
msgstr ""
#: bookwyrm/templates/layout.html:217
#: bookwyrm/templates/layout.html:225
msgid "BookWyrm's source code is freely available. You can contribute or report issues on <a href=\"https://github.com/mouse-reeve/bookwyrm\">GitHub</a>."
msgstr ""
@ -1353,6 +1365,7 @@ msgstr ""
#: bookwyrm/templates/lists/form.html:31
#: bookwyrm/templates/moderation/reports.html:25
#: bookwyrm/templates/search/book.html:30
#: bookwyrm/templates/snippets/announcement.html:16
msgid "Open"
msgstr ""
@ -1436,11 +1449,11 @@ msgstr ""
msgid "Password:"
msgstr ""
#: bookwyrm/templates/login.html:49
#: bookwyrm/templates/login.html:52
msgid "Contact an administrator to get an invite"
msgstr ""
#: bookwyrm/templates/login.html:59
#: bookwyrm/templates/login.html:63
msgid "More about this site"
msgstr ""
@ -1778,31 +1791,118 @@ msgid "Instance Settings"
msgstr ""
#: bookwyrm/templates/settings/admin_layout.html:48
#: bookwyrm/templates/settings/announcements.html:3
#: bookwyrm/templates/settings/announcements.html:5
msgid "Announcements"
msgstr ""
#: bookwyrm/templates/settings/admin_layout.html:52
#: bookwyrm/templates/settings/site.html:4
#: bookwyrm/templates/settings/site.html:6
msgid "Site Settings"
msgstr ""
#: bookwyrm/templates/settings/admin_layout.html:51
#: bookwyrm/templates/settings/admin_layout.html:55
#: bookwyrm/templates/settings/site.html:13
msgid "Instance Info"
msgstr ""
#: bookwyrm/templates/settings/admin_layout.html:52
#: bookwyrm/templates/settings/admin_layout.html:56
#: bookwyrm/templates/settings/site.html:39
msgid "Images"
msgstr ""
#: bookwyrm/templates/settings/admin_layout.html:53
#: bookwyrm/templates/settings/admin_layout.html:57
#: bookwyrm/templates/settings/site.html:59
msgid "Footer Content"
msgstr ""
#: bookwyrm/templates/settings/admin_layout.html:54
#: bookwyrm/templates/settings/admin_layout.html:58
#: bookwyrm/templates/settings/site.html:81
msgid "Registration"
msgstr ""
#: bookwyrm/templates/settings/announcement.html:3
#: bookwyrm/templates/settings/announcement.html:6
msgid "Announcement"
msgstr ""
#: bookwyrm/templates/settings/announcement.html:7
#: bookwyrm/templates/settings/federated_server.html:13
msgid "Back to list"
msgstr ""
#: bookwyrm/templates/settings/announcement.html:11
msgid "Edit Announcement"
msgstr ""
#: bookwyrm/templates/settings/announcement.html:20
#: bookwyrm/templates/snippets/delete_readthrough_modal.html:15
#: bookwyrm/templates/snippets/follow_request_buttons.html:12
msgid "Delete"
msgstr ""
#: bookwyrm/templates/settings/announcement.html:35
msgid "Visible:"
msgstr ""
#: bookwyrm/templates/settings/announcement.html:38
msgid "True"
msgstr ""
#: bookwyrm/templates/settings/announcement.html:40
msgid "False"
msgstr ""
#: bookwyrm/templates/settings/announcement.html:47
msgid "Start date:"
msgstr ""
#: bookwyrm/templates/settings/announcement.html:54
msgid "End date:"
msgstr ""
#: bookwyrm/templates/settings/announcement.html:60
msgid "Active:"
msgstr ""
#: bookwyrm/templates/settings/announcement_form.html:5
#: bookwyrm/templates/settings/announcements.html:8
msgid "Create Announcement"
msgstr ""
#: bookwyrm/templates/settings/announcements.html:22
msgid "Date added"
msgstr ""
#: bookwyrm/templates/settings/announcements.html:26
msgid "Preview"
msgstr ""
#: bookwyrm/templates/settings/announcements.html:30
msgid "Start date"
msgstr ""
#: bookwyrm/templates/settings/announcements.html:34
msgid "End date"
msgstr ""
#: bookwyrm/templates/settings/announcements.html:38
#: bookwyrm/templates/settings/federation.html:30
#: bookwyrm/templates/settings/manage_invite_requests.html:44
#: bookwyrm/templates/settings/status_filter.html:5
#: bookwyrm/templates/user_admin/user_admin.html:34
msgid "Status"
msgstr ""
#: bookwyrm/templates/settings/announcements.html:48
msgid "active"
msgstr ""
#: bookwyrm/templates/settings/announcements.html:48
msgid "inactive"
msgstr ""
#: bookwyrm/templates/settings/edit_server.html:3
#: bookwyrm/templates/settings/edit_server.html:6
#: bookwyrm/templates/settings/edit_server.html:20
@ -1814,7 +1914,6 @@ msgid "Add server"
msgstr ""
#: bookwyrm/templates/settings/edit_server.html:7
#: bookwyrm/templates/settings/federated_server.html:13
#: bookwyrm/templates/settings/server_blocklist.html:7
msgid "Back to server list"
msgstr ""
@ -1829,7 +1928,7 @@ msgid "Instance:"
msgstr ""
#: bookwyrm/templates/settings/edit_server.html:37
#: bookwyrm/templates/settings/federated_server.html:30
#: bookwyrm/templates/settings/federated_server.html:31
#: bookwyrm/templates/user_admin/user_info.html:34
msgid "Status:"
msgstr ""
@ -1840,13 +1939,13 @@ msgid "Blocked"
msgstr ""
#: bookwyrm/templates/settings/edit_server.html:48
#: bookwyrm/templates/settings/federated_server.html:22
#: bookwyrm/templates/settings/federated_server.html:23
#: bookwyrm/templates/user_admin/user_info.html:26
msgid "Software:"
msgstr ""
#: bookwyrm/templates/settings/edit_server.html:55
#: bookwyrm/templates/settings/federated_server.html:26
#: bookwyrm/templates/settings/federated_server.html:27
#: bookwyrm/templates/user_admin/user_info.html:30
msgid "Version:"
msgstr ""
@ -1859,88 +1958,81 @@ msgstr ""
msgid "Details"
msgstr ""
#: bookwyrm/templates/settings/federated_server.html:37
#: bookwyrm/templates/settings/federated_server.html:39
#: bookwyrm/templates/user/layout.html:56
msgid "Activity"
msgstr ""
#: bookwyrm/templates/settings/federated_server.html:40
#: bookwyrm/templates/settings/federated_server.html:43
msgid "Users:"
msgstr ""
#: bookwyrm/templates/settings/federated_server.html:43
#: bookwyrm/templates/settings/federated_server.html:50
#: bookwyrm/templates/settings/federated_server.html:46
#: bookwyrm/templates/settings/federated_server.html:53
msgid "View all"
msgstr ""
#: bookwyrm/templates/settings/federated_server.html:47
#: bookwyrm/templates/settings/federated_server.html:50
msgid "Reports:"
msgstr ""
#: bookwyrm/templates/settings/federated_server.html:54
#: bookwyrm/templates/settings/federated_server.html:57
msgid "Followed by us:"
msgstr ""
#: bookwyrm/templates/settings/federated_server.html:60
#: bookwyrm/templates/settings/federated_server.html:63
msgid "Followed by them:"
msgstr ""
#: bookwyrm/templates/settings/federated_server.html:66
#: bookwyrm/templates/settings/federated_server.html:69
msgid "Blocked by us:"
msgstr ""
#: bookwyrm/templates/settings/federated_server.html:78
#: bookwyrm/templates/settings/federated_server.html:82
#: bookwyrm/templates/user_admin/user_info.html:39
msgid "Notes"
msgstr ""
#: bookwyrm/templates/settings/federated_server.html:81
#: bookwyrm/templates/settings/federated_server.html:85
msgid "Edit"
msgstr ""
#: bookwyrm/templates/settings/federated_server.html:101
#: bookwyrm/templates/settings/federated_server.html:105
#: bookwyrm/templates/user_admin/user_moderation_actions.html:3
msgid "Actions"
msgstr ""
#: bookwyrm/templates/settings/federated_server.html:105
#: bookwyrm/templates/settings/federated_server.html:109
#: bookwyrm/templates/snippets/block_button.html:5
msgid "Block"
msgstr ""
#: bookwyrm/templates/settings/federated_server.html:106
#: bookwyrm/templates/settings/federated_server.html:110
msgid "All users from this instance will be deactivated."
msgstr ""
#: bookwyrm/templates/settings/federated_server.html:111
#: bookwyrm/templates/settings/federated_server.html:115
#: bookwyrm/templates/snippets/block_button.html:10
msgid "Un-block"
msgstr ""
#: bookwyrm/templates/settings/federated_server.html:112
#: bookwyrm/templates/settings/federated_server.html:116
msgid "All users from this instance will be re-activated."
msgstr ""
#: bookwyrm/templates/settings/federation.html:20
#: bookwyrm/templates/settings/federation.html:19
#: bookwyrm/templates/user_admin/server_filter.html:5
msgid "Server name"
msgstr ""
#: bookwyrm/templates/settings/federation.html:24
#: bookwyrm/templates/settings/federation.html:23
msgid "Date federated"
msgstr ""
#: bookwyrm/templates/settings/federation.html:28
#: bookwyrm/templates/settings/federation.html:27
msgid "Software"
msgstr ""
#: bookwyrm/templates/settings/federation.html:31
#: bookwyrm/templates/settings/manage_invite_requests.html:44
#: bookwyrm/templates/settings/status_filter.html:5
#: bookwyrm/templates/user_admin/user_admin.html:34
msgid "Status"
msgstr ""
#: bookwyrm/templates/settings/manage_invite_requests.html:4
#: bookwyrm/templates/settings/manage_invite_requests.html:11
#: bookwyrm/templates/settings/manage_invite_requests.html:25
@ -2124,6 +2216,11 @@ msgstr ""
msgid "Registration closed text:"
msgstr ""
#: bookwyrm/templates/snippets/announcement.html:31
#, python-format
msgid "Posted by <a href=\"%(user_path)s\">%(username)s</a>"
msgstr ""
#: bookwyrm/templates/snippets/book_cover.html:31
msgid "No cover"
msgstr ""
@ -2229,11 +2326,6 @@ msgstr ""
msgid "You are deleting this readthrough and its %(count)s associated progress updates."
msgstr ""
#: bookwyrm/templates/snippets/delete_readthrough_modal.html:15
#: bookwyrm/templates/snippets/follow_request_buttons.html:12
msgid "Delete"
msgstr ""
#: bookwyrm/templates/snippets/fav_button.html:9
#: bookwyrm/templates/snippets/fav_button.html:11
msgid "Like"
@ -2682,16 +2774,16 @@ msgstr ""
msgid "Edit profile"
msgstr ""
#: bookwyrm/templates/user/user.html:34
#: bookwyrm/templates/user/user.html:33
#, python-format
msgid "View all %(size)s"
msgstr ""
#: bookwyrm/templates/user/user.html:47
#: bookwyrm/templates/user/user.html:46
msgid "View all books"
msgstr ""
#: bookwyrm/templates/user/user.html:60
#: bookwyrm/templates/user/user.html:59
msgid "User Activity"
msgstr ""
@ -2794,11 +2886,15 @@ msgstr ""
msgid "Access level:"
msgstr ""
#: bookwyrm/views/password.py:30 bookwyrm/views/password.py:35
#: bookwyrm/views/import_data.py:67
msgid "Not a valid csv file"
msgstr ""
#: bookwyrm/views/password.py:32
msgid "No user with that email address was found."
msgstr ""
#: bookwyrm/views/password.py:44
#: bookwyrm/views/password.py:41
#, python-format
msgid "A password reset link sent to %s"
msgstr ""

Binary file not shown.

File diff suppressed because it is too large Load diff

Binary file not shown.

File diff suppressed because it is too large Load diff

Binary file not shown.

File diff suppressed because it is too large Load diff

View file

@ -8,5 +8,9 @@
"stylelint-config-standard": "^21.0.0",
"stylelint-order": "^4.1.0",
"watch": "^1.0.2"
},
"dependencies": {
"merge": "2.1.1",
"postcss": "8.2.10"
}
}

418
yarn.lock
View file

@ -16,25 +16,25 @@
dependencies:
"@babel/highlight" "^7.12.13"
"@babel/compat-data@^7.13.12":
version "7.13.12"
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.13.12.tgz#a8a5ccac19c200f9dd49624cac6e19d7be1236a1"
integrity sha512-3eJJ841uKxeV8dcN/2yGEUy+RfgQspPEgQat85umsE1rotuquQ2AbIub4S6j7c50a2d+4myc+zSlnXeIHrOnhQ==
"@babel/compat-data@^7.13.15":
version "7.14.0"
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.0.tgz#a901128bce2ad02565df95e6ecbf195cf9465919"
integrity sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q==
"@babel/core@>=7.9.0":
version "7.13.14"
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.13.14.tgz#8e46ebbaca460a63497c797e574038ab04ae6d06"
integrity sha512-wZso/vyF4ki0l0znlgM4inxbdrUvCb+cVz8grxDq+6C9k6qbqoIJteQOKicaKjCipU3ISV+XedCqpL2RJJVehA==
version "7.14.3"
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.14.3.tgz#5395e30405f0776067fbd9cf0884f15bfb770a38"
integrity sha512-jB5AmTKOCSJIZ72sd78ECEhuPiDMKlQdDI/4QRI6lzYATx5SSogS1oQA2AoPecRCknm30gHi2l+QVvNUu3wZAg==
dependencies:
"@babel/code-frame" "^7.12.13"
"@babel/generator" "^7.13.9"
"@babel/helper-compilation-targets" "^7.13.13"
"@babel/helper-module-transforms" "^7.13.14"
"@babel/helpers" "^7.13.10"
"@babel/parser" "^7.13.13"
"@babel/generator" "^7.14.3"
"@babel/helper-compilation-targets" "^7.13.16"
"@babel/helper-module-transforms" "^7.14.2"
"@babel/helpers" "^7.14.0"
"@babel/parser" "^7.14.3"
"@babel/template" "^7.12.13"
"@babel/traverse" "^7.13.13"
"@babel/types" "^7.13.14"
"@babel/traverse" "^7.14.2"
"@babel/types" "^7.14.2"
convert-source-map "^1.7.0"
debug "^4.1.0"
gensync "^1.0.0-beta.2"
@ -42,33 +42,33 @@
semver "^6.3.0"
source-map "^0.5.0"
"@babel/generator@^7.13.9":
version "7.13.9"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.13.9.tgz#3a7aa96f9efb8e2be42d38d80e2ceb4c64d8de39"
integrity sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw==
"@babel/generator@^7.14.2", "@babel/generator@^7.14.3":
version "7.14.3"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.14.3.tgz#0c2652d91f7bddab7cccc6ba8157e4f40dcedb91"
integrity sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA==
dependencies:
"@babel/types" "^7.13.0"
"@babel/types" "^7.14.2"
jsesc "^2.5.1"
source-map "^0.5.0"
"@babel/helper-compilation-targets@^7.13.13":
version "7.13.13"
resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.13.tgz#2b2972a0926474853f41e4adbc69338f520600e5"
integrity sha512-q1kcdHNZehBwD9jYPh3WyXcsFERi39X4I59I3NadciWtNDyZ6x+GboOxncFK0kXlKIv6BJm5acncehXWUjWQMQ==
"@babel/helper-compilation-targets@^7.13.16":
version "7.13.16"
resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz#6e91dccf15e3f43e5556dffe32d860109887563c"
integrity sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==
dependencies:
"@babel/compat-data" "^7.13.12"
"@babel/compat-data" "^7.13.15"
"@babel/helper-validator-option" "^7.12.17"
browserslist "^4.14.5"
semver "^6.3.0"
"@babel/helper-function-name@^7.12.13":
version "7.12.13"
resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz#93ad656db3c3c2232559fd7b2c3dbdcbe0eb377a"
integrity sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==
"@babel/helper-function-name@^7.14.2":
version "7.14.2"
resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz#397688b590760b6ef7725b5f0860c82427ebaac2"
integrity sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==
dependencies:
"@babel/helper-get-function-arity" "^7.12.13"
"@babel/template" "^7.12.13"
"@babel/types" "^7.12.13"
"@babel/types" "^7.14.2"
"@babel/helper-get-function-arity@^7.12.13":
version "7.12.13"
@ -91,19 +91,19 @@
dependencies:
"@babel/types" "^7.13.12"
"@babel/helper-module-transforms@^7.13.14":
version "7.13.14"
resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.13.14.tgz#e600652ba48ccb1641775413cb32cfa4e8b495ef"
integrity sha512-QuU/OJ0iAOSIatyVZmfqB0lbkVP0kDRiKj34xy+QNsnVZi/PA6BoSoreeqnxxa9EHFAIL0R9XOaAR/G9WlIy5g==
"@babel/helper-module-transforms@^7.14.2":
version "7.14.2"
resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz#ac1cc30ee47b945e3e0c4db12fa0c5389509dfe5"
integrity sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA==
dependencies:
"@babel/helper-module-imports" "^7.13.12"
"@babel/helper-replace-supers" "^7.13.12"
"@babel/helper-simple-access" "^7.13.12"
"@babel/helper-split-export-declaration" "^7.12.13"
"@babel/helper-validator-identifier" "^7.12.11"
"@babel/helper-validator-identifier" "^7.14.0"
"@babel/template" "^7.12.13"
"@babel/traverse" "^7.13.13"
"@babel/types" "^7.13.14"
"@babel/traverse" "^7.14.2"
"@babel/types" "^7.14.2"
"@babel/helper-optimise-call-expression@^7.12.13":
version "7.12.13"
@ -113,14 +113,14 @@
"@babel/types" "^7.12.13"
"@babel/helper-replace-supers@^7.13.12":
version "7.13.12"
resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz#6442f4c1ad912502481a564a7386de0c77ff3804"
integrity sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==
version "7.14.3"
resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.14.3.tgz#ca17b318b859d107f0e9b722d58cf12d94436600"
integrity sha512-Rlh8qEWZSTfdz+tgNV/N4gz1a0TMNwCUcENhMjHTHKp3LseYH5Jha0NSlyTQWMnjbYcwFt+bqAMqSLHVXkQ6UA==
dependencies:
"@babel/helper-member-expression-to-functions" "^7.13.12"
"@babel/helper-optimise-call-expression" "^7.12.13"
"@babel/traverse" "^7.13.0"
"@babel/types" "^7.13.12"
"@babel/traverse" "^7.14.2"
"@babel/types" "^7.14.2"
"@babel/helper-simple-access@^7.13.12":
version "7.13.12"
@ -136,38 +136,38 @@
dependencies:
"@babel/types" "^7.12.13"
"@babel/helper-validator-identifier@^7.12.11":
version "7.12.11"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed"
integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==
"@babel/helper-validator-identifier@^7.14.0":
version "7.14.0"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz#d26cad8a47c65286b15df1547319a5d0bcf27288"
integrity sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==
"@babel/helper-validator-option@^7.12.17":
version "7.12.17"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831"
integrity sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==
"@babel/helpers@^7.13.10":
version "7.13.10"
resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.13.10.tgz#fd8e2ba7488533cdeac45cc158e9ebca5e3c7df8"
integrity sha512-4VO883+MWPDUVRF3PhiLBUFHoX/bsLTGFpFK/HqvvfBZz2D57u9XzPVNFVBTc0PW/CWR9BXTOKt8NF4DInUHcQ==
"@babel/helpers@^7.14.0":
version "7.14.0"
resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.14.0.tgz#ea9b6be9478a13d6f961dbb5f36bf75e2f3b8f62"
integrity sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==
dependencies:
"@babel/template" "^7.12.13"
"@babel/traverse" "^7.13.0"
"@babel/types" "^7.13.0"
"@babel/traverse" "^7.14.0"
"@babel/types" "^7.14.0"
"@babel/highlight@^7.10.4", "@babel/highlight@^7.12.13":
version "7.13.10"
resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.13.10.tgz#a8b2a66148f5b27d666b15d81774347a731d52d1"
integrity sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==
version "7.14.0"
resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.0.tgz#3197e375711ef6bf834e67d0daec88e4f46113cf"
integrity sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==
dependencies:
"@babel/helper-validator-identifier" "^7.12.11"
"@babel/helper-validator-identifier" "^7.14.0"
chalk "^2.0.0"
js-tokens "^4.0.0"
"@babel/parser@^7.12.13", "@babel/parser@^7.13.13":
version "7.13.13"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.13.tgz#42f03862f4aed50461e543270916b47dd501f0df"
integrity sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw==
"@babel/parser@^7.12.13", "@babel/parser@^7.14.2", "@babel/parser@^7.14.3":
version "7.14.3"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.3.tgz#9b530eecb071fd0c93519df25c5ff9f14759f298"
integrity sha512-7MpZDIfI7sUC5zWo2+foJ50CSI5lcqDehZ0lVgIhSi4bFEk94fLAKlF3Q0nzSQQ+ca0lm+O6G9ztKVBeu8PMRQ==
"@babel/template@^7.12.13":
version "7.12.13"
@ -178,33 +178,32 @@
"@babel/parser" "^7.12.13"
"@babel/types" "^7.12.13"
"@babel/traverse@^7.13.0", "@babel/traverse@^7.13.13":
version "7.13.13"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.13.13.tgz#39aa9c21aab69f74d948a486dd28a2dbdbf5114d"
integrity sha512-CblEcwmXKR6eP43oQGG++0QMTtCjAsa3frUuzHoiIJWpaIIi8dwMyEFUJoXRLxagGqCK+jALRwIO+o3R9p/uUg==
"@babel/traverse@^7.14.0", "@babel/traverse@^7.14.2":
version "7.14.2"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.2.tgz#9201a8d912723a831c2679c7ebbf2fe1416d765b"
integrity sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==
dependencies:
"@babel/code-frame" "^7.12.13"
"@babel/generator" "^7.13.9"
"@babel/helper-function-name" "^7.12.13"
"@babel/generator" "^7.14.2"
"@babel/helper-function-name" "^7.14.2"
"@babel/helper-split-export-declaration" "^7.12.13"
"@babel/parser" "^7.13.13"
"@babel/types" "^7.13.13"
"@babel/parser" "^7.14.2"
"@babel/types" "^7.14.2"
debug "^4.1.0"
globals "^11.1.0"
"@babel/types@^7.12.13", "@babel/types@^7.13.0", "@babel/types@^7.13.12", "@babel/types@^7.13.13", "@babel/types@^7.13.14":
version "7.13.14"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.14.tgz#c35a4abb15c7cd45a2746d78ab328e362cbace0d"
integrity sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==
"@babel/types@^7.12.13", "@babel/types@^7.13.12", "@babel/types@^7.14.0", "@babel/types@^7.14.2":
version "7.14.2"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.2.tgz#4208ae003107ef8a057ea8333e56eb64d2f6a2c3"
integrity sha512-SdjAG/3DikRHpUOjxZgnkbR11xUlyDMUFJdvnIgZEE16mqmY0BINMmc4//JMJglEmn6i7sq6p+mGrFWyZ98EEw==
dependencies:
"@babel/helper-validator-identifier" "^7.12.11"
lodash "^4.17.19"
"@babel/helper-validator-identifier" "^7.14.0"
to-fast-properties "^2.0.0"
"@eslint/eslintrc@^0.4.0":
version "0.4.0"
resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.0.tgz#99cc0a0584d72f1df38b900fb062ba995f395547"
integrity sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog==
"@eslint/eslintrc@^0.4.1":
version "0.4.1"
resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.1.tgz#442763b88cecbe3ee0ec7ca6d6dd6168550cbf14"
integrity sha512-5v7TDE9plVhvxQeWLXDTvFvJBdH6pEsdnl2g/dAptmuFEPedQ4Erq5rsDsX+mvAM610IhNaO2W5V1dOOnDKxkQ==
dependencies:
ajv "^6.12.4"
debug "^4.1.1"
@ -300,9 +299,9 @@ ajv@^6.10.0, ajv@^6.12.4:
uri-js "^4.2.2"
ajv@^8.0.1:
version "8.0.2"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.0.2.tgz#1396e27f208ed56dd5638ab5a251edeb1c91d402"
integrity sha512-V0HGxJd0PiDF0ecHYIesTOqfd1gJguwQUOYfMfAWnRsWQEXfc5ifbUFhD3Wjc+O+y7VAqL+g07prq9gHQ/JOZQ==
version "8.5.0"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.5.0.tgz#695528274bcb5afc865446aa275484049a18ae4b"
integrity sha512-Y2l399Tt1AguU3BPRP9Fn4eN+Or+StUGWCUpbnFyXSo8NZ9S4uj+AG2pjs5apK+ZMOwYOz1+a+VKvKH7CudXgQ==
dependencies:
fast-deep-equal "^3.1.1"
json-schema-traverse "^1.0.0"
@ -374,9 +373,14 @@ bail@^1.0.0:
integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==
balanced-match@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
version "1.0.2"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
balanced-match@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-2.0.0.tgz#dc70f920d78db8b858535795867bf48f820633d9"
integrity sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==
brace-expansion@^1.1.7:
version "1.1.11"
@ -394,23 +398,15 @@ braces@^3.0.1:
fill-range "^7.0.1"
browserslist@^4.12.0, browserslist@^4.14.5:
version "4.16.3"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.3.tgz#340aa46940d7db878748567c5dea24a48ddf3717"
integrity sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw==
version "4.16.6"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2"
integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==
dependencies:
caniuse-lite "^1.0.30001181"
colorette "^1.2.1"
electron-to-chromium "^1.3.649"
caniuse-lite "^1.0.30001219"
colorette "^1.2.2"
electron-to-chromium "^1.3.723"
escalade "^3.1.1"
node-releases "^1.1.70"
call-bind@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
dependencies:
function-bind "^1.1.1"
get-intrinsic "^1.0.2"
node-releases "^1.1.71"
callsites@^3.0.0:
version "3.1.0"
@ -431,10 +427,10 @@ camelcase@^5.3.1:
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001181:
version "1.0.30001205"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001205.tgz#d79bf6a6fb13196b4bb46e5143a22ca0242e0ef8"
integrity sha512-TL1GrS5V6LElbitPazidkBMD9sa448bQDDLrumDqaggmKFcuU2JW1wTOHJPukAcOMtEmLcmDJEzfRrf+GjM0Og==
caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001219:
version "1.0.30001228"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001228.tgz#bfdc5942cd3326fa51ee0b42fbef4da9d492a7fa"
integrity sha512-QQmLOGJ3DEgokHbMSA8cj2a+geXqmnpyOFT0lhQV6P3/YOJvGDEwoedcwxEQ30gJIwIIunHIicunJ2rzK5gB2A==
chalk@^2.0.0, chalk@^2.4.2:
version "2.4.2"
@ -445,10 +441,10 @@ chalk@^2.0.0, chalk@^2.4.2:
escape-string-regexp "^1.0.5"
supports-color "^5.3.0"
chalk@^4.0.0, chalk@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a"
integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==
chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad"
integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==
dependencies:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
@ -499,7 +495,7 @@ color-name@~1.1.4:
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
colorette@^1.2.1:
colorette@^1.2.1, colorette@^1.2.2:
version "1.2.2"
resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94"
integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==
@ -594,9 +590,9 @@ domelementtype@1, domelementtype@^1.3.1:
integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==
domelementtype@^2.0.1:
version "2.1.0"
resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.1.0.tgz#a851c080a6d1c3d94344aed151d99f669edf585e"
integrity sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w==
version "2.2.0"
resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57"
integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==
domhandler@^2.3.0:
version "2.4.2"
@ -613,10 +609,10 @@ domutils@^1.5.1:
dom-serializer "0"
domelementtype "1"
electron-to-chromium@^1.3.649:
version "1.3.703"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.703.tgz#6d9b9a75c42a40775f5930329e642b22b227317f"
integrity sha512-SVBVhNB+4zPL+rvtWLw7PZQkw/Eqj1HQZs22xtcqW36+xoifzEOEEDEpkxSMfB6RFeSIOcG00w6z5mSqLr1Y6w==
electron-to-chromium@^1.3.723:
version "1.3.735"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.735.tgz#fa1a8660f2790662291cb2136f0e446a444cdfdc"
integrity sha512-cp7MWzC3NseUJV2FJFgaiesdrS+A8ZUjX5fLAxdRlcaPDkaPGFplX930S5vf84yqDp4LjuLdKouWuVOTwUfqHQ==
emoji-regex@^8.0.0:
version "8.0.0"
@ -678,17 +674,17 @@ eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0:
integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==
eslint-visitor-keys@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8"
integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==
version "2.1.0"
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303"
integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==
eslint@^7.23.0:
version "7.23.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.23.0.tgz#8d029d252f6e8cf45894b4bee08f5493f8e94325"
integrity sha512-kqvNVbdkjzpFy0XOszNwjkKzZ+6TcwCQ/h+ozlcIWwaimBBuhlQ4nN6kbiM2L+OjDcznkTJxzYfRFH92sx4a0Q==
version "7.26.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.26.0.tgz#d416fdcdcb3236cd8f282065312813f8c13982f6"
integrity sha512-4R1ieRf52/izcZE7AlLy56uIHHDLT74Yzz2Iv2l6kDaYvEu9x+wMB5dZArVL8SYGXSYV2YAg70FcW5Y5nGGNIg==
dependencies:
"@babel/code-frame" "7.12.11"
"@eslint/eslintrc" "^0.4.0"
"@eslint/eslintrc" "^0.4.1"
ajv "^6.10.0"
chalk "^4.0.0"
cross-spawn "^7.0.2"
@ -881,15 +877,6 @@ gensync@^1.0.0-beta.2:
resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
get-intrinsic@^1.0.2:
version "1.1.1"
resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6"
integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==
dependencies:
function-bind "^1.1.1"
has "^1.0.3"
has-symbols "^1.0.1"
get-stdin@^8.0.0:
version "8.0.0"
resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-8.0.0.tgz#cbad6a73feb75f6eeb22ba9e01f89aa28aa97a53"
@ -903,9 +890,9 @@ glob-parent@^5.0.0, glob-parent@^5.1.0:
is-glob "^4.0.1"
glob@^7.1.3:
version "7.1.6"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
version "7.1.7"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90"
integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==
dependencies:
fs.realpath "^1.0.0"
inflight "^1.0.4"
@ -943,13 +930,13 @@ globals@^12.1.0:
type-fest "^0.8.1"
globals@^13.6.0:
version "13.7.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-13.7.0.tgz#aed3bcefd80ad3ec0f0be2cf0c895110c0591795"
integrity sha512-Aipsz6ZKRxa/xQkZhNg0qIWXT6x6rD46f6x/PCnBomlttdIyAPak4YD9jTmKpZ72uROSMU87qJtcgpgHaVchiA==
version "13.8.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-13.8.0.tgz#3e20f504810ce87a8d72e55aecf8435b50f4c1b3"
integrity sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q==
dependencies:
type-fest "^0.20.2"
globby@^11.0.2:
globby@^11.0.3:
version "11.0.3"
resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.3.tgz#9b1f0cb523e171dd1ad8c7b2a9fb4b644b9593cb"
integrity sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==
@ -988,11 +975,6 @@ has-flag@^4.0.0:
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
has-symbols@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423"
integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==
has@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
@ -1001,9 +983,9 @@ has@^1.0.3:
function-bind "^1.1.1"
hosted-git-info@^2.1.4:
version "2.8.8"
resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488"
integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==
version "2.8.9"
resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9"
integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==
hosted-git-info@^4.0.1:
version "4.0.2"
@ -1062,11 +1044,6 @@ indent-string@^4.0.0:
resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
indexes-of@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607"
integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc=
inflight@^1.0.4:
version "1.0.6"
resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
@ -1103,22 +1080,15 @@ is-arrayish@^0.2.1:
resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
is-boolean-object@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.0.tgz#e2aaad3a3a8fca34c28f6eee135b156ed2587ff0"
integrity sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==
dependencies:
call-bind "^1.0.0"
is-buffer@^2.0.0:
version "2.0.5"
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191"
integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==
is-core-module@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a"
integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==
version "2.4.0"
resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.4.0.tgz#8e9fc8e15027b011418026e98f0e6f4d86305cc1"
integrity sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==
dependencies:
has "^1.0.3"
@ -1149,11 +1119,6 @@ is-hexadecimal@^1.0.0:
resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7"
integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==
is-number-object@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197"
integrity sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==
is-number@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
@ -1174,11 +1139,6 @@ is-regexp@^2.0.0:
resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-2.1.0.tgz#cd734a56864e23b956bf4e7c66c396a4c0b22c2d"
integrity sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==
is-string@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6"
integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==
is-typedarray@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
@ -1274,22 +1234,17 @@ lodash.clonedeep@^4.5.0:
resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=
lodash.flatten@^4.4.0:
version "4.4.0"
resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f"
integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=
lodash.truncate@^4.4.2:
version "4.4.2"
resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193"
integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=
lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21:
lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.21:
version "4.17.21"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
log-symbols@^4.0.0:
log-symbols@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503"
integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==
@ -1315,9 +1270,9 @@ map-obj@^1.0.0:
integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=
map-obj@^4.0.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.2.0.tgz#0e8bc823e2aaca8a0942567d12ed14f389eec153"
integrity sha512-NAq0fCmZYGz9UFEQyndp7sisrow4GroyGeKluyKC/chuITZsPyOyC1UJZPJlVFImhXdROIP5xqouRLThT3BbpQ==
version "4.2.1"
resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.2.1.tgz#e4ea399dbc979ae735c83c863dd31bdf364277b7"
integrity sha512-+WA2/1sPmDj1dlvvJmB5G6JKfY9dpn7EVBUL06+y6PoljPkh+6V1QihwxNkbcGxCRjt2b0F9K0taiCuo7MbdFQ==
mathml-tag-names@^2.1.3:
version "2.1.3"
@ -1375,6 +1330,11 @@ merge2@^1.3.0:
resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
merge@2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/merge/-/merge-2.1.1.tgz#59ef4bf7e0b3e879186436e8481c06a6c162ca98"
integrity sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==
merge@^1.2.0:
version "1.2.1"
resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145"
@ -1388,13 +1348,13 @@ micromark@~2.11.0:
debug "^4.0.0"
parse-entities "^2.0.0"
micromatch@^4.0.2:
version "4.0.2"
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259"
integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==
micromatch@^4.0.2, micromatch@^4.0.4:
version "4.0.4"
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9"
integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==
dependencies:
braces "^3.0.1"
picomatch "^2.0.5"
picomatch "^2.2.3"
min-indent@^1.0.0:
version "1.0.1"
@ -1427,15 +1387,20 @@ ms@2.1.2:
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
nanoid@^3.1.22:
version "3.1.23"
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.23.tgz#f744086ce7c2bc47ee0a8472574d5c78e4183a81"
integrity sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==
natural-compare@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
node-releases@^1.1.70:
version "1.1.71"
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.71.tgz#cb1334b179896b1c89ecfdd4b725fb7bbdfc7dbb"
integrity sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==
node-releases@^1.1.71:
version "1.1.72"
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.72.tgz#14802ab6b1039a79a0c7d662b610a5bbd76eacbe"
integrity sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==
normalize-package-data@^2.5.0:
version "2.5.0"
@ -1564,10 +1529,10 @@ path-type@^4.0.0:
resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
picomatch@^2.0.5, picomatch@^2.2.1:
version "2.2.2"
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad"
integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==
picomatch@^2.2.1, picomatch@^2.2.3:
version "2.2.3"
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.3.tgz#465547f359ccc206d3c48e46a1bcb89bf7ee619d"
integrity sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==
postcss-html@^0.36.0:
version "0.36.0"
@ -1615,14 +1580,12 @@ postcss-scss@^2.1.1:
dependencies:
postcss "^7.0.6"
postcss-selector-parser@^6.0.4:
version "6.0.4"
resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz#56075a1380a04604c38b063ea7767a129af5c2b3"
integrity sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==
postcss-selector-parser@^6.0.5:
version "6.0.6"
resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz#2c5bba8174ac2f6981ab631a42ab0ee54af332ea"
integrity sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==
dependencies:
cssesc "^3.0.0"
indexes-of "^1.0.1"
uniq "^1.0.1"
util-deprecate "^1.0.2"
postcss-sorting@^5.0.1:
@ -1643,6 +1606,15 @@ postcss-value-parser@^4.1.0:
resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb"
integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==
postcss@8.2.10:
version "8.2.10"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.10.tgz#ca7a042aa8aff494b334d0ff3e9e77079f6f702b"
integrity sha512-b/h7CPV7QEdrqIxtAf2j31U5ef05uBDuvoXv6L51Q4rcS1jdlXAVKJv+atCFdUXYl9dyTHGyoMzIepwowRJjFw==
dependencies:
colorette "^1.2.2"
nanoid "^3.1.22"
source-map "^0.6.1"
postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.21, postcss@^7.0.26, postcss@^7.0.31, postcss@^7.0.32, postcss@^7.0.35, postcss@^7.0.6:
version "7.0.35"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.35.tgz#d2be00b998f7f211d8a276974079f2e92b970e24"
@ -1878,9 +1850,9 @@ spdx-expression-parse@^3.0.0:
spdx-license-ids "^3.0.0"
spdx-license-ids@^3.0.0:
version "3.0.7"
resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz#e9c18a410e5ed7e12442a549fbd8afa767038d65"
integrity sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==
version "3.0.8"
resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.8.tgz#eb1e97ad99b11bf3f82a3b71a0472dd9a00f2ecf"
integrity sha512-NDgA96EnaLSvtbM7trJj+t1LUR3pirkDCcz9nOUlPb5DMBGsH7oES6C3hs3j7R9oHEa1EMvReS/BUAIT5Tcr0g==
specificity@^0.4.1:
version "0.4.1"
@ -1954,15 +1926,15 @@ stylelint-order@^4.1.0:
postcss-sorting "^5.0.1"
stylelint@^13.12.0:
version "13.12.0"
resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-13.12.0.tgz#cceb922be0d0c7b7b6926271eea2b90cb924733e"
integrity sha512-P8O1xDy41B7O7iXaSlW+UuFbE5+ZWQDb61ndGDxKIt36fMH50DtlQTbwLpFLf8DikceTAb3r6nPrRv30wBlzXw==
version "13.13.1"
resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-13.13.1.tgz#fca9c9f5de7990ab26a00f167b8978f083a18f3c"
integrity sha512-Mv+BQr5XTUrKqAXmpqm6Ddli6Ief+AiPZkRsIrAoUKFuq/ElkUh9ZMYxXD0iQNZ5ADghZKLOWz1h7hTClB7zgQ==
dependencies:
"@stylelint/postcss-css-in-js" "^0.37.2"
"@stylelint/postcss-markdown" "^0.36.2"
autoprefixer "^9.8.6"
balanced-match "^1.0.0"
chalk "^4.1.0"
balanced-match "^2.0.0"
chalk "^4.1.1"
cosmiconfig "^7.0.0"
debug "^4.3.1"
execall "^2.0.0"
@ -1971,7 +1943,7 @@ stylelint@^13.12.0:
file-entry-cache "^6.0.1"
get-stdin "^8.0.0"
global-modules "^2.0.0"
globby "^11.0.2"
globby "^11.0.3"
globjoin "^0.1.4"
html-tags "^3.1.0"
ignore "^5.1.8"
@ -1979,10 +1951,10 @@ stylelint@^13.12.0:
imurmurhash "^0.1.4"
known-css-properties "^0.21.0"
lodash "^4.17.21"
log-symbols "^4.0.0"
log-symbols "^4.1.0"
mathml-tag-names "^2.1.3"
meow "^9.0.0"
micromatch "^4.0.2"
micromatch "^4.0.4"
normalize-selector "^0.2.0"
postcss "^7.0.35"
postcss-html "^0.36.0"
@ -1992,7 +1964,7 @@ stylelint@^13.12.0:
postcss-safe-parser "^4.0.2"
postcss-sass "^0.4.4"
postcss-scss "^2.1.1"
postcss-selector-parser "^6.0.4"
postcss-selector-parser "^6.0.5"
postcss-syntax "^0.36.2"
postcss-value-parser "^4.1.0"
resolve-from "^5.0.0"
@ -2003,8 +1975,8 @@ stylelint@^13.12.0:
style-search "^0.1.0"
sugarss "^2.0.0"
svg-tags "^1.0.0"
table "^6.0.7"
v8-compile-cache "^2.2.0"
table "^6.6.0"
v8-compile-cache "^2.3.0"
write-file-atomic "^3.0.3"
sugarss@^2.0.0:
@ -2040,20 +2012,17 @@ svg-tags@^1.0.0:
resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764"
integrity sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=
table@^6.0.4, table@^6.0.7:
version "6.0.9"
resolved "https://registry.yarnpkg.com/table/-/table-6.0.9.tgz#790a12bf1e09b87b30e60419bafd6a1fd85536fb"
integrity sha512-F3cLs9a3hL1Z7N4+EkSscsel3z55XT950AvB05bwayrNg5T1/gykXtigioTAjbltvbMSJvvhFCbnf6mX+ntnJQ==
table@^6.0.4, table@^6.6.0:
version "6.7.1"
resolved "https://registry.yarnpkg.com/table/-/table-6.7.1.tgz#ee05592b7143831a8c94f3cee6aae4c1ccef33e2"
integrity sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==
dependencies:
ajv "^8.0.1"
is-boolean-object "^1.1.0"
is-number-object "^1.0.4"
is-string "^1.0.5"
lodash.clonedeep "^4.5.0"
lodash.flatten "^4.4.0"
lodash.truncate "^4.4.2"
slice-ansi "^4.0.0"
string-width "^4.2.0"
strip-ansi "^6.0.0"
text-table@^0.2.0:
version "0.2.0"
@ -2128,11 +2097,6 @@ unified@^9.1.0:
trough "^1.0.0"
vfile "^4.0.0"
uniq@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff"
integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=
unist-util-find-all-after@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/unist-util-find-all-after/-/unist-util-find-all-after-3.0.2.tgz#fdfecd14c5b7aea5e9ef38d5e0d5f774eeb561f6"
@ -2164,7 +2128,7 @@ util-deprecate@^1.0.1, util-deprecate@^1.0.2:
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
v8-compile-cache@^2.0.3, v8-compile-cache@^2.2.0:
v8-compile-cache@^2.0.3, v8-compile-cache@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee"
integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==