Tesseract

0 readers
2 users here now

Formerly Tesseract for Lemmy. Now "Tesseract for Sublinks"

Development is now targeting the upcoming Sublinks project. As Sublinks aims to provide initial compatibility with Lemmy, Tesseract will continue to work with Lemmy for the foreseeable future.

Once the Sublinks project moves into its native API phase, Lemmy support will be dropped from Tesseract.

Announcements, support, and guidance for the Tesseract UI for Sublinks

founded 11 months ago
1
2
submitted 6 days ago* (last edited 6 days ago) by [email protected] to c/[email protected]
 
 

This post sent from my dumb phone lol (including the image)

2
1
1.4.12 Released (dubvee.org)
submitted 1 week ago* (last edited 1 week ago) by [email protected] to c/[email protected]
 
 

1.4.12

Docker Tags:

  • ghcr.io/asimons04/tesseract:1.4.12
  • ghcr.io/asimons04/tesseract:v1.4.12
  • ghcr.io/asimons04/tesseract:latest

Bugfixes

  • Fixed reactivity on modlog filter lookups (sometimes they got into a fetch loop)
  • Fixed unhandled exception when a bad match occurs when detecting community/user links to be badge-ified (backported to 1.4.11)
  • Fixed code and codespan renderers so they don't use transparent text when post preview collapsed with fade effect

Enhancements

Compact View Refreshed and is No Longer Second-Class CitizenThe 'compact' view has been refreshed. Now slightly more compact and powerful. Thumbnail images have been moved to the right side so they can be moved higher up in the post card while also keeping the left side consistent if there is no thumbnail image.

Compact mode now no longer automatically disables the feed margins. You'll need to use the "toggle margins" buttons in the navbar to make them full width (the setting will persist, so you only need to do it once).

It also works quite a bit better in mobile, though not perfect (there's not much difference in overall post height when it's scrunched down that far).

That said, "compact" view is mostly designed for desktop though I've done my best to make sure it looks presentable on mobile as well.

Posts can now also be rendered in compact mode on the post pages (e.g. /post/12345). All media and image posts, though, will still default to "card" mode (but can be minimized to compact). This was chosen as a compromise between not making article headline images huge and having to click twice to show an image post (e.g. meme) in full when clicking into it.

Adjustable Preview Length in FeedAdded a new setting (Settings -> Feed -> Post Body Preview Length) to allow setting the number of characters that show in the post body in the feed before requiring a click of 'expand'. Can even disable the body previews if you want really compact posts. This setting is also available in the "Quick Options".

The default is 240 characters (same as the old hardcoded value in prior releases).

What's the difference between 'Disabled' and '0'?

Setting the body preview length to disabled will hide the post body component completely in the feed (including the expand button); you will have to click into the post to see the body at all.

Setting it to 0 will not show the body preview contents but will keep the "expand" button to enable you to view the post body in the feed if you wish.

Possibilities for Synthetic View ModesI really don't want to (and have no plans to) create and maintain more than two basic types of view.

That said, the compact view is flexible since it's affected by several different config options. In the future, I may add some "synthetic" view modes that change the margins, body preview length, and other config options to certain presets.

Ideas:

  • Reader View: Compact posts, full width (no margins), and shows most (or all) of the post body.

  • High Desnsity Mode: Compact posts, full width (no margins), post body preview disabled, flairs disabled, and thumbnails disabled (disabling thumbnails isn't a feature currently but can be)

  • ??? (Suggestions welcome)

Link Preview Modal Can (try to) Load the Link in an iFrameAdded a button to the bottom of the link preview modal that will let you try to view the link in an iframe. Not all websites allow this (they set the X-Frame-Options header to disallow it), but enough do that this feature can still be useful.

I tried doing a pre-flight check to determine if the link allowed loading in a frame and conditionally hide the button, but hit several snags:

  1. Browser-side: CORS policy would only allow opaque fetches (which, by nature, don't return the header I need to check).
  2. Browser-side: Checking the onLoad event from the iframe doesn't differentiate between success and failure
  3. Server-side: Tried adding an API endpoint and doing a server-side fetch to get the target page headers, but Cloudflare said 'fuck off, these are my M&Ms'
  4. Server-side: I started adding shims to get past Cloudflare, but quickly realized that is not a cat/mouse game I want to play.

So, the "IFrame" button will always be present/enabled on desktop view and may or may not work for any given link. Ironically, some links that fail to fetch metadata will load in an iframe.

Streamlined Modals to Reduce Memory ConsumptionHave reduced memory consumption by about 15-25% overall

Removed the embedded action modals (ban, remove submissions, etc) from moderation buttons and am calling the "shared" ones.

Ironically, this is basically putting those back to the way they were when I first forked from Photon. The problem, then, was that they weren't reactive and you had to refresh the page to see the results. Not ideal.

That was addressed with the new event dispatcher I added...

Switched from Bindings to Event Dispatchers/Listeners for ReactivityIn several places, variables were bound between 3 and 4 levels of components for the purposes of triggering state changes. This worked but was cumbersome and often left some things in the old state because there was no direct link between the component initiating the action and the one that needed to react to it.

I already used Svelte-native dispatchers in many places, but there were some components that didn't have a direct link to receive the dispatched events (similar to the bound variable conundrum)

Once I setup a global dispatcher, I started reconfiguring the reactivity to work with those events rather than binding everything down a huge chain of components.

This is expanding upon the reactivity enhancements first introduced in 1.4.2.

3
 
 

1.4.10

Release Notes

Bugfixes/Enhancements

  • [c8e541bd] Make capitalize class toggleable on modal titles; capitalize community names when rendering community profile modal
  • [8c78432a] Added missing modlog actions:
    • Transfer Community
    • Remove / restore community
  • [8c78432a] Remove 'reason' placeholder in modlog details and make reason a conditional display element
  • [f13796e8] Tweak @user@instance regex pre-processor to ignore patterns that are part of a URL (e.g. Mbin's stupid /u/@username actor id format)
  • [5a99e6d0] Add support for accented characters in hashtags
  • [e1ea16a3] Reimplement event handlers/forwarders in TextInput component so typescript doesn't bitch and moan
  • [d8b67208] Removed redundant hashtag badge-ifier step in markdown link renderer
  • [94b7080b] Tweak hashtag regex yet again
  • [b2bace2b] Remove unsed imports, including old Fediseer components, from PostMeta compoennt
  • [3a6b348b] Reimplemented access control logic to community settings and admin panel
  • [31d204e6] Fix reversed conditional on ban/unban result toast message.
  • [b5bbede3] Fix community profile avatar to use initials rather than adventurer icons as placeholders

Community Management

  • [cbb5fae1] Update community mod team management:

    • Indicate community owner / top mod with green badge
    • Add transfer community buttons for admins to assign a new owner/top mod
    • Add conditional verbiage describing mod team
    • Add keybinding to 'submit' when pressing enter when adding new mod
  • [4446918c] Community cards now indicate if the community is deleted

  • [42e4f09d] Mini modlog in community settings area no longer filters events; shows all relevant events for the community (previously, only showed a subset)

  • [94fa370f] Communities can now be deleted/restored by top mods

    • API will not let admins do this, but they can now transfer the communities to themselves and perform the deletes/restores
    • Admins can now "take over" communities if needed (button adds them as a community mod and transfers it to them)
    • Because I can't go one release without complaining about some stupid thing the Lemmy devs did, here's a fun fact:
      • If a top mod deletes the community and then disappears (or deletes their account), there is no way to undelete the community from the API level; you have to set deleted=false for the record via the database. Only top mods can delete/undelete a community, and even admins cannot modify the moderators if the community is deleted (which is a pre-requisite for transferring the community which is a pre-requisite for undeleting the community). :sigh!: No idea if that is addressed in 0.19.4 or 5.
  • [1d663b8f] Admins can remove/restore and hide/unhide local communities from the Community Settings page.


Docker Tags:

  • ghcr.io/asimons04/tesseract:1.4.10
  • ghcr.io/asimons04/tesseract:latest
  • ghcr.io/asimons04/tesseract:v1.4.10
4
 
 

1.4.9


Bugfixes

  • [179a4f6b] Disabled accidental hashtag badge-ification on post titles
  • [6635fba2] Ignore pre-linked hashtags during regex pre-processing
  • [b14e11b1] Bugfix/enhancement: Support 'foreign' hashtags that are already linked to outside sources
  • [93355eb0] Fixed weird post css inheritance putting 2rem margins (1 top, 1 bottom) on details > summary elements.
  • [048c1963] Add noreferrer to links
  • [76e64610] Fix bug when closing image upload modal via "X" button, current image and alt text not reset.
  • [904d21fe] Only collapse bot comments (if enabled) on /post pages rather than everywhere.
  • [91598f6c] Add step to Dockerfile to clear npm cache after installing runtime deps (image size ballooned up by 200 MB after file-type updated and required strtok3 as a runtime dependency; 99.9% of that was just npm cache).
  • [f3451a14] Enhancement/Change: Removed capitalize class from modal title element.

Changes

  • [c2cc4b70] Re-wrote User->Blocks page to better keep blocks in sync with UI state for reactivity purposes
  • [774192b8] [ad197935] Hide users from blocked instances.

New Features

Instance Blocking is More Powerful

a.k.a Instance blocking works like it should at the API level.

When you block an instance in Lemmy, what you're really doing is basically blocking all communities on that instance. You will still see posts to communities on other instances from users of the blocked one, and you will also still see them in the comments.

Not anymore (unless you like it like that).

There's a new option (disabled by default) under Settings -> Filtering -> Hide Users From Blocked Instances that will let you hide any content by users from a blocked instance.

Like the "Hide Posts/Comments From New Accounts" filtering option, there are some different behaviors / safety mechanisms for mods/admins:

Even with the option enabled, content will still be shown under the following conditions:

  • You are a moderator of a community and the post/comment is to that community
  • You are a local administator, and the post/comment is to a community local to your instance

The comment counts will not reflect the hidden ones (similar to when you've blocked a user, you'll see a higher count than is actually present).


Docker Tags:

  • ghcr.io/asimons04/tesseract:1.4.9
  • ghcr.io/asimons04/tesseract:latest
  • ghcr.io/asimons04/tesseract:v1.4.9

Note: If you downvoted the 1.4.8 release notes, maybe indicate why and I can address that, yeah?

5
 
 

See the "New Features -> Link Previews" section below for descriptions of the screenshot.

  • Full Changelog
  • Docker Tags:
    • ghcr.io/asimons04/tesseract:1.4.7
    • ghcr.io/asimons04/tesseract:v1.4.7
    • ghcr.io/asimons04/tesseract:latest

Changelog is pretty long this time, so use the link above for the full details. Only the highlights will be covered here.

Bugfixes, Tweaks, and Enhancements

Bugfixes / Tweaks

  • [Crossposts] Text-wrapped community names in crosspost list (typically when on mobile) no longer incorrectly center-justify themsleves
  • [UI] Fixed z-index for alternate source selector in /profile/user section to prevent it from showing over top of the nav bars when scrolling up
  • [Hashtags] Fixed regex pattern for hashtag detection so it should now fully ignore any inside code blocks or inline code ticks.

Enhancements

  • Brought Back the Discrete Listing Type / Sort Dropdowns: Based on feedback from users, I've brought back the discrete dropdowns in the nav bar for choosing the listing and sort options (they had been moved into the quick settings dropdown menu).
  • Quick Settings is now a Modal: The dropdown menu was becoming too cumbersome from a UX and maintenance perspective, so it was moved into a modal. The button for it was also moved to the right side of the navbar rather than the left.
  • Removed Context-Aware Search Button on Mobile: The context aware search (which will search the site, community, or currently-viewed profile depending on where you are) button has been removed on mobile to reduce clutter. Mobile users will need to use the main "Search" button in the main navbar and select the appropriate filter options.
  • Deprecated Support for /c/ and /u/ User and Community Links: Those formats will no longer be turned into links automatically and are discouraged. The preferred way to link a user in markdown areas is @[email protected] and, for communities, it's [[email protected]](/c/[email protected]).
  • Community Modals Now Work With "Unknown" Communities: The community modal has been extended to resolve the community prior to fetching it so that unknown communities can be resolved transparently when clicked. Unauthenticated/guest users will receive an error if clicking a community link that the instance does not "know" about (resolveObject is an authentiated call).
  • Misc: Various UI tweaks/polish where things weren't exactly uniform (modal action buttons, etc).
  • Misc: Added Quick Settings button to toolbar on post pages
  • Post Titles in Feed/Profiles: Fixed quirkiness with post titles. Can now middle-click post titles to open in new tab again as well as right-click to copy link (turned them back from buttons into links but keeping the 'button' behavior)

New Features

Link Previews

Under Settings -> General is a new option called "Preview Links in Modal". This is enabled by default but can be disabled. It is also under the quick options.

Clicking markdown links (in post body, comments, sidebars, etc) will do a server-side metadata fetch and render a preview. "Internal" links that load in Tesseract will not preview and simply use the user's "open links in new tab" preference.

The preview includes:

  • Link metadata if available (thumbnail image, embed video, description, title)
  • Alternate source selector
  • MBFC report (if available)
  • If link is to a supported media type (YT, Invidious, Piped, Soundcloud, Bandcamp, Spotify, Odysee, PeerTube, etc), will show the media as an embed
  • If metadata description contains links, they will preview in the same modal, and a "back" button will be enabled to return you to the previous preview.

e.g. If someone drops a bare Youtube link, it will render in the modal using your preferred YouTube frontend. Same for a Spotify, Bandcamp, etc link. The link is processed through the same rendering chain as posts, so any supported media should render as if it were posted to the feed.

It also has the alternate source selector and the MBFC plugin tied in, so a news article link in the comments can be vetted for credibility, previewed, and followed.

Post links are not tied into this since the post itself acts as the preview / renderer. This can be implemented, and easily, but it seems pointless to me. If I get feedback saying it should handle the main posts links through that, then I can enable it or at least make an option to.

Image Descriptions: The post image demonstrates the preview modal that's loaded when clicking the raw Youtube link in the comment shown above. The second image shows the preview for a news link posted in the comments of another post.

Badge-ified Community and User Links and Hashtags

Community and user links in post and comment bodies are now badge-ified and load the community or profile modals upon click (versus the old behavior of being a dumb link to the profile/community pages).

Currently, user links are blue, and community links are orange.

Hashtags are now converted into badges/flairs and are yellow.

6
6
submitted 2 weeks ago* (last edited 2 weeks ago) by [email protected] to c/[email protected]
 
 

This announcement covers both 1.4.5 and 1.4.6

(I really need to start disabling the UI debug button when I take screenshots lol)

1.4.6

Bugfixes

  • [Modlog] Fixed some filter selections not clearing from modlog when clicking "Reset Modlog Filters"

Changes/Enhancements

  • Post titles now render as markdown (merged from an old branch as I was unaware Lemmy-UI finally supports this)
  • If downvotes are disabled at the instance level, upvote buttons are now hearts

New Feature: Disable Downvotes

Users can now disable downvotes in the UI (regardless of instance settings).

When downvotes are disabled in the UI, the behavior is the same as if they were disabled on the server:

  • The "downvote" button is removed
  • Downvote counts are not shown (upvote counts are independent of downvote counts)
  • The "upvote" button becomes a "heart" icon (which acts like a "favorite" or "like" button on other platforms)

You can also combine this with the hide scores option. In that case, the button will just be a "heart" that's highlighted if you have upvoted/liked the post/comment and plain if you've not voted.

Note: If your instance already has downvotes disabled globally, then the UI option to disable them will be hidden since it would be useless.


1.4.5

Bugfixes

  • [Markdown Renderer] Fixed bug where trailing spaces on the end of a spoiler container would break the rendering

Enhancements

  • Add "Ground News" to the "Alternate Sources" dropdown
7
 
 

These notes cover 1.4.1 through 1.4.4 since I didn't do release announcements for them.

1.4.4

Infrastructure

  • Reworked dependencies and Dockerfile to reduce image size by 55% (444 MB -> 203 MB)
ghcr.io/asimons04/tesseract   1.4.4     567d91c9e56f   9 hours ago     203MB
ghcr.io/asimons04/tesseract   1.4.3     451323e66686   5 days ago      444MB

Bugfixes

  • Fixed bug where editing a post and changing the image would cause the image upload modal to disappear
  • Add try/catch and fallback behavior when migrating settings to fix bug discovered where a very, very old version of the settings is still in your local storage
  • Fixed omission of "Preview" button for tagline editor in admin panel
  • Force instance domain names to lowercase when storing into profile and setting guest instance

Changes

  • Put site taglines in card effect
  • Relative dates now auto update
  • Added ability to edit an existing tagline in admin panel

1.4.3

Bugfixes

  • Fix reactivity on subscribed status on community browser when switching instances.

Changes

  • Add 'Community Settings' button to community profile modal if you are a mod of the community or the community is local and you are an admin
  • Use 'capitalize' class on community display names to make them title cased
  • "Reasons" in modlog now render as markdown
  • Added additional Invidious instances

1.4.2

Starting with 1.4.1, I'm trying out a new, faster release cadence with just one or two feature updates per point release rather than larger releases every 4-5 weeks. Hopefully this keeps things feeling fresher and lets me focus on specific features rather than trying to overhaul everything all at once.

This release is all about enhancing the reactivity of Tesseract.

Bugfixes

None, for once. Doesn't mean there aren't any, just none new discovered or reported.

Misc Changes

  • Increased scroll height of quick settings
  • Added a few more quick options for easy access.
  • Changed card/compact switcher to toggle, moved into quick settings area

Reactivity Enhancements

Being able to do all the actions is great, but it's annoying to have to refresh the contents to see that they have taken effect. This release is working on increasing the reactivity througout the application for as many actions as possible.

User, Community, and Instance Blocking

The behavior has changed when blocking users, communities, and instances from the feed:

  • When blocking a user from the feed, all of their submissions in the current feed should now disappear.
  • When blocking a community from the feed, all posts to that community in the current feed will disappear.
  • When blocking an instance from the feed/instance menu, all posts from users on that instance and to communities from that instance will disappear.

Previously, at most, only the post where you initiated the block would disappear until you refreshed the feed. Now, all posts fitting the block criteria will be hidden immediately.

Community / Instance Bans

New: When users are community banned, they now they have green "no" symbols on them (I'm hitting the limits of Hero icons). This was not indicated previously.

Community and instance bans now dispatch events that update all relevant items:

  • Feed: Updates the banned indicator and, if selected, flag them as removed if "remove content" is selected while banning.
  • Post Page: Updates the post heading and any comments to indicate the user is banned and the post/comment removed.

Previously, only the item that initiated the ban action would be updated to reflect the new state. Now, all relevant items in the current view (feed or post/comment) will be updated to reflect the action(s) taken.

Subscribe / Unsubscribe

Subscribing and unsubscribing from the quick button in the community icon or the community modal will update all post cards with the new/current subscription state.


1.4.1

Infrastructure

  • Update SvelteKit from 1 to 2 and update underlying dependencies
  • Update other project dependencies to latest versions
  • Update NodeJS from 20 to 22
  • Update lemmy-js-client to 0.19.4 so latest features can be utilized.
  • Removed svelte/adapter-auto and only use Node adapter.
  • Remove some discrete, one-off logic and replace with shared/standardized components
    • Federation block/allow list editor in admin panel

Bugfixes

  • Fixed modlog action menus clipping
  • Fixes reactivity and blocked/unblocked status on profile modals and user pages. Added a call to getSite after blocking/unblocking to update person blocks list.
  • Fix mobile reflow in modlog
  • Fixed bug with non-default instance not showing
  • Fixed but with re-authenticating to the first profile (index 0 was getting ignored and creating a new profile vs reauthorizing)
  • Fix heading/icon in "Create" menu not being properly justified
  • Fixed bug when inline images are disabled, the link isn't shown
  • Fixed bug when refreshing profile page, sometimes the wrong comment data would be shown in the edit of another comment (added index to 'each' iterator)
  • Fixed bug where setting the guest instance required clicking it twice to update the site info / logos.
  • Non-embed media posts were showing full URL regardless of user setting to only show the domain

New Features

Community Profile Modals

When clicking on a community in the feed, instead of taking you directly to the /c/ community page, a modal will pop up with relevant options for the community. Works the same way as the user profile modal.

  • Browse Community
  • Create Post
  • Modlog
  • Favorite/Unfavorite Community
  • Add/remove community to group
  • Subscribe/Unsubscribe
  • Block / Unblock Community
  • View Community Details
  • View Community Moderators (click the mod username entries to bring up their profile modal + options)
  • Zoom in on the community icon

Post Flairs

There's a new user option, enabled by default, that will extract any [tag] items from post titles and convert them into flair badges. Anything in [] in the post title will be converted into a flair tag, and the [whatever] removed from the displayed title.

It also supports nested, comma-delimited flars in the same brackets. e.g. [Music, Sludge Metal, 2000s Rock] becomes [Music] [Sludge Metal] [2000s Rock].

Clicking a flair badge will perform a prepared search for other posts with the same flair (e.g. search?type=Posts&q=[tag]). They work more or less the same as hashtags do (if you have those enabled).

This had been half-implemented in a branch for some time now, but I wasn't sure if other front-ends were handling them in a similar way. Saw an post from the Photon dev saying they're adding them, and it's compatible with my implementation, so figured it was time to dust off that branch and merge it in.

Misc Changes

  • Removed Fediseer badge option for posts (rarely used and accessible via Instance menu and from instances page)

    • I'm assuming rarely used. I don't (and won't) have any kind of telemetry, but from the instances I have seen running Tesseract in the wild, none have had those badges enabled.
  • Removed the "Community" menu from posts; all of those options are now available in the Community Profile modal (access by clicking the community name in the post heading)

    • Also allows accessing these options from comments (such as on profile pages) which normally do not have the "Community" menus.
    • The option "More from {user} in {community} has been moved to the post action menu.
  • Removed "Block {user}" from post action menu; access it from the user profile modal by clickin the user's name in the post/comment header.

  • Add dark/light theme switcher to sidebar footer (near logo/version and Lemmy/Matrix/Github buttons)

  • Removed background on image zoom toolbar

  • SettingEditArray component is now filterable and can accept a comma-delimited list of entries

  • De-cluttered main menu (top right).

    • Removed User Settings Button
    • Removed App Settings Button
    • Added "Settings" button to go to /settings, moved to old "User Settings" slot
    • Moved "Manage Accounts" out of profile submenu and into main menu
  • Added user profile settings to /settings in addition to the application settings

    • Still accessible from Profile->Settings
  • Slight updates to admin panel

    • Changed layout of tagline editor
    • Taglines are now previewed as markdown (as they would be elsewhere)
    • Federation block/allow list configuration now uses the SettingEditArray component rather than being a discrete editor.
8
 
 

1.4.2

Starting with 1.4.1, I'm trying out a new, faster release cadence with just one or two feature updates per point release rather than larger releases every 4-5 weeks. Hopefully this keeps things feeling fresher and lets me focus on specific features rather than trying to overhaul everything all at once.

This release is all about enhancing the reactivity of Tesseract.

Bugfixes

None, for once. Doesn't mean there aren't any, just none new discovered or reported.

Misc Changes

  • Increased scroll height of quick settings
  • Added a few more quick options for easy access.
  • Changed card/compact switcher to toggle, moved into quick settings area

Reactivity Enhancements

Being able to do all the actions is great, but it's annoying to have to refresh the contents to see that they have taken effect. This release is working on increasing the reactivity througout the application for as many actions as possible.

User, Community, and Instance Blocking

The behavior has changed when blocking users, communities, and instances from the feed:

  • When blocking a user from the feed, all of their submissions in the current feed should now disappear.
  • When blocking a community from the feed, all posts to that community in the current feed will disappear.
  • When blocking an instance from the feed/instance menu, all posts from users on that instance and to communities from that instance will disappear.

Previously, at most, only the post where you initiated the block would disappear until you refreshed the feed. Now, all posts fitting the block criteria will be hidden immediately.

Community / Instance Bans

New: When users are community banned, they now they have green "no" symbols on them (I'm hitting the limits of Hero icons). This was not indicated previously.

Community and instance bans now dispatch events that update all relevant items:

  • Feed: Updates the banned indicator and, if selected, flag them as removed if "remove content" is selected while banning.
  • Post Page: Updates the post heading and any comments to indicate the user is banned and the post/comment removed.

Previously, only the item that initiated the ban action would be updated to reflect the new state. Now, all relevant items in the current view (feed or post/comment) will be updated to reflect the action(s) taken.

Subscribe / Unsubscribe

Subscribing and unsubscribing from the quick button in the community icon or the community modal will update all post cards with the new/current subscription state.


Get Tesseract

9
2
submitted 1 month ago* (last edited 1 month ago) by [email protected] to c/[email protected]
 
 

1.4.1 is mostly a bugfix / under-the-hood release, though there are some new things as well as several refinements to old things (see Misc Changes below).

This is the first of a few releases that's going to focus on addressing some feedback I've gotten that basically boils down to "too many buttons". I agree with that completely, and this release eliminates at least one of them.

Say Goodbye to 'Community Menu' and Hello to Community Modals

The "Community" menu button on posts has been completely removed, and all of its features (and more) have been moved to the newly created Community profile modal. When you click on the community name in the post header, instead of being taken to the /c/ community page, it brings up a modal with the community icon, banner, description, moderators, and a list of action buttons. It does for community links what the user profile modal did for user links in the last release.

Another benefit to this is allowing access to the community details / sidebar info while on mobile. It used to have that ability, but it was ugly and kludged on, so I removed it several versions ago. Now it's available again, and implemented in a way I like.

Community profile modal

Community profile modal with the community details/sidebar info expanded.

Moderators are shown in the bottom of the community details accordion.

Post Flairs

There's a new user option, enabled by default, that will extract any [tag] items from post titles and convert them into flair badges. Anything in [] in the post title will be converted into a flair tag, and the [whatever] removed from the displayed title.

Clicking a flair badge will perform a prepared search for other posts with the same flair (e.g. search?type=Posts&q=[tag]). They work more or less the same as hashtags do (if you have those enabled).

This had been half-implemented in a branch for some time now, but I wasn't sure if other front-ends were handling them in a similar way. Saw an post from the Photon dev saying they're adding them, and it's compatible with my implementation, so figured it was time to dust off that branch and merge it in.

It also supports nested flairs: if there are multiple, comma-delimited words in the brackets, each one will be applied as a flair.

Debug view showing original post title for the above:

1.4.1 Changelog

Infrastructure

  • Update SvelteKit from 1 to 2 and update underlying dependencies
  • Update other project dependencies to latest versions
  • Update NodeJS from 20 to 22
  • Update lemmy-js-client to 0.19.4 so latest features can be utilized.
  • Removed svelte/adapter-auto and only use Node adapter.
  • Remove some discrete, one-off logic and replace with shared/standardized components

Bugfixes

  • Fixed modlog action menus clipping
  • Fixed reactivity and blocked/unblocked status on profile modals and user pages. Added a call to getSite after blocking/unblocking to update person blocks list.
  • Fix mobile reflow in modlog
  • Fixed bug with non-default instance not showing site icon/banner correctly
  • Fixed bug with re-authenticating to the first profile (index 0 was getting ignored and creating a new profile vs reauthorizing)
  • Fix heading/icon in "Create" menu not being properly justified
  • Fixed bug when inline images are disabled, the link isn't shown
  • Fixed bug when refreshing profile page, sometimes the wrong comment data would be shown in the edit of another comment (added index to 'each' iterator)
  • Fixed bug where setting the guest instance required clicking it twice to update the site info / logos.~~~~

New Feature: Community Profile ModalsWhen clicking on a community in the feed, instead of taking you directly to the /c/ community page, a modal will pop up with relevant options for the community. Works the same way as the user profile modal.

  • Browse Community
  • Create Post
  • Modlog
  • Favorite/Unfavorite Community
  • Add community to group (not yet plumbed in)
  • Subscribe/Unsubscribe
  • Block / Unblock Community
  • View Community Details
  • View Community Moderators (click the mod username entries to bring up their profile modal + options)
  • Zoom in on the community icon

Misc Changes

  • Removed Fediseer badge option for posts (rarely used and Fediseer is accessible via Instance menu and from instances page)

    • I'm assuming rarely used. I don't (and won't) have any kind of telemetry, but from the instances I have seen running Tesseract in the wild, none have had those badges enabled.
  • Removed the "Community" menu from posts; all of those options are now available in the Community Profile modal (access by clicking the community name in the post heading)

    • Also allows accessing these options from comments (such as on profile pages) which normally do not have the "Community" menus.
    • The option "More from {user} in {community} has been moved to the post action menu.
  • Removed "Block {user}" from post action menu; access it from the user profile modal by clickin the user's name in the post/comment header.

  • Changed the button layout in the User Profile modal.

    • "View User on Their Home Instance" button has been shrunk to just a "Home" icon and is in the same row as "Go to Profile"
    • Added a new, small button (also inline with "Go to Profile") that will open the profile in a new tab/window
    • Same as above, but for user modlog
    • Shrunk "Copy Lemmyverse Link" button to just a "Share" icon button, moved inline with "Search for Alts" button.
    • Added new button to copy the actor ID (rather than Lemmyverse link). It is the "Link" icon next to the Lemmyverse button
    • Block User button now fully reactive
  • Add dark/light theme switcher to sidebar footer (near logo/version and Lemmy/Matrix/Github buttons)

  • Removed background on image zoom toolbar

  • SettingEditArray component is now filterable and can accept a comma-delimited list of entries

  • De-cluttered main menu (top right).

    • Removed User Settings Button
    • Removed App Settings Button
    • Added "Settings" button to go to /settings, moved to old "User Settings" slot
    • Moved "Manage Accounts" out of profile submenu and into main menu
  • Added user profile settings to /settings in addition to the application settings

    • Still accessible from Profile->Settings
  • Slight updates to admin panel

    • Changed layout of tagline editor
    • Taglines are now previewed as markdown (as they would be elsewhere)
    • Federation block/allow list configuration now uses the SettingEditArray component rather than being a discrete editor.

Get Tesseract

10
6
submitted 2 months ago* (last edited 2 months ago) by [email protected] to c/[email protected]
 
 

Changelog for 1.4.x Series (Intrepid)

1.4.0

This is the first release which completely drops "legacy" support for 0.18.x and below. The minimum required API level is now 0.19.3 (though it will work with any 0.19.x series, there will be broken features that require 0.19.3).

None of the 0.19.4 features are implemented yet. Updating my instance to 0.19.4 is not on my priority list at the moment, though I really wished the media listing was present when I added the new media handling stuff. :sigh:

I'll probably be working on the 0.19.4 features sometime soon as I would like to finish what I had in mind for the media handling, and 0.19.4 provides the missing piece.

Anyway, here's what's new and improved:

New Features

Zoomable ImagesMost images are now zoomable: post images, user/site/community avatars, images posted in comments, etc.

All the pan/zoom libraries I tried suuuuuuucked, so I ended up rolling my own from scratch. The pinch zoom isn't quite where I want it, but it's a start. If anyone wants to contribute some code for improving that, please let me know.

  • Support zoom, pan, and rotate
    • Mouse scroll to zoom
    • Click/grab to pan
    • Rotate via on-screen buttons
    • Double-click to quick zoom in/out by 2x
  • Gesture support
    • Pinch zoom in/out
    • Swipe up to zoom in
    • Swipe down to zoom out
    • Swipe left or right to close the zoom modal
    • Other gestures may be added once I figure out a clean way to differentiate them from conflicting mouse events

Basic Gesture SupportFirst, I should point out that I am not a fan of gesture navigation; absolutely hate it as a primary method of interaction. I'm old and hate having to guess whether my fingers need to do the Macarena or the Hokey-Pokey to perform what should be an intuitive action.

That said, I do like waving things (and people) away.

To that end, I've added some gesture recognition in a few places, mostly modals. Any modal can now be dismissed with a left or right swipe in an area not bound by other event handlers.

  • e.g. You can't swipe in the text field to dismiss an edit/report/ban/remove modal; you have to swipe outside of that.
  • Left/right swipe was chosen as to not interfere with scrolling so it could be used consistently across all modal types.

The only other place, currently, with gesture support is the image zoom modal (described above).

I may add some additional swipe actions where it's intuitive to do so. For now, I'm content with modals being easier to dismiss on mobile without having to reach up to the close button in the top corner.

User Profile ModalsClicking on usernames throughout the application will now load a modal with their user card and relevant action buttons. Old behavior was taking you to their profile directly.

Actions include:

  • Go to profile
  • Message in Lemmy / Matrix
  • Block User
  • Search for alts / simiarly-named accounts
  • Ban user from instance (admins only)
  • View user on their home instance
  • Copy Lemmyverse link for user

Image Management on Posts/Comments

  • Images can be pasted in the post's URL field as well as in the markdown editor.
  • Images can optionally be pre-processed to webP along with a user-selectable quality level. Especially useful if your instance limits the size of uploads
  • Can delete post images (only before you save the post; unfortunately there's no way to retrieve the delete token after that even though it is stored in the DB. Yet another API limitation :sigh:)
    • This is addressed in 0.19.4, but I don't have support for that yet.
  • Images pasted/uploaded into the markdown editor are tracked in a bar along the bottom of the editor. Individual images can be deleted as needed along with the corresponding markdown code for them.

Hide Posts/Comments From New UsersIn App Settings -> Filters, you can now opt to hide posts/comments made by new users. You can also set the number of days an account is considered new: 1 to 30 days. That setting also is applied to the new user badges (if you set the minimum age to 15 days, any account 15 days or younger will show the new user badge).

This setting behaves differently for mods and admins:

  • Mods: Filter will be applied to all posts/comments except in communities of which you are a moderator.
  • Admins: Filter will be applied to all posts/coments except those made to communities local to your instance or those made to remote communities of which you are a moderator.

Comments made by new users will be hidden, and that includes any replies (essentially behaves the same way as blocked users)

Federation State ViewerFrom the instances menu on a post, there's a new option called "Federation Stats" which will show you the stats from your instance to the target and from the target to your instance. Also included in that is an estimated cacluation of the number of activities each instance is behind (useful for troubleshooting federation delays).

This information has also been added to the instance items at /instances

Please note that the "Activities behind" counter is only an estimate. The value for newest_activity_id is not provided by the API (because that would be useful, so why would the Lemmy devs include it?), so it has to be estimated. The estimation is done by looking at the last_successful_id of all the linked instances and grabbing the highest number and subtracting the last_successful_id for the selected instance. Not all of those activities would necessarily be coming to your instance (votes/posts/comments to communities yours isn't subscribed to, etc), so it is merely an estimation. Just because it shows you are behind by X number doesn't necessarily mean it's behind by that many.

Instances PageRe-wrote this to do manual pagination, searching, and filtering. Much more responsive now that it is not rendering several thousand components each with actions items.

"Click to Play" Media EmbedsIf media is disabled in the feed, the thumbnail will now have an overlay button that will convert it to an embed on-the-fly.

When loading a video via click-to-play, I'm conditionally setting the "autoplay" flag where the embed API supports it, but it doesn't always seem to be honored. This is an attempt to not have to press "play" twice for a video. So far, the only video frontend that seems to honor it is YouTube. Invidious/Piped, so far, do not, and neither does PeerTube.

Ok, so autoplay works if muted (no idea how YouTube's player gets around this; probably some chicanery). I think that's worse because you still have to click twice on the videos, and the "unmute" button is harder to reach than "play". So I think I'm going to just settle on having to click play twice.

This seems to be be a Chrome/Chromium thing (and explains why YT gets to bypass this). In Firefox, the autoplay flag is respected without having to mute the video.

Re-Integrated Piped Support as an Embeddable Youtube FrontendNow that click to play has been added, Piped support has been added back. It was removed due to poor performance and rate limiting when used with feed embeds.

If media embeds are enabed in the feed, only YouTube frontend will show direct embeds. Piped/Invidious will always be click to play regardless of embed setting due to above mentioned rate limiting / performance.

Alternate Source Dropdown / Archive LinksRemoved the [Archive Link] next to the post URL and replacd it with a fancy menu to the left of it.

  • On posts with links, it currently has buttons to search for the article at Archive Today, Ghost Archive, and 12ft.io
  • On Youtube-like posts, can select alternalte links for YouTube, Invidious, or Piped
    • Invidious/Piped will open with your preferred instance (defined in settings)
    • Useful if someone posts a video to an Invidious instance that performs poorly for you and you would prefer to view it on your preferred Invidious/Piped instance or canonically on YouTube.

Quick Action MenusOn mobile, the navbar was getting cluttered, so most of the discrete dropdowns there have been moved into Quick Actions menus.

  • Main, Community, and User feed pages: Quick Actions has replaced all discrete menus
  • Search Page, Modlog, instances page, and Community Browser: All of the filtering options are in a quick action menu

Users Can Now Add Their Own Preferred Invidious/Piped InstancesPrior to this release, any Piped or Invidious instances needed to be added by the administrator via environment variables. In addition to that, users can now add any number of custom Invidious and/or Piped instances in the app settings.

These will be combined with the built-in list and the admin-extended list and be available for use as your preferred YT frontend and for detection of Piped/Invidious links in posts.

Be aware that those custom instances will only render as embeds for you; they will be thumbnails for anyone else who hasn't added them to Tesseract. If you feel that instance should be added to Tesseract's built-in list, please submit a Github issue with the details.

Tesseract is pre-populated with the official list of public instances for each, but it can get out of date easily.

Note: As of 6/20/2024, I've noticed a lot of Invidious/Piped instances are now requiring login, and embeds through them no longer work. I believe if you have an account with one, log in, and enable 3rd party cookies for that domain, the embeds should work. I have not tried that, but it does work with Spotify. This isn't a Tesseract bug, unfortunately, or I'd fix it.

Can Disable Infinite Scroll if you WantIf you're not a fan of the infinite scroll, you can go to App Settings -> Feed and disable infinite scroll.

TOTP 2FA SetupCan now enable and enroll in 2FA as well as disable it.

Account Icons Now Use Your Profile AvatarIcons in the account switcher and account screens now sync to your profile avatar, if defined.

New Placeholder User AvatarsInstead of the initials as used previously on accounts without avatars, now uses Dicebear Adventurer pseudorandom avatars. Initials are still used for placeholder community icons when the community mods haven't set one.

Passwords Can Now Be RevealedAll password elements will now allow you to toggle them to reveal. Should make a big improvement when logging-in on mobile.

Vote Viewer (Admins Only)Admins can now see votes like in Lemmy-UI. Uses infinite scroll and deduplication to compensate for the stupid API that returns multiple/duplicate votes on each page.


Bugfixes and Enhancements

Removed 0.18.x Backwards Compatibility

  • Or, more specifically, removed 0.18.x JS client and the extensions I wrote to make that compatible with 0.19.x. Now uses the 0.19.3 JS client.
  • Removed the image upload proxy which was needed in 0.18x due to CORS restrictions.

Various Enhancements to Auth Module.

  • Added safety check so that the auth token is only ever sent to the profile's associated instance and cannot accidentally send to non-home instance (e.g. when browsing communities on a remote instance).
  • Fixed a few chicken/egg situations where the profile store needed to be accessed before it was initialized
  • If your auth token is invalid, such as after changing your password on another device, you will get a toast message you can click to take you to the login screen.
  • If a profile exists for a username/instance combo, logging in will update the auth token for that existing profile rather than creating a new one.
  • User avatars are now fetched when logging in.

Grace Period Before Media Embeds are Destroyed When Scrolling out of Viewport

  • Embeds now have a short timeout when leaving the viewport before they're removed from the DOM and turn back into thumbnails. Fixes annoyance when resizing the window while a video is playing and the video temporarily leaves the viewport and is destroyed. Timeout is 2 seconds and will reset/disarm if the post returns to the viewport before it expires.

Community Creation / Editing

  • Uses new upload handler for banner/icon
  • Can pre-process the banner/icon to webP before uploading
  • Shows a live preview of how the community card will look

General

  • Slightly darkened background color in light mode cards (bg-white->bg-slate-100) for better contrast. Did similarly for some button colors
  • Added "OpenDyslexic" as a UI font option
  • Can now close modals with Escape key, close button, or by swiping left/right
  • Added button to reveal password fields
  • Some modals can be closed by clicking out of them.
    • I need to disable this or make it more consistent. Some workflows utilize nested modals, so I do need to be able to keep them open when interacting with a child modal.
  • Added "share" link for searches.
    • Will generate a URL with the current search params and copy to your clipboard.

Other Stuff

Peertube Follows

On my last release post, someone mentioned that following Peertube channels may be broken. At the time I was still on 0.18.5 and had followed a PT channel, and seemed to be getting updates from it. Then I wasn't sure.

I can say that I have been getting at least some updates to the PT channel I follow (mostly as a test). While there have been videos posted there that did not come through to Lemmy, I don't know enough about PeerTube to know if they were published differently or what. However, I have gotten at least 2-3 that someone posted to Lemmy that would absolutely had to have come in via Federation.

Also confirmed that commenting on a PT video (from the channel feed, not an embed to a Lemmy community) does federate out and show up on Peertube's side along with any votes you give in Lemmy.

This isn't really a Tesseract issue since the Lemmy backend handles that. Just figured since I do support Peertube, it would be worth mentioning that it seems to work.

What Didn't Make the Cut This Release

  • User profile import/export
  • Link previews
  • Custom feed rewrite
  • Custom emoji management
  • Fediseer Rewrite

I keep kicking the can on the custom feed and infinite scroll re-writes, but for a good reason. I want to start using IndexedDB to get around storage constraints in the browser's LocalStorage API. I need to write and integrate a library for this (or find one I don't hate), and that's going to take some dedicated development time. Switching to IndexDB is also a step in the direction I want to go towards providing offline support. So, at some point, there will be a release that only focuses on that. Not sure if it'll be in the 1.4.x series or later, but ultimately, that is where I want to go.

Get Tesseract

11
0
submitted 3 months ago* (last edited 3 months ago) by [email protected] to c/[email protected]
 
 

Finally releasing 1.3.0. I didn't quite rip it down to the studs, but it was damn close. Much of the UI has been re-written as well as a lot of the underpinning helper functions. There's a lot of changes, though most are just enhancements and polish to things that already existed in 1.2.9.

The full changelog is a beast, so I'll only post the highlights here:

Highlights for 1.3.0

API Compatibility

1.3.0 "Defiant" remains fully compatible with both 0.18.x and 0.19.x. This will be the last version to support 0.18.x. Once development of 1.4.0 begins, the minimum supported API version will be 0.19.3.

0.19.x Features Supported

0.19 has had basic support (mostly auth) since 0.19.0 was released. In addition, 1.3.0 now offers a few more features that become available when connecting to an 0.19.x instance:

  • Scaled sort becomes available
  • Instance block becomes available
  • Instance blocks are managable through your Profile->Blocks page.
  • Cursor-based pagination is used if available but falls back to offset-based for 0.18.x

General

  • Whole UI has been polished. See the changelog for the full list of changes since 1.2.9
  • Removed markdown-it and all of its plugins as it was too cumbersome to extend to do some things I wanted to do and replaced it with svelte-plugin-marked. Wrote custom renderers to replicate the functionality of markdown-it-html5-embed and spoilers.
  • New community moderation capabilities (directly ban/unban users, localized modlog with quick actions)
  • Sidebar fonts are now more compact
  • Long community names are intelligently shortened where needed
  • You can now select one of several fonts to use for the UI. The default font is now Roboto.
  • New notification widget
  • Option to hide those obnoxious "anti AI" CC licenses people put on their posts/comments that they somehow think will prevent LLMs from training on their submissions. ๐Ÿ™„
  • Posts with URLs will now have an [Archive Link] next to them which will automatically search archive.ph for that URL. Please stop commenting "Paywalled" when someone posts an article.
  • "Copy Lemmyverse Link" added to user profile menus
  • Can now change password without having to go through "forgot password" process (I swear I thought I already implemented this, but I guess it never got merged in. Oops)
  • Bugfixes: too many to list

Search

This deserves its own section since the search was completely revamped.

  • Search filters cleaned up and polished
  • Can now search from community or user pages which will automatically filter the search to just that community/user
  • Added a "More from {user}" option to the community menu on posts. This will search for posts by that user in the current community.
  • #Hashtags are now automatically converted to search links

Remote Instance Community Browser Revamp

  • Can now one-click subscribe to communities on remote instances
  • Your subscription status for communities is now reflected against remote instances
  • Got rid of modal to view community info. Each item is now a collapsible item; expand to see community details.
  • Admins can specify a list of instances that will pre-fill the instance selector for quick browsing. Users can enter any instance they want also.

/instances Page

Can now view federated instances (allowed, blocked, linked) through Tesseract. Additionally, you can filter by software (Lemmy, Kbin, etc) and keyword as well as hide dead instances.

Each instance also has action buttons to view communities there (Lemmy only), visit the instance, view a Fediseer report for it. Dead instances are also indicated with a "thumbs-down" icon.

Instances are considered "dead" if they haven't been pinged in > 3 days.

Media

  • Peertube videos now embed seamlessly. You can already follow Peertube channels in Lemmy, and now they'll show as a feed of embeds.
  • Embeds now only render when they're in the viewport. Once an embed is out of the viewport, the iframe is destroyed and removed from the DOM. This saves a LOT of memory.
  • Can enable an option to show alt text as a caption on images in markdown (not post images, but images in the post body and coments).

Feed & Posts

  • Added buttons on community avatars to quick subscribe/unsubscribe (ok, saw that Photon did that and implemented it almost exactly the same. Sue me).
  • "Explore" menu is now "Instances" menu. Instance-specific options are here such as Fediseer reports, block that instance (0.19+), and browse communities there.
  • Infinite scroll is now the default.

Post Creation

In addition to the polish and cleanup, the form to create posts has some new features:

  • Can now pull the metadata from the given URL to pre-populate the title and pull a thumbnail for previewing
  • Uploading images can now use the image proxy URL to reduce load on the API server (if media proxy/cache is enabled by admins and users enable it in their settings)
  • Can preview in both card and compact views

Modlog

Lots of tweaks and polish, now has quick action buttons that can be used to reverse a previous action or take additional actions. You can also easily turn a temp ban into a permaban without the intermediate step of unbanning first.

Features That Did Not Make It Into 1.3.0

There are only two features that didn't make the cut:

Reimplement custom feeds

Since this is the last 0.18.x release, and I'm having to support both cursor and offset-based pagination, I've decided to push the custom feed rewrite to 1.4.0 which is dropping 0.18.x support. That will make implementation easier and cleaner than having to support both methods.

TOTP 2FA Setup

Same as with the custom feeds, I want to do this cleanly. Since 0.18.5's TOTP setup is bonkers and can easily lead to accounts being locked out, I've decided to skip adding this until 0.19.x is the minimum-supported version.

Get Tesseract