WIP triple hashtags

Signed-off-by: marcin mikołajczak <git@mkljczk.pl>
This commit is contained in:
marcin mikołajczak 2023-07-07 19:56:06 +02:00
parent 0c738d131a
commit 5484ef9958
5 changed files with 32 additions and 4 deletions

View file

@ -15,8 +15,10 @@ defp linkify_opts do
[
hashtag: true,
hashtag_handler: &Pleroma.Formatter.hashtag_handler/4,
hashhashtag: true,
hashhashtag_handler: &Pleroma.Formatter.hashhashtag_handler/4,
doublehashtag: true,
doublehashtag_handler: &Pleroma.Formatter.doublehashtag_handler/4,
triplehashtag: true,
triplehashtag_handler: &Pleroma.Formatter.triplehashtag_handler/4,
mention: true,
mention_handler: &Pleroma.Formatter.mention_handler/4
]
@ -80,7 +82,11 @@ def hashtag_handler("#" <> tag = tag_text, _buffer, _opts, acc) do
{link, %{acc | tags: MapSet.put(acc.tags, {tag_text, tag})}}
end
def hashhashtag_handler("##" <> tag = tag_text, _buffer, _opts, acc) do
def doublehashtag_handler("##" <> tag = tag_text, _buffer, _opts, acc) do
{tag, %{acc | tags: MapSet.put(acc.tags, {tag_text, tag |> String.downcase()})}}
end
def triplehashtag_handler("###" <> tag = tag_text, _buffer, _opts, acc) do
{tag, %{acc | tags: MapSet.put(acc.tags, {tag_text, tag |> String.downcase()})}}
end

View file

@ -15,6 +15,7 @@ defmodule Pleroma.Hashtag do
schema "hashtags" do
field(:name, :string)
field(:preferred_name, :string)
many_to_many(:objects, Object, join_through: "hashtags_objects", on_replace: :delete)
@ -74,10 +75,21 @@ def changeset(%Hashtag{} = struct, params) do
struct
|> cast(params, [:name])
|> update_change(:name, &normalize_name/1)
|> put_preferred_name
|> validate_required([:name])
|> unique_constraint(:name)
end
defp put_preferred_name(changeset) do
name =
changeset
|> get_change(:name)
|> String.trim()
changeset
|> put_change(:preferred_name, name)
end
def unlink(%Object{id: object_id}) do
with {_, hashtag_ids} <-
from(hto in "hashtags_objects",

View file

@ -163,6 +163,7 @@ defp deps do
{:floki, "~> 0.35"},
{:timex, "~> 3.6"},
{:ueberauth, "~> 0.4"},
{:linkify, git: "https://gitlab.com/mkljczk/linkify", branch: "master"},
{:linkify, "~> 0.5.3"},
{:http_signatures, "~> 0.1.2"},
{:telemetry, "~> 1.0.0", override: true},

View file

@ -77,7 +77,7 @@
"joken": {:hex, :joken, "2.6.0", "b9dd9b6d52e3e6fcb6c65e151ad38bf4bc286382b5b6f97079c47ade6b1bcc6a", [:mix], [{:jose, "~> 1.11.5", [hex: :jose, repo: "hexpm", optional: false]}], "hexpm", "5a95b05a71cd0b54abd35378aeb1d487a23a52c324fa7efdffc512b655b5aaa7"},
"jose": {:hex, :jose, "1.11.6", "613fda82552128aa6fb804682e3a616f4bc15565a048dabd05b1ebd5827ed965", [:mix, :rebar3], [], "hexpm", "6275cb75504f9c1e60eeacb771adfeee4905a9e182103aa59b53fed651ff9738"},
"jumper": {:hex, :jumper, "1.0.2", "68cdcd84472a00ac596b4e6459a41b3062d4427cbd4f1e8c8793c5b54f1406a7", [:mix], [], "hexpm", "9b7782409021e01ab3c08270e26f36eb62976a38c1aa64b2eaf6348422f165e1"},
"linkify": {:hex, :linkify, "0.5.3", "5f8143d8f61f5ff08d3aeeff47ef6509492b4948d8f08007fbf66e4d2246a7f2", [:mix], [], "hexpm", "3ef35a1377d47c25506e07c1c005ea9d38d700699d92ee92825f024434258177"},
"linkify": {:git, "https://gitlab.com/mkljczk/linkify", "4f1ce6ea211fea247bd6bc00aa63273c018dbf3f", [branch: "master"]},
"majic": {:hex, :majic, "1.0.0", "37e50648db5f5c2ff0c9fb46454d034d11596c03683807b9fb3850676ffdaab3", [:make, :mix], [{:elixir_make, "~> 0.6.1", [hex: :elixir_make, repo: "hexpm", optional: false]}, {:mime, "~> 1.0", [hex: :mime, repo: "hexpm", optional: false]}, {:nimble_pool, "~> 0.2", [hex: :nimble_pool, repo: "hexpm", optional: false]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "7905858f76650d49695f14ea55cd9aaaee0c6654fa391671d4cf305c275a0a9e"},
"makeup": {:hex, :makeup, "1.0.5", "d5a830bc42c9800ce07dd97fa94669dfb93d3bf5fcf6ea7a0c67b2e0e4a7f26c", [:mix], [{:nimble_parsec, "~> 0.5 or ~> 1.0", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "cfa158c02d3f5c0c665d0af11512fed3fba0144cf1aadee0f2ce17747fba2ca9"},
"makeup_elixir": {:hex, :makeup_elixir, "0.14.1", "4f0e96847c63c17841d42c08107405a005a2680eb9c7ccadfd757bd31dabccfb", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "f2438b1a80eaec9ede832b5c41cd4f373b38fd7aa33e3b22d9db79e640cbde11"},

View file

@ -0,0 +1,9 @@
defmodule Pleroma.Repo.Migrations.AddPreferredNameToHashtags do
use Ecto.Migration
def change do
alter table(:hashtags) do
add_if_not_exists(:preferred_name, :text)
end
end
end