Moonlander Dev Log #1: March 20 to 22

2021-03-22


Welcome to the first (and hopefully not the only) Moonlander Dev Log! In here I'll try to quickly go over whatever I've done from March 20 to March 22, 2021. Two days might seem like a short time, but I haven't had the time to get bored of Moonlander yet, so there's a lot in here.


Here is a list, in somewhat chronological order:


Full-Width tabs


This is an early addition, and is default, so your version of Moonlander probably has it already enabled. (You *do* use Moonlander, right?)


This was actually mostly made because I couldn't make the close button with "regular" tabs aligned to the right properly. Try disabling it if you want, it's in the config file.


Gemini input support


These are the 1x status codes your search engines and whatnot use to ask you for input. Unlike most clients that pop up a dialog, Moonlander instead uses the entire tab view to ask for input, which is mostly because it makes better sense with the internal architecture of the application, but I will claim any usability benefits it has to smart thinking so yeah.


Screenshot [7 KB PNG Image]

Tests


This isn't a user visible change, but some components of Moonlander are now automatically tested for each build. Currently, it's the Gemtext parser, Gemini protocol header parser, and the TLS trust-on-first-use implementation, mostly because they were the easiest to do so.


I will not claim these tests (and there are not much) are effective at preventing bugs (though one bug on the Gemtext parser did get fixed while making tests), but they are there, and that's what matters, right?


UI Logic Rewrite


Here's the thing. Up until now, Moonlander's UI was driven mostly by two files with a combined line count of 900-ish lines, and was barely maintainable. If you ever saw a "moonlander+error:..." URL while using Moonlander, that was one of the reasons why.


This was a risky move that, in my opinion, has already paid off. What I did here was, I disabled the existing code, and just created a new UI, peeking and occasionally copying parts from the older one.


Obviously, doing this has resulted in me not implementing some important parts that are still getting added and there might even be issues I just forgot about (throw some unimplemented!()s and todo!()s and call it a day)


This is why, on the README, there is a link to an older build letting people know that "Hey, if something isn't working now, check this one. If it works there then tell me about it!"


Oh also -- This was another "invisible" change. I changed the logic behind the UI, but the UI itself has stayed the same. Might be confusing, but whatever.


Styling links by their URL schemes


It might get confusing clicking on a link to see nothing happen (since it loaded in your web browser as it was a HTTP link). To prevent this, I implemented a way to style URLs by their schemes.


The default config has some schemes colored differently, but if you ran Moonlander before this change, your config will NOT be updated to reflect this. Either remove your config and let Moonlander re-generate it, or set them up manually.


Unfortunately, the current implementation relies on a hard-coded list of schemes. Currently, these are "http", "https", "gemini", "gopher". Adding more is mostly a single line change so don't hesitate to yell at me if people actually link to other stuff too.


Screenshot [31 KB PNG Image]
Moonlander Configuration Documentation [HTTPS]

Image viewing


Moonlander can now view images! Currently this is limited to full-size images and you have to scroll around to see them in their entirety, but it's better than what it did before, which was to just crash.


I don't have a good screenshot for this, so you'll just have to try it out yourself.


File downloads (for some file formats)


Moonlander will automatically start downloading files (in memory) if it can't view them. You can either choose to save to an actual file, or close the tab if you don't want to. (Assuming it doesn't crash, I really haven't tested that part)


This is a bit weird to use when coming from just about everything else, but Moonlander currently cannot "decline" any download. Which probably isn't that great but whatever.


Eventually, I'd like to have an option to download every link, but it's just not there yet.


Screenshot [11 KB PNG Image]

End


And that's the last two days. To follow what I'm doing in real time, follow me on Mastodon, where I've spammed Moonlander dev updates so much I am surprised how people keep following me still...


@admicos@mastodon.social [HTTPS]

And if you aren't using Moonlander yet, you know what to do:


https://sr.ht/~admicos/moonlander

🐺 · CC BY-SA 4.0 · me@ecmelberk.com