1
0
submitted 4 months ago* (last edited 4 months ago) by ptz@dubvee.org to c/tesseract@dubvee.org

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

2
0
submitted 5 months ago* (last edited 5 months ago) by ptz@dubvee.org to c/tesseract@dubvee.org

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

3
0
submitted 6 months ago* (last edited 6 months ago) by ptz@dubvee.org to c/tesseract@dubvee.org

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)
  • Action bar for posts/comments is now reversible. Primarily intended for mobile when you want the vote buttons to be on the right-hand side.
  • 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

Feel free to play around with the demo instance (it's unlocked and can log into any Lemmy instance), but ideally, you'd host it yourself or ask your instance admins to offer it as an alternate UI.

Tesseract

0 readers
1 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 1 year ago