punkweb-bb 0.2.0__py3-none-any.whl → 0.2.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. punkweb_bb/__pycache__/admin.cpython-311.pyc +0 -0
  2. punkweb_bb/__pycache__/admin_forms.cpython-311.pyc +0 -0
  3. punkweb_bb/__pycache__/models.cpython-311.pyc +0 -0
  4. punkweb_bb/__pycache__/settings.cpython-311.pyc +0 -0
  5. punkweb_bb/__pycache__/urls.cpython-311.pyc +0 -0
  6. punkweb_bb/__pycache__/utils.cpython-311.pyc +0 -0
  7. punkweb_bb/__pycache__/views.cpython-311.pyc +0 -0
  8. punkweb_bb/admin.py +23 -1
  9. punkweb_bb/admin_forms.py +17 -1
  10. punkweb_bb/migrations/0003_alter_thread_options.py +23 -0
  11. punkweb_bb/migrations/0004_groupstyle.py +58 -0
  12. punkweb_bb/migrations/__pycache__/0003_alter_thread_options.cpython-311.pyc +0 -0
  13. punkweb_bb/migrations/__pycache__/0004_groupstyle.cpython-311.pyc +0 -0
  14. punkweb_bb/models.py +25 -0
  15. punkweb_bb/settings.py +1 -0
  16. punkweb_bb/static/punkweb_bb/css/index.css +2 -2
  17. punkweb_bb/static/punkweb_bb/css/punkweb.css +95 -4
  18. punkweb_bb/static/punkweb_bb/css/subcategory.css +1 -0
  19. punkweb_bb/static/punkweb_bb/css/thread.css +3 -3
  20. punkweb_bb/static/punkweb_bb/editor/bbcode-editor.js +1 -1
  21. punkweb_bb/templates/punkweb_bb/base.html +6 -0
  22. punkweb_bb/templates/punkweb_bb/index.html +40 -25
  23. punkweb_bb/templates/punkweb_bb/login.html +1 -0
  24. punkweb_bb/templates/punkweb_bb/members.html +3 -2
  25. punkweb_bb/templates/punkweb_bb/profile.html +3 -2
  26. punkweb_bb/templates/punkweb_bb/settings.html +1 -0
  27. punkweb_bb/templates/punkweb_bb/shoutbox/shout_list.html +9 -5
  28. punkweb_bb/templates/punkweb_bb/signup.html +1 -0
  29. punkweb_bb/templates/punkweb_bb/subcategory.html +21 -11
  30. punkweb_bb/templates/punkweb_bb/thread.html +80 -24
  31. punkweb_bb/templates/punkweb_bb/thread_create.html +1 -0
  32. punkweb_bb/templatetags/__pycache__/styled_group_name.cpython-311.pyc +0 -0
  33. punkweb_bb/templatetags/__pycache__/styled_username.cpython-311.pyc +0 -0
  34. punkweb_bb/templatetags/__pycache__/username.cpython-311.pyc +0 -0
  35. punkweb_bb/templatetags/styled_group_name.py +11 -0
  36. punkweb_bb/templatetags/styled_username.py +9 -0
  37. punkweb_bb/urls.py +2 -0
  38. punkweb_bb/utils.py +30 -0
  39. punkweb_bb/views.py +26 -0
  40. {punkweb_bb-0.2.0.dist-info → punkweb_bb-0.2.2.dist-info}/METADATA +3 -2
  41. {punkweb_bb-0.2.0.dist-info → punkweb_bb-0.2.2.dist-info}/RECORD +44 -35
  42. {punkweb_bb-0.2.0.dist-info → punkweb_bb-0.2.2.dist-info}/LICENSE +0 -0
  43. {punkweb_bb-0.2.0.dist-info → punkweb_bb-0.2.2.dist-info}/WHEEL +0 -0
  44. {punkweb_bb-0.2.0.dist-info → punkweb_bb-0.2.2.dist-info}/top_level.txt +0 -0
Binary file
punkweb_bb/admin.py CHANGED
@@ -4,11 +4,20 @@ from django.utils.safestring import mark_safe
4
4
  from punkweb_bb.admin_forms import (
5
5
  BoardProfileAdminModelForm,
6
6
  CategoryAdminModelForm,
7
+ GroupStyleAdminModelForm,
7
8
  PostAdminModelForm,
8
9
  SubcategoryAdminModelForm,
9
10
  ThreadAdminModelForm,
10
11
  )
11
- from punkweb_bb.models import BoardProfile, Category, Post, Shout, Subcategory, Thread
12
+ from punkweb_bb.models import (
13
+ BoardProfile,
14
+ Category,
15
+ GroupStyle,
16
+ Post,
17
+ Shout,
18
+ Subcategory,
19
+ Thread,
20
+ )
12
21
 
13
22
 
14
23
  @admin.register(BoardProfile)
@@ -114,3 +123,16 @@ class ShoutModelAdmin(admin.ModelAdmin):
114
123
  "user__email",
115
124
  "content",
116
125
  )
126
+
127
+
128
+ @admin.register(GroupStyle)
129
+ class GroupStyleModelAdmin(admin.ModelAdmin):
130
+ form = GroupStyleAdminModelForm
131
+ list_display = (
132
+ "group",
133
+ "priority",
134
+ )
135
+ search_fields = (
136
+ "group__name",
137
+ "username_style",
138
+ )
punkweb_bb/admin_forms.py CHANGED
@@ -1,6 +1,13 @@
1
1
  from django import forms
2
2
 
3
- from punkweb_bb.models import BoardProfile, Category, Post, Subcategory, Thread
3
+ from punkweb_bb.models import (
4
+ BoardProfile,
5
+ Category,
6
+ GroupStyle,
7
+ Post,
8
+ Subcategory,
9
+ Thread,
10
+ )
4
11
  from punkweb_bb.widgets import BBCodeEditorWidget
5
12
 
6
13
 
@@ -47,3 +54,12 @@ class PostAdminModelForm(forms.ModelForm):
47
54
  widgets = {
48
55
  "content": BBCodeEditorWidget(),
49
56
  }
57
+
58
+
59
+ class GroupStyleAdminModelForm(forms.ModelForm):
60
+ class Meta:
61
+ model = GroupStyle
62
+ fields = "__all__"
63
+ widgets = {
64
+ "username_style": BBCodeEditorWidget(),
65
+ }
@@ -0,0 +1,23 @@
1
+ # Generated by Django 4.2.11 on 2024-05-29 01:03
2
+
3
+ from django.db import migrations
4
+
5
+
6
+ class Migration(migrations.Migration):
7
+
8
+ dependencies = [
9
+ ("punkweb_bb", "0002_thread_view_count"),
10
+ ]
11
+
12
+ operations = [
13
+ migrations.AlterModelOptions(
14
+ name="thread",
15
+ options={
16
+ "ordering": ("subcategory", "-is_pinned", "-last_post_created_at"),
17
+ "permissions": (
18
+ ("pin_thread", "Can pin thread"),
19
+ ("close_thread", "Can close thread"),
20
+ ),
21
+ },
22
+ ),
23
+ ]
@@ -0,0 +1,58 @@
1
+ # Generated by Django 4.2.11 on 2024-05-29 19:48
2
+
3
+ from django.db import migrations, models
4
+ import django.db.models.deletion
5
+ import precise_bbcode.fields
6
+ import uuid
7
+
8
+
9
+ class Migration(migrations.Migration):
10
+
11
+ dependencies = [
12
+ ("auth", "0012_alter_user_first_name_max_length"),
13
+ ("punkweb_bb", "0003_alter_thread_options"),
14
+ ]
15
+
16
+ operations = [
17
+ migrations.CreateModel(
18
+ name="GroupStyle",
19
+ fields=[
20
+ (
21
+ "id",
22
+ models.UUIDField(
23
+ default=uuid.uuid4,
24
+ editable=False,
25
+ primary_key=True,
26
+ serialize=False,
27
+ ),
28
+ ),
29
+ ("created_at", models.DateTimeField(auto_now_add=True)),
30
+ ("updated_at", models.DateTimeField(auto_now=True)),
31
+ (
32
+ "priority",
33
+ models.PositiveIntegerField(
34
+ default=0, help_text="Highest priority is displayed"
35
+ ),
36
+ ),
37
+ (
38
+ "_username_style_rendered",
39
+ models.TextField(blank=True, editable=False, null=True),
40
+ ),
41
+ (
42
+ "username_style",
43
+ precise_bbcode.fields.BBCodeTextField(no_rendered_field=True),
44
+ ),
45
+ (
46
+ "group",
47
+ models.OneToOneField(
48
+ on_delete=django.db.models.deletion.CASCADE,
49
+ related_name="style",
50
+ to="auth.group",
51
+ ),
52
+ ),
53
+ ],
54
+ options={
55
+ "ordering": ("-priority",),
56
+ },
57
+ ),
58
+ ]
punkweb_bb/models.py CHANGED
@@ -3,6 +3,7 @@ import math
3
3
  import os
4
4
 
5
5
  from django.contrib.auth import get_user_model
6
+ from django.contrib.auth.models import Group
6
7
  from django.core.cache import cache
7
8
  from django.db import models
8
9
  from django.forms import ValidationError
@@ -11,6 +12,7 @@ from django.utils import timezone
11
12
  from precise_bbcode.fields import BBCodeTextField
12
13
 
13
14
  from punkweb_bb.mixins import TimestampMixin, UUIDPrimaryKeyMixin
15
+ from punkweb_bb.utils import get_styled_username
14
16
 
15
17
  User = get_user_model()
16
18
 
@@ -28,6 +30,10 @@ class BoardProfile(UUIDPrimaryKeyMixin, TimestampMixin):
28
30
  class Meta:
29
31
  ordering = ("user__username",)
30
32
 
33
+ @property
34
+ def styled_username(self):
35
+ return get_styled_username(self.user)
36
+
31
37
  @property
32
38
  def is_online(self):
33
39
  last_seen = cache.get(f"profile_online_{self.id}")
@@ -119,6 +125,10 @@ class Thread(UUIDPrimaryKeyMixin, TimestampMixin):
119
125
  "-is_pinned",
120
126
  "-last_post_created_at",
121
127
  )
128
+ permissions = (
129
+ ("pin_thread", "Can pin thread"),
130
+ ("close_thread", "Can close thread"),
131
+ )
122
132
 
123
133
  def __str__(self):
124
134
  return f"{self.title}"
@@ -201,3 +211,18 @@ class Shout(UUIDPrimaryKeyMixin, TimestampMixin):
201
211
 
202
212
  def can_delete(self, user):
203
213
  return user == self.user or user.has_perm("punkweb_bb.delete_shout")
214
+
215
+
216
+ class GroupStyle(UUIDPrimaryKeyMixin, TimestampMixin):
217
+ group = models.OneToOneField(Group, related_name="style", on_delete=models.CASCADE)
218
+ priority = models.PositiveIntegerField(
219
+ default=0,
220
+ help_text="Highest priority is displayed",
221
+ )
222
+ username_style = BBCodeTextField()
223
+
224
+ class Meta:
225
+ ordering = ("-priority",)
226
+
227
+ def __str__(self):
228
+ return f"{self.group} > {self.priority}"
punkweb_bb/settings.py CHANGED
@@ -5,6 +5,7 @@ PUNKWEB_BB = getattr(settings, "PUNKWEB_BB", {})
5
5
  SITE_NAME = PUNKWEB_BB.get("SITE_NAME", "PUNKWEB")
6
6
  SITE_TITLE = PUNKWEB_BB.get("SITE_TITLE", "PunkwebBB")
7
7
  FAVICON = PUNKWEB_BB.get("FAVICON", "punkweb_bb/favicon.ico")
8
+ OG_IMAGE = PUNKWEB_BB.get("OG_IMAGE", None)
8
9
  SHOUTBOX_ENABLED = PUNKWEB_BB.get("SHOUTBOX_ENABLED", True)
9
10
  DISCORD_WIDGET_ENABLED = PUNKWEB_BB.get("DISCORD_WIDGET_ENABLED", False)
10
11
  DISCORD_WIDGET_THEME = PUNKWEB_BB.get("DISCORD_WIDGET_THEME", "dark")
@@ -7,10 +7,10 @@
7
7
  flex: 1;
8
8
  }
9
9
 
10
- .index__category__actions {
10
+ .index__category__title {
11
11
  align-items: center;
12
12
  display: flex;
13
- gap: 0.25rem;
13
+ gap: 0.5rem;
14
14
  }
15
15
 
16
16
  .index__sidebar {
@@ -390,12 +390,13 @@ blockquote cite {
390
390
  /** Icon Button **/
391
391
 
392
392
  .pw-icon-button {
393
+ align-items: center;
393
394
  border-radius: 0.25rem;
394
395
  cursor: pointer;
395
- display: inline-block;
396
+ display: flex;
397
+ justify-content: center;
396
398
  font-weight: 500;
397
399
  transition: all 0.15s ease;
398
- text-align: center;
399
400
 
400
401
  height: 2rem;
401
402
  line-height: 2rem;
@@ -463,7 +464,7 @@ blockquote cite {
463
464
  width: 3rem;
464
465
  }
465
466
 
466
- .pw-icon-button.sl .material-symbols-outlined {
467
+ .pw-icon-button.xl .material-symbols-outlined {
467
468
  font-size: 1.5rem;
468
469
  }
469
470
 
@@ -492,6 +493,30 @@ blockquote cite {
492
493
  background-color: var(--oc-gray-1);
493
494
  }
494
495
 
496
+ .pw-icon-button.default.primary {
497
+ color: var(--primary-9);
498
+ }
499
+
500
+ .pw-icon-button.default.primary:hover {
501
+ background-color: var(--primary-0);
502
+ }
503
+
504
+ .pw-icon-button.default.primary:active {
505
+ background-color: var(--primary-1);
506
+ }
507
+
508
+ .pw-icon-button.default.danger {
509
+ color: var(--oc-red-9);
510
+ }
511
+
512
+ .pw-icon-button.default.danger:hover {
513
+ background-color: var(--oc-red-0);
514
+ }
515
+
516
+ .pw-icon-button.default.danger:active {
517
+ background-color: var(--oc-red-1);
518
+ }
519
+
495
520
  /* Outlined */
496
521
 
497
522
  .pw-icon-button.outlined {
@@ -507,7 +532,33 @@ blockquote cite {
507
532
  background-color: var(--oc-gray-1);
508
533
  }
509
534
 
510
- /* Outlined */
535
+ .pw-icon-button.outlined.primary {
536
+ border-color: var(--primary-9);
537
+ color: var(--primary-9);
538
+ }
539
+
540
+ .pw-icon-button.outlined.primary:hover {
541
+ background-color: var(--primary-0);
542
+ }
543
+
544
+ .pw-icon-button.outlined.primary:active {
545
+ background-color: var(--primary-1);
546
+ }
547
+
548
+ .pw-icon-button.outlined.danger {
549
+ border-color: var(--oc-red-9);
550
+ color: var(--oc-red-9);
551
+ }
552
+
553
+ .pw-icon-button.outlined.danger:hover {
554
+ background-color: var(--oc-red-0);
555
+ }
556
+
557
+ .pw-icon-button.outlined.danger:active {
558
+ background-color: var(--oc-red-1);
559
+ }
560
+
561
+ /* Ghost */
511
562
 
512
563
  .pw-icon-button.ghost {
513
564
  border: 1px solid var(--oc-gray-9);
@@ -525,6 +576,38 @@ blockquote cite {
525
576
  color: white;
526
577
  }
527
578
 
579
+ .pw-icon-button.ghost.primary {
580
+ border: 1px solid var(--primary-9);
581
+ color: var(--primary-9);
582
+ }
583
+
584
+ .pw-icon-button.ghost.primary:not(:disabled):hover {
585
+ background-color: var(--primary-9);
586
+ color: white;
587
+ }
588
+
589
+ .pw-icon-button.ghost.primary:not(:disabled):active {
590
+ background-color: var(--primary-9);
591
+ box-shadow: 0 0.125rem 0.25rem 0 rgba(0, 0, 0, 0.25);
592
+ color: white;
593
+ }
594
+
595
+ .pw-icon-button.ghost.danger {
596
+ border: 1px solid var(--oc-red-9);
597
+ color: var(--oc-red-9);
598
+ }
599
+
600
+ .pw-icon-button.ghost.danger:not(:disabled):hover {
601
+ background-color: var(--oc-red-9);
602
+ color: white;
603
+ }
604
+
605
+ .pw-icon-button.ghost.danger:not(:disabled):active {
606
+ background-color: var(--oc-red-9);
607
+ box-shadow: 0 0.125rem 0.25rem 0 rgba(0, 0, 0, 0.25);
608
+ color: white;
609
+ }
610
+
528
611
  /* Raised */
529
612
 
530
613
  .pw-icon-button.raised {
@@ -533,6 +616,14 @@ blockquote cite {
533
616
  color: white;
534
617
  }
535
618
 
619
+ .pw-icon-button.raised.primary {
620
+ background-color: var(--primary-9);
621
+ }
622
+
623
+ .pw-icon-button.raised.danger {
624
+ background-color: var(--oc-red-9);
625
+ }
626
+
536
627
  .pw-icon-button.raised:not(:disabled):hover {
537
628
  box-shadow: 0 0.125rem 0.25rem 0 rgba(0, 0, 0, 0.25);
538
629
  }
@@ -30,6 +30,7 @@
30
30
  .thread__latestPost {
31
31
  align-items: center;
32
32
  display: flex;
33
+ justify-content: end;
33
34
  gap: 0.75rem;
34
35
  }
35
36
 
@@ -63,8 +63,8 @@
63
63
  }
64
64
 
65
65
  .thread__user__group {
66
- background-color: var(--primary-8);
67
- border: 1px solid var(--primary-9);
66
+ background-color: var(--oc-gray-0);
67
+ border: 1px solid var(--border);
68
68
  border-radius: 0.25rem;
69
69
  color: var(--text-on-primary);
70
70
  display: flex;
@@ -94,7 +94,7 @@
94
94
  align-items: center;
95
95
  display: flex;
96
96
  justify-content: flex-end;
97
- gap: 1rem;
97
+ gap: 0.25rem;
98
98
  padding: 1rem;
99
99
  }
100
100
 
@@ -2,7 +2,7 @@ $(function () {
2
2
  $(document).ready(function () {
3
3
  $(".bbcode-editor").sceditor({
4
4
  emoticonsCompat: true,
5
- emoticonsEnabled: true,
5
+ emoticonsEnabled: false,
6
6
  emoticonsRoot: "/media/precise_bbcode/smilies/",
7
7
  emoticons: {
8
8
  dropdown: {},
@@ -6,6 +6,12 @@
6
6
  <meta charset="UTF-8" />
7
7
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
8
8
  <title>{% block title_prefix %}{% endblock %}{{ punkweb_bb.settings.SITE_TITLE|default:"PunkwebBB" }}</title>
9
+ <meta property="og:title" content="{% block og_title_prefix %}{% endblock %}{{ punkweb_bb.settings.SITE_TITLE|default:"PunkwebBB" }}" />
10
+ <meta property="og:type" content="website" />
11
+ <meta property="og:url" content="{{ request.build_absolute_uri }}" />
12
+ {% if punkweb_bb.settings.OG_IMAGE %}
13
+ <meta property="og:image" content="{{ punkweb_bb.settings.OG_IMAGE }}" />
14
+ {% endif %}
9
15
  <link rel="icon" href="{% static punkweb_bb.settings.FAVICON %}" />
10
16
  <link rel="stylesheet" href="{% static 'punkweb_bb/vendor/open-color.css' %}" />
11
17
  <link rel="stylesheet" href="{% static 'punkweb_bb/vendor/prism.css' %}" />
@@ -1,6 +1,6 @@
1
1
  {% extends 'punkweb_bb/base.html' %}
2
2
 
3
- {% load static %}
3
+ {% load static bbcode_tags styled_username %}
4
4
 
5
5
  {% block extra_head %}
6
6
  <link rel="stylesheet" href="{% static 'punkweb_bb/css/index.css' %}" />
@@ -31,36 +31,45 @@
31
31
  </colgroup>
32
32
  <thead>
33
33
  <tr>
34
- <th><a href="{{category.get_absolute_url}}">{{category.name}}</a></th>
35
- <th>Threads</th>
36
- <th>Posts</th>
37
- <th></th>
38
- </tr>
39
- </thead>
40
- <tbody>
41
- {% if perms.punkweb_bb.add_subcategory or perms.punkweb_bb.change_category or perms.punkweb_bb.delete_category %}
42
- <tr>
43
- <td colspan="4">
44
- <div class="index__category__actions">
34
+ <th>
35
+ <div class="index__category__title">
36
+ <a href="{{category.get_absolute_url}}">{{category.name}}</a>
45
37
  {% if perms.punkweb_bb.add_subcategory %}
46
- <a class="pw-button ghost xs" href="{% url 'punkweb_bb:subcategory_create' category.slug %}">
47
- Create Subcategory
38
+ <a
39
+ class="pw-icon-button default rounded sm"
40
+ href="{% url 'punkweb_bb:subcategory_create' category.slug %}"
41
+ title="Create subcategory"
42
+ >
43
+ <span class="material-symbols-outlined">add</span>
48
44
  </a>
49
45
  {% endif %}
50
46
  {% if perms.punkweb_bb.change_category %}
51
- <a class="pw-button ghost xs" href="{% url 'punkweb_bb:category_update' category.slug %}">
52
- Edit
47
+ <a
48
+ class="pw-icon-button default rounded sm"
49
+ href="{% url 'punkweb_bb:category_update' category.slug %}"
50
+ title="Edit category"
51
+ >
52
+ <span class="material-symbols-outlined">edit</span>
53
53
  </a>
54
54
  {% endif %}
55
55
  {% if perms.punkweb_bb.delete_category %}
56
- <a class="pw-button ghost danger xs" hx-get="{% url 'punkweb_bb:category_delete' category.slug %}" hx-target="#modal-portal">
57
- Delete
56
+ <a
57
+ class="pw-icon-button default danger rounded sm"
58
+ title="Delete category"
59
+ hx-get="{% url 'punkweb_bb:category_delete' category.slug %}"
60
+ hx-target="#modal-portal"
61
+ >
62
+ <span class="material-symbols-outlined">delete</span>
58
63
  </a>
59
64
  {% endif %}
60
65
  </div>
61
- </td>
66
+ </th>
67
+ <th>Threads</th>
68
+ <th>Posts</th>
69
+ <th></th>
62
70
  </tr>
63
- {% endif %}
71
+ </thead>
72
+ <tbody>
64
73
  {% for subcategory in category.subcategories.all %}
65
74
  <tr>
66
75
  <td>
@@ -92,7 +101,7 @@
92
101
  </time>
93
102
 
94
103
  <a href="{% url 'punkweb_bb:profile' subcategory.latest_thread.latest_post.user.id %}">
95
- {{subcategory.latest_thread.latest_post.user.username}}
104
+ {{subcategory.latest_thread.latest_post.user|styled_username}}
96
105
  </a>
97
106
  </div>
98
107
  </div>
@@ -116,7 +125,7 @@
116
125
  </time>
117
126
 
118
127
  <a href="{% url 'punkweb_bb:profile' subcategory.latest_thread.user.id %}">
119
- {{subcategory.latest_thread.user.username}}
128
+ {{subcategory.latest_thread.user|styled_username}}
120
129
  </a>
121
130
  </div>
122
131
  </div>
@@ -134,7 +143,13 @@
134
143
  </div>
135
144
  {% endfor %}
136
145
  {% if perms.punkweb_bb.add_category %}
137
- <a class="pw-button ghost xs" href="{% url 'punkweb_bb:category_create' %}">Create Category</a>
146
+ <a
147
+ class="pw-icon-button raised primary rounded"
148
+ href="{% url 'punkweb_bb:category_create' %}"
149
+ title="Create category"
150
+ >
151
+ <span class="material-symbols-outlined">add</span>
152
+ </a>
138
153
  {% endif %}
139
154
  </div>
140
155
  <div class="index__sidebar">
@@ -160,7 +175,7 @@
160
175
  </time>
161
176
 
162
177
  <a href="{% url 'punkweb_bb:profile' thread.user.id %}">
163
- {{thread.user.username}}
178
+ {{thread.user|styled_username}}
164
179
  </a>
165
180
  </div>
166
181
  </div>
@@ -191,7 +206,7 @@
191
206
  <div class="index__statistics__label">Newest member:</div>
192
207
  <div class="index__statistics__value">
193
208
  <a href="{% url 'punkweb_bb:profile' newest_user.id %}">
194
- {{newest_user.username}}
209
+ {{newest_user|styled_username}}
195
210
  </a>
196
211
  </div>
197
212
  </div>
@@ -2,6 +2,7 @@
2
2
  {% load static %}
3
3
 
4
4
  {% block title_prefix %}Login | {% endblock%}
5
+ {% block og_title_prefix %}Login | {% endblock %}
5
6
 
6
7
  {% block extra_head %}
7
8
  <link rel="stylesheet" href="{% static 'punkweb_bb/css/login.css' %}" />
@@ -1,7 +1,8 @@
1
1
  {% extends "punkweb_bb/base.html" %}
2
- {% load static %}
2
+ {% load static styled_username %}
3
3
 
4
4
  {% block title_prefix %}Members | {% endblock%}
5
+ {% block og_title_prefix %}Members | {% endblock %}
5
6
 
6
7
  {% block extra_head %}
7
8
  <link rel="stylesheet" href="{% static 'punkweb_bb/css/members.css' %}" />
@@ -32,7 +33,7 @@
32
33
  {% endif %}
33
34
  </div>
34
35
  <div class="members__user__info">
35
- <div class="members__user__username"><a href="{% url 'punkweb_bb:profile' user.id %}">{{ user.username }}</a></div>
36
+ <div class="members__user__username"><a href="{% url 'punkweb_bb:profile' user.id %}">{{ user|styled_username }}</a></div>
36
37
  <div class="members__user__stats">
37
38
  <div class="members__user__stat">
38
39
  Posts:
@@ -1,7 +1,8 @@
1
1
  {% extends 'punkweb_bb/base.html' %}
2
- {% load static %}
2
+ {% load static styled_username %}
3
3
 
4
4
  {% block title_prefix %}{{ user.username }} | {% endblock%}
5
+ {% block og_title_prefix %}{{ user.username }} | {% endblock %}
5
6
 
6
7
  {% block extra_head %}
7
8
  <link rel="stylesheet" href="{% static 'punkweb_bb/css/profile.css' %}">
@@ -34,7 +35,7 @@
34
35
  {% endif %}
35
36
  </div>
36
37
  <div class="profile__info__details">
37
- <div class="profile__info__username">{{user.username}}</div>
38
+ <div class="profile__info__username">{{user|styled_username}}</div>
38
39
  <div class="profile__info__stats">
39
40
  <div class="profile__info__stat">
40
41
  Date Joined:
@@ -2,6 +2,7 @@
2
2
  {% load static %}
3
3
 
4
4
  {% block title_prefix %}Settings | {% endblock %}
5
+ {% block og_title_prefix %}Settings | {% endblock %}
5
6
 
6
7
  {% block extra_head %}
7
8
  {{form.media.css}}
@@ -1,17 +1,21 @@
1
- {% load shoutbox_bbcode can_delete %}
1
+ {% load shoutbox_bbcode can_delete styled_username %}
2
2
 
3
3
  {% for shout in shouts %}
4
4
  <div class="shoutbox__shout">
5
5
  <div class="shoutbox__shout__content">
6
6
  <span>{{shout.created_at|date:'g:i A'}}</span>
7
- <span><a href="{% url 'punkweb_bb:profile' shout.user.id %}">{{shout.user.username}}</a>: </span>
7
+ <span><a href="{% url 'punkweb_bb:profile' shout.user.id %}">{{shout.user|styled_username}}</a>: </span>
8
8
  <span>{{ shout.content | safe | shoutbox_bbcode }}</span>
9
9
  </div>
10
10
  {% if shout|can_delete:request.user %}
11
11
  <div class="shoutbox__shout__actions">
12
- <button class="pw-icon-button danger xs" hx-get="{% url 'punkweb_bb:shout_delete' shout.id %}"
13
- hx-target="#modal-portal">
14
- <span class="material-symbols-outlined">close</span>
12
+ <button
13
+ class="pw-icon-button default danger sm"
14
+ title="Delete"
15
+ hx-get="{% url 'punkweb_bb:shout_delete' shout.id %}"
16
+ hx-target="#modal-portal"
17
+ >
18
+ <span class="material-symbols-outlined">delete</span>
15
19
  </button>
16
20
  </div>
17
21
  {% endif %}
@@ -2,6 +2,7 @@
2
2
  {% load static %}
3
3
 
4
4
  {% block title_prefix %}Sign Up | {% endblock%}
5
+ {% block og_title_prefix %}Sign Up | {% endblock %}
5
6
 
6
7
  {% block extra_head %}
7
8
  <link rel="stylesheet" href="{% static 'punkweb_bb/css/login.css' %}" />
@@ -1,7 +1,8 @@
1
1
  {% extends 'punkweb_bb/base.html' %}
2
- {% load static humanize_int can_post %}
2
+ {% load static humanize_int can_post styled_username %}
3
3
 
4
4
  {% block title_prefix %}{{subcategory.name}} | {% endblock%}
5
+ {% block og_title_prefix %}{{subcategory.name}} | {% endblock %}
5
6
 
6
7
  {% block extra_head %}
7
8
  <link rel="stylesheet" href="{% static 'punkweb_bb/css/subcategory.css' %}" />
@@ -29,13 +30,22 @@
29
30
  {% if perms.punkweb_bb.change_subcategory or perms.punkweb_bb.delete_subcategory %}
30
31
  <div class="subcategory__header__actions">
31
32
  {% if perms.punkweb_bb.change_subcategory %}
32
- <a class="pw-button ghost xs" href="{% url 'punkweb_bb:subcategory_update' subcategory.slug %}">
33
- Edit
33
+ <a
34
+ class="pw-icon-button default rounded"
35
+ href="{% url 'punkweb_bb:subcategory_update' subcategory.slug %}"
36
+ title="Edit subcategory"
37
+ >
38
+ <span class="material-symbols-outlined">edit</span>
34
39
  </a>
35
40
  {% endif %}
36
41
  {% if perms.punkweb_bb.delete_subcategory %}
37
- <a class="pw-button ghost danger xs" hx-get="{% url 'punkweb_bb:subcategory_delete' subcategory.slug %}" hx-target="#modal-portal">
38
- Delete
42
+ <a
43
+ class="pw-icon-button default rounded danger"
44
+ title="Delete subcategory"
45
+ hx-get="{% url 'punkweb_bb:subcategory_delete' subcategory.slug %}"
46
+ hx-target="#modal-portal"
47
+ >
48
+ <span class="material-symbols-outlined">delete</span>
39
49
  </a>
40
50
  {% endif %}
41
51
  </div>
@@ -60,10 +70,10 @@
60
70
  <div class="pw-table-container">
61
71
  <table class="pw-table">
62
72
  <colgroup>
63
- <col span="1">
64
- <col span="1" width="96px">
65
- <col span="1" width="96px">
66
- <col span="1" width="160px">
73
+ <col>
74
+ <col width="96px">
75
+ <col width="96px">
76
+ <col width="192px">
67
77
  </colgroup>
68
78
  <thead>
69
79
  <tr>
@@ -88,7 +98,7 @@
88
98
  </div>
89
99
  <div>
90
100
  <a href="{% url 'punkweb_bb:profile' thread.user.id %}">
91
- {{thread.user.username}}
101
+ {{thread.user|styled_username}}
92
102
  </a>
93
103
 
94
104
  {{thread.created_at|date:'M j, Y'}}</div>
@@ -107,7 +117,7 @@
107
117
  </a>
108
118
  <div>
109
119
  <a href="{% url 'punkweb_bb:profile' thread.latest_post.user.id %}">
110
- {{thread.latest_post.user.username}}
120
+ {{thread.latest_post.user|styled_username}}
111
121
  </a>
112
122
  </div>
113
123
  </div>
@@ -1,9 +1,12 @@
1
1
  {% extends 'punkweb_bb/base.html' %}
2
- {% load static can_delete can_edit can_post %}
2
+ {% load static can_delete can_edit can_post styled_username styled_group_name %}
3
3
 
4
4
  {% block title_prefix %}{{thread.title}} | {% endblock %}
5
+ {% block og_title_prefix %}{{thread.title}} | {% endblock %}
5
6
 
6
7
  {% block extra_head %}
8
+ <meta name="description" content="{{thread.content.rendered|striptags|truncatechars:120}}" />
9
+ <meta property="og:description" content="{{thread.content.rendered|striptags|truncatechars:120}}" />
7
10
  <link rel="stylesheet" href="{% static 'punkweb_bb/css/post-form.css' %}" />
8
11
  <link rel="stylesheet" href="{% static 'punkweb_bb/css/thread.css' %}" />
9
12
  <link rel="stylesheet" href="{% static 'punkweb_bb/css/thread-form.css' %}" />
@@ -52,7 +55,7 @@
52
55
  <div class="onlineIndicator"></div>
53
56
  {% endif %}
54
57
  <a href="{% url 'punkweb_bb:profile' thread.user.id %}">
55
- {{thread.user.username}}
58
+ {{thread.user|styled_username}}
56
59
  </a>
57
60
  </div>
58
61
  <div class="thread__user__info">
@@ -70,7 +73,9 @@
70
73
  {% if thread.user.groups.all|length > 0 %}
71
74
  <div class="thread__user__groups">
72
75
  {% for group in thread.user.groups.all %}
73
- <div class="thread__user__group">{{group.name}}</div>
76
+ <div class="thread__user__group">
77
+ {{group|styled_group_name}}
78
+ </div>
74
79
  {% endfor %}
75
80
  </div>
76
81
  {% endif %}
@@ -79,24 +84,62 @@
79
84
  <div class="thread__content">
80
85
  {{thread.content.rendered}}
81
86
  </div>
82
- {% if thread.user.profile.signature.rendered %}
83
- <div class="thread__signature">
84
- {{thread.user.profile.signature.rendered}}
85
- </div>
86
- {% endif %}
87
- {% if thread|can_delete:request.user or thread|can_edit:request.user %}
87
+ {% if thread|can_delete:request.user or thread|can_edit:request.user or perms.punkweb_bb.pin_thread or perms.punkweb_bb.close_thread %}
88
88
  <div class="thread__actions">
89
+ {% if perms.punkweb_bb.pin_thread %}
90
+ <a
91
+ class="pw-icon-button default rounded"
92
+ title="{% if thread.is_pinned %}Unpin{% else %}Pin{% endif %}"
93
+ hx-get="{% url 'punkweb_bb:thread_pin' thread.id %}"
94
+ hx-swap="none"
95
+ >
96
+ {% if thread.is_pinned %}
97
+ <span class="material-symbols-outlined">keep_off</span>
98
+ {% else %}
99
+ <span class="material-symbols-outlined">keep</span>
100
+ {% endif %}
101
+ </a>
102
+ {% endif %}
103
+ {% if perms.punkweb_bb.close_thread %}
104
+ <a
105
+ class="pw-icon-button default rounded"
106
+ title="{% if thread.is_closed %}Reopen{% else %}Close{% endif %}"
107
+ hx-get="{% url 'punkweb_bb:thread_close' thread.id %}"
108
+ hx-swap="none"
109
+ >
110
+ {% if thread.is_closed %}
111
+ <span class="material-symbols-outlined">lock_open</span>
112
+ {% else %}
113
+ <span class="material-symbols-outlined">lock</span>
114
+ {% endif %}
115
+ </a>
116
+ {% endif %}
89
117
  {% if thread|can_edit:request.user %}
90
- <a class="pw-button ghost sm" href="{% url 'punkweb_bb:thread_update' thread.id %}">Edit</a>
118
+ <a
119
+ class="pw-icon-button default rounded"
120
+ href="{% url 'punkweb_bb:thread_update' thread.id %}"
121
+ title="Edit"
122
+ >
123
+ <span class="material-symbols-outlined">edit</span>
124
+ </a>
91
125
  {% endif %}
92
126
  {% if thread|can_delete:request.user %}
93
- <a class="pw-button ghost danger sm" hx-get="{% url 'punkweb_bb:thread_delete' thread.id %}"
94
- hx-target="#modal-portal">
95
- Delete
127
+ <a
128
+ class="pw-icon-button default rounded danger"
129
+ title="Delete"
130
+ hx-get="{% url 'punkweb_bb:thread_delete' thread.id %}"
131
+ hx-target="#modal-portal"
132
+ >
133
+ <span class="material-symbols-outlined">delete</span>
96
134
  </a>
97
135
  {% endif %}
98
136
  </div>
99
137
  {% endif %}
138
+ {% if thread.user.profile.signature.rendered %}
139
+ <div class="thread__signature">
140
+ {{thread.user.profile.signature.rendered}}
141
+ </div>
142
+ {% endif %}
100
143
  </div>
101
144
  </div>
102
145
  </div>
@@ -124,7 +167,7 @@
124
167
  <div class="onlineIndicator"></div>
125
168
  {% endif %}
126
169
  <a href="{% url 'punkweb_bb:profile' post.user.id %}">
127
- {{post.user.username}}
170
+ {{post.user|styled_username}}
128
171
  </a>
129
172
  </div>
130
173
  <div class="thread__user__info">
@@ -142,7 +185,9 @@
142
185
  {% if post.user.groups.all|length > 0 %}
143
186
  <div class="thread__user__groups">
144
187
  {% for group in post.user.groups.all %}
145
- <div class="thread__user__group">{{group.name}}</div>
188
+ <div class="thread__user__group">
189
+ {{group|styled_group_name}}
190
+ </div>
146
191
  {% endfor %}
147
192
  </div>
148
193
  {% endif %}
@@ -151,24 +196,35 @@
151
196
  <div class="thread__content">
152
197
  {{post.content.rendered}}
153
198
  </div>
154
- {% if post.user.profile.signature.rendered %}
155
- <div class="thread__signature">
156
- {{post.user.profile.signature.rendered}}
157
- </div>
158
- {% endif %}
159
199
  {% if post|can_delete:request.user or post|can_edit:request.user %}
160
200
  <div class="thread__actions">
161
201
  {% if post|can_edit:request.user %}
162
- <a class="pw-button ghost sm" hx-get="{% url 'punkweb_bb:post_update' post.id %}" hx-target="#modal-portal">Edit</a>
202
+ <a
203
+ class="pw-icon-button default rounded"
204
+ title="Edit"
205
+ hx-get="{% url 'punkweb_bb:post_update' post.id %}"
206
+ hx-target="#modal-portal"
207
+ >
208
+ <span class="material-symbols-outlined">edit</span>
209
+ </a>
163
210
  {% endif %}
164
211
  {% if post|can_delete:request.user %}
165
- <a class="pw-button ghost danger sm" hx-get="{% url 'punkweb_bb:post_delete' post.id %}"
166
- hx-target="#modal-portal">
167
- Delete
212
+ <a
213
+ class="pw-icon-button default rounded danger"
214
+ title="Delete"
215
+ hx-get="{% url 'punkweb_bb:post_delete' post.id %}"
216
+ hx-target="#modal-portal"
217
+ >
218
+ <span class="material-symbols-outlined">delete</span>
168
219
  </a>
169
220
  {% endif %}
170
221
  </div>
171
222
  {% endif %}
223
+ {% if post.user.profile.signature.rendered %}
224
+ <div class="thread__signature">
225
+ {{post.user.profile.signature.rendered}}
226
+ </div>
227
+ {% endif %}
172
228
  </div>
173
229
  </div>
174
230
  </div>
@@ -2,6 +2,7 @@
2
2
  {% load static %}
3
3
 
4
4
  {% block title_prefix %}Create Thread | {% endblock %}
5
+ {% block og_title_prefix %}Create Thread | {% endblock %}
5
6
 
6
7
  {% block extra_head %}
7
8
  {{form.media.css}}
@@ -0,0 +1,11 @@
1
+ from django import template
2
+ from django.utils.safestring import mark_safe
3
+
4
+ from punkweb_bb.utils import get_group_name_styled
5
+
6
+ register = template.Library()
7
+
8
+
9
+ @register.filter
10
+ def styled_group_name(group):
11
+ return mark_safe(get_group_name_styled(group))
@@ -0,0 +1,9 @@
1
+ from django import template
2
+ from django.utils.safestring import mark_safe
3
+
4
+ register = template.Library()
5
+
6
+
7
+ @register.filter
8
+ def styled_username(user):
9
+ return mark_safe(user.profile.styled_username)
punkweb_bb/urls.py CHANGED
@@ -59,6 +59,8 @@ urlpatterns = [
59
59
  views.post_create_view,
60
60
  name="post_create",
61
61
  ),
62
+ path("thread/<str:thread_id>/pin/", views.thread_pin_view, name="thread_pin"),
63
+ path("thread/<str:thread_id>/close/", views.thread_close_view, name="thread_close"),
62
64
  path("post/<str:post_id>/delete/", views.post_delete_view, name="post_delete"),
63
65
  path("post/<str:post_id>/update/", views.post_update_view, name="post_update"),
64
66
  path("shout-list/", views.shout_list_view, name="shout_list"),
punkweb_bb/utils.py CHANGED
@@ -1,3 +1,4 @@
1
+ from django.contrib.auth.models import Group
1
2
  from django.utils.text import slugify
2
3
 
3
4
 
@@ -15,3 +16,32 @@ def get_unique_slug(model, field):
15
16
  unique_slug_exists = False
16
17
 
17
18
  return slug
19
+
20
+
21
+ def get_user_highest_priority_group(user):
22
+ groups = Group.objects.filter(user=user, style__isnull=False)
23
+
24
+ if groups.exists():
25
+ return groups.order_by("-style__priority").first()
26
+
27
+ return None
28
+
29
+
30
+ def get_styled_username(user):
31
+ group = get_user_highest_priority_group(user)
32
+
33
+ if group:
34
+ username_style = group.style.username_style
35
+ styled_username = username_style.rendered.replace("{USER}", user.username)
36
+ return styled_username
37
+ else:
38
+ return user.username
39
+
40
+
41
+ def get_group_name_styled(group):
42
+ if group.style is None:
43
+ return group.name
44
+ else:
45
+ username_style = group.style.username_style
46
+ styled_group_name = username_style.rendered.replace("{USER}", group.name)
47
+ return styled_group_name
punkweb_bb/views.py CHANGED
@@ -406,6 +406,32 @@ def thread_delete_view(request, thread_id):
406
406
  return render(request, "punkweb_bb/partials/thread_delete.html", context=context)
407
407
 
408
408
 
409
+ @login_required(login_url="/login/")
410
+ def thread_pin_view(request, thread_id):
411
+ thread = get_object_or_404(Thread, pk=thread_id)
412
+
413
+ if not request.user.has_perm("punkweb_bb.pin_thread"):
414
+ return HttpResponseForbidden("You do not have permission to pin threads.")
415
+
416
+ thread.is_pinned = not thread.is_pinned
417
+ thread.save()
418
+
419
+ return htmx_redirect(thread.get_absolute_url())
420
+
421
+
422
+ @login_required(login_url="/login/")
423
+ def thread_close_view(request, thread_id):
424
+ thread = get_object_or_404(Thread, pk=thread_id)
425
+
426
+ if not request.user.has_perm("punkweb_bb.close_thread"):
427
+ return HttpResponseForbidden("You do not have permission to close threads.")
428
+
429
+ thread.is_closed = not thread.is_closed
430
+ thread.save()
431
+
432
+ return htmx_redirect(thread.get_absolute_url())
433
+
434
+
409
435
  @login_required(login_url="/login/")
410
436
  def post_create_view(request, thread_id):
411
437
  thread = get_object_or_404(Thread, pk=thread_id)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: punkweb-bb
3
- Version: 0.2.0
3
+ Version: 0.2.2
4
4
  Summary: Django application that provides a simple and modern forum board software for your Django website.
5
5
  Home-page: https://github.com/Punkweb/PunkwebBB
6
6
  Author: Punkweb
@@ -39,7 +39,7 @@ Check out [punkweb.net](https://punkweb.net/board/) for documentation, support a
39
39
 
40
40
  ## Requirements
41
41
 
42
- - Python 3.11+
42
+ - Python 3.9+
43
43
  - Django 4.2+
44
44
  - django-precise-bbcode 1.2+
45
45
  - Pillow
@@ -115,6 +115,7 @@ PUNKWEB_BB = {
115
115
  "SITE_NAME": "PUNKWEB",
116
116
  "SITE_TITLE": "PunkwebBB",
117
117
  "FAVICON": "punkweb_bb/favicon.ico",
118
+ "OG_IMAGE": None, # Used for Open Graph meta tags, must be a full URL!
118
119
  "SHOUTBOX_ENABLED": True,
119
120
  "DISCORD_WIDGET_ENABLED": False,
120
121
  "DISCORD_WIDGET_THEME": "dark",
@@ -1,6 +1,6 @@
1
1
  punkweb_bb/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- punkweb_bb/admin.py,sha256=v52l5E6QUnVxTm2s9qH-d9fHzaxwoOtver8W8Evor7Q,2493
3
- punkweb_bb/admin_forms.py,sha256=Ppgl960Alwwz_tsrCDct56SEab0ntxBMyb7LJHODuWc,1128
2
+ punkweb_bb/admin.py,sha256=ezgF1MrfhFb2mXjC0PNOVmoGXvZMnI0eND7noncetEU,2821
3
+ punkweb_bb/admin_forms.py,sha256=VgSjnJ4GsZ9qRv2J8n2UUMMTeCQMFUF-Ji1lfcEib1o,1372
4
4
  punkweb_bb/apps.py,sha256=GCDLy9B9vumeCsaauQ7LN4FOqE02mXWXECIz8G6KZCQ,207
5
5
  punkweb_bb/bbcode_tags.py,sha256=yNayXcZoRcRVZsdVrKIdKOV7bwlApFfq_CVfh1im7SY,4419
6
6
  punkweb_bb/context_processors.py,sha256=BEOGvWVukvxJUxWZBIc32ioB-mGqImSEBuhhZjqI2G0,146
@@ -8,20 +8,20 @@ punkweb_bb/forms.py,sha256=YeBrjOmBIytfQ5dfnLb1xKAnYR-zUSIr2cerFhCODaE,2907
8
8
  punkweb_bb/guests.py,sha256=Nvn4ZVJvQSQs_f-GeSwNn79Qp8ap_CAoXpYfRTqSbxg,467
9
9
  punkweb_bb/middleware.py,sha256=NrYv6nyAYKGcu-qKRnZmCyLghtJ4MUHvt3m5NS8HJbo,628
10
10
  punkweb_bb/mixins.py,sha256=XfiThPL7rB71IfukS1ikvYQhfg8RwgSVgsm10Ul1ezM,395
11
- punkweb_bb/models.py,sha256=Vl3df9rUqH3TJyfJ__rr8ibhs98tUaUkMPzWlq_0ZT0,6218
11
+ punkweb_bb/models.py,sha256=apNq5u1q-thyUryW_uD11unD3zM8x4rsYnBeGBis7AI,6962
12
12
  punkweb_bb/pagination.py,sha256=OgoZuJsq9MKMvBKYylJVPaNtM9ni3K8OAvOdi-eGr3M,409
13
13
  punkweb_bb/parsers.py,sha256=VjWSPqpVfypHLHP0NrfLqXB-1b0W6oFuGIzoAiPi71I,2732
14
14
  punkweb_bb/response.py,sha256=dETGVC9Xrsq02pQzmIIWbSUt472lJ4fgLwBKrXnP3t4,130
15
- punkweb_bb/settings.py,sha256=ebJahIZHt1fYdhxB9wWDlWj5KhzExUtaXyoFLy8uR6k,517
15
+ punkweb_bb/settings.py,sha256=poqIMn9EnPZ7CYvDB08NPlPHMpjSXJ-gCte2awmjgNc,561
16
16
  punkweb_bb/signals.py,sha256=bVdfg942Mwq-fYDZ1Z52Q0V2BCk1lgzGz8JVZFPnzJ8,365
17
17
  punkweb_bb/tests.py,sha256=NcTt9RPt4MegOzjryUok9FTWZda6VHB3O3FJN99Pz8s,26338
18
- punkweb_bb/urls.py,sha256=z5L0Dj1TgjNUMhogra4R55bfhpDyBSsW6KfLwFFpYRs,2415
19
- punkweb_bb/utils.py,sha256=4XUoXB1hqCYShhPAbdFf2qSB5wTKt7IJtFizuRfkP2U,396
20
- punkweb_bb/views.py,sha256=b8E8MIHsdyPUxxbzRQRhgvUJhfNn5ljOuVEKTGxOjcU,16610
18
+ punkweb_bb/urls.py,sha256=LPCKgiPEvM87JYU_sTYTdU-tKO8xDyKkiO2nT7sv2v0,2587
19
+ punkweb_bb/utils.py,sha256=SgIyMCk7yfPXI18J-ybAf_JXmT1RMQO5fe4T0DBVOek,1223
20
+ punkweb_bb/views.py,sha256=BIpI58MIH50UppDOnkTEBwll1iozuVs2m6N7S9xqW9I,17400
21
21
  punkweb_bb/widgets.py,sha256=eF6CB5nnh_6XJadpDzDKgd9incd0VIR63Rnzdr8T2n0,840
22
22
  punkweb_bb/__pycache__/__init__.cpython-311.pyc,sha256=3PyxCxoznfadaGt0a7re4j0Ky9z9hblufpcwPB85kK8,161
23
- punkweb_bb/__pycache__/admin.cpython-311.pyc,sha256=rAPYqRy7hAVZn3qST3ypYdulvH9IBhzWEgvbbAMIMIY,3679
24
- punkweb_bb/__pycache__/admin_forms.cpython-311.pyc,sha256=fQgpcTP-_bouxhHrDVxFzA-1MHyyvieyw92NAWD5JnI,2980
23
+ punkweb_bb/__pycache__/admin.cpython-311.pyc,sha256=XBNHbe2xud1aR9hFcWpOzsVRBGJcXSN8g_UB4dnPhfo,4182
24
+ punkweb_bb/__pycache__/admin_forms.cpython-311.pyc,sha256=ojzXud6UZNA6rtELWYP84a6ZhrUzv5ZjPLdY--MCpOg,3531
25
25
  punkweb_bb/__pycache__/apps.cpython-311.pyc,sha256=lw328DOwOp1F8FWTFYb3qV1EoBNgRr_Tc4J8DXfIl-I,730
26
26
  punkweb_bb/__pycache__/bbcode_tags.cpython-311.pyc,sha256=QI4BJt5plqLMiAvlVAxibuNONi69PJFQpotpS50olro,8534
27
27
  punkweb_bb/__pycache__/context_processors.cpython-311.pyc,sha256=P7rEsodXonYexbS5vUaUKVJ9tIx1pOVk6NQWVvWNvS8,392
@@ -29,45 +29,49 @@ punkweb_bb/__pycache__/forms.cpython-311.pyc,sha256=wZAWlEguoeOOmcDKJJgXX_oLvYwA
29
29
  punkweb_bb/__pycache__/guests.cpython-311.pyc,sha256=vgZJcZGyHZkllCAhXHGgajHh7YM1ntXinSed3ojIK6I,1581
30
30
  punkweb_bb/__pycache__/middleware.cpython-311.pyc,sha256=KbZ6z2Q7eCRX3dB7mnRUpn58mb_O8sXpOw_sqVfQsgM,1560
31
31
  punkweb_bb/__pycache__/mixins.cpython-311.pyc,sha256=eP1NjqDNYMYXrC45DNkrTqVAUv1vsGBrqPy5U5CB_aw,1478
32
- punkweb_bb/__pycache__/models.cpython-311.pyc,sha256=4qd4eWnPR_p1G26cnhowd7gfJ6-p660NrS_C5q7038A,13824
32
+ punkweb_bb/__pycache__/models.cpython-311.pyc,sha256=J8lKNNv3reG2BhOe34fpFqF3cjA_iU91DoxDAC-RNk4,15235
33
33
  punkweb_bb/__pycache__/pagination.cpython-311.pyc,sha256=r54xmtiRp5dm1n2Xa7oElMFFaYFY0RzmMuF3Er4UqEA,990
34
34
  punkweb_bb/__pycache__/parsers.cpython-311.pyc,sha256=pp8JZt9V3HhquQMGrhglwLc53GxgNFWjjSnK3Bpxf8o,5335
35
35
  punkweb_bb/__pycache__/response.cpython-311.pyc,sha256=CEPckYWZkOrdU2Vow-ni0ZrWEUBww0uJzyr_wv---mM,448
36
- punkweb_bb/__pycache__/settings.cpython-311.pyc,sha256=earWFaFtg8IPqfOz9I6wdpI9bJtxjxsTwG7LoTCPmtw,947
36
+ punkweb_bb/__pycache__/settings.cpython-311.pyc,sha256=4nTGJeWkptvoS-DcaEEpXGEeh7fLox5H1pCXkFKN8U4,1025
37
37
  punkweb_bb/__pycache__/signals.cpython-311.pyc,sha256=AHChn7hDdrOmCAwKIKKuFOY-4hyBP9uwTkyb5bnFV-Q,864
38
38
  punkweb_bb/__pycache__/tests.cpython-311.pyc,sha256=z7wbXzc3xY4lyg8II-k8fVe-UxQ2fk8XwV-wnb684wo,51768
39
- punkweb_bb/__pycache__/urls.cpython-311.pyc,sha256=A7iTuJIZzme8BJX6pfyX-Ym9ZRpsLt-RDo4eveOiw8M,3322
40
- punkweb_bb/__pycache__/utils.cpython-311.pyc,sha256=iNDU4dwAwpAzqlKl5kuHH989Ic_1lGA4JQq0wpR7ATo,748
41
- punkweb_bb/__pycache__/views.cpython-311.pyc,sha256=B9W_SLDDVMsEKJ4yF--L9oe_qF1extBuone73KfgW-w,23918
39
+ punkweb_bb/__pycache__/urls.cpython-311.pyc,sha256=IYIX39oVwDb2TtVcyX7dlzztW7hJwl0vzO1UZpb-nuo,3565
40
+ punkweb_bb/__pycache__/utils.cpython-311.pyc,sha256=9nGHbKLnUGM5bOSiEMbC5X_rxphHAaivuQruZu0-iQU,2086
41
+ punkweb_bb/__pycache__/views.cpython-311.pyc,sha256=gpMcF9LcMOkJhd_6g3Pk8uLbw2iAHw9aj4fWtU1Jnj0,25276
42
42
  punkweb_bb/__pycache__/widgets.cpython-311.pyc,sha256=-RcQ3JapLHw8Bbi4FP05kQJJIa7bnliKPaFpkDCOWvQ,1552
43
43
  punkweb_bb/migrations/0001_initial.py,sha256=3RGsylygBcWx1kIPhSzOb9v_2yvowsxKfxuSinKKuS0,8950
44
44
  punkweb_bb/migrations/0002_thread_view_count.py,sha256=JJZT53Mp8Ofht3oIi67s-0wzCdpYyu8wOeCi_B8q8Yo,388
45
+ punkweb_bb/migrations/0003_alter_thread_options.py,sha256=0xwVfSMWs28akDMhMwOdyyuC7JZ47JekkphT8fUCpcA,589
46
+ punkweb_bb/migrations/0004_groupstyle.py,sha256=DKcTMFkAj903MvrSheMKquCVIOzanZoFakZLIE63nLo,1821
45
47
  punkweb_bb/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
46
48
  punkweb_bb/migrations/__pycache__/0001_initial.cpython-311.pyc,sha256=koi_VflndmTKzSXWstWBXuVEZgEeueId5NE4kOAlA4Q,6456
47
49
  punkweb_bb/migrations/__pycache__/0002_thread_view_count.cpython-311.pyc,sha256=9HRllkD8LHPXadyurYvp2UcmRFEywalUVQjiOGWizgc,815
50
+ punkweb_bb/migrations/__pycache__/0003_alter_thread_options.cpython-311.pyc,sha256=zK9keYR8PU92_sP5M78xmFJeLGwSnM5tIo09bU-IpOU,860
51
+ punkweb_bb/migrations/__pycache__/0004_groupstyle.cpython-311.pyc,sha256=5wYwjAe30bSea8PswtRkIw8vrxIVk9tUZmUWXanJ2dk,2000
48
52
  punkweb_bb/migrations/__pycache__/__init__.cpython-311.pyc,sha256=sTbC1AXnh0V4BJwjcjs1ckdeYjG01I348hZwLE2HI4Y,172
49
53
  punkweb_bb/static/punkweb_bb/favicon.ico,sha256=lEfX--R9wEGPkkXgLYCsGmHuAGajigiqBXAoonxq8ZM,318
50
54
  punkweb_bb/static/punkweb_bb/css/category-form.css,sha256=lvG7Lh2GGBVplKk46JAIHF1cmFLve2JT32BswmudIF8,359
51
55
  punkweb_bb/static/punkweb_bb/css/defaults.css,sha256=EsYORpHIQ8gotAdiGvBBU38i6F0mICj-OKr-JF6yYVg,1455
52
- punkweb_bb/static/punkweb_bb/css/index.css,sha256=BTuzV0HSvdOmWKd9cjYOv7sOOsdWqbxXxCp4Q3fyPeU,1418
56
+ punkweb_bb/static/punkweb_bb/css/index.css,sha256=Jr4P0uLQ0lhM1ujycNVYYnu6tFmFXVZUXMJxFzes-Bo,1415
53
57
  punkweb_bb/static/punkweb_bb/css/login.css,sha256=pt5ul4ycZsVB-No3c5gsQa1zVS1iAZgteN1CcllS26k,234
54
58
  punkweb_bb/static/punkweb_bb/css/members.css,sha256=1Fz0uVDbs3RnuXNjOtnGnK2jok3LEQBoPhjRYp7gNwE,395
55
59
  punkweb_bb/static/punkweb_bb/css/post-form.css,sha256=rEiYplAobLjjUYAcnjNqIjyIVhe9O5hAlPJ3STW-K14,321
56
60
  punkweb_bb/static/punkweb_bb/css/profile.css,sha256=yfNJT_D-05deqiBrdIgPeCSO_DFSL8-fGEEHnGrCIYM,916
57
61
  punkweb_bb/static/punkweb_bb/css/punkweb-modal.css,sha256=ctwo5bgbAW-k0uqrufDbqeQfAh87-BZ-5gPm8aJHeT4,1296
58
- punkweb_bb/static/punkweb_bb/css/punkweb.css,sha256=ABCJYmjHnUr3MkP-XUIvb1tiOamTy0tbDZZOM_-nQ4k,12678
62
+ punkweb_bb/static/punkweb_bb/css/punkweb.css,sha256=GhVOOVTy76IOh4WLfUQeAtG8LWhE615mSQJzro2KwZI,14557
59
63
  punkweb_bb/static/punkweb_bb/css/settings.css,sha256=ulQQFTu8slk2rYOmhvci5v-AVnguUuDhKQDhyQOsQNU,308
60
64
  punkweb_bb/static/punkweb_bb/css/shoutbox.css,sha256=DapBIe21b6w7ugA_U1EJ-1LFb3IfnJZMw7Kc4DLxF1g,536
61
65
  punkweb_bb/static/punkweb_bb/css/subcategory-form.css,sha256=KU-fI8-DiurYiiBVeNk-9vERekbJrOTxllPPFYXu5Fk,371
62
- punkweb_bb/static/punkweb_bb/css/subcategory.css,sha256=7j9_-S4kspgojfebYBu8AQQS3uJtqCoE32T-BuAgHxw,711
66
+ punkweb_bb/static/punkweb_bb/css/subcategory.css,sha256=h3TaMhswiD1ePgp80VN7sR91Wzr6tZwU_kCrulvAuPc,735
63
67
  punkweb_bb/static/punkweb_bb/css/thread-form.css,sha256=9MfqocnamNMjeNJ-w6YTwYbm4oepeK09phFzVsg1XO8,329
64
- punkweb_bb/static/punkweb_bb/css/thread.css,sha256=3s2xQj9uD3gQGhEzTCY6y7k5Dpq5E7eeI8gi4fwODos,1870
68
+ punkweb_bb/static/punkweb_bb/css/thread.css,sha256=unMpE6TM03tT8j388UghopGfQa-yvs-6dl8cOki7b6Y,1870
65
69
  punkweb_bb/static/punkweb_bb/css/typography.css,sha256=qbFGBcU-OOe7r41xeW0Gc_9x6yHxhh81XtswmFxgavc,448
66
70
  punkweb_bb/static/punkweb_bb/css/variables.css,sha256=WphZPeJgeqMYy4JYaSTX0gX-JiZh8EJlhieGOGk75DA,1193
67
71
  punkweb_bb/static/punkweb_bb/editor/bbcode-editor-content.css,sha256=c1VCTVYqvzjy-51dMZ27zp-zdZrL-2TwIEheeYQXDDw,1466
68
72
  punkweb_bb/static/punkweb_bb/editor/bbcode-editor-tags.js,sha256=pLgF7lIJnPQXpfqQnkTHBU5tjcvICDHpn2nhvzxwUqA,1624
69
73
  punkweb_bb/static/punkweb_bb/editor/bbcode-editor.css,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
70
- punkweb_bb/static/punkweb_bb/editor/bbcode-editor.js,sha256=hT1gwsRf3fYETmm2fLFWIJNBgVPhl_UVUEkvii7EqAE,606
74
+ punkweb_bb/static/punkweb_bb/editor/bbcode-editor.js,sha256=gnp2QdVfnflBirCS6jnuw_TYlVoMaifn_18hh4I19Jw,607
71
75
  punkweb_bb/static/punkweb_bb/img/default-profile-image.png,sha256=plGHkG9uiCmgof9Hcv7YNT0oThtDIhJtMzjbxxTtdFY,60475
72
76
  punkweb_bb/static/punkweb_bb/js/punkweb-modal.js,sha256=by7e5bpdC-KJ9HT6LqAu8c868CvI5vans4S70DuAmrs,179
73
77
  punkweb_bb/static/punkweb_bb/js/shoutbox.js,sha256=dgWq_6yzcwj9uWtvluTJeWa3bVmgtPJke48KbzL7Q1s,142
@@ -194,22 +198,22 @@ punkweb_bb/static/punkweb_bb/vendor/sceditor-3.2.0/minified/themes/office-toolba
194
198
  punkweb_bb/static/punkweb_bb/vendor/sceditor-3.2.0/minified/themes/office.min.css,sha256=EZeNIT-LMxAnrW_7M6BXuH0B8m3MoIS68tDyTxmCoP0,13148
195
199
  punkweb_bb/static/punkweb_bb/vendor/sceditor-3.2.0/minified/themes/square.min.css,sha256=vrNHEnpQJr3o8AlJ2aEhn4fsRqR4TOopE3N3-4oE2ho,10710
196
200
  punkweb_bb/static/punkweb_bb/vendor/sceditor-3.2.0/minified/themes/content/default.min.css,sha256=2jMxGiqcrAhfOtNMdqmTUtfgM6oUz5F0VJ0sUzam9CY,1016
197
- punkweb_bb/templates/punkweb_bb/base.html,sha256=Gu2ZVeP0p7GnsfXFxByXRd9LT4DNXx0O1czSGjwYg0w,4037
201
+ punkweb_bb/templates/punkweb_bb/base.html,sha256=-swjri5cx547vuLVApepf8AchoAVrK2TjwtV7lmxdZc,4426
198
202
  punkweb_bb/templates/punkweb_bb/base_modal.html,sha256=OCbtsMWeNCO0Tl1PmHCcGkwoi1OZjeIK_VhNTzMor7M,460
199
203
  punkweb_bb/templates/punkweb_bb/bbcode.html,sha256=1EGBejsOMZOPi6P39oR6E35VdqnfR6wYWeKDl4Xr_js,396
200
204
  punkweb_bb/templates/punkweb_bb/category_create.html,sha256=773uJzxVvuPmWVrW87EoQTBNoo6cyi3UBp_PZn6JY5A,1369
201
205
  punkweb_bb/templates/punkweb_bb/category_update.html,sha256=GUFo19BXY8JVvxP7cWAyWiTD5Z9LohR4f6vf1jlRqfo,1467
202
- punkweb_bb/templates/punkweb_bb/index.html,sha256=HuhP13ijkcU7IofnCWvcLD9FeQOmb87jSAQrMBmrcek,10032
203
- punkweb_bb/templates/punkweb_bb/login.html,sha256=ZUOmbyZREzS7Sw02Lfb9zpRJQQWwJgolnj9lcBKnOtg,1087
204
- punkweb_bb/templates/punkweb_bb/members.html,sha256=ceRCRX0AN7V8d7paz9495y8aQByMUKDWVWL2GzoGbus,2729
205
- punkweb_bb/templates/punkweb_bb/profile.html,sha256=MW1JWLs_lLpg62DDcvcZJRwrHquYA5nCwQqL1v9ZGCo,2948
206
- punkweb_bb/templates/punkweb_bb/settings.html,sha256=CmmGdNddZj6Atpofcny0bwEHwTPRPC8vXXThCgsNH90,1994
207
- punkweb_bb/templates/punkweb_bb/signup.html,sha256=HP5owUfV2uEuvOccPoBa21XbjBHo0ulV6tjfgdToNLU,1167
208
- punkweb_bb/templates/punkweb_bb/subcategory.html,sha256=Px3XQhYlbb5Vt4Q5-0_4trpng_mqo7wA9NFlIzWIODI,5543
206
+ punkweb_bb/templates/punkweb_bb/index.html,sha256=pe0TAI98yGrPR0dosQYJgsfesFArfsoE-kSNfElSs0Q,10526
207
+ punkweb_bb/templates/punkweb_bb/login.html,sha256=Hsmt_Y50nTOEv7hBjACXMSEmIVCl-IqDv15iE-wo2cY,1137
208
+ punkweb_bb/templates/punkweb_bb/members.html,sha256=a8G4kuZrDb1zZHYYvCscCJ3oZYMVcfRgN7R7DyUlvto,2804
209
+ punkweb_bb/templates/punkweb_bb/profile.html,sha256=xCvh8X9oUO1nTmLSvI1KX2yD6x61IWrVMLr8zQMLOo4,3035
210
+ punkweb_bb/templates/punkweb_bb/settings.html,sha256=pxEgQQxK1lk2UKL1W3YL-liAERo2mFgUNAJtshe13xk,2047
211
+ punkweb_bb/templates/punkweb_bb/signup.html,sha256=LMs_EwdEbBmFt4zXPt_LmtUujmBJVt0zE0LldgfhrY0,1219
212
+ punkweb_bb/templates/punkweb_bb/subcategory.html,sha256=MqEhncDfPRdxgRCoqCMck_dHBRFM7sTBBxnhtV7keiE,5842
209
213
  punkweb_bb/templates/punkweb_bb/subcategory_create.html,sha256=8FhcWKiaYGIulrOaBzQ6qFMpDvsAnX_q-XJ5mKwBLW8,1521
210
214
  punkweb_bb/templates/punkweb_bb/subcategory_update.html,sha256=kOq6tuhNBSMVQkBSpHpU06JuQ3h008fOKqLcxe9PgCg,1638
211
- punkweb_bb/templates/punkweb_bb/thread.html,sha256=zv18JAucBrCDlOQn0J5wT8raNLtcvuW1vszXRguPPPk,8417
212
- punkweb_bb/templates/punkweb_bb/thread_create.html,sha256=676jLKGc5m8IapbL_FS1yvTs2XVFPHjJ316SIiORAew,1639
215
+ punkweb_bb/templates/punkweb_bb/thread.html,sha256=YGC8dPeBAN7XYwwjUl3FjxA1NGka-_7BFkkaLnaAxjw,10390
216
+ punkweb_bb/templates/punkweb_bb/thread_create.html,sha256=vCwU8GNBwy7pJ2X-jSTgqvAuqgQ_NeSvRDyieBWhP_g,1697
213
217
  punkweb_bb/templates/punkweb_bb/thread_update.html,sha256=SLL_5tceZ8ZiPbWCO9eOe_aeMgV5lQ-p6eun1_XvKwE,1730
214
218
  punkweb_bb/templates/punkweb_bb/partials/category_delete.html,sha256=Re9ESmC6AHeY9aICE0zE1i7vZEDHsF577Vmsz9L7jyA,435
215
219
  punkweb_bb/templates/punkweb_bb/partials/post_delete.html,sha256=tQtQGxTF0tZA5eXqfIuO6NctsS83eEhR4ImmBLbkAXM,417
@@ -217,7 +221,7 @@ punkweb_bb/templates/punkweb_bb/partials/post_update.html,sha256=mFidDqgTuv4Lffu
217
221
  punkweb_bb/templates/punkweb_bb/partials/shout_delete.html,sha256=zo-Ff-meucwC03p656VI5SI79RmS5nF-NbrFb3znPBM,421
218
222
  punkweb_bb/templates/punkweb_bb/partials/subcategory_delete.html,sha256=GImRDtfuMTg6_docXHTqVqe_1NzXblnrSyivxeatlIE,447
219
223
  punkweb_bb/templates/punkweb_bb/partials/thread_delete.html,sha256=m91u_r8qTvMqR2s4VxxFHQvZt-WGgHnHzJL_1KZkX9M,425
220
- punkweb_bb/templates/punkweb_bb/shoutbox/shout_list.html,sha256=hp2DzMRYGkzLD-mPJjCLvOpoyN5It0FihHff7nSGha0,689
224
+ punkweb_bb/templates/punkweb_bb/shoutbox/shout_list.html,sha256=STyh2Q2CMJ94XuH_4IDxtTYa6LZO6uTlWQ6uqFnMh4s,759
221
225
  punkweb_bb/templates/punkweb_bb/shoutbox/shoutbox.html,sha256=J_Lp6KKcqSJr-IayyLN-p0JgMfuwbFP77g-UtcM53WI,672
222
226
  punkweb_bb/templatetags/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
223
227
  punkweb_bb/templatetags/can_delete.py,sha256=NiFi_VH3KKaAYxdu9cZXR9gT9SNEeLAxnbxb4R7O_Nw,137
@@ -225,6 +229,8 @@ punkweb_bb/templatetags/can_edit.py,sha256=CbnbCcmJkeHZbWbsMn5OmCXMBEa6N1KW6W1dH
225
229
  punkweb_bb/templatetags/can_post.py,sha256=6J1ojqqyNX99DBZM30jQiirQxAyY5rMi05QXXQjJB7I,133
226
230
  punkweb_bb/templatetags/humanize_int.py,sha256=C4KmDG0Jv6o8rwT1RXLdWoGLddJxMxgOoRV9I2598AM,248
227
231
  punkweb_bb/templatetags/shoutbox_bbcode.py,sha256=OH-FsRTyPWZldaFypSVzPLlTrSm4XEOqQW9hBI0ROBk,310
232
+ punkweb_bb/templatetags/styled_group_name.py,sha256=gR7oYh4uW-EHUaEZVjym0SHUX76VlXC3BLpoNG6hQAc,257
233
+ punkweb_bb/templatetags/styled_username.py,sha256=1bv6_ss8elDtuJosAYBlKagUciUXb_WlA5X8O4mKtLI,202
228
234
  punkweb_bb/templatetags/__pycache__/__init__.cpython-311.pyc,sha256=VEPKwaIhqpKpSSJiotDYngAUdidDzR9PpPiHtKEl1jA,174
229
235
  punkweb_bb/templatetags/__pycache__/can_delete.cpython-311.pyc,sha256=GfdHIumIAFyra6Nox6Y7AILBUW_DL7OZ0MtWWaj94mw,528
230
236
  punkweb_bb/templatetags/__pycache__/can_edit.cpython-311.pyc,sha256=PJDUtJWrZWb8qgldPrC2si0QNokEhRaYnXaRk4dhuJU,524
@@ -232,8 +238,11 @@ punkweb_bb/templatetags/__pycache__/can_post.cpython-311.pyc,sha256=1IU4-Ar-kwjn
232
238
  punkweb_bb/templatetags/__pycache__/humanize_count.cpython-311.pyc,sha256=UKD6_5RX8YpYpg-LPrgGxBkW56THsbYY51cKTYdKwRY,621
233
239
  punkweb_bb/templatetags/__pycache__/humanize_int.cpython-311.pyc,sha256=csY5ek-bevYVeM91hYFKozuKWXCTXb7M-7Bokwdxhrk,619
234
240
  punkweb_bb/templatetags/__pycache__/shoutbox_bbcode.cpython-311.pyc,sha256=Jhg9qW-nQe6IDr45rE0ZgeDYF4E61S7kYAYpbMo5ZQ8,833
235
- punkweb_bb-0.2.0.dist-info/LICENSE,sha256=YYysF07B-kyXSO7IWFB9f49ZXa6LIFUTVsR1Ogmhp8s,1507
236
- punkweb_bb-0.2.0.dist-info/METADATA,sha256=nPCD6tOWqlYwLl3PC2pZgspZvXDmIR76lf0a0OqX9T0,5138
237
- punkweb_bb-0.2.0.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
238
- punkweb_bb-0.2.0.dist-info/top_level.txt,sha256=sWuGdGnk0ejOXiFDzlBqrNs2VbPEx0_i8UwWXn4SuHU,11
239
- punkweb_bb-0.2.0.dist-info/RECORD,,
241
+ punkweb_bb/templatetags/__pycache__/styled_group_name.cpython-311.pyc,sha256=nVcz4BXJbzlkN8EorsaceOl86BxBecl__mmYnpRwA6U,712
242
+ punkweb_bb/templatetags/__pycache__/styled_username.cpython-311.pyc,sha256=a91ogyUeLdHS9rEU28FWEYeVqcJopjbvPPdnGkmlHKI,628
243
+ punkweb_bb/templatetags/__pycache__/username.cpython-311.pyc,sha256=GvZkwtrFvkRr1RbxoejyKMmJXr01ABz3lVEwPNq4wxk,626
244
+ punkweb_bb-0.2.2.dist-info/LICENSE,sha256=YYysF07B-kyXSO7IWFB9f49ZXa6LIFUTVsR1Ogmhp8s,1507
245
+ punkweb_bb-0.2.2.dist-info/METADATA,sha256=fzf4OdsfvuYSkAEELrpX9J0_WNEanLtLx4Ycnobicks,5210
246
+ punkweb_bb-0.2.2.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
247
+ punkweb_bb-0.2.2.dist-info/top_level.txt,sha256=sWuGdGnk0ejOXiFDzlBqrNs2VbPEx0_i8UwWXn4SuHU,11
248
+ punkweb_bb-0.2.2.dist-info/RECORD,,