This is a fairly large release packed with lots of UI refinements, removal of a lot of legacy cruft (though sadly not all yet), new features, better moderation workflow, and lots of bugfixes. This is probably the most overhaul the basics of the UI have seen in one release since the first versions.

Get Tesseract

Docker tags:

  • ghcr.io/asimons04/tesseract:1.4.20
  • ghcr.io/asimons04/tesseract:v1.4.20
  • ghcr.io/asimons04/tesseract:latest

Bugfixes

Bugfixes: Minor
  • May only have been an issue for admins, but administratively hidden and removed communities will now no longer show up in community autocomplete results.
    • They will still show up when filtering for a community in the modlog though (though only admins should be able to see those results)
  • Fixed full URLs not truncating properly when “Show Full URLs” option is enabled
  • Fixed issue with click-to-play not working on post pages if media is disabled on post pages.
  • Disable “reply” button if post is removed or deleted
  • Disable ‘report’ post action if post alredy removed (I think deleted posts can still be reported, though. Need to double-check the API behavior.)
  • Disable ‘report’ comment action if comment already removed.
  • Fixed Gifs not previewing if just ‘url’ is present (i.e. no thumbanil_url or embed_video_url)
  • Indicate post’s removed/deleted/lock state in the comment item component when viewing profiles
  • When “Match Crossposts on Title” is enabled, posts with the same title but different URLs will no longer be erroneously rolled up
  • “Distinguish” now only shows on your own comments if you are a moderator. This matches the stupid API behavior because…the Lemmy devs don’t listen to anyone. (Wow I really can’t go one release without throwing deserved shade at them, can I?)
  • Modlog now shows hide/unhide and remove/restore community events.
Bugfixes: Major

Image Cache Housekeeping

Fixed image cache housekeeping not working correctly.

There were changes to fs/promises that I missed, and some functionality changed along with a few of the member variables being deprecated. This was causing the directory content calculations to silently fail safe (returned 0 rather than crashing).

As a result, nothing was ever getting evicted from the cache.

If you are using the cache functionality of the image proxy, you will likely notice that startup takes a bit longer this time if you have housekeeping set to run at startup (recommended). This is because it will be housekeeping all of the cached objects it should have been housekeeping all along. Once the initial cleanup of the backlog has completed, further startups should complete in the normal/expected amount of time.

If startup takes too long, you can always delete all of the .cache objects manually from the mounted cache folder. See the Media Proxy docs for configuration options.

New Features / Changes

"Hybrid" Post View

Rather than a binary choice of “card” or “compact”, hybrid view will let you set a list of post types (image, video, article, etc) that you want to render as cards while displaying everything else as compact. This is the new default view.

This is useful, for example, to let memes and news articles co-exist without having to expand every meme image manually in compact view or view every article thumbnail card-sized.

The behavior and post types can be configured from Quick Settings -> Post Style -> Hybrid and then clicking the link for “Configure” -or- from Settings -> Feed- > Hybrid View Configuration

By default, only image posts are expanded to cards.

In addition to setting the types of posts that should render as cards, you can optionlly keep read posts collapsed into compact view when they would otherwise be cards if they were unread. This is enabled by default, but can be easily disabled.

There is also a new regular view called “Compacter”. It is the same as compact but post body is fully collapsed. Similar to “More Compact” but not full width.

Post Form Now Automatically Searches for Crossposts/Duplicates

When you are creating a post, the URL will be searched to see if you’re posting something that’s already been posted. It should do this automatically when the URL field changes or the URL is set and the community changes. The behavior is slightly different depending on if a community is defined:

  1. If the community is not set, then it will search for any posts on your instance matching that URL. The label will be “Crossposts”.

  2. If the community is set, then it will do a remote API call to search the home instance of that community for any posts to that community with that URL. The label will be “Existing posts”.

The latter behavior is particularly useful if you want to avoid accidentally posting a duplicate that may have been posted by someone you’ve blocked or by someone your instance doesn’t federate with. Those posts may not be visible to you locally, so the remote search should help identify them so you don’t clutter up the feed and/or add extra work for the moderator who usually removes duplicate posts.

If for whatever reason it doesn’t trigger automatically, the “Magnifying Glass” icon to the right of the URL field can trigger the search manually.

Also note that behavior #2 only works if you’re posting to a Lemmy community since it makes a remote API call to the community’s home instance using the Lemmy API. Thus, it cannot search a remote Kbin/Piefed, etc instance.

Can Now Vote on Crossposts Without Clicking Into Them

Vote buttons have been added to the crosspost items, so you can now vote on them from the feed and post.

In the feed, since the cross_posts are rolled up manually from regular post objects, the voting works as expected.

Unfortunately, when clicked into a post, the API call does not add the my_vote variable to the cross_posts array. So while you can vote on the crosspost, and the vote will be correctly recorded, your vote will only display correctly while you’re on that page. Since the API doesn’t return the vote you cast, on refresh or subsequent loads, the vote button will not indicate which way you voted. If you try to vote again, the score will not necessarily change. Yet another feature I want to implement hampered by dumb API decisions.

DailyMotion Video Embeds Now Supported

I forgot Dailymotion existed until someone posted a link a while back. Upon inspection, they have an embed API, so I figured why not add support for it.

Moderation Menu Has Been Replaced With New Moderation Modal

The moderation menu on posts and comments has been removed. The reason is that the menus were getting cluttered when new things are added, especially for admins who have more options available than regular mods. Rather than creating sub-menus (yuck!) or introducing separate UI elements for admin controls, I’ve just scrapped the whole thing and started over.

The “mod” button will now open a modal containing all the mod tools that are appropriate for the item.

The cool thing about the new mod modal is that all of the tools are packaged into it. It doesn’t open separate modals for banning/unbanning, removing/restoring, etc. It even has the community details available so that mods can reference the rules when issuing actions without leaving the item they’re working with.

Current Capabilities and Features

  • A mini-banner heading showing the current community with its icon and the creator of the item and their avatar/info.
    • Both communtiy and user are clickable to bring up their respective profile modals to get more info (these pop up in separate modals and aren’t integrated into the mod modal)
  • Pin/Unpin the post to the community
  • Feature/Unfeature the post on the instance (admins only)
  • Lock/Unlock the post
  • View the community details relevant to the current item (post or comment)
  • View the votes for the item (admins only until whatever version of Lemmy lets mods do this for their communities)
  • Remove/Restore the post or comment (shows the post meta header or the comment meta header and comment previews)
  • Send a DM to the post/comment’s creator
  • Purge the post or comment (admin only)
  • Ban/Unban the user from the community
  • Ban/Unban the user from the instance (admins only)
  • Distinguish/undistinguish mod comments
  • View the user’s modlog history
    • Defaults to their history in the community relevant to the current item
    • Can toggle between their modlog history in the community and their full modlog history
    • Also has link to the full modlog viewer filtered for that user.

All tools stay within the same modal, and it shrinks/expands to accommodate the various integrated tools.

Improved Community Modals

To reduce clutter, the “Subscribe/Unsubscribe” (RSS Icon), “Favorite/Unfavorite” (Star), “Add/Remove to Group” (3 People) buttons have been moved to the modal title bar as icon-only buttons.

“Create Post” is no longer a link to the community’s create post page. It now shows the create post form right in the modal. There is a button in the upper-right which will take you to the /c/{community}/create_post page if you want to use the old form ( 🖼️ 👩🏻‍🦰 🖼️ it’s the same form).

For admins, “Remove/Restore Community” and “Hide/Unhide Community” have been integrated. They will also now prompt for an optional reason to show in the modlog.

The “Community Details” is now a panel (like in the moderation modal) rather than being an accordion. Same functionality, different packaging.

You can now view the community’s modlog directly in the modal.

Added the direct ban/unban user tool to the community modal. Instance admins and community moderators can now manually ban/unban users from the community without having to dig up a submission. Useful to revisit an old ban or to ban a known troll making the rounds before they hit your community.

Improved User Modals

The “Copy Lemmyverse Link” and “Copy Actor ID” buttons have been moved to the modal’s title bar as icon-only buttons. - The “Share” icon is for Copy Lemmyverse Link. This is used to share an instance-agnostic link to a user. - The “Link” icon is for Copy Actor ID.
- The box with arrow in top right icon will take you to the user’s profile.

Can view user’s modlog history directly in the modal

Can send a message to the user directly from the modal

For admins, the “ban/unban user” form is now integrated directly into the modal.

Piped/Invidious Support Changes

Since YouTube has gone to war against alternate frontends (and is sadly winning), most public instances no longer work. However, I believe that private/small instances may still function as expected.

Since the public instances are pretty much all broken or only partially working, Invidious/Piped support has been modified to only be enabled if the user supplies their own instance.

The distinction between Invidious and Piped has also been removed since the link formats are interchangeable. Now, in Settings, the YT frontend has been changed to just “YouTube” and “Custom”. The custom instance list can contain Invidious and/or Piped instances.

The alternate link selector for YouTube videos will now also only show “Invidious/Piped” option if you have defined at least one.

As before, multiple custom instances can be defined but one will need to be selected as the default. That one will be used for the alternate source selector and, optionally/separately, as the embed player.

Note: You can keep YouTube as the default embed player while also adding a custom Invidious/Piped instance to act as alternate links in the alternate source link menu.

The internal lists of public Invidious and Piped instances has been combined and are only used for detection; formerly, these could be selected as frontends.

On the admin side of things, the env var PUBLIC_CUSTOM_PIPED has been deprecated. For now, it will simply be combined with the PUBLIC_CUSTOM_INVIDIOUS list. Eventually the Piped list will be removed, but that is TBD. Those lists are also only used for detection and are no longer presented as possible frontends for the user to select. If a user wants to use Invidious/Piped, they must supply their own instance in their settings.

Lost, non-comprehensive list of various UI tweaks
  • Lots of UI polish all around. Too numerous to list individually.

  • Legacy user and community menus in /u/{user} and /c/{community} cards have been removed. The functionality has been moved into the respecctive user/community modals.

  • Community link pill buttons are now gray instead of orange. The orange was just…too much. User link buttons are still blue.

  • Better display of metadata from posted links

  • Cleaner compact view (also incorporates metadata display better)

  • Feed images are limited to a maximum of 40% viewport height. This still gives the nice “card” effect while also not making posts massive. They were formerly limited to 80vh, but even this is no longer needed since the ZoomableImage component was integrated.

  • Removed user settings for post and feed image sizes since they’re no longer needed with the new compact and card view tweaks described above.

  • Post body images are now hidden in the feed and a link shown in their place. Clicking the link will open them in a preview modal. Unless the option to disable inline images is turned on, then they will still show as embeds when opening the post. This should help compact mode stay compact rather than some of them being massive with one or more post body images slipping through.

  • Direct video (mp4, webm, etc) posts now use the video metadata for the thumbnail if OP didn’t post a custom one. Also works in compact view now.

  • Bandcamp embeds are now smaller.

  • All media renderers now show the embed metadata alongside the post details.

  • Direct audio links (MP3, etc) now have renderers; they only rendered in the markdown post body and comments previously. Now if the post URL is an audio link, a player will embed.

  • Show link selector, link, and MBFC even if metadata fails to load in preview modal. Also show that info while fetching metadata.

Better Error Handling and Integration with Pifed/Mbin/etc

When clicking a link that goes to a post or comment, Tesseract will massage the URL to attempt to render it locally (extract the instance and post ID and do a remote API call to fetch it for local rendering). This works great for Lemmy, but non-Lemmy services which use the same /post/{id} and /comment/{id} URL format don’t work with Lemmy API calls.

Before, this would throw a generic 500 “Failed to fetch post” error. The UX has been improved in this release by showing a clearer error message as well as a button to visit the post on its home instance.

Additionally, if a local post fails to load, there’s now conditional verbiage to indicate a local post may have been removed by its creator or removed by a moderator, and there is no button to visit it on the home instance (since it is the home instance).

  • Max-P@lemmy.max-p.me
    link
    fedilink
    English
    arrow-up
    1
    ·
    edit-2
    18 days ago

    I feel like the rounded corners are a bit too much in this version, there’s a few places something is too close to the border:

    Also this

    • Admiral Patrick@dubvee.orgOPM
      link
      fedilink
      English
      arrow-up
      2
      ·
      edit-2
      18 days ago

      The first one: I don’t think an instance without a site logo is even on my test cases. With logo image present, there is more padding and a slight rounding to them. The initials are just a fallback, and I didn’t account for there not being a site logo beyond making sure it didn’t crash if the logo value was undefined. I don’t think the fallback div got the padding or rounding class I added to the site logo’s container.

      The second one: That’s intentional, mostly as a concession for mobile. I didn’t go too far out of my way to set different padding on different breakpoints since the original intention was to actually have the image wrap into the border radius. I scrapped that idea for some reason, but left it with minimal padding. It also helped a little bit when the embed description for the link was really long. I can play around with tweaking that on the next release.

      The third one: That was a testing failure on my part. I am still building against 0.19.3 and don’t have the separate local user counts in my API responses.

      I just patched that and re-released. Fix is already pushed into 1.4.20 branch and merged into main. If you build from source, just pull and re-build. Otherwise, the Github action run should be completed in about 15 minutes with the new build. It uses the same tags.

      Edit: The build actions just completed, so forcing a pull for the same tag should get the patch for #3.