Age | Commit message (Collapse) | Author |
|
|
|
|
|
Making URL encoding a little less convoluted. Now when sending out a request, the URL is fully encoded except for reserved characters. In the internal representation, non-ASCII characters are in decoded form (i.e., IRI).
This means that if the user enters a URL in the input field manually, its non-ASCII characters will be percent encoded as well. However, in this case the user is expected to manually escape all reserved characters because the input field can't tell the difference between what is intended to be a reserved separator and what isn't. For example, a server might expect &-separated fields, and if the user enters such fields manually in the URL field, they shouldn't be converted to %26.
When forming a query URL in the input dialog, user-entered text is fully percent-encoded because in that case the input is just a generic text string.
IssueID #410
|
|
Warnings about lost precision.
|
|
Resources are now stored in a ZIP archive, and it comes with an explicit version number. All the old embed/bincat stuff was removed as unnecessary.
resources.lgr is also a valid fontpack, for loading the built-in fonts.
IssueID #363
|
|
|
|
Media still needs more work to get rid of redundancies and make lookups faster.
FontPacks are manipulated as Media items (not unlike images) so they can be previewed on page, and installed via a click.
FontPack management is not trivial as it includes such details as versioning and whether individual packs are enabled or disabled.
|
|
|
|
IssueID #276
|
|
Socket can now tell us how much data is being sent, so the upload progress can be monitored.
|
|
There may be a bug in `TlsRequest` when sending out large amounts of data.
|
|
`UploadWidget` allows entering long-form text or dropping a file for uploading.
InputWidget isn't yet well suited for really long documents... Some optimizations will be needed.
|
|
|
|
The user is able to ignore certificate expiry and continue loading the page regardless. This adds a one hour exception to the expiration date.
|
|
If a server sends a different certificate (checked by matching public key fingerprints), abort the connection at the TLS handshake stage.
A new error page is shown explaining the situation. A button is provided for conveniently opening Page Information, where trust can be updated.
The file format of "visited.txt" was updated, so it is now called "visited.2.txt". The new format includes server port numbers, and the fingerprints are calculated based on public keys.
IssueID #308
IssueID #309
IssueID #310
|
|
|
|
|
|
Symbola's license is not permissive enough, so it has been removed. Added "Smol Emoji" with face emoticons and other UI characters for Lagrange. More symbols provided by Noto Sans Symbols and Noto Sans Symbols 2.
The fallback fonts are now Iosevka, which has a pretty good coverage (although monospace), and the user's chosen TrueType font (which could still be a local copy of Symbola).
Still a work in progress: some characters are missing.
IssueID #283
|
|
`GmRequest` should use the correct path separators on Windows in
native paths.
|
|
|
|
`Gempub` opens and parses a Gempub archive and provides access to the contents in a common way.
|
|
It is conceivable that a newly created GmRequest gets the same memory location than the one just destroyed.
IssueID #148
|
|
Use MIME hooks to generate a Gempub cover page with a preloaded cover image.
This required applying MIME filtering to "file://" requests as well.
Todo: More cleanup, add a gempub.c.
|
|
One is now able to view directory and ZIP archive contents using file URLs.
Directory contents are shown as a list of links, enabling previewing supported formats. A link to the parent directory is included at the top of the page.
ZIP archives behave like directories, except they also recognize "index.gmi" and "index.gemini" files and display them instead of the regular directory index (when viewing a directory inside a ZIP archive). This enables archiving a Gemini capsule and browsing it as a ZIP archive.
Added a preference to disable loading of index pages.
|
|
Allow a certificate for a higher-level domain to be verified against any subdomains, i.e., implicitly assume every certificate uses wildcards.
CA verification is still done separately, and OpenSSL does that strictly as before.
|
|
IssueID #192
|
|
IssueID #200
|
|
If the CA file/path are configured in preferences, trust CA verification
over manual TOFU checks.
|
|
IssueID #181
|
|
|
|
If no user-configured MIME hooks handle an Atom XML document, it will
be translated using a built-in filter hook.
Only Atom is supported.
IssueID #78
|
|
Lagrange will retain URL fragments when parsing gemtext, but will strip them when making requests or when a DocumentWidget's URL is set. This allows opening URLs with fragments in an external browser.
IssueID #128
|
|
A patch courtesy of John Cowan.
IssueID #106
|
|
Good old mutable vs. non-mutable argument confusion. The encoded return value was ignored (and leaked).
|
|
|
|
A simple way to export all or some of your bookmarks.
|
|
IssueID #73
|
|
But not "file" or "about".
|
|
To support Internationalized Domain Names, we need to encode domain names using Punycode.
IssueID #73
|
|
This time without a race.
IssueID #90
|
|
IssueID #90
|
|
|
|
|
|
This is a very powerful mechanism: translate the contents of any request to something else when the original MIME type matches a configured regexp.
The external hook command may still elect not to process the request.
|
|
Use a regexp to parse the received header. This is better for recognizing invalid headers, e.g., gemini://gemini.conman.org/test/torture/0039.
|
|
IssueID #61
|
|
Show all entries in a CAPCOM-like chronological list.
|
|
|
|
|
|
The most serious problem was that GmRequest's response body was being accessed while the TlsRequest thread was modifying it.
Now the response must always be locked before accessing elsewhere.
There were also inefficient data updates in the media players.
|