From 590a10af332650a8a1eb61db7db7457dc63f229a Mon Sep 17 00:00:00 2001 From: Mary Kate Date: Thu, 24 Dec 2020 16:40:08 -0600 Subject: Adds tests for breaking tag and mention links after text is converted from markdown to html --- test/pleroma/formatter_test.exs | 78 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/test/pleroma/formatter_test.exs b/test/pleroma/formatter_test.exs index 5781a3f01..f47331bc3 100644 --- a/test/pleroma/formatter_test.exs +++ b/test/pleroma/formatter_test.exs @@ -284,6 +284,34 @@ test "it correctly parses angry face D:< with mention" do assert {^expected_text, ^expected_mentions, []} = Formatter.linkify(text) end + + test "correctly parses mentions in html" do + text = "

@lain hello

" + lain = insert(:user, %{nickname: "lain"}) + + {text, mentions, []} = Formatter.linkify(text) + + assert length(mentions) == 1 + + expected_text = + ~s(

@lain hello

) + + assert expected_text == text + end + + test "correctly parses mentions on the last line of html" do + text = "

Hello

@lain

" + lain = insert(:user, %{nickname: "lain"}) + + {text, mentions, []} = Formatter.linkify(text) + + assert length(mentions) == 1 + + expected_text = + ~s(

Hello

@lain

) + + assert expected_text == text + end end describe ".parse_tags" do @@ -299,6 +327,56 @@ test "parses tags in the text" do assert {_text, [], ^expected_tags} = Formatter.linkify(text) end + + test "parses tags in html" do + text = "

This is a #test

" + + expected_tags = [ + {"#test", "test"}, + ] + + assert {_text, [], ^expected_tags} = Formatter.linkify(text) + end + + test "parses mulitple tags in html" do + text = "

#tag1 #tag2 #tag3 #tag4

" + + expected_tags = [ + {"#tag1", "tag1"}, + {"#tag2", "tag2"}, + {"#tag3", "tag3"}, + {"#tag4", "tag4"}, + ] + + assert {_text, [], ^expected_tags} = Formatter.linkify(text) + end + + test "parses tags on the last line of html" do + text = "

This is a

#test

" + + expected_tags = [ + {"#test", "test"}, + ] + + assert {_text, [], ^expected_tags} = Formatter.linkify(text) + end + + test "parses mulitple tags on mulitple lines in html" do + text = "

testing...

#tag1 #tag2 #tag3 #tag4

paragraph

#tag5 #tag6 #tag7 #tag8

" + + expected_tags = [ + {"#tag1", "tag1"}, + {"#tag2", "tag2"}, + {"#tag3", "tag3"}, + {"#tag4", "tag4"}, + {"#tag5", "tag5"}, + {"#tag6", "tag6"}, + {"#tag7", "tag7"}, + {"#tag8", "tag8"}, + ] + + assert {_text, [], ^expected_tags} = Formatter.linkify(text) + end end test "it escapes HTML in plain text" do -- cgit v1.2.3 From 991b26f494ef0df7679fc73789a16820cb60d5ff Mon Sep 17 00:00:00 2001 From: lain Date: Wed, 1 Dec 2021 15:49:57 +0000 Subject: Merge branch 'update-hackney' into 'develop' Mix: upgrade Hackney to 1.18.0 Closes #2753 See merge request pleroma/pleroma!3549 --- mix.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mix.exs b/mix.exs index 39c79c83b..6841875d7 100644 --- a/mix.exs +++ b/mix.exs @@ -208,7 +208,7 @@ defp deps do {:mock, "~> 0.3.5", only: :test}, # temporary downgrade for excoveralls, hackney until hackney max_connections bug will be fixed {:excoveralls, "0.12.3", only: :test}, - {:hackney, "~> 1.17.0", override: true}, + {:hackney, "~> 1.18.0", override: true}, {:mox, "~> 1.0", only: :test}, {:websocket_client, git: "https://github.com/jeremyong/websocket_client.git", only: :test} ] ++ oauth_deps() -- cgit v1.2.3 From bf0b32c9aaf20d60b8866fb911b5ec0aa4546f82 Mon Sep 17 00:00:00 2001 From: lain Date: Tue, 7 Dec 2021 16:55:01 +0000 Subject: Merge branch 'pleroma-result-1_13' into 'develop' move result into with guard See merge request pleroma/pleroma!3557 --- lib/pleroma/web/activity_pub/publisher.ex | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/lib/pleroma/web/activity_pub/publisher.ex b/lib/pleroma/web/activity_pub/publisher.ex index 590beef64..c8cdd429e 100644 --- a/lib/pleroma/web/activity_pub/publisher.ex +++ b/lib/pleroma/web/activity_pub/publisher.ex @@ -63,18 +63,17 @@ def publish_one(%{inbox: inbox, json: json, actor: %User{} = actor, id: id} = pa date: date }) - with {:ok, %{status: code}} when code in 200..299 <- - result = - HTTP.post( - inbox, - json, - [ - {"Content-Type", "application/activity+json"}, - {"Date", date}, - {"signature", signature}, - {"digest", digest} - ] - ) do + with {:ok, %{status: code}} = result when code in 200..299 <- + HTTP.post( + inbox, + json, + [ + {"Content-Type", "application/activity+json"}, + {"Date", date}, + {"signature", signature}, + {"digest", digest} + ] + ) do if not Map.has_key?(params, :unreachable_since) || params[:unreachable_since] do Instances.set_reachable(inbox) end -- cgit v1.2.3 From cd3175c7fe4d62babae44c34a37bcc615cd392cc Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Mon, 10 Jan 2022 15:07:09 +0000 Subject: Merge branch 'fix/rich-media-test-escape-unicrud' into 'develop' Escape unicode RTL overrides in rich media parser tests See merge request pleroma/pleroma!3598 --- test/pleroma/web/rich_media/parser_test.exs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/pleroma/web/rich_media/parser_test.exs b/test/pleroma/web/rich_media/parser_test.exs index 2f363b012..2fe7f1b0b 100644 --- a/test/pleroma/web/rich_media/parser_test.exs +++ b/test/pleroma/web/rich_media/parser_test.exs @@ -133,13 +133,13 @@ test "parses OEmbed" do assert Parser.parse("http://example.com/oembed") == {:ok, %{ - "author_name" => "‮‭‬bees‬", + "author_name" => "\u202E\u202D\u202Cbees\u202C", "author_url" => "https://www.flickr.com/photos/bees/", "cache_age" => 3600, "flickr_type" => "photo", "height" => "768", "html" => - "\"Bacon", + "\"Bacon", "license" => "All Rights Reserved", "license_id" => 0, "provider_name" => "Flickr", -- cgit v1.2.3 From f4bc2f5975062f500ef698ae4839c17506f7b503 Mon Sep 17 00:00:00 2001 From: rinpatch Date: Mon, 10 Jan 2022 19:49:51 +0300 Subject: Add 2.4.2 changelog entry and bump mix version --- CHANGELOG.md | 10 ++++++++++ mix.exs | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5f26d48ff..88ad0ada9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,16 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Removed +## 2.4.2 - 2022-01-10 + +### Fixed +- Federation issues caused by HTTP pool checkout timeouts +- Compatibility with Elixir 1.13 + +### Upgrade notes + +1. Restart Pleroma + ## 2.4.1 - 2021-08-29 ### Changed diff --git a/mix.exs b/mix.exs index 6841875d7..db2f1f069 100644 --- a/mix.exs +++ b/mix.exs @@ -4,7 +4,7 @@ defmodule Pleroma.Mixfile do def project do [ app: :pleroma, - version: version("2.4.1"), + version: version("2.4.2"), elixir: "~> 1.9", elixirc_paths: elixirc_paths(Mix.env()), compilers: [:phoenix, :gettext] ++ Mix.compilers(), -- cgit v1.2.3 From ea204dbca1f02be2fc26514e1f39ff9b883d0f5c Mon Sep 17 00:00:00 2001 From: rinpatch Date: Mon, 10 Jan 2022 20:18:18 +0300 Subject: mix.lock: sync with mix.exs hackney version was bumped in mix.exs, but mix.lock was not updated --- mix.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mix.lock b/mix.lock index b78ae0bc9..232649cd5 100644 --- a/mix.lock +++ b/mix.lock @@ -11,7 +11,7 @@ "calendar": {:hex, :calendar, "1.0.0", "f52073a708528482ec33d0a171954ca610fe2bd28f1e871f247dc7f1565fa807", [:mix], [{:tzdata, "~> 0.5.20 or ~> 0.1.201603 or ~> 1.0", [hex: :tzdata, repo: "hexpm", optional: false]}], "hexpm", "990e9581920c82912a5ee50e62ff5ef96da6b15949a2ee4734f935fdef0f0a6f"}, "captcha": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/elixir-captcha.git", "e0f16822d578866e186a0974d65ad58cddc1e2ab", [ref: "e0f16822d578866e186a0974d65ad58cddc1e2ab"]}, "castore": {:hex, :castore, "0.1.10", "b01a007416a0ae4188e70b3b306236021b16c11474038ead7aff79dd75538c23", [:mix], [], "hexpm", "a48314e0cb45682db2ea27b8ebfa11bd6fa0a6e21a65e5772ad83ca136ff2665"}, - "certifi": {:hex, :certifi, "2.6.1", "dbab8e5e155a0763eea978c913ca280a6b544bfa115633fa20249c3d396d9493", [:rebar3], [], "hexpm", "524c97b4991b3849dd5c17a631223896272c6b0af446778ba4675a1dff53bb7e"}, + "certifi": {:hex, :certifi, "2.8.0", "d4fb0a6bb20b7c9c3643e22507e42f356ac090a1dcea9ab99e27e0376d695eba", [:rebar3], [], "hexpm", "6ac7efc1c6f8600b08d625292d4bbf584e14847ce1b6b5c44d983d273e1097ea"}, "combine": {:hex, :combine, "0.10.0", "eff8224eeb56498a2af13011d142c5e7997a80c8f5b97c499f84c841032e429f", [:mix], [], "hexpm", "1b1dbc1790073076580d0d1d64e42eae2366583e7aecd455d1215b0d16f2451b"}, "comeonin": {:hex, :comeonin, "5.3.2", "5c2f893d05c56ae3f5e24c1b983c2d5dfb88c6d979c9287a76a7feb1e1d8d646", [:mix], [], "hexpm", "d0993402844c49539aeadb3fe46a3c9bd190f1ecf86b6f9ebd71957534c95f04"}, "concurrent_limiter": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/concurrent_limiter.git", "d81be41024569330f296fc472e24198d7499ba78", [ref: "d81be41024569330f296fc472e24198d7499ba78"]}, @@ -55,7 +55,7 @@ "gen_state_machine": {:hex, :gen_state_machine, "2.0.5", "9ac15ec6e66acac994cc442dcc2c6f9796cf380ec4b08267223014be1c728a95", [:mix], [], "hexpm"}, "gettext": {:hex, :gettext, "0.18.2", "7df3ea191bb56c0309c00a783334b288d08a879f53a7014341284635850a6e55", [:mix], [], "hexpm", "f9f537b13d4fdd30f3039d33cb80144c3aa1f8d9698e47d7bcbcc8df93b1f5c5"}, "gun": {:hex, :gun, "2.0.0-rc.2", "7c489a32dedccb77b6e82d1f3c5a7dadfbfa004ec14e322cdb5e579c438632d2", [:make, :rebar3], [{:cowlib, "2.11.0", [hex: :cowlib, repo: "hexpm", optional: false]}], "hexpm", "6b9d1eae146410d727140dbf8b404b9631302ecc2066d1d12f22097ad7d254fc"}, - "hackney": {:hex, :hackney, "1.17.4", "99da4674592504d3fb0cfef0db84c3ba02b4508bae2dff8c0108baa0d6e0977c", [:rebar3], [{:certifi, "~>2.6.1", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "~>6.1.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "~>1.0.0", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "~>1.1", [hex: :mimerl, repo: "hexpm", optional: false]}, {:parse_trans, "3.3.1", [hex: :parse_trans, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "~>1.1.0", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}, {:unicode_util_compat, "~>0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "de16ff4996556c8548d512f4dbe22dd58a587bf3332e7fd362430a7ef3986b16"}, + "hackney": {:hex, :hackney, "1.18.0", "c4443d960bb9fba6d01161d01cd81173089686717d9490e5d3606644c48d121f", [:rebar3], [{:certifi, "~>2.8.0", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "~>6.1.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "~>1.0.0", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "~>1.1", [hex: :mimerl, repo: "hexpm", optional: false]}, {:parse_trans, "3.3.1", [hex: :parse_trans, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "~>1.1.0", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}, {:unicode_util_compat, "~>0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "9afcda620704d720db8c6a3123e9848d09c87586dc1c10479c42627b905b5c5e"}, "html_entities": {:hex, :html_entities, "0.5.2", "9e47e70598da7de2a9ff6af8758399251db6dbb7eebe2b013f2bbd2515895c3c", [:mix], [], "hexpm", "c53ba390403485615623b9531e97696f076ed415e8d8058b1dbaa28181f4fdcc"}, "html_sanitize_ex": {:hex, :html_sanitize_ex, "1.3.0", "f005ad692b717691203f940c686208aa3d8ffd9dd4bb3699240096a51fa9564e", [:mix], [{:mochiweb, "~> 2.15", [hex: :mochiweb, repo: "hexpm", optional: false]}], "hexpm"}, "http_signatures": {:hex, :http_signatures, "0.1.0", "4e4b501a936dbf4cb5222597038a89ea10781776770d2e185849fa829686b34c", [:mix], [], "hexpm", "f8a7b3731e3fd17d38fa6e343fcad7b03d6874a3b0a108c8568a71ed9c2cf824"}, -- cgit v1.2.3 From a98a127718c5a58d5210de3df17281ef8cf79a99 Mon Sep 17 00:00:00 2001 From: rinpatch Date: Tue, 11 Jan 2022 13:49:06 +0300 Subject: Pleroma-FE bundle: update to b13d8f7e6339e877a38a28008630dc8ec64abcdf --- priv/static/index.html | 2 +- .../static/static/css/app.7d2d223f75c3a14b0991.css | Bin 0 -> 6528 bytes .../static/css/app.7d2d223f75c3a14b0991.css.map | 1 + .../static/static/css/app.9a4c5ede37b2f0230836.css | Bin 5620 -> 0 bytes .../static/css/app.9a4c5ede37b2f0230836.css.map | 1 - priv/static/static/js/10.02ffbc25214f297f720f.js | Bin 0 -> 35817 bytes .../static/js/10.02ffbc25214f297f720f.js.map | Bin 0 -> 113 bytes priv/static/static/js/10.fdbf093cc5602ca4f2e1.js | Bin 34909 -> 0 bytes .../static/js/10.fdbf093cc5602ca4f2e1.js.map | Bin 113 -> 0 bytes priv/static/static/js/11.7b11fd75fe61d6e10ac6.js | Bin 16982 -> 0 bytes .../static/js/11.7b11fd75fe61d6e10ac6.js.map | Bin 113 -> 0 bytes priv/static/static/js/11.c173c6036fb3af5581b3.js | Bin 0 -> 16982 bytes .../static/js/11.c173c6036fb3af5581b3.js.map | Bin 0 -> 113 bytes priv/static/static/js/12.5ca41e245bb40263bc7f.js | Bin 0 -> 26829 bytes .../static/js/12.5ca41e245bb40263bc7f.js.map | Bin 0 -> 113 bytes priv/static/static/js/12.a3dc3473565ec07a88c2.js | Bin 25406 -> 0 bytes .../static/js/12.a3dc3473565ec07a88c2.js.map | Bin 113 -> 0 bytes priv/static/static/js/13.99621e6c47936075b44d.js | Bin 0 -> 28494 bytes .../static/js/13.99621e6c47936075b44d.js.map | Bin 0 -> 113 bytes priv/static/static/js/13.cdc076533397e24391bc.js | Bin 28523 -> 0 bytes .../static/js/13.cdc076533397e24391bc.js.map | Bin 113 -> 0 bytes priv/static/static/js/14.4e05e7c284119777ecc5.js | Bin 0 -> 35574 bytes .../static/js/14.4e05e7c284119777ecc5.js.map | Bin 0 -> 113 bytes priv/static/static/js/14.a2b9acaf9caa95d1fd7f.js | Bin 34388 -> 0 bytes .../static/js/14.a2b9acaf9caa95d1fd7f.js.map | Bin 113 -> 0 bytes priv/static/static/js/15.23f179cc3adc903bb537.js | Bin 0 -> 8244 bytes .../static/js/15.23f179cc3adc903bb537.js.map | Bin 0 -> 113 bytes priv/static/static/js/15.fe4e76f27cc478289a42.js | Bin 8244 -> 0 bytes .../static/js/15.fe4e76f27cc478289a42.js.map | Bin 113 -> 0 bytes priv/static/static/js/16.43dd2c64dcb160dd96a6.js | Bin 0 -> 16512 bytes .../static/js/16.43dd2c64dcb160dd96a6.js.map | Bin 0 -> 113 bytes priv/static/static/js/16.90b5ee380da41d6d061c.js | Bin 16553 -> 0 bytes .../static/js/16.90b5ee380da41d6d061c.js.map | Bin 113 -> 0 bytes priv/static/static/js/17.c5a6513076aa9c5a9564.js | Bin 2238 -> 0 bytes .../static/js/17.c5a6513076aa9c5a9564.js.map | Bin 113 -> 0 bytes priv/static/static/js/17.d1deeeb81b7cab98b068.js | Bin 0 -> 2238 bytes .../static/js/17.d1deeeb81b7cab98b068.js.map | Bin 0 -> 113 bytes priv/static/static/js/18.a4d5b399e228a6a45a7b.js | Bin 0 -> 32363 bytes .../static/js/18.a4d5b399e228a6a45a7b.js.map | Bin 0 -> 113 bytes priv/static/static/js/18.ffde79cfe78615dbb020.js | Bin 32032 -> 0 bytes .../static/js/18.ffde79cfe78615dbb020.js.map | Bin 113 -> 0 bytes priv/static/static/js/19.c031807287d659bd841d.js | Bin 32702 -> 0 bytes .../static/js/19.c031807287d659bd841d.js.map | Bin 113 -> 0 bytes priv/static/static/js/19.e513835c3274271258fa.js | Bin 0 -> 32633 bytes .../static/js/19.e513835c3274271258fa.js.map | Bin 0 -> 113 bytes priv/static/static/js/2.5f3ceb7bdf08fadacf00.js | Bin 177960 -> 0 bytes .../static/static/js/2.5f3ceb7bdf08fadacf00.js.map | Bin 460944 -> 0 bytes priv/static/static/js/2.fec2056b00b4fa3921ba.js | Bin 0 -> 178176 bytes .../static/static/js/2.fec2056b00b4fa3921ba.js.map | Bin 0 -> 461339 bytes priv/static/static/js/20.683b112f4dcea887f707.js | Bin 0 -> 39200 bytes .../static/js/20.683b112f4dcea887f707.js.map | Bin 0 -> 113 bytes priv/static/static/js/20.abb0d332055536a87c38.js | Bin 39260 -> 0 bytes .../static/js/20.abb0d332055536a87c38.js.map | Bin 113 -> 0 bytes priv/static/static/js/21.6e952388ef8d5a0276dc.js | Bin 20343 -> 0 bytes .../static/js/21.6e952388ef8d5a0276dc.js.map | Bin 113 -> 0 bytes priv/static/static/js/21.b2844ccdcfc3c8191e8e.js | Bin 0 -> 20295 bytes .../static/js/21.b2844ccdcfc3c8191e8e.js.map | Bin 0 -> 113 bytes priv/static/static/js/22.68c0a771d79e3383f5e8.js | Bin 0 -> 21326 bytes .../static/js/22.68c0a771d79e3383f5e8.js.map | Bin 0 -> 113 bytes priv/static/static/js/22.dbc79965f66b0bb62d88.js | Bin 21364 -> 0 bytes .../static/js/22.dbc79965f66b0bb62d88.js.map | Bin 113 -> 0 bytes priv/static/static/js/23.0b6cdf4c9dc52c4291c0.js | Bin 0 -> 34059 bytes .../static/js/23.0b6cdf4c9dc52c4291c0.js.map | Bin 0 -> 113 bytes priv/static/static/js/23.4addb03e0862c780c55f.js | Bin 33998 -> 0 bytes .../static/js/23.4addb03e0862c780c55f.js.map | Bin 113 -> 0 bytes priv/static/static/js/24.5cfb87799bd882b933dd.js | Bin 0 -> 19449 bytes .../static/js/24.5cfb87799bd882b933dd.js.map | Bin 0 -> 113 bytes priv/static/static/js/24.e4b623be1780a14a6168.js | Bin 19495 -> 0 bytes .../static/js/24.e4b623be1780a14a6168.js.map | Bin 113 -> 0 bytes priv/static/static/js/25.34eeae0070f7f1eb6843.js | Bin 31526 -> 0 bytes .../static/js/25.34eeae0070f7f1eb6843.js.map | Bin 113 -> 0 bytes priv/static/static/js/25.8185e4d775cea9fe47e1.js | Bin 0 -> 33352 bytes .../static/js/25.8185e4d775cea9fe47e1.js.map | Bin 0 -> 113 bytes priv/static/static/js/26.34ec129dd8f860ce4a8e.js | Bin 0 -> 32635 bytes .../static/js/26.34ec129dd8f860ce4a8e.js.map | Bin 0 -> 113 bytes priv/static/static/js/26.bd86a0d958de2bb3905a.js | Bin 32684 -> 0 bytes .../static/js/26.bd86a0d958de2bb3905a.js.map | Bin 113 -> 0 bytes priv/static/static/js/27.0f4a5145681cfb5a896e.js | Bin 0 -> 2174 bytes .../static/js/27.0f4a5145681cfb5a896e.js.map | Bin 0 -> 113 bytes priv/static/static/js/27.7d4ab8716762d6f57135.js | Bin 2174 -> 0 bytes .../static/js/27.7d4ab8716762d6f57135.js.map | Bin 113 -> 0 bytes priv/static/static/js/28.75c01cd71372c39d5af8.js | Bin 0 -> 43736 bytes .../static/js/28.75c01cd71372c39d5af8.js.map | Bin 0 -> 113 bytes priv/static/static/js/28.a88999ebb3f7ec930aad.js | Bin 43787 -> 0 bytes .../static/js/28.a88999ebb3f7ec930aad.js.map | Bin 113 -> 0 bytes priv/static/static/js/29.519f681d194c212ae75f.js | Bin 23904 -> 0 bytes .../static/js/29.519f681d194c212ae75f.js.map | Bin 113 -> 0 bytes priv/static/static/js/29.b53cf1f3bcece005d78a.js | Bin 0 -> 23857 bytes .../static/js/29.b53cf1f3bcece005d78a.js.map | Bin 0 -> 113 bytes priv/static/static/js/3.6c8e014d70907359ad5a.js | Bin 78811 -> 0 bytes .../static/static/js/3.6c8e014d70907359ad5a.js.map | Bin 339931 -> 0 bytes priv/static/static/js/3.bde677e65143f0cd1105.js | Bin 0 -> 78811 bytes .../static/static/js/3.bde677e65143f0cd1105.js.map | Bin 0 -> 339931 bytes priv/static/static/js/30.064c236fa83ac21c252f.js | Bin 0 -> 49286 bytes .../static/js/30.064c236fa83ac21c252f.js.map | Bin 0 -> 113 bytes priv/static/static/js/30.d29cd76b0781bb654f87.js | Bin 48635 -> 0 bytes .../static/js/30.d29cd76b0781bb654f87.js.map | Bin 113 -> 0 bytes priv/static/static/js/31.15b545bb42e21d39c678.js | Bin 30160 -> 0 bytes .../static/js/31.15b545bb42e21d39c678.js.map | Bin 113 -> 0 bytes priv/static/static/js/31.226f7a848d733df38095.js | Bin 0 -> 30509 bytes .../static/js/31.226f7a848d733df38095.js.map | Bin 0 -> 113 bytes priv/static/static/js/32.19ca50edbb4d711838dc.js | Bin 0 -> 29734 bytes .../static/js/32.19ca50edbb4d711838dc.js.map | Bin 0 -> 113 bytes priv/static/static/js/32.899035ede0115c5c0f99.js | Bin 29370 -> 0 bytes .../static/js/32.899035ede0115c5c0f99.js.map | Bin 113 -> 0 bytes priv/static/static/js/4.564b2a8cbfe4d5e93949.js | Bin 2191 -> 0 bytes .../static/static/js/4.564b2a8cbfe4d5e93949.js.map | Bin 7765 -> 0 bytes priv/static/static/js/4.7077bff64d63355b1635.js | Bin 0 -> 2191 bytes .../static/static/js/4.7077bff64d63355b1635.js.map | Bin 0 -> 7765 bytes priv/static/static/js/5.6024023b2804dafc6bcb.js | Bin 7376 -> 0 bytes .../static/static/js/5.6024023b2804dafc6bcb.js.map | Bin 112 -> 0 bytes priv/static/static/js/5.cfb722ac8eea8919f749.js | Bin 0 -> 7376 bytes .../static/static/js/5.cfb722ac8eea8919f749.js.map | Bin 0 -> 112 bytes priv/static/static/js/6.613b0d6b08c3f5f9ef13.js | Bin 0 -> 33855 bytes .../static/static/js/6.613b0d6b08c3f5f9ef13.js.map | Bin 0 -> 112 bytes priv/static/static/js/6.b0c7a2b19cc70c33dc1e.js | Bin 14079 -> 0 bytes .../static/static/js/6.b0c7a2b19cc70c33dc1e.js.map | Bin 112 -> 0 bytes priv/static/static/js/7.199d52eb458f775043ed.js | Bin 0 -> 16414 bytes .../static/static/js/7.199d52eb458f775043ed.js.map | Bin 0 -> 112 bytes priv/static/static/js/7.4dbb03c6731e1c8190af.js | Bin 16457 -> 0 bytes .../static/static/js/7.4dbb03c6731e1c8190af.js.map | Bin 112 -> 0 bytes priv/static/static/js/8.7f96f22f9f65ad394684.js | Bin 0 -> 35676 bytes .../static/static/js/8.7f96f22f9f65ad394684.js.map | Bin 0 -> 112 bytes priv/static/static/js/8.d11ae57b3255a1c74681.js | Bin 35243 -> 0 bytes .../static/static/js/8.d11ae57b3255a1c74681.js.map | Bin 112 -> 0 bytes priv/static/static/js/9.80dc09c85f557dd2c96f.js | Bin 31241 -> 0 bytes .../static/static/js/9.80dc09c85f557dd2c96f.js.map | Bin 112 -> 0 bytes priv/static/static/js/9.f8fc2497d5f27a9df682.js | Bin 0 -> 32441 bytes .../static/static/js/9.f8fc2497d5f27a9df682.js.map | Bin 0 -> 112 bytes priv/static/static/js/app.6c972d84b60f601b01f8.js | Bin 0 -> 655095 bytes .../static/js/app.6c972d84b60f601b01f8.js.map | Bin 0 -> 1650480 bytes priv/static/static/js/app.ce97bd1883ee9dd7b809.js | Bin 635603 -> 0 bytes .../static/js/app.ce97bd1883ee9dd7b809.js.map | Bin 1588512 -> 0 bytes .../static/js/vendors~app.cea10ab53f3aa19fc30e.js | Bin 0 -> 379932 bytes .../js/vendors~app.cea10ab53f3aa19fc30e.js.map | Bin 0 -> 2292779 bytes .../static/js/vendors~app.fb9ee54b02db0c974e51.js | Bin 378827 -> 0 bytes .../js/vendors~app.fb9ee54b02db0c974e51.js.map | Bin 2291914 -> 0 bytes priv/static/sw-pleroma.js | Bin 187040 -> 186806 bytes priv/static/sw-pleroma.js.map | Bin 720448 -> 719600 bytes 139 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 priv/static/static/css/app.7d2d223f75c3a14b0991.css create mode 100644 priv/static/static/css/app.7d2d223f75c3a14b0991.css.map delete mode 100644 priv/static/static/css/app.9a4c5ede37b2f0230836.css delete mode 100644 priv/static/static/css/app.9a4c5ede37b2f0230836.css.map create mode 100644 priv/static/static/js/10.02ffbc25214f297f720f.js create mode 100644 priv/static/static/js/10.02ffbc25214f297f720f.js.map delete mode 100644 priv/static/static/js/10.fdbf093cc5602ca4f2e1.js delete mode 100644 priv/static/static/js/10.fdbf093cc5602ca4f2e1.js.map delete mode 100644 priv/static/static/js/11.7b11fd75fe61d6e10ac6.js delete mode 100644 priv/static/static/js/11.7b11fd75fe61d6e10ac6.js.map create mode 100644 priv/static/static/js/11.c173c6036fb3af5581b3.js create mode 100644 priv/static/static/js/11.c173c6036fb3af5581b3.js.map create mode 100644 priv/static/static/js/12.5ca41e245bb40263bc7f.js create mode 100644 priv/static/static/js/12.5ca41e245bb40263bc7f.js.map delete mode 100644 priv/static/static/js/12.a3dc3473565ec07a88c2.js delete mode 100644 priv/static/static/js/12.a3dc3473565ec07a88c2.js.map create mode 100644 priv/static/static/js/13.99621e6c47936075b44d.js create mode 100644 priv/static/static/js/13.99621e6c47936075b44d.js.map delete mode 100644 priv/static/static/js/13.cdc076533397e24391bc.js delete mode 100644 priv/static/static/js/13.cdc076533397e24391bc.js.map create mode 100644 priv/static/static/js/14.4e05e7c284119777ecc5.js create mode 100644 priv/static/static/js/14.4e05e7c284119777ecc5.js.map delete mode 100644 priv/static/static/js/14.a2b9acaf9caa95d1fd7f.js delete mode 100644 priv/static/static/js/14.a2b9acaf9caa95d1fd7f.js.map create mode 100644 priv/static/static/js/15.23f179cc3adc903bb537.js create mode 100644 priv/static/static/js/15.23f179cc3adc903bb537.js.map delete mode 100644 priv/static/static/js/15.fe4e76f27cc478289a42.js delete mode 100644 priv/static/static/js/15.fe4e76f27cc478289a42.js.map create mode 100644 priv/static/static/js/16.43dd2c64dcb160dd96a6.js create mode 100644 priv/static/static/js/16.43dd2c64dcb160dd96a6.js.map delete mode 100644 priv/static/static/js/16.90b5ee380da41d6d061c.js delete mode 100644 priv/static/static/js/16.90b5ee380da41d6d061c.js.map delete mode 100644 priv/static/static/js/17.c5a6513076aa9c5a9564.js delete mode 100644 priv/static/static/js/17.c5a6513076aa9c5a9564.js.map create mode 100644 priv/static/static/js/17.d1deeeb81b7cab98b068.js create mode 100644 priv/static/static/js/17.d1deeeb81b7cab98b068.js.map create mode 100644 priv/static/static/js/18.a4d5b399e228a6a45a7b.js create mode 100644 priv/static/static/js/18.a4d5b399e228a6a45a7b.js.map delete mode 100644 priv/static/static/js/18.ffde79cfe78615dbb020.js delete mode 100644 priv/static/static/js/18.ffde79cfe78615dbb020.js.map delete mode 100644 priv/static/static/js/19.c031807287d659bd841d.js delete mode 100644 priv/static/static/js/19.c031807287d659bd841d.js.map create mode 100644 priv/static/static/js/19.e513835c3274271258fa.js create mode 100644 priv/static/static/js/19.e513835c3274271258fa.js.map delete mode 100644 priv/static/static/js/2.5f3ceb7bdf08fadacf00.js delete mode 100644 priv/static/static/js/2.5f3ceb7bdf08fadacf00.js.map create mode 100644 priv/static/static/js/2.fec2056b00b4fa3921ba.js create mode 100644 priv/static/static/js/2.fec2056b00b4fa3921ba.js.map create mode 100644 priv/static/static/js/20.683b112f4dcea887f707.js create mode 100644 priv/static/static/js/20.683b112f4dcea887f707.js.map delete mode 100644 priv/static/static/js/20.abb0d332055536a87c38.js delete mode 100644 priv/static/static/js/20.abb0d332055536a87c38.js.map delete mode 100644 priv/static/static/js/21.6e952388ef8d5a0276dc.js delete mode 100644 priv/static/static/js/21.6e952388ef8d5a0276dc.js.map create mode 100644 priv/static/static/js/21.b2844ccdcfc3c8191e8e.js create mode 100644 priv/static/static/js/21.b2844ccdcfc3c8191e8e.js.map create mode 100644 priv/static/static/js/22.68c0a771d79e3383f5e8.js create mode 100644 priv/static/static/js/22.68c0a771d79e3383f5e8.js.map delete mode 100644 priv/static/static/js/22.dbc79965f66b0bb62d88.js delete mode 100644 priv/static/static/js/22.dbc79965f66b0bb62d88.js.map create mode 100644 priv/static/static/js/23.0b6cdf4c9dc52c4291c0.js create mode 100644 priv/static/static/js/23.0b6cdf4c9dc52c4291c0.js.map delete mode 100644 priv/static/static/js/23.4addb03e0862c780c55f.js delete mode 100644 priv/static/static/js/23.4addb03e0862c780c55f.js.map create mode 100644 priv/static/static/js/24.5cfb87799bd882b933dd.js create mode 100644 priv/static/static/js/24.5cfb87799bd882b933dd.js.map delete mode 100644 priv/static/static/js/24.e4b623be1780a14a6168.js delete mode 100644 priv/static/static/js/24.e4b623be1780a14a6168.js.map delete mode 100644 priv/static/static/js/25.34eeae0070f7f1eb6843.js delete mode 100644 priv/static/static/js/25.34eeae0070f7f1eb6843.js.map create mode 100644 priv/static/static/js/25.8185e4d775cea9fe47e1.js create mode 100644 priv/static/static/js/25.8185e4d775cea9fe47e1.js.map create mode 100644 priv/static/static/js/26.34ec129dd8f860ce4a8e.js create mode 100644 priv/static/static/js/26.34ec129dd8f860ce4a8e.js.map delete mode 100644 priv/static/static/js/26.bd86a0d958de2bb3905a.js delete mode 100644 priv/static/static/js/26.bd86a0d958de2bb3905a.js.map create mode 100644 priv/static/static/js/27.0f4a5145681cfb5a896e.js create mode 100644 priv/static/static/js/27.0f4a5145681cfb5a896e.js.map delete mode 100644 priv/static/static/js/27.7d4ab8716762d6f57135.js delete mode 100644 priv/static/static/js/27.7d4ab8716762d6f57135.js.map create mode 100644 priv/static/static/js/28.75c01cd71372c39d5af8.js create mode 100644 priv/static/static/js/28.75c01cd71372c39d5af8.js.map delete mode 100644 priv/static/static/js/28.a88999ebb3f7ec930aad.js delete mode 100644 priv/static/static/js/28.a88999ebb3f7ec930aad.js.map delete mode 100644 priv/static/static/js/29.519f681d194c212ae75f.js delete mode 100644 priv/static/static/js/29.519f681d194c212ae75f.js.map create mode 100644 priv/static/static/js/29.b53cf1f3bcece005d78a.js create mode 100644 priv/static/static/js/29.b53cf1f3bcece005d78a.js.map delete mode 100644 priv/static/static/js/3.6c8e014d70907359ad5a.js delete mode 100644 priv/static/static/js/3.6c8e014d70907359ad5a.js.map create mode 100644 priv/static/static/js/3.bde677e65143f0cd1105.js create mode 100644 priv/static/static/js/3.bde677e65143f0cd1105.js.map create mode 100644 priv/static/static/js/30.064c236fa83ac21c252f.js create mode 100644 priv/static/static/js/30.064c236fa83ac21c252f.js.map delete mode 100644 priv/static/static/js/30.d29cd76b0781bb654f87.js delete mode 100644 priv/static/static/js/30.d29cd76b0781bb654f87.js.map delete mode 100644 priv/static/static/js/31.15b545bb42e21d39c678.js delete mode 100644 priv/static/static/js/31.15b545bb42e21d39c678.js.map create mode 100644 priv/static/static/js/31.226f7a848d733df38095.js create mode 100644 priv/static/static/js/31.226f7a848d733df38095.js.map create mode 100644 priv/static/static/js/32.19ca50edbb4d711838dc.js create mode 100644 priv/static/static/js/32.19ca50edbb4d711838dc.js.map delete mode 100644 priv/static/static/js/32.899035ede0115c5c0f99.js delete mode 100644 priv/static/static/js/32.899035ede0115c5c0f99.js.map delete mode 100644 priv/static/static/js/4.564b2a8cbfe4d5e93949.js delete mode 100644 priv/static/static/js/4.564b2a8cbfe4d5e93949.js.map create mode 100644 priv/static/static/js/4.7077bff64d63355b1635.js create mode 100644 priv/static/static/js/4.7077bff64d63355b1635.js.map delete mode 100644 priv/static/static/js/5.6024023b2804dafc6bcb.js delete mode 100644 priv/static/static/js/5.6024023b2804dafc6bcb.js.map create mode 100644 priv/static/static/js/5.cfb722ac8eea8919f749.js create mode 100644 priv/static/static/js/5.cfb722ac8eea8919f749.js.map create mode 100644 priv/static/static/js/6.613b0d6b08c3f5f9ef13.js create mode 100644 priv/static/static/js/6.613b0d6b08c3f5f9ef13.js.map delete mode 100644 priv/static/static/js/6.b0c7a2b19cc70c33dc1e.js delete mode 100644 priv/static/static/js/6.b0c7a2b19cc70c33dc1e.js.map create mode 100644 priv/static/static/js/7.199d52eb458f775043ed.js create mode 100644 priv/static/static/js/7.199d52eb458f775043ed.js.map delete mode 100644 priv/static/static/js/7.4dbb03c6731e1c8190af.js delete mode 100644 priv/static/static/js/7.4dbb03c6731e1c8190af.js.map create mode 100644 priv/static/static/js/8.7f96f22f9f65ad394684.js create mode 100644 priv/static/static/js/8.7f96f22f9f65ad394684.js.map delete mode 100644 priv/static/static/js/8.d11ae57b3255a1c74681.js delete mode 100644 priv/static/static/js/8.d11ae57b3255a1c74681.js.map delete mode 100644 priv/static/static/js/9.80dc09c85f557dd2c96f.js delete mode 100644 priv/static/static/js/9.80dc09c85f557dd2c96f.js.map create mode 100644 priv/static/static/js/9.f8fc2497d5f27a9df682.js create mode 100644 priv/static/static/js/9.f8fc2497d5f27a9df682.js.map create mode 100644 priv/static/static/js/app.6c972d84b60f601b01f8.js create mode 100644 priv/static/static/js/app.6c972d84b60f601b01f8.js.map delete mode 100644 priv/static/static/js/app.ce97bd1883ee9dd7b809.js delete mode 100644 priv/static/static/js/app.ce97bd1883ee9dd7b809.js.map create mode 100644 priv/static/static/js/vendors~app.cea10ab53f3aa19fc30e.js create mode 100644 priv/static/static/js/vendors~app.cea10ab53f3aa19fc30e.js.map delete mode 100644 priv/static/static/js/vendors~app.fb9ee54b02db0c974e51.js delete mode 100644 priv/static/static/js/vendors~app.fb9ee54b02db0c974e51.js.map diff --git a/priv/static/index.html b/priv/static/index.html index 9ef3ad6e4..b1455c184 100644 --- a/priv/static/index.html +++ b/priv/static/index.html @@ -1 +1 @@ -
\ No newline at end of file +
\ No newline at end of file diff --git a/priv/static/static/css/app.7d2d223f75c3a14b0991.css b/priv/static/static/css/app.7d2d223f75c3a14b0991.css new file mode 100644 index 000000000..d79cf910f Binary files /dev/null and b/priv/static/static/css/app.7d2d223f75c3a14b0991.css differ diff --git a/priv/static/static/css/app.7d2d223f75c3a14b0991.css.map b/priv/static/static/css/app.7d2d223f75c3a14b0991.css.map new file mode 100644 index 000000000..ce9a6fa12 --- /dev/null +++ b/priv/static/static/css/app.7d2d223f75c3a14b0991.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///./src/components/rich_content/rich_content.scss","webpack:///./src/components/tab_switcher/tab_switcher.scss","webpack:///./src/hocs/with_load_more/with_load_more.scss"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,C;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,C;ACtOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,C","file":"static/css/app.7d2d223f75c3a14b0991.css","sourcesContent":[".RichContent blockquote {\n margin: 0.2em 0 0.2em 2em;\n font-style: italic;\n}\n.RichContent pre {\n overflow: auto;\n}\n.RichContent code,\n.RichContent samp,\n.RichContent kbd,\n.RichContent var,\n.RichContent pre {\n font-family: var(--postCodeFont, monospace);\n}\n.RichContent p {\n margin: 0 0 1em 0;\n}\n.RichContent p:last-child {\n margin: 0 0 0 0;\n}\n.RichContent h1 {\n font-size: 1.1em;\n line-height: 1.2em;\n margin: 1.4em 0;\n}\n.RichContent h2 {\n font-size: 1.1em;\n margin: 1em 0;\n}\n.RichContent h3 {\n font-size: 1em;\n margin: 1.2em 0;\n}\n.RichContent h4 {\n margin: 1.1em 0;\n}\n.RichContent .img {\n display: inline-block;\n}\n.RichContent .emoji {\n display: inline-block;\n width: var(--emoji-size, 32px);\n height: var(--emoji-size, 32px);\n}\n.RichContent .img,\n.RichContent video {\n max-width: 100%;\n max-height: 400px;\n vertical-align: middle;\n -o-object-fit: contain;\n object-fit: contain;\n}",".tab-switcher {\n display: -ms-flexbox;\n display: flex;\n}\n.tab-switcher .tab-icon {\n margin: 0.2em auto;\n display: block;\n}\n.tab-switcher.top-tabs {\n -ms-flex-direction: column;\n flex-direction: column;\n}\n.tab-switcher.top-tabs > .tabs {\n width: 100%;\n overflow-y: hidden;\n overflow-x: auto;\n padding-top: 5px;\n -ms-flex-direction: row;\n flex-direction: row;\n}\n.tab-switcher.top-tabs > .tabs::after, .tab-switcher.top-tabs > .tabs::before {\n content: \"\";\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n border-bottom: 1px solid;\n border-bottom-color: #222;\n border-bottom-color: var(--border, #222);\n}\n.tab-switcher.top-tabs > .tabs .tab-wrapper {\n height: 28px;\n}\n.tab-switcher.top-tabs > .tabs .tab-wrapper:not(.active)::after {\n left: 0;\n right: 0;\n bottom: 0;\n border-bottom: 1px solid;\n border-bottom-color: #222;\n border-bottom-color: var(--border, #222);\n}\n.tab-switcher.top-tabs > .tabs .tab {\n width: 100%;\n min-width: 1px;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n padding-bottom: 99px;\n margin-bottom: -93px;\n}\n.tab-switcher.top-tabs .contents.scrollable-tabs {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n}\n.tab-switcher.side-tabs {\n -ms-flex-direction: row;\n flex-direction: row;\n}\n@media all and (max-width: 800px) {\n .tab-switcher.side-tabs {\n overflow-x: auto;\n }\n}\n.tab-switcher.side-tabs > .contents {\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n}\n.tab-switcher.side-tabs > .tabs {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n overflow-y: auto;\n overflow-x: hidden;\n -ms-flex-direction: column;\n flex-direction: column;\n}\n.tab-switcher.side-tabs > .tabs::after, .tab-switcher.side-tabs > .tabs::before {\n -ms-flex-negative: 0;\n flex-shrink: 0;\n -ms-flex-preferred-size: 0.5em;\n flex-basis: 0.5em;\n content: \"\";\n border-right: 1px solid;\n border-right-color: #222;\n border-right-color: var(--border, #222);\n}\n.tab-switcher.side-tabs > .tabs::after {\n -ms-flex-positive: 1;\n flex-grow: 1;\n}\n.tab-switcher.side-tabs > .tabs::before {\n -ms-flex-positive: 0;\n flex-grow: 0;\n}\n.tab-switcher.side-tabs > .tabs .tab-wrapper {\n min-width: 10em;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n}\n@media all and (max-width: 800px) {\n .tab-switcher.side-tabs > .tabs .tab-wrapper {\n min-width: 4em;\n }\n}\n.tab-switcher.side-tabs > .tabs .tab-wrapper:not(.active)::after {\n top: 0;\n right: 0;\n bottom: 0;\n border-right: 1px solid;\n border-right-color: #222;\n border-right-color: var(--border, #222);\n}\n.tab-switcher.side-tabs > .tabs .tab-wrapper::before {\n -ms-flex: 0 0 6px;\n flex: 0 0 6px;\n content: \"\";\n border-right: 1px solid;\n border-right-color: #222;\n border-right-color: var(--border, #222);\n}\n.tab-switcher.side-tabs > .tabs .tab-wrapper:last-child .tab {\n margin-bottom: 0;\n}\n.tab-switcher.side-tabs > .tabs .tab {\n -ms-flex: 1;\n flex: 1;\n box-sizing: content-box;\n min-width: 10em;\n min-width: 1px;\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n padding-left: 1em;\n padding-right: calc(1em + 200px);\n margin-right: -200px;\n margin-left: 1em;\n}\n@media all and (max-width: 800px) {\n .tab-switcher.side-tabs > .tabs .tab {\n padding-left: 0.25em;\n padding-right: calc(.25em + 200px);\n margin-right: calc(.25em - 200px);\n margin-left: 0.25em;\n }\n .tab-switcher.side-tabs > .tabs .tab .text {\n display: none;\n }\n}\n.tab-switcher .contents {\n -ms-flex: 1 0 auto;\n flex: 1 0 auto;\n min-height: 0px;\n}\n.tab-switcher .contents .hidden {\n display: none;\n}\n.tab-switcher .contents .full-height:not(.hidden) {\n height: 100%;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n}\n.tab-switcher .contents .full-height:not(.hidden) > *:not(.mobile-label) {\n -ms-flex: 1;\n flex: 1;\n}\n.tab-switcher .contents.scrollable-tabs {\n overflow-y: auto;\n}\n.tab-switcher .tab {\n position: relative;\n white-space: nowrap;\n padding: 6px 1em;\n background-color: #182230;\n background-color: var(--tab, #182230);\n}\n.tab-switcher .tab, .tab-switcher .tab:active .tab-icon {\n color: #b9b9ba;\n color: var(--tabText, #b9b9ba);\n}\n.tab-switcher .tab:not(.active) {\n z-index: 4;\n}\n.tab-switcher .tab:not(.active):hover {\n z-index: 6;\n}\n.tab-switcher .tab.active {\n background: transparent;\n z-index: 5;\n color: #b9b9ba;\n color: var(--tabActiveText, #b9b9ba);\n}\n.tab-switcher .tab img {\n max-height: 26px;\n vertical-align: top;\n margin-top: -5px;\n}\n.tab-switcher .tabs {\n display: -ms-flexbox;\n display: flex;\n position: relative;\n box-sizing: border-box;\n}\n.tab-switcher .tabs::after, .tab-switcher .tabs::before {\n display: block;\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n}\n.tab-switcher .tab-wrapper {\n position: relative;\n display: -ms-flexbox;\n display: flex;\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n}\n.tab-switcher .tab-wrapper:not(.active)::after {\n content: \"\";\n position: absolute;\n z-index: 7;\n}\n.tab-switcher .mobile-label {\n padding-left: 0.3em;\n padding-bottom: 0.25em;\n margin-top: 0.5em;\n margin-left: 0.2em;\n margin-bottom: 0.25em;\n border-bottom: 1px solid var(--border, #222);\n}\n@media all and (min-width: 800px) {\n .tab-switcher .mobile-label {\n display: none;\n }\n}",".with-load-more-footer {\n padding: 10px;\n text-align: center;\n border-top: 1px solid;\n border-top-color: #222;\n border-top-color: var(--border, #222);\n}\n.with-load-more-footer .error {\n font-size: 14px;\n}\n.with-load-more-footer a {\n cursor: pointer;\n}"],"sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/css/app.9a4c5ede37b2f0230836.css b/priv/static/static/css/app.9a4c5ede37b2f0230836.css deleted file mode 100644 index 22b9fdbe7..000000000 Binary files a/priv/static/static/css/app.9a4c5ede37b2f0230836.css and /dev/null differ diff --git a/priv/static/static/css/app.9a4c5ede37b2f0230836.css.map b/priv/static/static/css/app.9a4c5ede37b2f0230836.css.map deleted file mode 100644 index f54bd9ee6..000000000 --- a/priv/static/static/css/app.9a4c5ede37b2f0230836.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///./src/components/tab_switcher/tab_switcher.scss","webpack:///./src/hocs/with_load_more/with_load_more.scss"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,C;ACtOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,C","file":"static/css/app.9a4c5ede37b2f0230836.css","sourcesContent":[".tab-switcher {\n display: -ms-flexbox;\n display: flex;\n}\n.tab-switcher .tab-icon {\n margin: 0.2em auto;\n display: block;\n}\n.tab-switcher.top-tabs {\n -ms-flex-direction: column;\n flex-direction: column;\n}\n.tab-switcher.top-tabs > .tabs {\n width: 100%;\n overflow-y: hidden;\n overflow-x: auto;\n padding-top: 5px;\n -ms-flex-direction: row;\n flex-direction: row;\n}\n.tab-switcher.top-tabs > .tabs::after, .tab-switcher.top-tabs > .tabs::before {\n content: \"\";\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n border-bottom: 1px solid;\n border-bottom-color: #222;\n border-bottom-color: var(--border, #222);\n}\n.tab-switcher.top-tabs > .tabs .tab-wrapper {\n height: 28px;\n}\n.tab-switcher.top-tabs > .tabs .tab-wrapper:not(.active)::after {\n left: 0;\n right: 0;\n bottom: 0;\n border-bottom: 1px solid;\n border-bottom-color: #222;\n border-bottom-color: var(--border, #222);\n}\n.tab-switcher.top-tabs > .tabs .tab {\n width: 100%;\n min-width: 1px;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n padding-bottom: 99px;\n margin-bottom: -93px;\n}\n.tab-switcher.top-tabs .contents.scrollable-tabs {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n}\n.tab-switcher.side-tabs {\n -ms-flex-direction: row;\n flex-direction: row;\n}\n@media all and (max-width: 800px) {\n .tab-switcher.side-tabs {\n overflow-x: auto;\n }\n}\n.tab-switcher.side-tabs > .contents {\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n}\n.tab-switcher.side-tabs > .tabs {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n overflow-y: auto;\n overflow-x: hidden;\n -ms-flex-direction: column;\n flex-direction: column;\n}\n.tab-switcher.side-tabs > .tabs::after, .tab-switcher.side-tabs > .tabs::before {\n -ms-flex-negative: 0;\n flex-shrink: 0;\n -ms-flex-preferred-size: 0.5em;\n flex-basis: 0.5em;\n content: \"\";\n border-right: 1px solid;\n border-right-color: #222;\n border-right-color: var(--border, #222);\n}\n.tab-switcher.side-tabs > .tabs::after {\n -ms-flex-positive: 1;\n flex-grow: 1;\n}\n.tab-switcher.side-tabs > .tabs::before {\n -ms-flex-positive: 0;\n flex-grow: 0;\n}\n.tab-switcher.side-tabs > .tabs .tab-wrapper {\n min-width: 10em;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n}\n@media all and (max-width: 800px) {\n .tab-switcher.side-tabs > .tabs .tab-wrapper {\n min-width: 4em;\n }\n}\n.tab-switcher.side-tabs > .tabs .tab-wrapper:not(.active)::after {\n top: 0;\n right: 0;\n bottom: 0;\n border-right: 1px solid;\n border-right-color: #222;\n border-right-color: var(--border, #222);\n}\n.tab-switcher.side-tabs > .tabs .tab-wrapper::before {\n -ms-flex: 0 0 6px;\n flex: 0 0 6px;\n content: \"\";\n border-right: 1px solid;\n border-right-color: #222;\n border-right-color: var(--border, #222);\n}\n.tab-switcher.side-tabs > .tabs .tab-wrapper:last-child .tab {\n margin-bottom: 0;\n}\n.tab-switcher.side-tabs > .tabs .tab {\n -ms-flex: 1;\n flex: 1;\n box-sizing: content-box;\n min-width: 10em;\n min-width: 1px;\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n padding-left: 1em;\n padding-right: calc(1em + 200px);\n margin-right: -200px;\n margin-left: 1em;\n}\n@media all and (max-width: 800px) {\n .tab-switcher.side-tabs > .tabs .tab {\n padding-left: 0.25em;\n padding-right: calc(.25em + 200px);\n margin-right: calc(.25em - 200px);\n margin-left: 0.25em;\n }\n .tab-switcher.side-tabs > .tabs .tab .text {\n display: none;\n }\n}\n.tab-switcher .contents {\n -ms-flex: 1 0 auto;\n flex: 1 0 auto;\n min-height: 0px;\n}\n.tab-switcher .contents .hidden {\n display: none;\n}\n.tab-switcher .contents .full-height:not(.hidden) {\n height: 100%;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n}\n.tab-switcher .contents .full-height:not(.hidden) > *:not(.mobile-label) {\n -ms-flex: 1;\n flex: 1;\n}\n.tab-switcher .contents.scrollable-tabs {\n overflow-y: auto;\n}\n.tab-switcher .tab {\n position: relative;\n white-space: nowrap;\n padding: 6px 1em;\n background-color: #182230;\n background-color: var(--tab, #182230);\n}\n.tab-switcher .tab, .tab-switcher .tab:active .tab-icon {\n color: #b9b9ba;\n color: var(--tabText, #b9b9ba);\n}\n.tab-switcher .tab:not(.active) {\n z-index: 4;\n}\n.tab-switcher .tab:not(.active):hover {\n z-index: 6;\n}\n.tab-switcher .tab.active {\n background: transparent;\n z-index: 5;\n color: #b9b9ba;\n color: var(--tabActiveText, #b9b9ba);\n}\n.tab-switcher .tab img {\n max-height: 26px;\n vertical-align: top;\n margin-top: -5px;\n}\n.tab-switcher .tabs {\n display: -ms-flexbox;\n display: flex;\n position: relative;\n box-sizing: border-box;\n}\n.tab-switcher .tabs::after, .tab-switcher .tabs::before {\n display: block;\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n}\n.tab-switcher .tab-wrapper {\n position: relative;\n display: -ms-flexbox;\n display: flex;\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n}\n.tab-switcher .tab-wrapper:not(.active)::after {\n content: \"\";\n position: absolute;\n z-index: 7;\n}\n.tab-switcher .mobile-label {\n padding-left: 0.3em;\n padding-bottom: 0.25em;\n margin-top: 0.5em;\n margin-left: 0.2em;\n margin-bottom: 0.25em;\n border-bottom: 1px solid var(--border, #222);\n}\n@media all and (min-width: 800px) {\n .tab-switcher .mobile-label {\n display: none;\n }\n}",".with-load-more-footer {\n padding: 10px;\n text-align: center;\n border-top: 1px solid;\n border-top-color: #222;\n border-top-color: var(--border, #222);\n}\n.with-load-more-footer .error {\n font-size: 14px;\n}\n.with-load-more-footer a {\n cursor: pointer;\n}"],"sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/10.02ffbc25214f297f720f.js b/priv/static/static/js/10.02ffbc25214f297f720f.js new file mode 100644 index 000000000..fbe426710 Binary files /dev/null and b/priv/static/static/js/10.02ffbc25214f297f720f.js differ diff --git a/priv/static/static/js/10.02ffbc25214f297f720f.js.map b/priv/static/static/js/10.02ffbc25214f297f720f.js.map new file mode 100644 index 000000000..6b230613d Binary files /dev/null and b/priv/static/static/js/10.02ffbc25214f297f720f.js.map differ diff --git a/priv/static/static/js/10.fdbf093cc5602ca4f2e1.js b/priv/static/static/js/10.fdbf093cc5602ca4f2e1.js deleted file mode 100644 index 966332053..000000000 Binary files a/priv/static/static/js/10.fdbf093cc5602ca4f2e1.js and /dev/null differ diff --git a/priv/static/static/js/10.fdbf093cc5602ca4f2e1.js.map b/priv/static/static/js/10.fdbf093cc5602ca4f2e1.js.map deleted file mode 100644 index 978f9e54d..000000000 Binary files a/priv/static/static/js/10.fdbf093cc5602ca4f2e1.js.map and /dev/null differ diff --git a/priv/static/static/js/11.7b11fd75fe61d6e10ac6.js b/priv/static/static/js/11.7b11fd75fe61d6e10ac6.js deleted file mode 100644 index 2e39538d0..000000000 Binary files a/priv/static/static/js/11.7b11fd75fe61d6e10ac6.js and /dev/null differ diff --git a/priv/static/static/js/11.7b11fd75fe61d6e10ac6.js.map b/priv/static/static/js/11.7b11fd75fe61d6e10ac6.js.map deleted file mode 100644 index f5b9efef8..000000000 Binary files a/priv/static/static/js/11.7b11fd75fe61d6e10ac6.js.map and /dev/null differ diff --git a/priv/static/static/js/11.c173c6036fb3af5581b3.js b/priv/static/static/js/11.c173c6036fb3af5581b3.js new file mode 100644 index 000000000..b693d4c53 Binary files /dev/null and b/priv/static/static/js/11.c173c6036fb3af5581b3.js differ diff --git a/priv/static/static/js/11.c173c6036fb3af5581b3.js.map b/priv/static/static/js/11.c173c6036fb3af5581b3.js.map new file mode 100644 index 000000000..6fc07fd8a Binary files /dev/null and b/priv/static/static/js/11.c173c6036fb3af5581b3.js.map differ diff --git a/priv/static/static/js/12.5ca41e245bb40263bc7f.js b/priv/static/static/js/12.5ca41e245bb40263bc7f.js new file mode 100644 index 000000000..a22fcc522 Binary files /dev/null and b/priv/static/static/js/12.5ca41e245bb40263bc7f.js differ diff --git a/priv/static/static/js/12.5ca41e245bb40263bc7f.js.map b/priv/static/static/js/12.5ca41e245bb40263bc7f.js.map new file mode 100644 index 000000000..762172484 Binary files /dev/null and b/priv/static/static/js/12.5ca41e245bb40263bc7f.js.map differ diff --git a/priv/static/static/js/12.a3dc3473565ec07a88c2.js b/priv/static/static/js/12.a3dc3473565ec07a88c2.js deleted file mode 100644 index ad6414e72..000000000 Binary files a/priv/static/static/js/12.a3dc3473565ec07a88c2.js and /dev/null differ diff --git a/priv/static/static/js/12.a3dc3473565ec07a88c2.js.map b/priv/static/static/js/12.a3dc3473565ec07a88c2.js.map deleted file mode 100644 index 7b8fe89ac..000000000 Binary files a/priv/static/static/js/12.a3dc3473565ec07a88c2.js.map and /dev/null differ diff --git a/priv/static/static/js/13.99621e6c47936075b44d.js b/priv/static/static/js/13.99621e6c47936075b44d.js new file mode 100644 index 000000000..ef26b927b Binary files /dev/null and b/priv/static/static/js/13.99621e6c47936075b44d.js differ diff --git a/priv/static/static/js/13.99621e6c47936075b44d.js.map b/priv/static/static/js/13.99621e6c47936075b44d.js.map new file mode 100644 index 000000000..eb79bff03 Binary files /dev/null and b/priv/static/static/js/13.99621e6c47936075b44d.js.map differ diff --git a/priv/static/static/js/13.cdc076533397e24391bc.js b/priv/static/static/js/13.cdc076533397e24391bc.js deleted file mode 100644 index 6819297a8..000000000 Binary files a/priv/static/static/js/13.cdc076533397e24391bc.js and /dev/null differ diff --git a/priv/static/static/js/13.cdc076533397e24391bc.js.map b/priv/static/static/js/13.cdc076533397e24391bc.js.map deleted file mode 100644 index 19b1f31f8..000000000 Binary files a/priv/static/static/js/13.cdc076533397e24391bc.js.map and /dev/null differ diff --git a/priv/static/static/js/14.4e05e7c284119777ecc5.js b/priv/static/static/js/14.4e05e7c284119777ecc5.js new file mode 100644 index 000000000..6f5728bf6 Binary files /dev/null and b/priv/static/static/js/14.4e05e7c284119777ecc5.js differ diff --git a/priv/static/static/js/14.4e05e7c284119777ecc5.js.map b/priv/static/static/js/14.4e05e7c284119777ecc5.js.map new file mode 100644 index 000000000..d219c6115 Binary files /dev/null and b/priv/static/static/js/14.4e05e7c284119777ecc5.js.map differ diff --git a/priv/static/static/js/14.a2b9acaf9caa95d1fd7f.js b/priv/static/static/js/14.a2b9acaf9caa95d1fd7f.js deleted file mode 100644 index 9111373a2..000000000 Binary files a/priv/static/static/js/14.a2b9acaf9caa95d1fd7f.js and /dev/null differ diff --git a/priv/static/static/js/14.a2b9acaf9caa95d1fd7f.js.map b/priv/static/static/js/14.a2b9acaf9caa95d1fd7f.js.map deleted file mode 100644 index c1a2c983f..000000000 Binary files a/priv/static/static/js/14.a2b9acaf9caa95d1fd7f.js.map and /dev/null differ diff --git a/priv/static/static/js/15.23f179cc3adc903bb537.js b/priv/static/static/js/15.23f179cc3adc903bb537.js new file mode 100644 index 000000000..d87608e34 Binary files /dev/null and b/priv/static/static/js/15.23f179cc3adc903bb537.js differ diff --git a/priv/static/static/js/15.23f179cc3adc903bb537.js.map b/priv/static/static/js/15.23f179cc3adc903bb537.js.map new file mode 100644 index 000000000..15811ea18 Binary files /dev/null and b/priv/static/static/js/15.23f179cc3adc903bb537.js.map differ diff --git a/priv/static/static/js/15.fe4e76f27cc478289a42.js b/priv/static/static/js/15.fe4e76f27cc478289a42.js deleted file mode 100644 index 3005c67b3..000000000 Binary files a/priv/static/static/js/15.fe4e76f27cc478289a42.js and /dev/null differ diff --git a/priv/static/static/js/15.fe4e76f27cc478289a42.js.map b/priv/static/static/js/15.fe4e76f27cc478289a42.js.map deleted file mode 100644 index 7177387b7..000000000 Binary files a/priv/static/static/js/15.fe4e76f27cc478289a42.js.map and /dev/null differ diff --git a/priv/static/static/js/16.43dd2c64dcb160dd96a6.js b/priv/static/static/js/16.43dd2c64dcb160dd96a6.js new file mode 100644 index 000000000..abed0132f Binary files /dev/null and b/priv/static/static/js/16.43dd2c64dcb160dd96a6.js differ diff --git a/priv/static/static/js/16.43dd2c64dcb160dd96a6.js.map b/priv/static/static/js/16.43dd2c64dcb160dd96a6.js.map new file mode 100644 index 000000000..20ab38e81 Binary files /dev/null and b/priv/static/static/js/16.43dd2c64dcb160dd96a6.js.map differ diff --git a/priv/static/static/js/16.90b5ee380da41d6d061c.js b/priv/static/static/js/16.90b5ee380da41d6d061c.js deleted file mode 100644 index f3a4fadd4..000000000 Binary files a/priv/static/static/js/16.90b5ee380da41d6d061c.js and /dev/null differ diff --git a/priv/static/static/js/16.90b5ee380da41d6d061c.js.map b/priv/static/static/js/16.90b5ee380da41d6d061c.js.map deleted file mode 100644 index f69273c5c..000000000 Binary files a/priv/static/static/js/16.90b5ee380da41d6d061c.js.map and /dev/null differ diff --git a/priv/static/static/js/17.c5a6513076aa9c5a9564.js b/priv/static/static/js/17.c5a6513076aa9c5a9564.js deleted file mode 100644 index 74c623294..000000000 Binary files a/priv/static/static/js/17.c5a6513076aa9c5a9564.js and /dev/null differ diff --git a/priv/static/static/js/17.c5a6513076aa9c5a9564.js.map b/priv/static/static/js/17.c5a6513076aa9c5a9564.js.map deleted file mode 100644 index f2ac5ef45..000000000 Binary files a/priv/static/static/js/17.c5a6513076aa9c5a9564.js.map and /dev/null differ diff --git a/priv/static/static/js/17.d1deeeb81b7cab98b068.js b/priv/static/static/js/17.d1deeeb81b7cab98b068.js new file mode 100644 index 000000000..519a6e2bd Binary files /dev/null and b/priv/static/static/js/17.d1deeeb81b7cab98b068.js differ diff --git a/priv/static/static/js/17.d1deeeb81b7cab98b068.js.map b/priv/static/static/js/17.d1deeeb81b7cab98b068.js.map new file mode 100644 index 000000000..156fad930 Binary files /dev/null and b/priv/static/static/js/17.d1deeeb81b7cab98b068.js.map differ diff --git a/priv/static/static/js/18.a4d5b399e228a6a45a7b.js b/priv/static/static/js/18.a4d5b399e228a6a45a7b.js new file mode 100644 index 000000000..1b17be977 Binary files /dev/null and b/priv/static/static/js/18.a4d5b399e228a6a45a7b.js differ diff --git a/priv/static/static/js/18.a4d5b399e228a6a45a7b.js.map b/priv/static/static/js/18.a4d5b399e228a6a45a7b.js.map new file mode 100644 index 000000000..5e5264405 Binary files /dev/null and b/priv/static/static/js/18.a4d5b399e228a6a45a7b.js.map differ diff --git a/priv/static/static/js/18.ffde79cfe78615dbb020.js b/priv/static/static/js/18.ffde79cfe78615dbb020.js deleted file mode 100644 index 7dab8a63d..000000000 Binary files a/priv/static/static/js/18.ffde79cfe78615dbb020.js and /dev/null differ diff --git a/priv/static/static/js/18.ffde79cfe78615dbb020.js.map b/priv/static/static/js/18.ffde79cfe78615dbb020.js.map deleted file mode 100644 index 21c9fcc95..000000000 Binary files a/priv/static/static/js/18.ffde79cfe78615dbb020.js.map and /dev/null differ diff --git a/priv/static/static/js/19.c031807287d659bd841d.js b/priv/static/static/js/19.c031807287d659bd841d.js deleted file mode 100644 index 8664e0814..000000000 Binary files a/priv/static/static/js/19.c031807287d659bd841d.js and /dev/null differ diff --git a/priv/static/static/js/19.c031807287d659bd841d.js.map b/priv/static/static/js/19.c031807287d659bd841d.js.map deleted file mode 100644 index 4a5527aae..000000000 Binary files a/priv/static/static/js/19.c031807287d659bd841d.js.map and /dev/null differ diff --git a/priv/static/static/js/19.e513835c3274271258fa.js b/priv/static/static/js/19.e513835c3274271258fa.js new file mode 100644 index 000000000..1a4c2d230 Binary files /dev/null and b/priv/static/static/js/19.e513835c3274271258fa.js differ diff --git a/priv/static/static/js/19.e513835c3274271258fa.js.map b/priv/static/static/js/19.e513835c3274271258fa.js.map new file mode 100644 index 000000000..d92c8eeac Binary files /dev/null and b/priv/static/static/js/19.e513835c3274271258fa.js.map differ diff --git a/priv/static/static/js/2.5f3ceb7bdf08fadacf00.js b/priv/static/static/js/2.5f3ceb7bdf08fadacf00.js deleted file mode 100644 index 31ef2f0ac..000000000 Binary files a/priv/static/static/js/2.5f3ceb7bdf08fadacf00.js and /dev/null differ diff --git a/priv/static/static/js/2.5f3ceb7bdf08fadacf00.js.map b/priv/static/static/js/2.5f3ceb7bdf08fadacf00.js.map deleted file mode 100644 index 06d872608..000000000 Binary files a/priv/static/static/js/2.5f3ceb7bdf08fadacf00.js.map and /dev/null differ diff --git a/priv/static/static/js/2.fec2056b00b4fa3921ba.js b/priv/static/static/js/2.fec2056b00b4fa3921ba.js new file mode 100644 index 000000000..483720e2f Binary files /dev/null and b/priv/static/static/js/2.fec2056b00b4fa3921ba.js differ diff --git a/priv/static/static/js/2.fec2056b00b4fa3921ba.js.map b/priv/static/static/js/2.fec2056b00b4fa3921ba.js.map new file mode 100644 index 000000000..31d328177 Binary files /dev/null and b/priv/static/static/js/2.fec2056b00b4fa3921ba.js.map differ diff --git a/priv/static/static/js/20.683b112f4dcea887f707.js b/priv/static/static/js/20.683b112f4dcea887f707.js new file mode 100644 index 000000000..726530149 Binary files /dev/null and b/priv/static/static/js/20.683b112f4dcea887f707.js differ diff --git a/priv/static/static/js/20.683b112f4dcea887f707.js.map b/priv/static/static/js/20.683b112f4dcea887f707.js.map new file mode 100644 index 000000000..094f913db Binary files /dev/null and b/priv/static/static/js/20.683b112f4dcea887f707.js.map differ diff --git a/priv/static/static/js/20.abb0d332055536a87c38.js b/priv/static/static/js/20.abb0d332055536a87c38.js deleted file mode 100644 index 2d92fdfbd..000000000 Binary files a/priv/static/static/js/20.abb0d332055536a87c38.js and /dev/null differ diff --git a/priv/static/static/js/20.abb0d332055536a87c38.js.map b/priv/static/static/js/20.abb0d332055536a87c38.js.map deleted file mode 100644 index 55c20779e..000000000 Binary files a/priv/static/static/js/20.abb0d332055536a87c38.js.map and /dev/null differ diff --git a/priv/static/static/js/21.6e952388ef8d5a0276dc.js b/priv/static/static/js/21.6e952388ef8d5a0276dc.js deleted file mode 100644 index 27ab1f65e..000000000 Binary files a/priv/static/static/js/21.6e952388ef8d5a0276dc.js and /dev/null differ diff --git a/priv/static/static/js/21.6e952388ef8d5a0276dc.js.map b/priv/static/static/js/21.6e952388ef8d5a0276dc.js.map deleted file mode 100644 index 22d29b80c..000000000 Binary files a/priv/static/static/js/21.6e952388ef8d5a0276dc.js.map and /dev/null differ diff --git a/priv/static/static/js/21.b2844ccdcfc3c8191e8e.js b/priv/static/static/js/21.b2844ccdcfc3c8191e8e.js new file mode 100644 index 000000000..c363a2197 Binary files /dev/null and b/priv/static/static/js/21.b2844ccdcfc3c8191e8e.js differ diff --git a/priv/static/static/js/21.b2844ccdcfc3c8191e8e.js.map b/priv/static/static/js/21.b2844ccdcfc3c8191e8e.js.map new file mode 100644 index 000000000..b5b25eb31 Binary files /dev/null and b/priv/static/static/js/21.b2844ccdcfc3c8191e8e.js.map differ diff --git a/priv/static/static/js/22.68c0a771d79e3383f5e8.js b/priv/static/static/js/22.68c0a771d79e3383f5e8.js new file mode 100644 index 000000000..f982b241b Binary files /dev/null and b/priv/static/static/js/22.68c0a771d79e3383f5e8.js differ diff --git a/priv/static/static/js/22.68c0a771d79e3383f5e8.js.map b/priv/static/static/js/22.68c0a771d79e3383f5e8.js.map new file mode 100644 index 000000000..10a44dd2e Binary files /dev/null and b/priv/static/static/js/22.68c0a771d79e3383f5e8.js.map differ diff --git a/priv/static/static/js/22.dbc79965f66b0bb62d88.js b/priv/static/static/js/22.dbc79965f66b0bb62d88.js deleted file mode 100644 index 88a0e51b5..000000000 Binary files a/priv/static/static/js/22.dbc79965f66b0bb62d88.js and /dev/null differ diff --git a/priv/static/static/js/22.dbc79965f66b0bb62d88.js.map b/priv/static/static/js/22.dbc79965f66b0bb62d88.js.map deleted file mode 100644 index a43e0a6b4..000000000 Binary files a/priv/static/static/js/22.dbc79965f66b0bb62d88.js.map and /dev/null differ diff --git a/priv/static/static/js/23.0b6cdf4c9dc52c4291c0.js b/priv/static/static/js/23.0b6cdf4c9dc52c4291c0.js new file mode 100644 index 000000000..3d6701989 Binary files /dev/null and b/priv/static/static/js/23.0b6cdf4c9dc52c4291c0.js differ diff --git a/priv/static/static/js/23.0b6cdf4c9dc52c4291c0.js.map b/priv/static/static/js/23.0b6cdf4c9dc52c4291c0.js.map new file mode 100644 index 000000000..f5200b9dc Binary files /dev/null and b/priv/static/static/js/23.0b6cdf4c9dc52c4291c0.js.map differ diff --git a/priv/static/static/js/23.4addb03e0862c780c55f.js b/priv/static/static/js/23.4addb03e0862c780c55f.js deleted file mode 100644 index 40d2fb0b3..000000000 Binary files a/priv/static/static/js/23.4addb03e0862c780c55f.js and /dev/null differ diff --git a/priv/static/static/js/23.4addb03e0862c780c55f.js.map b/priv/static/static/js/23.4addb03e0862c780c55f.js.map deleted file mode 100644 index 3ab3410ee..000000000 Binary files a/priv/static/static/js/23.4addb03e0862c780c55f.js.map and /dev/null differ diff --git a/priv/static/static/js/24.5cfb87799bd882b933dd.js b/priv/static/static/js/24.5cfb87799bd882b933dd.js new file mode 100644 index 000000000..811c4fa52 Binary files /dev/null and b/priv/static/static/js/24.5cfb87799bd882b933dd.js differ diff --git a/priv/static/static/js/24.5cfb87799bd882b933dd.js.map b/priv/static/static/js/24.5cfb87799bd882b933dd.js.map new file mode 100644 index 000000000..c03306f8a Binary files /dev/null and b/priv/static/static/js/24.5cfb87799bd882b933dd.js.map differ diff --git a/priv/static/static/js/24.e4b623be1780a14a6168.js b/priv/static/static/js/24.e4b623be1780a14a6168.js deleted file mode 100644 index eadbce6d5..000000000 Binary files a/priv/static/static/js/24.e4b623be1780a14a6168.js and /dev/null differ diff --git a/priv/static/static/js/24.e4b623be1780a14a6168.js.map b/priv/static/static/js/24.e4b623be1780a14a6168.js.map deleted file mode 100644 index 5a1291203..000000000 Binary files a/priv/static/static/js/24.e4b623be1780a14a6168.js.map and /dev/null differ diff --git a/priv/static/static/js/25.34eeae0070f7f1eb6843.js b/priv/static/static/js/25.34eeae0070f7f1eb6843.js deleted file mode 100644 index 92130ae8e..000000000 Binary files a/priv/static/static/js/25.34eeae0070f7f1eb6843.js and /dev/null differ diff --git a/priv/static/static/js/25.34eeae0070f7f1eb6843.js.map b/priv/static/static/js/25.34eeae0070f7f1eb6843.js.map deleted file mode 100644 index 2af21b09b..000000000 Binary files a/priv/static/static/js/25.34eeae0070f7f1eb6843.js.map and /dev/null differ diff --git a/priv/static/static/js/25.8185e4d775cea9fe47e1.js b/priv/static/static/js/25.8185e4d775cea9fe47e1.js new file mode 100644 index 000000000..ca0e22957 Binary files /dev/null and b/priv/static/static/js/25.8185e4d775cea9fe47e1.js differ diff --git a/priv/static/static/js/25.8185e4d775cea9fe47e1.js.map b/priv/static/static/js/25.8185e4d775cea9fe47e1.js.map new file mode 100644 index 000000000..d559ea56b Binary files /dev/null and b/priv/static/static/js/25.8185e4d775cea9fe47e1.js.map differ diff --git a/priv/static/static/js/26.34ec129dd8f860ce4a8e.js b/priv/static/static/js/26.34ec129dd8f860ce4a8e.js new file mode 100644 index 000000000..797021577 Binary files /dev/null and b/priv/static/static/js/26.34ec129dd8f860ce4a8e.js differ diff --git a/priv/static/static/js/26.34ec129dd8f860ce4a8e.js.map b/priv/static/static/js/26.34ec129dd8f860ce4a8e.js.map new file mode 100644 index 000000000..abff4e927 Binary files /dev/null and b/priv/static/static/js/26.34ec129dd8f860ce4a8e.js.map differ diff --git a/priv/static/static/js/26.bd86a0d958de2bb3905a.js b/priv/static/static/js/26.bd86a0d958de2bb3905a.js deleted file mode 100644 index 64c5db6ed..000000000 Binary files a/priv/static/static/js/26.bd86a0d958de2bb3905a.js and /dev/null differ diff --git a/priv/static/static/js/26.bd86a0d958de2bb3905a.js.map b/priv/static/static/js/26.bd86a0d958de2bb3905a.js.map deleted file mode 100644 index a2e972c31..000000000 Binary files a/priv/static/static/js/26.bd86a0d958de2bb3905a.js.map and /dev/null differ diff --git a/priv/static/static/js/27.0f4a5145681cfb5a896e.js b/priv/static/static/js/27.0f4a5145681cfb5a896e.js new file mode 100644 index 000000000..5df92f6ad Binary files /dev/null and b/priv/static/static/js/27.0f4a5145681cfb5a896e.js differ diff --git a/priv/static/static/js/27.0f4a5145681cfb5a896e.js.map b/priv/static/static/js/27.0f4a5145681cfb5a896e.js.map new file mode 100644 index 000000000..da741bf41 Binary files /dev/null and b/priv/static/static/js/27.0f4a5145681cfb5a896e.js.map differ diff --git a/priv/static/static/js/27.7d4ab8716762d6f57135.js b/priv/static/static/js/27.7d4ab8716762d6f57135.js deleted file mode 100644 index 95a37be1f..000000000 Binary files a/priv/static/static/js/27.7d4ab8716762d6f57135.js and /dev/null differ diff --git a/priv/static/static/js/27.7d4ab8716762d6f57135.js.map b/priv/static/static/js/27.7d4ab8716762d6f57135.js.map deleted file mode 100644 index b9b2aa6e1..000000000 Binary files a/priv/static/static/js/27.7d4ab8716762d6f57135.js.map and /dev/null differ diff --git a/priv/static/static/js/28.75c01cd71372c39d5af8.js b/priv/static/static/js/28.75c01cd71372c39d5af8.js new file mode 100644 index 000000000..63067ea18 Binary files /dev/null and b/priv/static/static/js/28.75c01cd71372c39d5af8.js differ diff --git a/priv/static/static/js/28.75c01cd71372c39d5af8.js.map b/priv/static/static/js/28.75c01cd71372c39d5af8.js.map new file mode 100644 index 000000000..4b21e788e Binary files /dev/null and b/priv/static/static/js/28.75c01cd71372c39d5af8.js.map differ diff --git a/priv/static/static/js/28.a88999ebb3f7ec930aad.js b/priv/static/static/js/28.a88999ebb3f7ec930aad.js deleted file mode 100644 index 423aebca9..000000000 Binary files a/priv/static/static/js/28.a88999ebb3f7ec930aad.js and /dev/null differ diff --git a/priv/static/static/js/28.a88999ebb3f7ec930aad.js.map b/priv/static/static/js/28.a88999ebb3f7ec930aad.js.map deleted file mode 100644 index d67ecaec2..000000000 Binary files a/priv/static/static/js/28.a88999ebb3f7ec930aad.js.map and /dev/null differ diff --git a/priv/static/static/js/29.519f681d194c212ae75f.js b/priv/static/static/js/29.519f681d194c212ae75f.js deleted file mode 100644 index aa2571733..000000000 Binary files a/priv/static/static/js/29.519f681d194c212ae75f.js and /dev/null differ diff --git a/priv/static/static/js/29.519f681d194c212ae75f.js.map b/priv/static/static/js/29.519f681d194c212ae75f.js.map deleted file mode 100644 index e9c22ff88..000000000 Binary files a/priv/static/static/js/29.519f681d194c212ae75f.js.map and /dev/null differ diff --git a/priv/static/static/js/29.b53cf1f3bcece005d78a.js b/priv/static/static/js/29.b53cf1f3bcece005d78a.js new file mode 100644 index 000000000..3b357be95 Binary files /dev/null and b/priv/static/static/js/29.b53cf1f3bcece005d78a.js differ diff --git a/priv/static/static/js/29.b53cf1f3bcece005d78a.js.map b/priv/static/static/js/29.b53cf1f3bcece005d78a.js.map new file mode 100644 index 000000000..f3d6781f8 Binary files /dev/null and b/priv/static/static/js/29.b53cf1f3bcece005d78a.js.map differ diff --git a/priv/static/static/js/3.6c8e014d70907359ad5a.js b/priv/static/static/js/3.6c8e014d70907359ad5a.js deleted file mode 100644 index 8c925ea7c..000000000 Binary files a/priv/static/static/js/3.6c8e014d70907359ad5a.js and /dev/null differ diff --git a/priv/static/static/js/3.6c8e014d70907359ad5a.js.map b/priv/static/static/js/3.6c8e014d70907359ad5a.js.map deleted file mode 100644 index 81ea16cd3..000000000 Binary files a/priv/static/static/js/3.6c8e014d70907359ad5a.js.map and /dev/null differ diff --git a/priv/static/static/js/3.bde677e65143f0cd1105.js b/priv/static/static/js/3.bde677e65143f0cd1105.js new file mode 100644 index 000000000..4bea37abd Binary files /dev/null and b/priv/static/static/js/3.bde677e65143f0cd1105.js differ diff --git a/priv/static/static/js/3.bde677e65143f0cd1105.js.map b/priv/static/static/js/3.bde677e65143f0cd1105.js.map new file mode 100644 index 000000000..06d4fc3d0 Binary files /dev/null and b/priv/static/static/js/3.bde677e65143f0cd1105.js.map differ diff --git a/priv/static/static/js/30.064c236fa83ac21c252f.js b/priv/static/static/js/30.064c236fa83ac21c252f.js new file mode 100644 index 000000000..40d81fbfd Binary files /dev/null and b/priv/static/static/js/30.064c236fa83ac21c252f.js differ diff --git a/priv/static/static/js/30.064c236fa83ac21c252f.js.map b/priv/static/static/js/30.064c236fa83ac21c252f.js.map new file mode 100644 index 000000000..4d0d88ca9 Binary files /dev/null and b/priv/static/static/js/30.064c236fa83ac21c252f.js.map differ diff --git a/priv/static/static/js/30.d29cd76b0781bb654f87.js b/priv/static/static/js/30.d29cd76b0781bb654f87.js deleted file mode 100644 index f681595c7..000000000 Binary files a/priv/static/static/js/30.d29cd76b0781bb654f87.js and /dev/null differ diff --git a/priv/static/static/js/30.d29cd76b0781bb654f87.js.map b/priv/static/static/js/30.d29cd76b0781bb654f87.js.map deleted file mode 100644 index dbf01dc8d..000000000 Binary files a/priv/static/static/js/30.d29cd76b0781bb654f87.js.map and /dev/null differ diff --git a/priv/static/static/js/31.15b545bb42e21d39c678.js b/priv/static/static/js/31.15b545bb42e21d39c678.js deleted file mode 100644 index 3c5d8089e..000000000 Binary files a/priv/static/static/js/31.15b545bb42e21d39c678.js and /dev/null differ diff --git a/priv/static/static/js/31.15b545bb42e21d39c678.js.map b/priv/static/static/js/31.15b545bb42e21d39c678.js.map deleted file mode 100644 index b56a26768..000000000 Binary files a/priv/static/static/js/31.15b545bb42e21d39c678.js.map and /dev/null differ diff --git a/priv/static/static/js/31.226f7a848d733df38095.js b/priv/static/static/js/31.226f7a848d733df38095.js new file mode 100644 index 000000000..48131f952 Binary files /dev/null and b/priv/static/static/js/31.226f7a848d733df38095.js differ diff --git a/priv/static/static/js/31.226f7a848d733df38095.js.map b/priv/static/static/js/31.226f7a848d733df38095.js.map new file mode 100644 index 000000000..3d85d770f Binary files /dev/null and b/priv/static/static/js/31.226f7a848d733df38095.js.map differ diff --git a/priv/static/static/js/32.19ca50edbb4d711838dc.js b/priv/static/static/js/32.19ca50edbb4d711838dc.js new file mode 100644 index 000000000..81bd5064f Binary files /dev/null and b/priv/static/static/js/32.19ca50edbb4d711838dc.js differ diff --git a/priv/static/static/js/32.19ca50edbb4d711838dc.js.map b/priv/static/static/js/32.19ca50edbb4d711838dc.js.map new file mode 100644 index 000000000..99ad6e050 Binary files /dev/null and b/priv/static/static/js/32.19ca50edbb4d711838dc.js.map differ diff --git a/priv/static/static/js/32.899035ede0115c5c0f99.js b/priv/static/static/js/32.899035ede0115c5c0f99.js deleted file mode 100644 index 6faf5ed33..000000000 Binary files a/priv/static/static/js/32.899035ede0115c5c0f99.js and /dev/null differ diff --git a/priv/static/static/js/32.899035ede0115c5c0f99.js.map b/priv/static/static/js/32.899035ede0115c5c0f99.js.map deleted file mode 100644 index 242f78de5..000000000 Binary files a/priv/static/static/js/32.899035ede0115c5c0f99.js.map and /dev/null differ diff --git a/priv/static/static/js/4.564b2a8cbfe4d5e93949.js b/priv/static/static/js/4.564b2a8cbfe4d5e93949.js deleted file mode 100644 index eb8241c90..000000000 Binary files a/priv/static/static/js/4.564b2a8cbfe4d5e93949.js and /dev/null differ diff --git a/priv/static/static/js/4.564b2a8cbfe4d5e93949.js.map b/priv/static/static/js/4.564b2a8cbfe4d5e93949.js.map deleted file mode 100644 index 2a235dac2..000000000 Binary files a/priv/static/static/js/4.564b2a8cbfe4d5e93949.js.map and /dev/null differ diff --git a/priv/static/static/js/4.7077bff64d63355b1635.js b/priv/static/static/js/4.7077bff64d63355b1635.js new file mode 100644 index 000000000..cb97d3855 Binary files /dev/null and b/priv/static/static/js/4.7077bff64d63355b1635.js differ diff --git a/priv/static/static/js/4.7077bff64d63355b1635.js.map b/priv/static/static/js/4.7077bff64d63355b1635.js.map new file mode 100644 index 000000000..83db836c8 Binary files /dev/null and b/priv/static/static/js/4.7077bff64d63355b1635.js.map differ diff --git a/priv/static/static/js/5.6024023b2804dafc6bcb.js b/priv/static/static/js/5.6024023b2804dafc6bcb.js deleted file mode 100644 index de5483b7c..000000000 Binary files a/priv/static/static/js/5.6024023b2804dafc6bcb.js and /dev/null differ diff --git a/priv/static/static/js/5.6024023b2804dafc6bcb.js.map b/priv/static/static/js/5.6024023b2804dafc6bcb.js.map deleted file mode 100644 index 921907b51..000000000 Binary files a/priv/static/static/js/5.6024023b2804dafc6bcb.js.map and /dev/null differ diff --git a/priv/static/static/js/5.cfb722ac8eea8919f749.js b/priv/static/static/js/5.cfb722ac8eea8919f749.js new file mode 100644 index 000000000..7d3bca163 Binary files /dev/null and b/priv/static/static/js/5.cfb722ac8eea8919f749.js differ diff --git a/priv/static/static/js/5.cfb722ac8eea8919f749.js.map b/priv/static/static/js/5.cfb722ac8eea8919f749.js.map new file mode 100644 index 000000000..c9e701dc6 Binary files /dev/null and b/priv/static/static/js/5.cfb722ac8eea8919f749.js.map differ diff --git a/priv/static/static/js/6.613b0d6b08c3f5f9ef13.js b/priv/static/static/js/6.613b0d6b08c3f5f9ef13.js new file mode 100644 index 000000000..499d71475 Binary files /dev/null and b/priv/static/static/js/6.613b0d6b08c3f5f9ef13.js differ diff --git a/priv/static/static/js/6.613b0d6b08c3f5f9ef13.js.map b/priv/static/static/js/6.613b0d6b08c3f5f9ef13.js.map new file mode 100644 index 000000000..8b78bd4b3 Binary files /dev/null and b/priv/static/static/js/6.613b0d6b08c3f5f9ef13.js.map differ diff --git a/priv/static/static/js/6.b0c7a2b19cc70c33dc1e.js b/priv/static/static/js/6.b0c7a2b19cc70c33dc1e.js deleted file mode 100644 index 133583967..000000000 Binary files a/priv/static/static/js/6.b0c7a2b19cc70c33dc1e.js and /dev/null differ diff --git a/priv/static/static/js/6.b0c7a2b19cc70c33dc1e.js.map b/priv/static/static/js/6.b0c7a2b19cc70c33dc1e.js.map deleted file mode 100644 index 962fe57bf..000000000 Binary files a/priv/static/static/js/6.b0c7a2b19cc70c33dc1e.js.map and /dev/null differ diff --git a/priv/static/static/js/7.199d52eb458f775043ed.js b/priv/static/static/js/7.199d52eb458f775043ed.js new file mode 100644 index 000000000..bf9015250 Binary files /dev/null and b/priv/static/static/js/7.199d52eb458f775043ed.js differ diff --git a/priv/static/static/js/7.199d52eb458f775043ed.js.map b/priv/static/static/js/7.199d52eb458f775043ed.js.map new file mode 100644 index 000000000..ad860f079 Binary files /dev/null and b/priv/static/static/js/7.199d52eb458f775043ed.js.map differ diff --git a/priv/static/static/js/7.4dbb03c6731e1c8190af.js b/priv/static/static/js/7.4dbb03c6731e1c8190af.js deleted file mode 100644 index c30fd4d53..000000000 Binary files a/priv/static/static/js/7.4dbb03c6731e1c8190af.js and /dev/null differ diff --git a/priv/static/static/js/7.4dbb03c6731e1c8190af.js.map b/priv/static/static/js/7.4dbb03c6731e1c8190af.js.map deleted file mode 100644 index f89bb6b78..000000000 Binary files a/priv/static/static/js/7.4dbb03c6731e1c8190af.js.map and /dev/null differ diff --git a/priv/static/static/js/8.7f96f22f9f65ad394684.js b/priv/static/static/js/8.7f96f22f9f65ad394684.js new file mode 100644 index 000000000..154e63437 Binary files /dev/null and b/priv/static/static/js/8.7f96f22f9f65ad394684.js differ diff --git a/priv/static/static/js/8.7f96f22f9f65ad394684.js.map b/priv/static/static/js/8.7f96f22f9f65ad394684.js.map new file mode 100644 index 000000000..74e510286 Binary files /dev/null and b/priv/static/static/js/8.7f96f22f9f65ad394684.js.map differ diff --git a/priv/static/static/js/8.d11ae57b3255a1c74681.js b/priv/static/static/js/8.d11ae57b3255a1c74681.js deleted file mode 100644 index 7da124f7e..000000000 Binary files a/priv/static/static/js/8.d11ae57b3255a1c74681.js and /dev/null differ diff --git a/priv/static/static/js/8.d11ae57b3255a1c74681.js.map b/priv/static/static/js/8.d11ae57b3255a1c74681.js.map deleted file mode 100644 index c874c5132..000000000 Binary files a/priv/static/static/js/8.d11ae57b3255a1c74681.js.map and /dev/null differ diff --git a/priv/static/static/js/9.80dc09c85f557dd2c96f.js b/priv/static/static/js/9.80dc09c85f557dd2c96f.js deleted file mode 100644 index 77b5edba9..000000000 Binary files a/priv/static/static/js/9.80dc09c85f557dd2c96f.js and /dev/null differ diff --git a/priv/static/static/js/9.80dc09c85f557dd2c96f.js.map b/priv/static/static/js/9.80dc09c85f557dd2c96f.js.map deleted file mode 100644 index 25360bcab..000000000 Binary files a/priv/static/static/js/9.80dc09c85f557dd2c96f.js.map and /dev/null differ diff --git a/priv/static/static/js/9.f8fc2497d5f27a9df682.js b/priv/static/static/js/9.f8fc2497d5f27a9df682.js new file mode 100644 index 000000000..c86ae4d9a Binary files /dev/null and b/priv/static/static/js/9.f8fc2497d5f27a9df682.js differ diff --git a/priv/static/static/js/9.f8fc2497d5f27a9df682.js.map b/priv/static/static/js/9.f8fc2497d5f27a9df682.js.map new file mode 100644 index 000000000..50ff032de Binary files /dev/null and b/priv/static/static/js/9.f8fc2497d5f27a9df682.js.map differ diff --git a/priv/static/static/js/app.6c972d84b60f601b01f8.js b/priv/static/static/js/app.6c972d84b60f601b01f8.js new file mode 100644 index 000000000..f00f10017 Binary files /dev/null and b/priv/static/static/js/app.6c972d84b60f601b01f8.js differ diff --git a/priv/static/static/js/app.6c972d84b60f601b01f8.js.map b/priv/static/static/js/app.6c972d84b60f601b01f8.js.map new file mode 100644 index 000000000..2e5c2bd67 Binary files /dev/null and b/priv/static/static/js/app.6c972d84b60f601b01f8.js.map differ diff --git a/priv/static/static/js/app.ce97bd1883ee9dd7b809.js b/priv/static/static/js/app.ce97bd1883ee9dd7b809.js deleted file mode 100644 index 01bdcff7a..000000000 Binary files a/priv/static/static/js/app.ce97bd1883ee9dd7b809.js and /dev/null differ diff --git a/priv/static/static/js/app.ce97bd1883ee9dd7b809.js.map b/priv/static/static/js/app.ce97bd1883ee9dd7b809.js.map deleted file mode 100644 index a2669d143..000000000 Binary files a/priv/static/static/js/app.ce97bd1883ee9dd7b809.js.map and /dev/null differ diff --git a/priv/static/static/js/vendors~app.cea10ab53f3aa19fc30e.js b/priv/static/static/js/vendors~app.cea10ab53f3aa19fc30e.js new file mode 100644 index 000000000..5ffbf5a2b Binary files /dev/null and b/priv/static/static/js/vendors~app.cea10ab53f3aa19fc30e.js differ diff --git a/priv/static/static/js/vendors~app.cea10ab53f3aa19fc30e.js.map b/priv/static/static/js/vendors~app.cea10ab53f3aa19fc30e.js.map new file mode 100644 index 000000000..cd09905ec Binary files /dev/null and b/priv/static/static/js/vendors~app.cea10ab53f3aa19fc30e.js.map differ diff --git a/priv/static/static/js/vendors~app.fb9ee54b02db0c974e51.js b/priv/static/static/js/vendors~app.fb9ee54b02db0c974e51.js deleted file mode 100644 index 8fdc0a102..000000000 Binary files a/priv/static/static/js/vendors~app.fb9ee54b02db0c974e51.js and /dev/null differ diff --git a/priv/static/static/js/vendors~app.fb9ee54b02db0c974e51.js.map b/priv/static/static/js/vendors~app.fb9ee54b02db0c974e51.js.map deleted file mode 100644 index 7173d6819..000000000 Binary files a/priv/static/static/js/vendors~app.fb9ee54b02db0c974e51.js.map and /dev/null differ diff --git a/priv/static/sw-pleroma.js b/priv/static/sw-pleroma.js index 5f64e872d..b1699a5a9 100644 Binary files a/priv/static/sw-pleroma.js and b/priv/static/sw-pleroma.js differ diff --git a/priv/static/sw-pleroma.js.map b/priv/static/sw-pleroma.js.map index a538b769e..06813ad0e 100644 Binary files a/priv/static/sw-pleroma.js.map and b/priv/static/sw-pleroma.js.map differ -- cgit v1.2.3 From e4cfdfd7018ede67610546f00d2710cc9f519e69 Mon Sep 17 00:00:00 2001 From: Lain Soykaf Date: Mon, 15 Nov 2021 21:04:43 +0100 Subject: CI: Upload the image for all platforms For some reason the other platforms started failing, too. This fixes it. Why? Don't know. --- .gitlab-ci.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3ac30b13d..f4c759ef6 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -243,7 +243,7 @@ stop_review_app: amd64: stage: release - image: elixir:1.10.3 + image: elixir:1.10.4 only: &release-only - stable@pleroma/pleroma - develop@pleroma/pleroma @@ -281,7 +281,7 @@ amd64-musl: stage: release artifacts: *release-artifacts only: *release-only - image: elixir:1.10.3-alpine + image: elixir:1.10.4-alpine cache: *release-cache variables: *release-variables before_script: &before-release-musl @@ -309,7 +309,7 @@ arm-musl: only: *release-only tags: - arm32-specified - image: arm32v7/elixir:1.10.3-alpine + image: arm32v7/elixir:1.10.4-alpine cache: *release-cache variables: *release-variables before_script: *before-release-musl @@ -333,7 +333,7 @@ arm64-musl: only: *release-only tags: - arm - image: arm64v8/elixir:1.10.3-alpine + image: arm64v8/elixir:1.10.4-alpine cache: *release-cache variables: *release-variables before_script: *before-release-musl -- cgit v1.2.3 From b34f0a6e514fd7e6b0920c0443a93924cd75378f Mon Sep 17 00:00:00 2001 From: Lain Soykaf Date: Sun, 14 Nov 2021 20:37:32 +0100 Subject: CI: Conservatively update release images so they keep building. --- .gitlab-ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f4c759ef6..59dc60d9c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -297,7 +297,7 @@ arm: only: *release-only tags: - arm32-specified - image: arm32v7/elixir:1.10.3 + image: arm32v7/elixir:1.10.4 cache: *release-cache variables: *release-variables before_script: *before-release @@ -321,7 +321,7 @@ arm64: only: *release-only tags: - arm - image: arm64v8/elixir:1.10.3 + image: arm64v8/elixir:1.10.4 cache: *release-cache variables: *release-variables before_script: *before-release -- cgit v1.2.3 From 628435302561fc59873095a05ed268c8906bba3c Mon Sep 17 00:00:00 2001 From: NEETzsche Date: Fri, 14 Jan 2022 23:08:33 +0000 Subject: Add blockers_visible to features list when it's enabled --- lib/pleroma/web/mastodon_api/views/instance_view.ex | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/pleroma/web/mastodon_api/views/instance_view.ex b/lib/pleroma/web/mastodon_api/views/instance_view.ex index 8e657ee0f..cbed5fba9 100644 --- a/lib/pleroma/web/mastodon_api/views/instance_view.ex +++ b/lib/pleroma/web/mastodon_api/views/instance_view.ex @@ -65,6 +65,9 @@ def features do "shareable_emoji_packs", "multifetch", "pleroma:api/v1/notifications:include_types_filter", + if Config.get([:activitypub, :blockers_visible]) do + "blockers_visible" + end, if Config.get([:media_proxy, :enabled]) do "media_proxy" end, -- cgit v1.2.3 From 790081540d27f1e70f88f719a987d77d54709f84 Mon Sep 17 00:00:00 2001 From: Hakaba Hitoyo Date: Sat, 15 Jan 2022 12:26:33 +0000 Subject: Update cheatsheet.md. Add `Pleroma.Web.ActivityPub.MRF.KeywordPolicy`. --- docs/configuration/cheatsheet.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/configuration/cheatsheet.md b/docs/configuration/cheatsheet.md index 40e81cffb..5b2410c16 100644 --- a/docs/configuration/cheatsheet.md +++ b/docs/configuration/cheatsheet.md @@ -125,6 +125,7 @@ To add configuration to your config file, you can copy it from the base config. * `Pleroma.Web.ActivityPub.MRF.ActivityExpirationPolicy`: Sets a default expiration on all posts made by users of the local instance. Requires `Pleroma.Workers.PurgeExpiredActivity` to be enabled for processing the scheduled delections. * `Pleroma.Web.ActivityPub.MRF.ForceBotUnlistedPolicy`: Makes all bot posts to disappear from public timelines. * `Pleroma.Web.ActivityPub.MRF.FollowBotPolicy`: Automatically follows newly discovered users from the specified bot account. Local accounts, locked accounts, and users with "#nobot" in their bio are respected and excluded from being followed. + * `Pleroma.Web.ActivityPub.MRF.KeywordPolicy`: Rejects or removes from the federated timeline or replaces keywords. (See [`:mrf_keyword`](#mrf_keyword)). * `transparency`: Make the content of your Message Rewrite Facility settings public (via nodeinfo). * `transparency_exclusions`: Exclude specific instance names from MRF transparency. The use of the exclusions feature will be disclosed in nodeinfo as a boolean value. -- cgit v1.2.3 From d5eb44e8b39a3a896cf3457a2ca6f2055eebc982 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sat, 15 Jan 2022 12:27:16 -0600 Subject: Upgrade Linkify to v0.5.2 --- mix.exs | 2 +- mix.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mix.exs b/mix.exs index 62010d166..4387cb0aa 100644 --- a/mix.exs +++ b/mix.exs @@ -157,7 +157,7 @@ defp deps do {:floki, "~> 0.27"}, {:timex, "~> 3.6"}, {:ueberauth, "~> 0.4"}, - {:linkify, "~> 0.5.1"}, + {:linkify, "~> 0.5.2"}, {:http_signatures, "~> 0.1.1"}, {:telemetry, "~> 0.3"}, {:poolboy, "~> 1.5"}, diff --git a/mix.lock b/mix.lock index 05630a92e..817240538 100644 --- a/mix.lock +++ b/mix.lock @@ -69,7 +69,7 @@ "jose": {:hex, :jose, "1.11.1", "59da64010c69aad6cde2f5b9248b896b84472e99bd18f246085b7b9fe435dcdb", [:mix, :rebar3], [], "hexpm", "078f6c9fb3cd2f4cfafc972c814261a7d1e8d2b3685c0a76eb87e158efff1ac5"}, "jumper": {:hex, :jumper, "1.0.1", "3c00542ef1a83532b72269fab9f0f0c82bf23a35e27d278bfd9ed0865cecabff", [:mix], [], "hexpm", "318c59078ac220e966d27af3646026db9b5a5e6703cb2aa3e26bcfaba65b7433"}, "libring": {:hex, :libring, "1.4.0", "41246ba2f3fbc76b3971f6bce83119dfec1eee17e977a48d8a9cfaaf58c2a8d6", [:mix], [], "hexpm"}, - "linkify": {:hex, :linkify, "0.5.1", "6dc415cbc948b2f6ecec7cb226aab7ba9d3a1815bb501ae33e042334d707ecee", [:mix], [], "hexpm", "a3128c7e22fada4aa7214009501d8131e1fa3faf2f0a68b33dba379dc84ff944"}, + "linkify": {:hex, :linkify, "0.5.2", "fb66be139fdf1656ecb31f78a93592724d1b78d960a1b3598bd661013ea0e3c7", [:mix], [], "hexpm", "8d71ac690218d8952c90cbeb63cb8cc33738bb230d8a56d487d9447f2a5eab86"}, "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"}, -- cgit v1.2.3 From 31148c1857dae28377f9b864a9ebe143d99beb96 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sat, 15 Jan 2022 12:31:36 -0600 Subject: FormatterTest: fix nesting in expected output --- test/pleroma/formatter_test.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/pleroma/formatter_test.exs b/test/pleroma/formatter_test.exs index 5b8babc83..045edf4b1 100644 --- a/test/pleroma/formatter_test.exs +++ b/test/pleroma/formatter_test.exs @@ -294,7 +294,7 @@ test "correctly parses mentions on the last line of html" do assert length(mentions) == 1 expected_text = - ~s(

Hello

@lain

) + ~s(

Hello

@lain

) assert expected_text == text end -- cgit v1.2.3 From cd8f1aac477935176ad5413bbe237b3791c7d9a4 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sat, 15 Jan 2022 12:36:33 -0600 Subject: CHANGELOG: hashtags markdown fix --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d214fde8b..ca519a668 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,6 +31,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Handle Reject for already-accepted Follows properly - Display OpenGraph data on alternative notice routes. - Fix replies count for remote replies +- Fixed hashtags disappearing from the end of lines when Markdown is enabled - ChatAPI: Add link headers - Limited number of search results to 40 to prevent DoS attacks - ActivityPub: fixed federation of attachment dimensions -- cgit v1.2.3 From 39c5ebb1f634b691d06d607d91cbfc6b0741d541 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sat, 15 Jan 2022 12:55:12 -0600 Subject: mix format --- test/pleroma/formatter_test.exs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/test/pleroma/formatter_test.exs b/test/pleroma/formatter_test.exs index 045edf4b1..6663fdbc6 100644 --- a/test/pleroma/formatter_test.exs +++ b/test/pleroma/formatter_test.exs @@ -318,7 +318,7 @@ test "parses tags in html" do text = "

This is a #test

" expected_tags = [ - {"#test", "test"}, + {"#test", "test"} ] assert {_text, [], ^expected_tags} = Formatter.linkify(text) @@ -331,7 +331,7 @@ test "parses mulitple tags in html" do {"#tag1", "tag1"}, {"#tag2", "tag2"}, {"#tag3", "tag3"}, - {"#tag4", "tag4"}, + {"#tag4", "tag4"} ] assert {_text, [], ^expected_tags} = Formatter.linkify(text) @@ -341,14 +341,15 @@ test "parses tags on the last line of html" do text = "

This is a

#test

" expected_tags = [ - {"#test", "test"}, + {"#test", "test"} ] assert {_text, [], ^expected_tags} = Formatter.linkify(text) end test "parses mulitple tags on mulitple lines in html" do - text = "

testing...

#tag1 #tag2 #tag3 #tag4

paragraph

#tag5 #tag6 #tag7 #tag8

" + text = + "

testing...

#tag1 #tag2 #tag3 #tag4

paragraph

#tag5 #tag6 #tag7 #tag8

" expected_tags = [ {"#tag1", "tag1"}, @@ -358,7 +359,7 @@ test "parses mulitple tags on mulitple lines in html" do {"#tag5", "tag5"}, {"#tag6", "tag6"}, {"#tag7", "tag7"}, - {"#tag8", "tag8"}, + {"#tag8", "tag8"} ] assert {_text, [], ^expected_tags} = Formatter.linkify(text) -- cgit v1.2.3 From ac434f83c39e8992fae453a230b860bb8e338e3a Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sat, 15 Jan 2022 13:35:22 -0600 Subject: unit-testing-erratic: allow failure --- .gitlab-ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index bebd97efb..e5664da68 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -90,6 +90,7 @@ unit-testing: unit-testing-erratic: stage: test retry: 2 + allow_failure: true only: changes: - "**/*.ex" -- cgit v1.2.3 From 1dfb67f1e02fcd71f339c05901107926dad6fa88 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Tue, 18 Jan 2022 11:02:23 -0600 Subject: Docs: PleromaAPI oauth_tokens endpoints --- docs/development/API/pleroma_api.md | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/docs/development/API/pleroma_api.md b/docs/development/API/pleroma_api.md index 2304291e5..0d15384b9 100644 --- a/docs/development/API/pleroma_api.md +++ b/docs/development/API/pleroma_api.md @@ -660,3 +660,38 @@ Emoji reactions work a lot like favourites do. They make it possible to react to "url": "https://example.com/media/backups/archive-foobar-20200910T161803-QUhx6VYDRQ2wfV0SdA2Pfj_2CLM_ATUlw-D5l5TJf4Q.zip" }] ``` + +## `GET /api/oauth_tokens` +### Retrieve a list of active sessions for the user +* Method: `GET` +* Authentication: required +* Params: none +* Response: JSON +* Example response: + +```json +[ + { + "app_name": "Pleroma FE", + "id": 9275, + "valid_until": "2121-11-24T15:51:08.234234" + }, + { + "app_name": "Patron", + "id": 8805, + "valid_until": "2121-10-26T18:09:59.857150" + }, + { + "app_name": "Soapbox FE", + "id": 9727, + "valid_until": "2121-12-25T16:52:39.692877" + } +] +``` + +## `DELETE /api/oauth_tokens/:id` +### Revoke a user session by its ID +* Method: `DELETE` +* Authentication: required +* Params: none +* Response: HTTP 200 on success, 500 on error -- cgit v1.2.3 From a02cfd7f5223da396538e264df580e7f33bee690 Mon Sep 17 00:00:00 2001 From: rinpatch Date: Wed, 19 Jan 2022 19:40:50 +0300 Subject: Add ForceMentionsInContentPolicy Even though latest PleromaFE supports displaying these properly, mobile apps still exist, so I think we should offer a workaround to those who want it. --- CHANGELOG.md | 1 + docs/configuration/cheatsheet.md | 1 + lib/pleroma/formatter.ex | 42 ++++++------ lib/pleroma/user.ex | 4 ++ .../activity_pub/mrf/force_mentions_in_content.ex | 80 ++++++++++++++++++++++ test/fixtures/soapbox_no_mentions_in_content.json | 79 +++++++++++++++++++++ .../mrf/force_mentions_in_content_test.exs | 34 +++++++++ 7 files changed, 221 insertions(+), 20 deletions(-) create mode 100644 lib/pleroma/web/activity_pub/mrf/force_mentions_in_content.ex create mode 100644 test/fixtures/soapbox_no_mentions_in_content.json create mode 100644 test/pleroma/web/activity_pub/mrf/force_mentions_in_content_test.exs diff --git a/CHANGELOG.md b/CHANGELOG.md index ca519a668..6aaadca42 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Added - `activeMonth` and `activeHalfyear` fields in NodeInfo usage.users object - Experimental support for Finch. Put `config :tesla, :adapter, {Tesla.Adapter.Finch, name: MyFinch}` in your secrets file to use it. Reverse Proxy will still use Hackney. +- `ForceMentionsInPostContent` MRF policy - AdminAPI: allow moderators to manage reports, users, invites, and custom emojis - AdminAPI: restrict moderators to access sensitive data: change user credentials, get password reset token, read private statuses and chats, etc - PleromaAPI: Add remote follow API endpoint at `POST /api/v1/pleroma/remote_interaction` diff --git a/docs/configuration/cheatsheet.md b/docs/configuration/cheatsheet.md index 5b2410c16..4dacdc68c 100644 --- a/docs/configuration/cheatsheet.md +++ b/docs/configuration/cheatsheet.md @@ -126,6 +126,7 @@ To add configuration to your config file, you can copy it from the base config. * `Pleroma.Web.ActivityPub.MRF.ForceBotUnlistedPolicy`: Makes all bot posts to disappear from public timelines. * `Pleroma.Web.ActivityPub.MRF.FollowBotPolicy`: Automatically follows newly discovered users from the specified bot account. Local accounts, locked accounts, and users with "#nobot" in their bio are respected and excluded from being followed. * `Pleroma.Web.ActivityPub.MRF.KeywordPolicy`: Rejects or removes from the federated timeline or replaces keywords. (See [`:mrf_keyword`](#mrf_keyword)). + * `Pleroma.Web.ActivityPub.MRF.ForceMentionsInContent`: Forces every mentioned user to be reflected in the post content. * `transparency`: Make the content of your Message Rewrite Facility settings public (via nodeinfo). * `transparency_exclusions`: Exclude specific instance names from MRF transparency. The use of the exclusions feature will be disclosed in nodeinfo as a boolean value. diff --git a/lib/pleroma/formatter.ex b/lib/pleroma/formatter.ex index ae37946ab..115835378 100644 --- a/lib/pleroma/formatter.ex +++ b/lib/pleroma/formatter.ex @@ -34,32 +34,34 @@ def escape_mention_handler("@" <> nickname = mention, buffer, _, _) do def mention_handler("@" <> nickname, buffer, opts, acc) do case User.get_cached_by_nickname(nickname) do - %User{id: id} = user -> - user_url = user.uri || user.ap_id - nickname_text = get_nickname_text(nickname, opts) - - link = - Phoenix.HTML.Tag.content_tag( - :span, - Phoenix.HTML.Tag.content_tag( - :a, - ["@", Phoenix.HTML.Tag.content_tag(:span, nickname_text)], - "data-user": id, - class: "u-url mention", - href: user_url, - rel: "ugc" - ), - class: "h-card" - ) - |> Phoenix.HTML.safe_to_string() - - {link, %{acc | mentions: MapSet.put(acc.mentions, {"@" <> nickname, user})}} + %User{} = user -> + {mention_from_user(user, opts), + %{acc | mentions: MapSet.put(acc.mentions, {"@" <> nickname, user})}} _ -> {buffer, acc} end end + def mention_from_user(%User{id: id} = user, opts \\ %{mentions_format: :full}) do + user_url = user.uri || user.ap_id + nickname_text = get_nickname_text(user.nickname, opts) + + Phoenix.HTML.Tag.content_tag( + :span, + Phoenix.HTML.Tag.content_tag( + :a, + ["@", Phoenix.HTML.Tag.content_tag(:span, nickname_text)], + "data-user": id, + class: "u-url mention", + href: user_url, + rel: "ugc" + ), + class: "h-card" + ) + |> Phoenix.HTML.safe_to_string() + end + def hashtag_handler("#" <> tag = tag_text, _buffer, _opts, acc) do tag = String.downcase(tag) url = "#{Pleroma.Web.Endpoint.url()}/tag/#{tag}" diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 0a5dfccc9..bf5b6508b 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -1055,6 +1055,10 @@ def get_by_ap_id(ap_id) do Repo.get_by(User, ap_id: ap_id) end + def get_by_uri(uri) do + Repo.get_by(User, uri: uri) + end + def get_all_by_ap_id(ap_ids) do from(u in __MODULE__, where: u.ap_id in ^ap_ids diff --git a/lib/pleroma/web/activity_pub/mrf/force_mentions_in_content.ex b/lib/pleroma/web/activity_pub/mrf/force_mentions_in_content.ex new file mode 100644 index 000000000..522ae2f60 --- /dev/null +++ b/lib/pleroma/web/activity_pub/mrf/force_mentions_in_content.ex @@ -0,0 +1,80 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ActivityPub.MRF.ForceMentionsInContent do + alias Pleroma.Formatter + alias Pleroma.User + + @behaviour Pleroma.Web.ActivityPub.MRF.Policy + + defp do_extract({:a, attrs, _}, acc) do + if Enum.find(attrs, fn {name, value} -> + name == "class" && value in ["mention", "u-url mention", "mention u-url"] + end) do + href = Enum.find(attrs, fn {name, _} -> name == "href" end) |> elem(1) + acc ++ [href] + else + acc + end + end + + defp do_extract({_, _, children}, acc) do + do_extract(children, acc) + end + + defp do_extract(nodes, acc) when is_list(nodes) do + Enum.reduce(nodes, acc, fn node, acc -> do_extract(node, acc) end) + end + + defp do_extract(_, acc), do: acc + + defp extract_mention_uris_from_content(content) do + {:ok, tree} = :fast_html.decode(content, format: [:html_atoms]) + do_extract(tree, []) + end + + @impl true + def filter(%{"type" => "Create", "object" => %{"type" => "Note", "tag" => tag}} = object) do + # image-only posts from pleroma apparently reach this MRF without the content field + content = object["object"]["content"] || "" + + mention_users = + tag + |> Enum.filter(fn tag -> tag["type"] == "Mention" end) + |> Enum.map(& &1["href"]) + |> Enum.reject(&is_nil/1) + |> Enum.map(fn ap_id_or_uri -> + case User.get_or_fetch_by_ap_id(ap_id_or_uri) do + {:ok, user} -> {ap_id_or_uri, user} + _ -> {ap_id_or_uri, User.get_by_uri(ap_id_or_uri)} + end + end) + |> Enum.reject(fn {_, user} -> user == nil end) + |> Enum.into(%{}) + + explicitly_mentioned_uris = extract_mention_uris_from_content(content) + + added_mentions = + Enum.reduce(mention_users, "", fn {uri, user}, acc -> + unless uri in explicitly_mentioned_uris do + acc <> Formatter.mention_from_user(user) + else + acc + end + end) + + content = + if added_mentions != "", + do: added_mentions <> " " <> content, + else: content + + {:ok, put_in(object["object"]["content"], content)} + end + + @impl true + def filter(object), do: {:ok, object} + + @impl true + def describe, do: {:ok, %{}} +end diff --git a/test/fixtures/soapbox_no_mentions_in_content.json b/test/fixtures/soapbox_no_mentions_in_content.json new file mode 100644 index 000000000..03b4b8ee4 --- /dev/null +++ b/test/fixtures/soapbox_no_mentions_in_content.json @@ -0,0 +1,79 @@ +{ + "@context": [ + "https://www.w3.org/ns/activitystreams", + "https://gleasonator.com/schemas/litepub-0.1.jsonld", + { + "@language": "und" + } + ], + "actor": "https://gleasonator.com/users/alex", + "attachment": [ + { + "blurhash": "b15#-6_3~l%eDkNraAM#HYMf", + "height": 2147, + "mediaType": "image/png", + "name": "", + "type": "Document", + "url": "https://media.gleasonator.com/2df1c9cc26c35028db65848143971da0c5a6e04dbd423b194bb018b6c601db9b.png", + "width": 966 + }, + { + "blurhash": "b168EX~q~W-;DiM{VtIUD%Io", + "height": 2147, + "mediaType": "image/png", + "name": "", + "type": "Document", + "url": "https://media.gleasonator.com/22b42b4cddc1aecc7e2d3dc20bcdd66d5c4e44c2bef119de948e95a587e36b66.png", + "width": 966 + } + ], + "attributedTo": "https://gleasonator.com/users/alex", + "cc": [ + "https://www.w3.org/ns/activitystreams#Public" + ], + "content": "

Haha yeah, you can control who you reply to.

", + "context": "https://gleasonator.com/contexts/ba6c8bd9-ac4d-479e-9bd9-5bf570068ae7", + "conversation": "https://gleasonator.com/contexts/ba6c8bd9-ac4d-479e-9bd9-5bf570068ae7", + "id": "https://gleasonator.com/objects/02af65fe-04f8-46bc-9b1e-31dfe76eaffd", + "inReplyTo": "https://shitposter.club/objects/c686d811-4368-48e1-ba11-82c129f93165", + "published": "2022-01-19T03:37:35.976545Z", + "sensitive": false, + "source": "Haha yeah, you can control who you reply to.", + "summary": "", + "tag": [ + { + "href": "https://lain.com/users/lain", + "name": "@lain@lain.com", + "type": "Mention" + }, + { + "href": "https://shitposter.club/users/coolboymew", + "name": "@coolboymew@shitposter.club", + "type": "Mention" + }, + { + "href": "https://shitposter.club/users/dielan", + "name": "@dielan@shitposter.club", + "type": "Mention" + }, + { + "href": "https://tuusin.misono-ya.info/users/hakui", + "name": "@hakui@tuusin.misono-ya.info", + "type": "Mention" + }, + { + "href": "https://xyzzy.link/users/fence", + "name": "@fence@xyzzy.link", + "type": "Mention" + } + ], + "to": [ + "https://shitposter.club/users/dielan", + "https://gleasonator.com/users/alex/followers", + "https://shitposter.club/users/coolboymew", + "https://xyzzy.link/users/fence", + "https://tuusin.misono-ya.info/users/hakui", + "https://lain.com/users/lain" + ], + "type": "Note" +} diff --git a/test/pleroma/web/activity_pub/mrf/force_mentions_in_content_test.exs b/test/pleroma/web/activity_pub/mrf/force_mentions_in_content_test.exs new file mode 100644 index 000000000..090bdc35e --- /dev/null +++ b/test/pleroma/web/activity_pub/mrf/force_mentions_in_content_test.exs @@ -0,0 +1,34 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2021 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ActivityPub.MRF.ForceMentionsInContentTest do + alias Pleroma.Web.ActivityPub.MRF.ForceMentionsInContent + import Pleroma.Factory + use Pleroma.DataCase + + test "adds mentions to post content" do + users = %{ + "lain@lain.com" => "https://lain.com/users/lain", + "coolboymew@shitposter.club" => "https://shitposter.club/users/coolboymew", + "dielan@shitposter.club" => "https://shitposter.club/users/dielan", + "hakui@tuusin.misono-ya.info" => "https://tuusin.misono-ya.info/users/hakui", + "fence@xyzzy.link" => "https://xyzzy.link/users/fence" + } + + Enum.each(users, fn {nickname, ap_id} -> + insert(:user, ap_id: ap_id, nickname: nickname, local: false) + end) + + object = File.read!("test/fixtures/soapbox_no_mentions_in_content.json") |> Jason.decode!() + + activity = %{ + "type" => "Create", + "actor" => "https://gleasonator.com/users/alex", + "object" => object + } + + {:ok, %{"object" => %{"content" => filtered}}} = ForceMentionsInContent.filter(activity) + Enum.each(users, fn {nickname, _} -> assert filtered =~ nickname end) + end +end -- cgit v1.2.3 From 9faac1094f556681841a820717859155ad600de5 Mon Sep 17 00:00:00 2001 From: Tusooa Zhu Date: Wed, 19 Jan 2022 23:56:57 -0500 Subject: Add glitch-lily to clients.md --- docs/clients.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/clients.md b/docs/clients.md index 5650ea236..31d2d27c3 100644 --- a/docs/clients.md +++ b/docs/clients.md @@ -116,3 +116,9 @@ Feel free to contact us to be added to this list! - Contact: [@r@freesoftwareextremist.com](https://freesoftwareextremist.com/users/r) - Features: Does not requires JavaScript - Features: MastoAPI + +### Glitch-lily +- Source Code: +- Contact: [@tusooa@kazv.moe](https://kazv.moe/users/tusooa) +- Features: MastoAPI +- Based on [glitch-soc](https://github.com/glitch-soc/mastodon) frontend -- cgit v1.2.3 From 88c21b928286782e174451fb6b039a34548ab75d Mon Sep 17 00:00:00 2001 From: marcin mikołajczak Date: Thu, 20 Jan 2022 11:59:15 +0100 Subject: Support private pinned posts from Mastodon MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: marcin mikołajczak --- lib/pleroma/web/activity_pub/activity_pub.ex | 5 +- .../mastodon/collections/external_featured.json | 14 ++++ .../pleroma/web/activity_pub/activity_pub_test.exs | 77 ++++++++++++++++++++++ 3 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 test/fixtures/mastodon/collections/external_featured.json diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index 756096952..9ca44c532 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -1664,7 +1664,10 @@ def pin_data_from_featured_collection(%{ "orderedItems" => objects }) when type in ["OrderedCollection", "Collection"] do - Map.new(objects, fn %{"id" => object_ap_id} -> {object_ap_id, NaiveDateTime.utc_now()} end) + Map.new(objects, fn + %{"id" => object_ap_id} -> {object_ap_id, NaiveDateTime.utc_now()} + object_ap_id when is_binary(object_ap_id) -> {object_ap_id, NaiveDateTime.utc_now()} + end) end def fetch_and_prepare_featured_from_ap_id(nil) do diff --git a/test/fixtures/mastodon/collections/external_featured.json b/test/fixtures/mastodon/collections/external_featured.json new file mode 100644 index 000000000..be5302cf8 --- /dev/null +++ b/test/fixtures/mastodon/collections/external_featured.json @@ -0,0 +1,14 @@ +{ + "@context": [ + "https://www.w3.org/ns/activitystreams", + "https://{{domain}}/schemas/litepub-0.1.jsonld", + { + "@language": "und" + } + ], + "id": "https://{{domain}}/users/{{nickname}}/collections/featured", + "orderedItems": [ + "https://{{domain}}/objects/{{object_id}}" + ], + "type": "OrderedCollection" +} diff --git a/test/pleroma/web/activity_pub/activity_pub_test.exs b/test/pleroma/web/activity_pub/activity_pub_test.exs index 574ef0d71..3d152b4d0 100644 --- a/test/pleroma/web/activity_pub/activity_pub_test.exs +++ b/test/pleroma/web/activity_pub/activity_pub_test.exs @@ -312,6 +312,83 @@ test "fetches user featured collection" do assert %{data: %{"id" => ^object_url}} = Object.get_by_ap_id(object_url) end + + test "fetches user featured collection without embedded object" do + ap_id = "https://example.com/users/lain" + + featured_url = "https://example.com/users/lain/collections/featured" + + user_data = + "test/fixtures/users_mock/user.json" + |> File.read!() + |> String.replace("{{nickname}}", "lain") + |> Jason.decode!() + |> Map.put("featured", featured_url) + |> Jason.encode!() + + object_id = Ecto.UUID.generate() + + featured_data = + "test/fixtures/mastodon/collections/external_featured.json" + |> File.read!() + |> String.replace("{{domain}}", "example.com") + |> String.replace("{{nickname}}", "lain") + |> String.replace("{{object_id}}", object_id) + + object_url = "https://example.com/objects/#{object_id}" + + object_data = + "test/fixtures/statuses/note.json" + |> File.read!() + |> String.replace("{{object_id}}", object_id) + |> String.replace("{{nickname}}", "lain") + + Tesla.Mock.mock(fn + %{ + method: :get, + url: ^ap_id + } -> + %Tesla.Env{ + status: 200, + body: user_data, + headers: [{"content-type", "application/activity+json"}] + } + + %{ + method: :get, + url: ^featured_url + } -> + %Tesla.Env{ + status: 200, + body: featured_data, + headers: [{"content-type", "application/activity+json"}] + } + end) + + Tesla.Mock.mock_global(fn + %{ + method: :get, + url: ^object_url + } -> + %Tesla.Env{ + status: 200, + body: object_data, + headers: [{"content-type", "application/activity+json"}] + } + end) + + {:ok, user} = ActivityPub.make_user_from_ap_id(ap_id) + Process.sleep(50) + + assert user.featured_address == featured_url + assert Map.has_key?(user.pinned_objects, object_url) + + in_db = Pleroma.User.get_by_ap_id(ap_id) + assert in_db.featured_address == featured_url + assert Map.has_key?(user.pinned_objects, object_url) + + assert %{data: %{"id" => ^object_url}} = Object.get_by_ap_id(object_url) + end end test "it fetches the appropriate tag-restricted posts" do -- cgit v1.2.3 From 00523bdf5e4c61ffb1fdd66a3345a26848a20ca9 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Thu, 20 Jan 2022 16:52:43 -0600 Subject: Test pinned private statuses in AccountController --- .../controllers/account_controller_test.exs | 40 +++++++++++++++++----- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/test/pleroma/web/mastodon_api/controllers/account_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/account_controller_test.exs index bba528d83..9b07cd5c2 100644 --- a/test/pleroma/web/mastodon_api/controllers/account_controller_test.exs +++ b/test/pleroma/web/mastodon_api/controllers/account_controller_test.exs @@ -5,7 +5,9 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do use Pleroma.Web.ConnCase + alias Pleroma.Object alias Pleroma.Repo + alias Pleroma.Tests.ObanHelpers alias Pleroma.User alias Pleroma.Web.ActivityPub.ActivityPub alias Pleroma.Web.ActivityPub.InternalFetchActor @@ -404,15 +406,6 @@ test "gets users statuses", %{conn: conn} do assert id_two == to_string(activity.id) end - test "unimplemented pinned statuses feature", %{conn: conn} do - note = insert(:note_activity) - user = User.get_cached_by_ap_id(note.data["actor"]) - - conn = get(conn, "/api/v1/accounts/#{user.id}/statuses?pinned=true") - - assert json_response_and_validate_schema(conn, 200) == [] - end - test "gets an users media, excludes reblogs", %{conn: conn} do note = insert(:note_activity) user = User.get_cached_by_ap_id(note.data["actor"]) @@ -1038,6 +1031,35 @@ test "returns pinned statuses", %{conn: conn, user: user, activity: %{id: activi end end + test "view pinned private statuses" do + user = insert(:user) + reader = insert(:user) + + # Create a private status and pin it + {:ok, %{id: activity_id} = activity} = + CommonAPI.post(user, %{status: "psst", visibility: "private"}) + + %{data: %{"id" => object_ap_id}} = Object.normalize(activity) + {:ok, _} = User.add_pinned_object_id(user, object_ap_id) + + %{conn: conn} = oauth_access(["read:statuses"], user: reader) + + # A non-follower can't see the pinned status + assert [] == + conn + |> get("/api/v1/accounts/#{user.id}/statuses?pinned=true") + |> json_response_and_validate_schema(200) + + # Follow the user, then the pinned status can be seen + CommonAPI.follow(reader, user) + ObanHelpers.perform_all() + + assert [%{"id" => ^activity_id, "pinned" => true}] = + conn + |> get("/api/v1/accounts/#{user.id}/statuses?pinned=true") + |> json_response_and_validate_schema(200) + end + test "blocking / unblocking a user" do %{conn: conn} = oauth_access(["follow"]) other_user = insert(:user) -- cgit v1.2.3 From 832828961921866a5f0ef9d13b421748f3262f7f Mon Sep 17 00:00:00 2001 From: Finn Behrens Date: Sat, 22 Jan 2022 10:00:43 +0100 Subject: Add autocompelete values suggested by Apple Link: https://developer.apple.com/documentation/security/password_autofill/enabling_password_autofill_on_an_html_input_element --- lib/pleroma/web/templates/o_auth/mfa/totp.html.eex | 2 +- lib/pleroma/web/templates/o_auth/o_auth/register.html.eex | 8 ++++---- lib/pleroma/web/templates/o_auth/o_auth/show.html.eex | 2 +- .../web/templates/twitter_api/remote_follow/follow_login.html.eex | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/lib/pleroma/web/templates/o_auth/mfa/totp.html.eex b/lib/pleroma/web/templates/o_auth/mfa/totp.html.eex index 29ea7c5fb..27600253c 100644 --- a/lib/pleroma/web/templates/o_auth/mfa/totp.html.eex +++ b/lib/pleroma/web/templates/o_auth/mfa/totp.html.eex @@ -10,7 +10,7 @@ <%= form_for @conn, Routes.mfa_verify_path(@conn, :verify), [as: "mfa"], fn f -> %>
<%= label f, :code, "Authentication code" %> - <%= text_input f, :code, [autocomplete: false, autocorrect: "off", autocapitalize: "off", autofocus: true, pattern: "[0-9]*", spellcheck: false] %> + <%= text_input f, :code, [autocomplete: "one-time-code", autocorrect: "off", autocapitalize: "off", autofocus: true, pattern: "[0-9]*", spellcheck: false] %> <%= hidden_input f, :mfa_token, value: @mfa_token %> <%= hidden_input f, :state, value: @state %> <%= hidden_input f, :redirect_uri, value: @redirect_uri %> diff --git a/lib/pleroma/web/templates/o_auth/o_auth/register.html.eex b/lib/pleroma/web/templates/o_auth/o_auth/register.html.eex index 99f900fb7..3ac428b2f 100644 --- a/lib/pleroma/web/templates/o_auth/o_auth/register.html.eex +++ b/lib/pleroma/web/templates/o_auth/o_auth/register.html.eex @@ -12,11 +12,11 @@
<%= label f, :nickname, "Nickname" %> - <%= text_input f, :nickname, value: @nickname %> + <%= text_input f, :nickname, value: @nickname, autocomplete: "username" %>
<%= label f, :email, "Email" %> - <%= text_input f, :email, value: @email %> + <%= text_input f, :email, value: @email, autocomplete: "email" %>
<%= submit "Proceed as new user", name: "op", value: "register" %> @@ -25,11 +25,11 @@
<%= label f, :name, "Name or email" %> - <%= text_input f, :name %> + <%= text_input f, :name, autocomplete: "username" %>
<%= label f, :password, "Password" %> - <%= password_input f, :password %> + <%= password_input f, :password, autocomplete: "password" %>
<%= submit "Proceed as existing user", name: "op", value: "connect" %> diff --git a/lib/pleroma/web/templates/o_auth/o_auth/show.html.eex b/lib/pleroma/web/templates/o_auth/o_auth/show.html.eex index 181a9519a..d63da6c1d 100644 --- a/lib/pleroma/web/templates/o_auth/o_auth/show.html.eex +++ b/lib/pleroma/web/templates/o_auth/o_auth/show.html.eex @@ -35,7 +35,7 @@

Choose carefully! You won't be able to change this later. You will be able to change your display name, though.

<%= label f, :nickname, "Pleroma Handle" %> - <%= text_input f, :nickname, placeholder: "lain" %> + <%= text_input f, :nickname, placeholder: "lain", autocomplete: "username" %>
<%= hidden_input f, :name, value: @params["name"] %> <%= hidden_input f, :password, value: @params["password"] %> diff --git a/lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex b/lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex index a8026fa9d..bc5fb28e3 100644 --- a/lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex +++ b/lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex @@ -5,9 +5,9 @@

<%= @followee.nickname %>

<%= form_for @conn, Routes.remote_follow_path(@conn, :do_follow), [as: "authorization"], fn f -> %> -<%= text_input f, :name, placeholder: "Username", required: true %> +<%= text_input f, :name, placeholder: "Username", required: true, autocomplete: "username" %>
-<%= password_input f, :password, placeholder: "Password", required: true %> +<%= password_input f, :password, placeholder: "Password", required: true, autocomplete: "password" %>
<%= hidden_input f, :id, value: @followee.id %> <%= submit "Authorize" %> -- cgit v1.2.3 From f5d4ef50b4d86c33af924c44cfcb2d72202476d9 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sat, 22 Jan 2022 12:13:09 -0600 Subject: FilterTest: tag erratic test --- test/pleroma/web/mastodon_api/controllers/filter_controller_test.exs | 1 + 1 file changed, 1 insertion(+) diff --git a/test/pleroma/web/mastodon_api/controllers/filter_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/filter_controller_test.exs index 98ab9e717..4f71b40d1 100644 --- a/test/pleroma/web/mastodon_api/controllers/filter_controller_test.exs +++ b/test/pleroma/web/mastodon_api/controllers/filter_controller_test.exs @@ -49,6 +49,7 @@ test "a common filter", %{conn: conn, user: user} do assert filter.hide == true end + @tag :erratic test "a filter with expires_in", %{conn: conn, user: user} do in_seconds = 600 -- cgit v1.2.3 From 7a015b1fe2f177bcc4ea5941c454936d3792e935 Mon Sep 17 00:00:00 2001 From: NEETzsche Date: Sat, 22 Jan 2022 12:07:54 -0700 Subject: Make test less erratic by adding five second tolerance --- .../web/mastodon_api/controllers/filter_controller_test.exs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/pleroma/web/mastodon_api/controllers/filter_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/filter_controller_test.exs index 4f71b40d1..5ed1f34b7 100644 --- a/test/pleroma/web/mastodon_api/controllers/filter_controller_test.exs +++ b/test/pleroma/web/mastodon_api/controllers/filter_controller_test.exs @@ -49,7 +49,6 @@ test "a common filter", %{conn: conn, user: user} do assert filter.hide == true end - @tag :erratic test "a filter with expires_in", %{conn: conn, user: user} do in_seconds = 600 @@ -65,12 +64,13 @@ test "a filter with expires_in", %{conn: conn, user: user} do assert response["irreversible"] == false - expires_at = + expected_expiration = NaiveDateTime.utc_now() |> NaiveDateTime.add(in_seconds) - |> Pleroma.Web.CommonAPI.Utils.to_masto_date() - assert response["expires_at"] == expires_at + {:ok, actual_expiration} = NaiveDateTime.from_iso8601(response["expires_at"]) + + assert abs(NaiveDateTime.diff(expected_expiration, actual_expiration)) <= 5 filter = Filter.get(response["id"], user) -- cgit v1.2.3