1
0
Fork 0
mirror of https://github.com/Findus23/RPGnotes.git synced 2024-09-19 15:43:45 +02:00

aliases for everything

This commit is contained in:
Lukas Winkler 2022-07-05 18:37:21 +02:00
parent 31ccd8069a
commit d88b331bf2
Signed by: lukas
GPG key ID: 54DE4D798D244853
19 changed files with 157 additions and 41 deletions

View file

@ -6,7 +6,7 @@ from django.urls import reverse
from django.utils.translation import gettext_lazy as _
from sorl.thumbnail import ImageField
from common.models import NameSlugModel, DescriptionModel, HistoryModel
from common.models import NameSlugModel, DescriptionModel, HistoryModel, AliasModel
from factions.models import Faction
from locations.models import Location
from rpg_notes.settings import AUTH_USER_MODEL
@ -20,7 +20,7 @@ def validate_color_hex(value: str):
raise ValidationError("color hex has to start with a #")
class Character(NameSlugModel, DescriptionModel, HistoryModel):
class Character(NameSlugModel, DescriptionModel, AliasModel, HistoryModel):
aliases = ArrayField(
models.CharField(_("Nickname"), max_length=100),
verbose_name=_("Aliases"), blank=True, null=True
@ -63,7 +63,6 @@ class Character(NameSlugModel, DescriptionModel, HistoryModel):
def initials(self):
return "".join([word[0] for word in self.name.split()][:2]).upper()
@property
def text_color(self):
return "black" if is_bright_color(self.color) else "white"

View file

@ -0,0 +1,17 @@
# Generated by Django 4.0.5 on 2022-07-05 16:27
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('common', '0001_initial'),
]
operations = [
migrations.AlterModelOptions(
name='draft',
options={'get_latest_by': 'created'},
),
]

View file

@ -1,4 +1,5 @@
from .descriptionmodel import DescriptionModel
from .nameslugmodel import NameSlugModel
from .aliasmodel import AliasModel
from .historymodel import HistoryModel
from .draft import Draft

View file

@ -0,0 +1,13 @@
from django.contrib.postgres.fields import ArrayField
from django.db import models
from django.utils.translation import gettext_lazy as _
class AliasModel(models.Model):
aliases = ArrayField(
models.CharField(_("Alias"), max_length=100),
verbose_name=_("Aliases"), blank=True, null=True
)
class Meta:
abstract = True

View file

@ -28,20 +28,20 @@ class ColorsTests(SimpleTestCase):
class MarkdownTests(SimpleTestCase):
def test_basic_markdown(self):
self.assertHTMLEqual(
md_to_html("**test** *it*"),
md_to_html("**test** *it*", replacements={}),
"<p><strong>test</strong> <em>it</em></p>"
)
def test_nb_md(self):
self.assertHTMLEqual(
md_to_html("This\nis\nTest"),
md_to_html("This\nis\nTest", replacements={}),
"<p>This<br>is<br>Test</p>"
)
def test_bleach(self):
self.assertEqual(
md_to_html(
"<script>console.log()</script> <a onclick='console.log()'>Hi</button>"),
"<script>console.log()</script> <a onclick='console.log()'>Hi</button>", replacements={}),
"&lt;script&gt;console.log()&lt;/script&gt;\n<p><a>Hi&lt;/button&gt;</a></p>"
)

View file

@ -6,4 +6,4 @@ from factions.models import Faction
class FactionForm(ModelForm):
class Meta:
model = Faction
fields = ["name", "description_md"]
fields = ["name", "aliases","description_md"]

View file

@ -0,0 +1,24 @@
# Generated by Django 4.0.5 on 2022-07-05 16:30
import django.contrib.postgres.fields
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('factions', '0003_alter_historicalfaction_options_and_more'),
]
operations = [
migrations.AddField(
model_name='faction',
name='aliases',
field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100, verbose_name='Alias'), blank=True, null=True, size=None, verbose_name='Aliases'),
),
migrations.AddField(
model_name='historicalfaction',
name='aliases',
field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100, verbose_name='Alias'), blank=True, null=True, size=None, verbose_name='Aliases'),
),
]

View file

@ -1,17 +1,11 @@
from datetime import date
from django.contrib.humanize.templatetags.humanize import ordinal
from django.contrib.postgres.indexes import GinIndex
from django.db import models
from django.urls import reverse
from django.utils.translation import gettext_lazy as _
from common.models import DescriptionModel, HistoryModel, NameSlugModel
from common.models import DescriptionModel, HistoryModel, NameSlugModel, AliasModel
from search.utils import NameSearchIndex
class Faction(NameSlugModel, DescriptionModel, HistoryModel):
class Faction(NameSlugModel, DescriptionModel, AliasModel, HistoryModel):
class Meta:
ordering = ["name"]
verbose_name = _("Faction")
@ -22,4 +16,3 @@ class Faction(NameSlugModel, DescriptionModel, HistoryModel):
def get_absolute_url(self):
return reverse('factiondetail', args=[self.slug])

View file

@ -6,4 +6,4 @@ from locations.models import Location
class LocationForm(ModelForm):
class Meta:
model = Location
fields = ["name", "description_md", "parent", "image"]
fields = ["name", "aliases", "description_md", "parent", "image"]

View file

@ -0,0 +1,24 @@
# Generated by Django 4.0.5 on 2022-07-05 16:35
import django.contrib.postgres.fields
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('locations', '0009_alter_historicallocation_options_and_more'),
]
operations = [
migrations.AddField(
model_name='historicallocation',
name='aliases',
field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100, verbose_name='Alias'), blank=True, null=True, size=None, verbose_name='Aliases'),
),
migrations.AddField(
model_name='location',
name='aliases',
field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100, verbose_name='Alias'), blank=True, null=True, size=None, verbose_name='Aliases'),
),
]

View file

@ -5,12 +5,12 @@ from sorl.thumbnail import ImageField
from tree_queries.fields import TreeNodeForeignKey
from tree_queries.models import TreeNode
from common.models import NameSlugModel, DescriptionModel, HistoryModel
from common.models import NameSlugModel, DescriptionModel, HistoryModel, AliasModel
from search.utils import NameSearchIndex
from utils.random_filename import get_file_path
class Location(TreeNode, NameSlugModel, DescriptionModel, HistoryModel):
class Location(TreeNode, NameSlugModel, DescriptionModel, AliasModel, HistoryModel):
parent = TreeNodeForeignKey(
"self",
blank=True,

View file

@ -6,5 +6,5 @@ from loot.models import Loot
class LootForm(ModelForm):
class Meta:
model = Loot
fields = ["name", "description_md", "quantity", "value_gold", "weight", "image", "owner", "location",
fields = ["name", "aliases", "description_md", "quantity", "value_gold", "weight", "image", "owner", "location",
"magic_item"]

View file

@ -0,0 +1,24 @@
# Generated by Django 4.0.5 on 2022-07-05 16:35
import django.contrib.postgres.fields
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('loot', '0011_alter_historicalloot_options_and_more'),
]
operations = [
migrations.AddField(
model_name='historicalloot',
name='aliases',
field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100, verbose_name='Alias'), blank=True, null=True, size=None, verbose_name='Aliases'),
),
migrations.AddField(
model_name='loot',
name='aliases',
field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100, verbose_name='Alias'), blank=True, null=True, size=None, verbose_name='Aliases'),
),
]

View file

@ -4,13 +4,13 @@ from django.utils.translation import gettext_lazy as _
from sorl.thumbnail import ImageField
from characters.models import Character
from common.models import DescriptionModel, HistoryModel
from common.models import DescriptionModel, HistoryModel, AliasModel
from locations.models import Location
from search.utils import NameSearchIndex
from utils.random_filename import get_file_path
class Loot(DescriptionModel, HistoryModel):
class Loot(DescriptionModel, AliasModel, HistoryModel):
name = models.CharField(_("Name"), max_length=1000)
quantity = models.PositiveSmallIntegerField(_("Quantity"))
value_gold = models.DecimalField(_("Value (Gold)"), max_digits=7, decimal_places=2)
@ -37,6 +37,7 @@ class Loot(DescriptionModel, HistoryModel):
indexes = [
NameSearchIndex
]
@property
def value_per_unit(self):
return self.value_gold / self.quantity

View file

@ -6,4 +6,4 @@ from notes.models import Note
class NoteForm(ModelForm):
class Meta:
model = Note
fields = ["name", "description_md", "parent"]
fields = ["name", "aliases", "description_md", "parent"]

View file

@ -0,0 +1,24 @@
# Generated by Django 4.0.5 on 2022-07-05 16:35
import django.contrib.postgres.fields
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('notes', '0004_alter_historicalnote_options_and_more'),
]
operations = [
migrations.AddField(
model_name='historicalnote',
name='aliases',
field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100, verbose_name='Alias'), blank=True, null=True, size=None, verbose_name='Aliases'),
),
migrations.AddField(
model_name='note',
name='aliases',
field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100, verbose_name='Alias'), blank=True, null=True, size=None, verbose_name='Aliases'),
),
]

View file

@ -1,4 +1,3 @@
from django.contrib.postgres.indexes import GinIndex
from django.db import models
from django.urls import reverse
from django.utils.translation import gettext_lazy as _
@ -6,12 +5,12 @@ from sorl.thumbnail import ImageField
from tree_queries.fields import TreeNodeForeignKey
from tree_queries.models import TreeNode
from common.models import NameSlugModel, DescriptionModel, HistoryModel
from common.models import NameSlugModel, DescriptionModel, HistoryModel, AliasModel
from search.utils import NameSearchIndex
from utils.random_filename import get_file_path
class Note(TreeNode, NameSlugModel, DescriptionModel, HistoryModel):
class Note(TreeNode, NameSlugModel, DescriptionModel, AliasModel, HistoryModel):
parent = TreeNodeForeignKey(
"self",
blank=True,

View file

@ -26,7 +26,7 @@ def md_to_html(md: str, replacements=None) -> str:
def autolink(md: str, replacements=None) -> str:
if not replacements:
if replacements is None:
from utils.urls import name2url
replacements = name2url()
links = {}

View file

@ -9,20 +9,17 @@ from notes.models import Note
def name2url() -> Dict[str, str]:
data = {}
for character in Character.objects.all():
data[character.name] = character.get_absolute_url()
if character.aliases:
for alias in character.aliases:
data[alias] = character.get_absolute_url()
for location in Location.objects.all():
data[location.name] = location.get_absolute_url()
for loot in Loot.objects.all():
data[loot.name] = loot.get_absolute_url()
for faction in Faction.objects.all():
data[faction.name] = faction.get_absolute_url()
for note in Note.objects.all():
data[note.name] = note.get_absolute_url()
objects=[]
objects.extend(Character.objects.all())
objects.extend(Location.objects.all())
objects.extend(Loot.objects.all())
objects.extend(Faction.objects.all())
objects.extend(Note.objects.all())
for object in objects:
data[object.name] = object.get_absolute_url()
if object.aliases:
for alias in object.aliases:
data[alias] = object.get_absolute_url()
# longer replacements first
data = {k: v for k, v in sorted(data.items(), key=lambda item: -len(item[0]))}