diff --git a/apps/api/serializers.py b/apps/api/serializers.py index f7ec6f1..eb03902 100644 --- a/apps/api/serializers.py +++ b/apps/api/serializers.py @@ -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): diff --git a/apps/api/views.py b/apps/api/views.py index e981c1e..13f2c2e 100644 --- a/apps/api/views.py +++ b/apps/api/views.py @@ -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"] diff --git a/apps/home/migrations/0003_initial_mutator_data.py b/apps/home/migrations/0003_initial_mutator_data.py index 58524f9..4ff630a 100644 --- a/apps/home/migrations/0003_initial_mutator_data.py +++ b/apps/home/migrations/0003_initial_mutator_data.py @@ -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") diff --git a/apps/home/migrations/0007_remove_subscription_mutators_and_more.py b/apps/home/migrations/0007_remove_subscription_mutators_and_more.py new file mode 100644 index 0000000..053914a --- /dev/null +++ b/apps/home/migrations/0007_remove_subscription_mutators_and_more.py @@ -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'), + ), + ] diff --git a/apps/home/models.py b/apps/home/models.py index 768ece9..564b851 100644 --- a/apps/home/models.py +++ b/apps/home/models.py @@ -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) diff --git a/apps/static/js/home/subscriptions.js b/apps/static/js/home/subscriptions.js index 1959678..c8a1311 100644 --- a/apps/static/js/home/subscriptions.js +++ b/apps/static/js/home/subscriptions.js @@ -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($("", { + $(".sub-mutators-field").append($("", { 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); } } diff --git a/apps/templates/home/includes/submodal.html b/apps/templates/home/includes/submodal.html index 42c6be9..903ae5b 100644 --- a/apps/templates/home/includes/submodal.html +++ b/apps/templates/home/includes/submodal.html @@ -84,15 +84,15 @@ - Title Mutators - + Title Mutators + Apply mutators to article titles. Description Mutators - + Apply mutators to article descriptions.