separate mutator for article title/description

This commit is contained in:
Corban-Lee Jones 2024-06-25 10:22:09 +01:00
parent d3bc768000
commit 9ae39702b8
7 changed files with 97 additions and 66 deletions

View File

@ -140,11 +140,15 @@ class SubscriptionSerializer_GET(DynamicModelSerializer):
Serializer for the Subscription Model.
"""
mutators = ArticleMutatorSerializer(many=True)
article_title_mutators = ArticleMutatorSerializer(many=True)
article_desc_mutators = ArticleMutatorSerializer(many=True)
class Meta:
model = Subscription
fields = ("id", "name", "url", "guild_id", "channels_count", "creation_datetime", "extra_notes", "filters", "mutators", "active")
fields = (
"id", "name", "url", "guild_id", "channels_count", "creation_datetime", "extra_notes",
"filters", "article_title_mutators", "article_desc_mutators", "active"
)
class SubscriptionSerializer_POST(DynamicModelSerializer):
@ -154,7 +158,10 @@ class SubscriptionSerializer_POST(DynamicModelSerializer):
class Meta:
model = Subscription
fields = ("id", "name", "url", "guild_id", "channels_count", "creation_datetime", "extra_notes", "filters", "mutators", "active")
fields = (
"id", "name", "url", "guild_id", "channels_count", "creation_datetime", "extra_notes",
"filters", "article_title_mutators", "article_desc_mutators", "active"
)
class SavedGuildSerializer(DynamicModelSerializer):

View File

@ -190,7 +190,10 @@ class Subscription_ListView(generics.ListCreateAPIView):
# queryset = Subscription.objects.all().order_by("-creation_datetime")
filter_backends = [filters.SearchFilter, rest_filters.DjangoFilterBackend, filters.OrderingFilter]
filterset_fields = ["id", "name", "url", "guild_id", "creation_datetime", "extra_notes", "filters", "mutators", "active"]
filterset_fields = [
"id", "name", "url", "guild_id", "creation_datetime", "extra_notes", "filters",
"article_title_mutators", "article_desc_mutators", "active"
]
search_fields = ["name", "extra_notes"]
ordering_fields = ["creation_datetime", "guild_id"]

View File

@ -4,50 +4,28 @@ from django.db import migrations
def add_mutators(apps, schema_editor):
ArticleMutator = apps.get_model("home", "ArticleMutator")
ArticleMutator.objects.create(name="Uwuify Title", value="UWU_TITLE")
ArticleMutator.objects.create(name="Uwuify Description", value="UWU_DESC")
ArticleMutator.objects.create(name="Gothic Script Title", value="GS_TITLE")
ArticleMutator.objects.create(name="Gothic Script Description", value="GS_DESC")
ArticleMutator.objects.create(name="Emoji Substitute Title", value="EMJ_TITLE")
ArticleMutator.objects.create(name="Emoji Substitute Description", value="EMJ_DESC")
ArticleMutator.objects.create(name="Zalgo Title", value="ZGO_TITLE")
ArticleMutator.objects.create(name="Zalgo Description", value="ZGO_DESC")
ArticleMutator.objects.create(name="Morse Code Title", value="MC_TITLE")
ArticleMutator.objects.create(name="Morse Code Description", value="MC_DESC")
ArticleMutator.objects.create(name="Binary Title", value="BIN_TITLE")
ArticleMutator.objects.create(name="Binary Description", value="BIN_DESC")
ArticleMutator.objects.create(name="Hexadecimal Title", value="HEX_TITLE")
ArticleMutator.objects.create(name="Hexadecimal Description", value="HEX_DESC")
ArticleMutator.objects.create(name="Remove Vowels Title", value="RMV_TITLE")
ArticleMutator.objects.create(name="Remove Vowels Description", value="RMV_DESC")
ArticleMutator.objects.create(name="Double Characters Title", value="DBL_TITLE")
ArticleMutator.objects.create(name="Double Characters Description", value="DBL_DESC")
ArticleMutator.objects.create(name="Randomly Inserted Emoji Title", value="RNE_TITLE")
ArticleMutator.objects.create(name="Randomly Inserted Emoji Description", value="RNE_DESC")
ArticleMutator.objects.create(name="Pirate Speak Title", value="PIR_TITLE")
ArticleMutator.objects.create(name="Pirate Speak Description", value="PIR_DESC")
ArticleMutator.objects.create(name="Valley Girl Title", value="VAL_TITLE")
ArticleMutator.objects.create(name="Valley Girl Description", value="VAL_DESC")
ArticleMutator.objects.create(name="Degeneracy Title", value="DEG_TITLE")
ArticleMutator.objects.create(name="Degeneracy Description", value="DEG_DESC")
ArticleMutator.objects.create(name="Cat Speak Title", value="CAT_TITLE")
ArticleMutator.objects.create(name="Cat Speak Description", value="CAT_DESC")
ArticleMutator.objects.create(name="Small Case Title", value="SML_TITLE")
ArticleMutator.objects.create(name="Small Case Description", value="SML_DESC")
ArticleMutator.objects.create(name="L33t Sp34k Title", value="L3_TITLE")
ArticleMutator.objects.create(name="L33t Sp34k Description", value="L3_DESC")
ArticleMutator.objects.create(name="Pig Latin Title", value="PGL_TITLE")
ArticleMutator.objects.create(name="Pig Latin Description", value="PGL_DESC")
ArticleMutator.objects.create(name="Upside Down Title", value="UDT_TITLE")
ArticleMutator.objects.create(name="Upside Down Description", value="UDT_DESC")
ArticleMutator.objects.create(name="Reversed Title", value="REV_TITLE")
ArticleMutator.objects.create(name="Reversed Description", value="REV_DESC")
ArticleMutator.objects.create(name="Randomise Title", value="RND_TITLE")
ArticleMutator.objects.create(name="Randomise Description", value="RND_DESC")
ArticleMutator.objects.create(name="Random Case Title", value="RNC_TITLE")
ArticleMutator.objects.create(name="Random Case Description", value="RNC_DESC")
ArticleMutator.objects.create(name="Gibberish Title", value="GIB_TITLE")
ArticleMutator.objects.create(name="Gibberish Description", value="GIB_DESC")
ArticleMutator.objects.create(name="Uwuify", value="UWU")
ArticleMutator.objects.create(name="Gothic Script", value="GS")
ArticleMutator.objects.create(name="Emoji Substitute", value="EMJ")
ArticleMutator.objects.create(name="Zalgo", value="ZGO")
ArticleMutator.objects.create(name="Morse Code", value="MC")
ArticleMutator.objects.create(name="Binary", value="BIN")
ArticleMutator.objects.create(name="Hexadecimal", value="HEX")
ArticleMutator.objects.create(name="Remove Vowels", value="RMV")
ArticleMutator.objects.create(name="Double Characters", value="DBL")
ArticleMutator.objects.create(name="Randomly Inserted Emoji", value="RNE")
ArticleMutator.objects.create(name="Pirate Speak", value="PIR")
ArticleMutator.objects.create(name="Valley Girl", value="VAL")
ArticleMutator.objects.create(name="Degeneracy", value="DEG")
ArticleMutator.objects.create(name="Cat Speak", value="CAT")
ArticleMutator.objects.create(name="Small Case", value="SML")
ArticleMutator.objects.create(name="L33t Sp34k", value="L3")
ArticleMutator.objects.create(name="Pig Latin", value="PGL")
ArticleMutator.objects.create(name="Upside Down", value="UDT")
ArticleMutator.objects.create(name="Reversed", value="REV")
ArticleMutator.objects.create(name="Randomise", value="RND")
ArticleMutator.objects.create(name="Random Case", value="RNC")
ArticleMutator.objects.create(name="Gibberish", value="GIB")

View File

@ -0,0 +1,27 @@
# Generated by Django 5.0.4 on 2024-06-25 08:43
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('home', '0006_alter_trackedcontent_guid_alter_trackedcontent_title'),
]
operations = [
migrations.RemoveField(
model_name='subscription',
name='mutators',
),
migrations.AddField(
model_name='subscription',
name='article_desc_mutators',
field=models.ManyToManyField(blank=True, related_name='desc_mutated_subscriptions', to='home.articlemutator'),
),
migrations.AddField(
model_name='subscription',
name='article_title_mutators',
field=models.ManyToManyField(blank=True, related_name='title_mutated_subscriptions', to='home.articlemutator'),
),
]

View File

@ -204,7 +204,17 @@ class Subscription(models.Model):
filters = models.ManyToManyField(to="home.Filter", blank=True)
mutators = models.ManyToManyField(to="home.ArticleMutator", blank=True)
article_title_mutators = models.ManyToManyField(
to="home.ArticleMutator",
related_name="title_mutated_subscriptions",
blank=True,
)
article_desc_mutators = models.ManyToManyField(
to="home.ArticleMutator",
related_name="desc_mutated_subscriptions",
blank=True,
)
active = models.BooleanField(default=True)

View File

@ -160,7 +160,8 @@ async function showEditSubModal(subId) {
$("#subFormModal input, #subFormModal textarea").val("");
$("#subChannels").val("").change();
$("#subFilters").val("").change();
$("#subMutators").val("").change();
$("#subTitleMutators").val("").change();
$("#subDescMutators").val("").change();
$("#subActive").prop("checked", true);
$("#subImagePreview img").attr("src", "").hide();
$("#subImagePreview small").show();
@ -178,8 +179,11 @@ async function showEditSubModal(subId) {
$("#subExtraNotes").val(subscription.extra_notes);
$("#subActive").prop("checked", subscription.active);
$("#subMutators").val("").change();
$("#subMutators").val(subscription.mutators.map(mutator => mutator.id)).change();
$("#subTitleMutators").val("").change();
$("#subTitleMutators").val(subscription.article_title_mutators.map(mutator => mutator.id)).change();
$("#subDescMutators").val("").change();
$("#subDescMutators").val(subscription.article_desc_mutators.map(mutator => mutator.id)).change();
const channels = await getSubChannels(subscription.id);
$("#subChannels").val("").change();
@ -201,13 +205,15 @@ $("#subForm").on("submit", async function(event) {
url = $("#subUrl").val();
guildId = getCurrentlyActiveServer().guild_id;
extraNotes = $("#subExtraNotes").val();
uwuify = $("#subUwu").prop("checked");
subChannels = $("#subChannels option:selected").toArray().map(channel => channel.value);
subFilters = $("#subFilters option:selected").toArray().map(filter => parseInt(filter.value));
subMutators = $("#subMutators option:selected").toArray().map(mutator => parseInt(mutator.value));
subMutators = {
title: $("#subTitleMutators option:selected").toArray().map(mutator => parseInt(mutator.value)),
desc: $("#subDescMutators option:selected").toArray().map(mutator => parseInt(mutator.value))
}
active = $("#subActive").prop("checked");
var subPrimaryKey = await saveSubscription(id, name, url, guildId, extraNotes, uwuify, subFilters, subMutators, active);
var subPrimaryKey = await saveSubscription(id, name, url, guildId, extraNotes, subFilters, subMutators, active);
await deleteSubChannels(subPrimaryKey);
subChannels.forEach(async channelId => {
@ -221,15 +227,15 @@ $("#subForm").on("submit", async function(event) {
$("#subFormModal").modal("hide");
});
async function saveSubscription(id, name, url, guildId, extraNotes, uwuify, filters, mutators, active, handleErrorMsg=true) {
async function saveSubscription(id, name, url, guildId, extraNotes, filters, mutators, active, handleErrorMsg=true) {
var formData = new FormData();
formData.append("name", name);
formData.append("url", url);
formData.append("guild_id", guildId);
formData.append("extra_notes", extraNotes);
formData.append("uwuify", uwuify)
filters.forEach(filter => formData.append("filters", filter));
mutators.forEach(mutator => formData.append("mutators", mutator));
mutators.title.forEach(mutator => formData.append("article_title_mutators", mutator));
mutators.desc.forEach(mutator => formData.append("article_desc_mutators", mutator));
formData.append("active", active);
var response;
@ -507,23 +513,23 @@ async function loadChannelOptions(guildId) {
async function loadMutatorOptions() {
// Disable input while options are loading
$("#subMutators").prop("disabled", true);
$(".sub-mutators-field").prop("disabled", true);
// Delete existing options
$("#subMutators option").each(function() {
$(".sub-mutators-field option").each(function() {
if ($(this).val())
$(this).remove();
});
// Clear select2 input
$("#subMutators").val("").change();
$(".sub-mutators-field").val("").change();
try {
const mutators = await getMutators();
console.log(JSON.stringify(mutators));
mutators.forEach(filter => {
$("#subMutators").append($("<option>", {
$(".sub-mutators-field").append($("<option>", {
text: filter.name,
value: filter.id
}));
@ -535,7 +541,7 @@ async function loadMutatorOptions() {
}
finally {
// Re-enable the input
$("#subMutators").prop("disabled", false);
$(".sub-mutators-field").prop("disabled", false);
}
}

View File

@ -84,15 +84,15 @@
<div class="row">
<div class="col-lg-6 pe-lg-4">
<div class="mb-4">
<label for="subMutators" class="form-label">Title Mutators</label>
<select name="subMutators" id="subMutators" class="select-2" multiple data-dropdownparent="#subAdvancedModal" tabindex="6"></select>
<label for="subTitleMutators" class="form-label">Title Mutators</label>
<select name="subTitleMutators" id="subTitleMutators" class="select-2 sub-mutators-field" multiple data-dropdownparent="#subAdvancedModal" tabindex="6"></select>
<div class="form-text">Apply mutators to article titles.</div>
</div>
</div>
<div class="col-lg-6 ps-lg-4">
<div class="mb-4">
<label for="subDescMutators" class="form-label">Description Mutators</label>
<select name="subDescMutators" id="subDescMutators" class="select-2" multiple data-dropdownparent="#subAdvancedModal" tabindex="6"></select>
<select name="subDescMutators" id="subDescMutators" class="select-2 sub-mutators-field" multiple data-dropdownparent="#subAdvancedModal" tabindex="6"></select>
<div class="form-text">Apply mutators to article descriptions.</div>
</div>
</div>