internlm/SWE-Fixer-Train-110K huggingface dataset:
Repository: vas3k/vas3k.club

Issue:
Отсутствует robots.txt
Уверен, что в клубе всем похуй, но мне каждый раз больно, когда вижу, что нет robots.txt.

Можно хотяб стандартный добавить, вроде:

User-agent: *
Sitemap: https://vas3k.club/sitemap.xml
Host: https://vas3k.club


Discussion:
Хорошая идея, можно добавить

Resolving patch:
diff --git a/club/urls.py b/club/urls.py
--- a/club/urls.py
+++ b/club/urls.py
@@ -11,7 +11,7 @@
 from comments.views import create_comment, edit_comment, delete_comment, show_comment, upvote_comment, \
     retract_comment_vote, pin_comment
 from landing.views import landing, docs, god_settings
-from misc.views import achievements, network
+from misc.views import achievements, network, robots
 from notifications.views import weekly_digest, email_unsubscribe, email_confirm, daily_digest, email_digest_switch
 from payments.views import membership_expired, pay, done, stripe_webhook, stop_subscription
 from posts.api import md_show_post, api_show_post
@@ -127,6 +127,8 @@
     path("sitemap.xml", sitemap, {"sitemaps": sitemaps}, name="sitemap"),
     path("posts.rss", NewPostsRss(), name="rss"),
 
+    path("robots.txt", robots, name="robots"),
+
     # keep these guys at the bottom
     re_path(r"^{}/$".format(POST_TYPE_RE), feed, name="feed_type"),
     re_path(r"^{}/{}/$".format(POST_TYPE_RE, ORDERING_RE), feed, name="feed_ordering"),
diff --git a/misc/views.py b/misc/views.py
--- a/misc/views.py
+++ b/misc/views.py
@@ -1,4 +1,6 @@
+from django.http import HttpResponse
 from django.shortcuts import render
+from django.views.decorators.http import require_GET
 
 from auth.helpers import auth_required
 from landing.models import GodSettings
@@ -19,3 +21,12 @@ def network(request):
     return render(request, "pages/network.html", {
         "page_html": secret_page_html,
     })
+
+@require_GET
+def robots(request):
+    lines = [
+        "User-agent: *",
+        "Sitemap: https://vas3k.club/sitemap.xml",
+        "Host: https://vas3k.club",
+    ]
+    return HttpResponse("\n".join(lines), content_type="text/plain")


Test patch:
Repository: vas3k/vas3k.club

Issue:
Баг: В посте ссылке, если ссылка на ютуб плейлист то он ресолвиться в первое видео, и теряеться информация о том что это плейлист 
Пример https://vas3k.club/link/11936/ линк и эмбедд ведет на https://www.youtube.com/watch?v=CC71WyVLnnk вместо ожидаемого https://www.youtube.com/watch?v=CC71WyVLnnk&list=PLXOrZPAO2Ui021R3sKD5z0n9Qzeix9Kbj&index=2 

Аналогично при вставке ссылки на плейлист в тело поста, она ресолвится  в первое видео


Discussion:

Resolving patch:
diff --git a/common/markdown/club_renderer.py b/common/markdown/club_renderer.py
--- a/common/markdown/club_renderer.py
+++ b/common/markdown/club_renderer.py
@@ -76,10 +76,13 @@ def simple_image(self, src, alt="", title=None):
 
     def youtube(self, src, alt="", title=None):
         youtube_match = YOUTUBE_RE.match(src)
+        playlist = ""
+        if youtube_match.group(2):
+            playlist = f"list={escape_html(youtube_match.group(2))}&listType=playlist&"
         video_tag = (
             f'<span class="ratio-16-9">'
             f'<iframe loading="lazy" src="https://www.youtube.com/embed/{escape_html(youtube_match.group(1))}'
-            f'?autoplay=0&amp;controls=1&amp;showinfo=1&amp;vq=hd1080"'
+            f'?{playlist}autoplay=0&amp;controls=1&amp;showinfo=1&amp;vq=hd1080"'
             f'allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; fullscreen"'
             f'allowfullscreen></iframe>'
             f"</span>"
diff --git a/common/regexp.py b/common/regexp.py
--- a/common/regexp.py
+++ b/common/regexp.py
@@ -4,7 +4,7 @@
 IMAGE_RE = re.compile(r"(http(s?):)([/|.|\w|\s|-])*\.(?:jpg|jpeg|gif|png)")
 VIDEO_RE = re.compile(r"(http(s?):)([/|.|\w|\s|-])*\.(?:mov|mp4)")
 YOUTUBE_RE = re.compile(
-    r"http(?:s?):\/\/(?:www\.)?youtu(?:be\.com\/watch\?v=|\.be\/)([\w\-\_]*)(&(amp;)?‌​[\w\?‌​=]*)?"
+    r"http(?:s?):\/\/(?:www\.)?youtu(?:be\.com\/watch\?v=|\.be\/)([\w\-\_]*)(?:.*list=(PL[\w\-\_]*))?"
 )
 TWITTER_RE = re.compile(r"(https?:\/\/twitter.com\/[a-zA-Z0-9_]+\/status\/[\d]+)")
 FAVICON_RE = re.compile(r"(http(s?):)([/|.|\w|\s|-])*\.(?:jpg|jpeg|gif|png|ico)")


Test patch:
Repository: vas3k/vas3k.club

Issue:
Идея: добавить лайки постов в выгружаемый архив с моими данными
Предлагаю добавить в архив файл где будут собраны посты (батлы, интро, проекты, и т.д) которые я лайкал. Формат: название поста, дата поста, ссылка на пост.

Мой конкретный кейс: в клуб заходит мой друг, хочу ему показать что-то из того, что мне понравилось из прошлого.


Discussion:

Resolving patch:
diff --git a/gdpr/archive.py b/gdpr/archive.py
--- a/gdpr/archive.py
+++ b/gdpr/archive.py
@@ -11,9 +11,10 @@
 from bookmarks.models import PostBookmark
 from comments.models import Comment
 from gdpr.serializers import post_to_json, post_to_md, user_to_json, comments_to_json, user_tags_to_json, \
-    user_expertises_to_json, comment_to_md, comment_to_json, bookmarks_to_json
+    user_expertises_to_json, comment_to_md, comment_to_json, bookmarks_to_json, upvotes_to_json
 from notifications.email.users import send_data_archive_ready_email
 from posts.models.post import Post
+from posts.models.votes import PostVote
 from users.models.expertise import UserExpertise
 from users.models.tags import UserTag
 
@@ -28,6 +29,7 @@ def generate_data_archive(user, save_path=settings.GDPR_ARCHIVE_STORAGE_PATH):
         dump_user_posts(user_dir, user)
         dump_user_comments(user_dir, user)
         dump_user_bookmarks(user_dir, user)
+        dump_user_upvotes(user_dir, user)
 
         # save zip archive
         archive_name = f"{user.slug}-{datetime.utcnow().strftime('%Y-%m-%d-%H-%M')}-{random.randint(1000000, 9999998)}"
@@ -107,3 +109,10 @@ def dump_user_bookmarks(user_dir, user):
 
     with open(os.path.join(user_dir, "bookmarks.json"), "w", encoding="utf-8") as f:
         f.write(json.dumps(bookmarks_to_json(bookmarks), ensure_ascii=False))
+
+
+def dump_user_upvotes(user_dir, user):
+    upvotes = PostVote.objects.filter(user=user).select_related("post")
+
+    with open(os.path.join(user_dir, "upvotes.json"), "w", encoding="utf-8") as f:
+        f.write(json.dumps(upvotes_to_json(upvotes), ensure_ascii=False))
diff --git a/gdpr/serializers.py b/gdpr/serializers.py
--- a/gdpr/serializers.py
+++ b/gdpr/serializers.py
@@ -6,6 +6,7 @@
 from bookmarks.models import PostBookmark
 from comments.models import Comment
 from posts.models.post import Post
+from posts.models.votes import PostVote
 from users.models.expertise import UserExpertise
 from users.models.tags import UserTag
 from users.models.user import User
@@ -151,3 +152,21 @@ def bookmark_to_json(bookmark: PostBookmark) -> dict:
         }),
         "created_at": bookmark.created_at.isoformat() if bookmark.created_at else None,
     }
+
+
+def upvotes_to_json(upvotes: List[PostVote]) -> dict:
+    return {
+        "upvotes": [
+            upvote_to_json(upvote) for upvote in upvotes
+        ]
+    }
+
+
+def upvote_to_json(upvote: PostVote) -> dict:
+    return {
+        "url": settings.APP_HOST + reverse("show_post", kwargs={
+            "post_type": upvote.post.type, "post_slug": upvote.post.slug
+        }),
+        "created_at": upvote.created_at.isoformat() if upvote.created_at else None,
+        "title": upvote.post.title,
+    }


Test patch:
Repository: vas3k/vas3k.club

Issue:
Фича: страничка-трекер наград-бейджей 
<!-- WARNING: Игнорирование шаблона может привести к тому, что таску закроют -->

## Чеклист

- [+] Я считаю, что фича офигенная и принесет пользу Клубу 🎩
- [+] Я поискал по трекеру похожие идеи, в том числе в закрытых Issues

## Описание фичи

Простая фича для отслеживания потоков любви и добра. Страничка, на которой можно видеть бейджики, которые раздают друг другу юзеры. Позитивно, интересно посмотреть на важные и крутые посты/комменты, в чистом виде user-generated фид лучшего контента клуба. Скорее всего поток будет не таким большим.

Баг: поехали плюсики к интро в ленте
<!-- WARNING: Игнорирование шаблона может привести к тому, что таску закроют -->

## Чеклист

- [+] Я поискал поиском по трекеру похожие проблемы, в том числе в закрытых Issues
- [ ] Баг стабильно воспроизводится и я знаю как это сделать

## Описание бага

Поехали плюсики в интро: 
<img width="531" alt="image" src="https://user-images.githubusercontent.com/2661956/139542653-ebc189fb-67a4-42aa-95e7-6bce5a228f6e.png">

**Система**: Firefox 93.0 Mac OS X 11.6



Discussion:

Resolving patch:
diff --git a/bot/handlers/moderation.py b/bot/handlers/moderation.py
--- a/bot/handlers/moderation.py
+++ b/bot/handlers/moderation.py
@@ -129,6 +129,7 @@ def approve_user_profile(update: Update, context: CallbackContext) -> None:
     intro = Post.objects.filter(author=user, type=Post.TYPE_INTRO).first()
     intro.is_approved_by_moderator = True
     intro.is_visible = True
+    intro.last_activity_at = datetime.utcnow()
     if not intro.published_at:
         intro.published_at = datetime.utcnow()
     intro.save()


Test patch:
Repository: vas3k/vas3k.club

Issue:
Bug: возможность замьютить самого себя
## Чеклист

- [x] Я поискал поиском по трекеру похожие проблемы, в том числе в закрытых Issues
- [x] Баг стабильно воспроизводится и я знаю как это сделать

## Описание бага

Пользователь технически может замьюить самого себя, после чего не сможет увидеть свои посты и комментарии.
Отмьютить себя пользователь тоже может самостоятельно (это работает в обе стороны).

## Ожидаемый результат

- При вызове мьюта самого себя система показывает шаблон с заглушкой: нельзя мьютить себя.
- Невозможность мьюта и размьюта самого себя.

## Шаги к воспроизведению

1. **Mute**: перейти на URL `vas3k.club/user/%USERNAME%/mute/`, где `%USERNAME%` — псевдоним пользователя (slug) 
2. Следовать мастеру мьюта.
3. **Unmute**: перейти на URL `vas3k.club/user/%USERNAME%/mute/`, где `%USERNAME%` — псевдоним пользователя (slug) 
4. Следовать мастеру мьюта.

Скриншот со страницы шаблона мьюта (продакшн):
![image](https://user-images.githubusercontent.com/94802477/148997272-685359bd-4d61-4f69-9dee-2b6beb6045d3.png)


Discussion:
Орнул. Да это же пушка!

Resolving patch:
diff --git a/users/views/muted.py b/users/views/muted.py
--- a/users/views/muted.py
+++ b/users/views/muted.py
@@ -15,6 +15,10 @@ def toggle_mute(request, user_slug):
     if user_to.is_curator or user_to.is_moderator:
         raise AccessDenied(title="У этого юзера иммунитет от мьюта")
 
+    if user_to == request.me:
+        raise AccessDenied(title='Хорошая попытка, но мьютить себя нельзя. Кожаный мешок, ты прекрасен!',
+                           message='')
+
     total_user_muted_count = Muted.objects.filter(user_from=request.me).count()
 
     # show form on GET


Test patch:
Repository: vas3k/vas3k.club

Issue:
Баг: Отображается бейдж рядом с комментом удалившегося пользователя
<!-- WARNING: Игнорирование шаблона может привести к тому, что таску закроют -->

## Чеклист

- [x] Я поискал поиском по трекеру похожие проблемы, в том числе в закрытых Issues
- [x] Баг стабильно воспроизводится и я знаю как это сделать

## Описание бага

Отображается бейдж рядом с комментом удалившегося пользователя.
<img width="850" alt="изображение" src="https://user-images.githubusercontent.com/8577311/147481639-3e6bbdc7-eb22-4b58-9a8e-99e7cff0948a.png">

## Ожидаемый результат

Вьюха коммента проверяет, что пользователь удалился/удален.

## Шаги к воспроизведению

1. Найти пост с комментом удалившегося пользователя
2. Рядом с комментом будет отображаться бейдж




Discussion:
Взял на подумать

Resolving patch:
diff --git a/badges/views.py b/badges/views.py
--- a/badges/views.py
+++ b/badges/views.py
@@ -66,7 +66,16 @@ def create_badge_for_comment(request, comment_id):
             title="😵 Комментарий удалён",
             message="Нельзя выдавать награды за удалённые комменты"
         )
-
+    if comment.author.deleted_at:
+        raise BadRequest(
+            title="😵 Пользователь удалился",
+            message="Нельзя выдавать награды удалённым юзерам"
+        )
+    if comment.author == request.me:
+        raise BadRequest(
+            title="😵 Это же ты",
+            message="Нельзя выдавать награды самому себе"
+        )
     if request.method != "POST":
         if request.me.membership_days_left() < settings.MIN_DAYS_TO_GIVE_BADGES:
             return render(request, "badges/messages/insufficient_funds.html")


Test patch:
Repository: vas3k/vas3k.club

Issue:
Фича: страничка-трекер наград-бейджей 
<!-- WARNING: Игнорирование шаблона может привести к тому, что таску закроют -->

## Чеклист

- [+] Я считаю, что фича офигенная и принесет пользу Клубу 🎩
- [+] Я поискал по трекеру похожие идеи, в том числе в закрытых Issues

## Описание фичи

Простая фича для отслеживания потоков любви и добра. Страничка, на которой можно видеть бейджики, которые раздают друг другу юзеры. Позитивно, интересно посмотреть на важные и крутые посты/комменты, в чистом виде user-generated фид лучшего контента клуба. Скорее всего поток будет не таким большим.

Баг: поехали плюсики к интро в ленте
<!-- WARNING: Игнорирование шаблона может привести к тому, что таску закроют -->

## Чеклист

- [+] Я поискал поиском по трекеру похожие проблемы, в том числе в закрытых Issues
- [ ] Баг стабильно воспроизводится и я знаю как это сделать

## Описание бага

Поехали плюсики в интро: 
<img width="531" alt="image" src="https://user-images.githubusercontent.com/2661956/139542653-ebc189fb-67a4-42aa-95e7-6bce5a228f6e.png">

**Система**: Firefox 93.0 Mac OS X 11.6



Discussion:

Resolving patch:
diff --git a/auth/views/auth.py b/auth/views/auth.py
--- a/auth/views/auth.py
+++ b/auth/views/auth.py
@@ -4,7 +4,7 @@
 from django.conf import settings
 from django.core.cache import cache
 from django.http import HttpResponseNotAllowed
-from django.shortcuts import redirect, render
+from django.shortcuts import redirect, render, get_object_or_404
 
 from auth.helpers import auth_required, set_session_cookie
 from auth.models import Session
@@ -103,3 +103,13 @@ def debug_random_login(request):
     session = Session.create_for_user(user)
 
     return set_session_cookie(redirect("profile", user.slug), user, session)
+
+
+def debug_login(request, user_slug):
+    if not (settings.DEBUG or settings.TESTS_RUN):
+        raise AccessDenied(title="Эта фича доступна только при DEBUG=true")
+
+    user = get_object_or_404(User, slug=user_slug)
+    session = Session.create_for_user(user)
+
+    return set_session_cookie(redirect("profile", user.slug), user, session)
diff --git a/club/urls.py b/club/urls.py
--- a/club/urls.py
+++ b/club/urls.py
@@ -4,7 +4,7 @@
 from django.views.generic import RedirectView
 
 from auth.helpers import auth_switch
-from auth.views.auth import login, logout, debug_dev_login, debug_random_login, join
+from auth.views.auth import login, logout, debug_dev_login, debug_random_login, debug_login, join
 from auth.views.email import email_login, email_login_code
 from auth.views.external import external_login
 from auth.views.patreon import patreon_login, patreon_oauth_callback
@@ -163,6 +163,7 @@
     path("godmode/digest/", godmode_digest_settings, name="godmode_digest_settings"),
     path("godmode/dev_login/", debug_dev_login, name="debug_dev_login"),
     path("godmode/random_login/", debug_random_login, name="debug_random_login"),
+    path("godmode/login/<str:user_slug>/", debug_login, name="debug_login"),
 
     # misc
     path("misc/calendar/ical", generate_ical_invite, name="generate_ical_invite"),


Test patch:
Repository: vas3k/vas3k.club

Issue:
Баг: каналы распознаются ботом как боты
Если человек пишет от имени канала и если на него кинуть whois то клубный бот The Machine пишет что он бот.


Discussion:
https://core.telegram.org/bots/api#user

[Проверяется именно это поле](https://github.com/vas3k/vas3k.club/blob/ee97c1b50166a28213b9fba06e5e3105e8d4ea82/bot/handlers/whois.py#L29)

Судя по всему, сейчас никак не пофиксить
https://core.telegram.org/bots/api#message

Судя по всему, надо проверять, есть ли `update.message.reply_to_message.sender_chat` - хотя я не уверен, что это оно, может быть и нет, надо тестить.
Попытался взять на себя ишшью для Хактоберфеста.
Я потыкал в метод `update.message.reply_to_message.sender_chat`, он _по-идее_ подходит, но не могу приручить его с учетом того, что бот написан на python-telegram-bot. Просто вылетает в AttributeError и все, когда я хочу проверить наличие sender_chat в Message. В Aiogram 3.0 такой проблемы нет.  Подумаю еще что делать )

Resolving patch:
diff --git a/bot/handlers/whois.py b/bot/handlers/whois.py
--- a/bot/handlers/whois.py
+++ b/bot/handlers/whois.py
@@ -36,6 +36,12 @@ def command_whois(update: Update, context: CallbackContext) -> None:
         from_user = original_message.forward_from
 
     if from_user.is_bot:
+        if getattr(original_message, 'sender_chat', None):
+            update.message.reply_text(
+                "Сообщение отправлено от имени чата/канала",
+                quote=True
+            )
+            return
         update.message.reply_text(
             "Это бот, глупышка",
             quote=True


Test patch:
Repository: vas3k/vas3k.club

Issue:
Убрать атрибуты Autoplay и Loop для видео, заливаемых напрямую в клуб
### Discussed in https://github.com/vas3k/vas3k.club/discussions/1113

<div type='discussions-op-text'>

<sup>Originally posted by **resaixe** November  4, 2020</sup>
Сейчас видео, которые заливаются напрямую в клуб, имеют атрибуты `autoplay="autoplay" loop="loop"`. 
Например, в [этом комментарии](https://vas3k.club/post/5942/#comment-6e78d5e4-7e7d-496e-a75a-e6516f0255f8) сейчас так:
```html
<video src="https://i.vas3k.club/d6600209ae05582854a384bb1ce5cfe23c64697b8f111b21ceabdfd72fce72bc.mp4" controls="controls" autoplay="autoplay" loop="loop" muted="muted" playsinline=""></video>
```

Предлагаю убрать эти атрибуты, чтобы пользователи сами решали, когда и сколько раз они хотят посмотреть видео. Чтобы стало так:
```html
<video src="https://i.vas3k.club/d6600209ae05582854a384bb1ce5cfe23c64697b8f111b21ceabdfd72fce72bc.mp4" controls="controls" muted="muted" playsinline=""></video>
```</div>


Discussion:
А там вроде в #1113 говорилось еще и про убрать muted ?

Resolving patch:
diff --git a/common/markdown/club_renderer.py b/common/markdown/club_renderer.py
--- a/common/markdown/club_renderer.py
+++ b/common/markdown/club_renderer.py
@@ -92,7 +92,7 @@ def youtube(self, src, alt="", title=None):
 
     def video(self, src, alt="", title=None):
         video_tag = (
-            f'<video src="{escape_html(src)}" controls autoplay loop muted playsinline>{escape_html(alt)}</video>'
+            f'<video src="{escape_html(src)}" controls muted playsinline>{escape_html(alt)}</video>'
         )
         caption = f"<figcaption>{escape_html(title)}</figcaption>" if title else ""
         return f"<figure>{video_tag}{caption}</figure>"
diff --git a/common/markdown/email_renderer.py b/common/markdown/email_renderer.py
--- a/common/markdown/email_renderer.py
+++ b/common/markdown/email_renderer.py
@@ -16,7 +16,7 @@ def youtube(self, src, alt="", title=None):
                f'</span></a><br>{escape_html(title or "")}'
 
     def video(self, src, alt="", title=None):
-        return f'<video src="{escape_html(src)}" controls autoplay loop muted playsinline>{alt}</video><br>{title or ""}'
+        return f'<video src="{escape_html(src)}" controls muted playsinline>{alt}</video><br>{title or ""}'
 
     def tweet(self, src, alt="", title=None):
         return f'<a href="{escape_html(src)}">{escape_html(src)}</a><br>{escape_html(title or "")}'


Test patch:
Repository: coreproject-moe/CoreProject-Monorepo

Issue:
Add `djangorestframework-simplejwt` and add Django endpoints. ( Easiest part NGL )
Gonna leave it as is till i finish other stuff




Discussion:

Resolving patch:
diff --git a/backend/core/settings.py b/backend/core/settings.py
--- a/backend/core/settings.py
+++ b/backend/core/settings.py
@@ -41,7 +41,8 @@
     "django.contrib.staticfiles",
     # Rest Framework
     "rest_framework",
-    "rest_framework.authtoken",
+    "rest_framework_simplejwt.token_blacklist",
+    # 3rd party stuff
     "corsheaders",
     # Custom Stuff
     "custom.user",
@@ -166,6 +167,7 @@
 # https://django-rest-framework-simplejwt.readthedocs.io/en/latest/getting_started.html#installation
 REST_FRAMEWORK = {
     "DEFAULT_AUTHENTICATION_CLASSES": (
+        "rest_framework_simplejwt.authentication.JWTAuthentication",
         "rest_framework.authentication.BasicAuthentication",
         "rest_framework.authentication.SessionAuthentication",
     )
diff --git a/backend/core/urls.py b/backend/core/urls.py
--- a/backend/core/urls.py
+++ b/backend/core/urls.py
@@ -19,6 +19,12 @@
 from django.conf.urls.static import static
 from django.conf import settings
 
+from rest_framework_simplejwt.views import (
+    TokenObtainPairView,
+    TokenRefreshView,
+    TokenBlacklistView,
+)
+
 urlpatterns = [
     path("admin/", admin.site.urls),
     # Pages
@@ -26,6 +32,12 @@
     path("authentication/", include("pages.authentication.urls")),
     # Api
     path("api/v1/avatar/", include("api.v1.avatar.urls")),
+    # https://django-rest-framework-simplejwt.readthedocs.io/en/latest/getting_started.html#installation
+    path("api/v1/token/", TokenObtainPairView.as_view(), name="token_obtain_pair"),
+    path("api/v1/token/refresh/", TokenRefreshView.as_view(), name="token_refresh"),
+    path(
+        "api/v1/token/blacklist/", TokenBlacklistView.as_view(), name="token_blacklist"
+    ),
     # Rest endpoints
     path("api/v1/users/", include("api.v1._user.urls")),
 ]


Test patch:
Repository: coreproject-moe/CoreProject-Monorepo

Issue:
fix: create `text-editor` component
https://github.com/baseplate-admin/CoreProject/blob/fbd4a63b398d2638b6d1935a2ca89dee5e7cc545/backend/django_core/templates/anime/episode/index.html#L141-L176


Discussion:

Resolving patch:
diff --git a/backend/components/text_editor/text_editor.py b/backend/components/text_editor/text_editor.py
new file mode 100644
--- /dev/null
+++ b/backend/components/text_editor/text_editor.py
@@ -0,0 +1,6 @@
+from django_components import component
+
+
+@component.register("text_editor")
+class TextEditor(component.Component):
+    template_name = "text_editor/text_editor.html"


Test patch:
Repository: coreproject-moe/CoreProject-Monorepo

Issue:
[`Frontend`]  : Move code to specific `web-component`
https://github.com/baseplate-admin/CoreProject/blob/cd436b876f4936b61397a0cc838aa88125527a78/backend/django_core/templates/anime/index.html#L123-L205


Discussion:

Resolving patch:
diff --git a/backend/django_core/apps/pages/views/anime.py b/backend/django_core/apps/pages/views/anime.py
--- a/backend/django_core/apps/pages/views/anime.py
+++ b/backend/django_core/apps/pages/views/anime.py
@@ -1,3 +1,4 @@
+import json
 from typing import TYPE_CHECKING
 
 from django.http import HttpResponse
@@ -37,6 +38,9 @@ async def anime_home_view_partial_slider_view(
 
 
 async def anime_home_view(request: "HtmxHttpRequest") -> HttpResponse:
+    # cant parse single quoted string
+    latest_episodes_json = json.dumps(latest_episodes)
+
     if request.htmx:
         return render(
             request,
@@ -44,7 +48,7 @@ async def anime_home_view(request: "HtmxHttpRequest") -> HttpResponse:
             context={
                 "latest_animes": latest_animes,
                 "my_list": my_list,
-                "latest_episodes": latest_episodes,
+                "latest_episodes": latest_episodes_json,
             },
         )
 
@@ -55,7 +59,7 @@ async def anime_home_view(request: "HtmxHttpRequest") -> HttpResponse:
             "icons": icons,
             "latest_animes": latest_animes,
             "my_list": my_list,
-            "latest_episodes": latest_episodes,
+            "latest_episodes": latest_episodes_json,
         },
     )
 


Test patch: