Skip to content

Commit 5c0f6d5

Browse files
authored
Define name setter for trix-editor elements (#104)
2 parents 78fb953 + c83ab24 commit 5c0f6d5

File tree

4 files changed

+89
-4
lines changed

4 files changed

+89
-4
lines changed

example/blog/admin.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,14 @@
11
from django.contrib import admin
22

3-
from blog.models import Article
3+
from blog.models import Article, Comment
44

5-
admin.site.register(Article)
5+
6+
class CommentAdminInline(admin.StackedInline):
7+
model = Comment
8+
9+
10+
class ArticleAdmin(admin.ModelAdmin):
11+
inlines = [CommentAdminInline]
12+
13+
14+
admin.site.register(Article, ArticleAdmin)
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
# Generated by Django 4.2.14 on 2024-07-17 08:14
2+
3+
from django.conf import settings
4+
from django.db import migrations, models
5+
import django.db.models.deletion
6+
import prose.fields
7+
8+
9+
class Migration(migrations.Migration):
10+
11+
dependencies = [
12+
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
13+
("blog", "0004_alter_article_excerpt"),
14+
]
15+
16+
operations = [
17+
migrations.AlterField(
18+
model_name="article",
19+
name="excerpt",
20+
field=prose.fields.RichTextField(blank=True, default=""),
21+
),
22+
migrations.CreateModel(
23+
name="Comment",
24+
fields=[
25+
(
26+
"id",
27+
models.AutoField(
28+
auto_created=True,
29+
primary_key=True,
30+
serialize=False,
31+
verbose_name="ID",
32+
),
33+
),
34+
("body", prose.fields.RichTextField(blank=True, default="")),
35+
(
36+
"article",
37+
models.ForeignKey(
38+
on_delete=django.db.models.deletion.CASCADE, to="blog.article"
39+
),
40+
),
41+
(
42+
"author",
43+
models.ForeignKey(
44+
on_delete=django.db.models.deletion.CASCADE,
45+
to=settings.AUTH_USER_MODEL,
46+
),
47+
),
48+
],
49+
),
50+
]

example/blog/models.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,17 @@ class Article(models.Model):
1111
settings.AUTH_USER_MODEL,
1212
on_delete=models.CASCADE,
1313
)
14-
excerpt = RichTextField(blank=True, null=True)
14+
excerpt = RichTextField(blank=True, default="")
1515
body = models.OneToOneField(Document, on_delete=models.CASCADE)
1616

1717
def __str__(self):
1818
return f"{self.title} by {self.author.username}: {self.body}"
19+
20+
21+
class Comment(models.Model):
22+
article = models.ForeignKey(Article, on_delete=models.CASCADE)
23+
author = models.ForeignKey(
24+
settings.AUTH_USER_MODEL,
25+
on_delete=models.CASCADE,
26+
)
27+
body = RichTextField(blank=True, default="")

prose/static/prose/editor.js

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,25 @@ function initializeEditors() {
5757
});
5858
}
5959

60+
/**
61+
* https://github.com/withlogicco/django-prose/issues/100
62+
*/
63+
function patchTrixEditorWithNameSetter() {
64+
Object.defineProperty(window.Trix.elements.TrixEditorElement.prototype, "name", {
65+
get() {
66+
return this.inputElement?.name;
67+
},
68+
set(value) {
69+
this.inputElement.name = value;
70+
},
71+
});
72+
}
73+
6074
// When the DOM is initially loaded
61-
document.addEventListener("DOMContentLoaded", initializeEditors);
75+
document.addEventListener("DOMContentLoaded", () => {
76+
initializeEditors();
77+
patchTrixEditorWithNameSetter();
78+
});
6279

6380
// Export the initializeEditors function so it can be called from other scripts
6481
window.djangoProse = window.djangoProse || {};

0 commit comments

Comments
 (0)