diff options
author | Jaakko Keränen <jaakko.keranen@iki.fi> | 2022-01-05 13:52:53 +0200 |
---|---|---|
committer | Jaakko Keränen <jaakko.keranen@iki.fi> | 2022-01-05 13:52:53 +0200 |
commit | db50d121c7503ae38ebae5de21ef6705518b4122 (patch) | |
tree | 83ed50257c45708c300ba90252778031b532ce54 /res/about | |
parent | 680db07eabd116cfde9d2894c69ff14e6d5e01ad (diff) | |
parent | 2bd476483a37662797b70d6577ddb0da64cdbaa6 (diff) |
Merge branch 'work/v1.10' into dev
# Conflicts:
# CMakeLists.txt
# Depends-Android.cmake
# res/about/version.gmi
# res/lang/cs.bin
# res/lang/eo.bin
# res/lang/es.bin
# res/lang/fi.bin
# res/lang/gl.bin
# res/lang/ia.bin
# res/lang/ie.bin
# res/lang/ru.bin
# res/lang/sr.bin
# res/lang/tok.bin
# res/lang/tr.bin
# res/lang/uk.bin
# res/lang/zh_Hant.bin
# src/app.c
# src/main.c
# src/ui/documentwidget.c
# src/ui/labelwidget.c
# src/ui/sidebarwidget.c
# src/ui/util.c
Diffstat (limited to 'res/about')
-rw-r--r-- | res/about/android-help.gmi | 173 | ||||
-rw-r--r-- | res/about/android-version.gmi | 25 | ||||
-rw-r--r-- | res/about/help.gmi | 4 | ||||
-rw-r--r-- | res/about/ios-help.gmi | 204 | ||||
-rw-r--r-- | res/about/ios-version.gmi | 83 | ||||
-rw-r--r-- | res/about/version.gmi | 24 |
6 files changed, 511 insertions, 2 deletions
diff --git a/res/about/android-help.gmi b/res/about/android-help.gmi new file mode 100644 index 00000000..48835967 --- /dev/null +++ b/res/about/android-help.gmi | |||
@@ -0,0 +1,173 @@ | |||
1 | ```LAGRANGE | ||
2 | __ __ __ ___ | ||
3 | | /\ / _` |__) /\ |\ | / _` |__ | ||
4 | |___ /~~\ \__> | \ /~~\ | \| \__> |___ | ||
5 | |||
6 | ``` | ||
7 | # Help | ||
8 | |||
9 | ## What is Gemini | ||
10 | |||
11 | Gemini is a simple protocol for serving content over the internet. It specifies a Markdown inspired format allowing basic plain text document markup. Compared to HTTP and HTML, Gemini is vastly simpler and easier to work with. | ||
12 | |||
13 | => gemini://gemini.circumlunar.space/docs/faq.gmi Project Gemini FAQ | ||
14 | => gemini://gemini.circumlunar.space/docs/specification.gmi Protocol and 'text/gemini' specification | ||
15 | |||
16 | ## What is Lagrange | ||
17 | |||
18 | Lagrange is a GUI client for browsing Geminispace. It offers modern conveniences familiar from web browsers, such as smooth scrolling, inline image viewing, multiple tabs, visual themes, Unicode fonts, bookmarks, history, and page outlines. | ||
19 | |||
20 | Like Gemini, Lagrange has been designed with minimalism in mind. It depends on a small number of essential libraries. It is written in C and uses SDL for hardware-accelerated graphics. OpenSSL is used for secure communications. | ||
21 | |||
22 | => about:lagrange About Lagrange | ||
23 | => https://www.libsdl.org SDL: Simple DirectMedia Layer | ||
24 | => https://www.openssl.org OpenSSL: Cryptography and SSL/TLS Toolkit | ||
25 | |||
26 | ### Features | ||
27 | |||
28 | * Beautiful typography with full Unicode support | ||
29 | * Autogenerated page style and symbol for each Gemini domain | ||
30 | * Light and dark color themes | ||
31 | * Scaling page content (50%...200%) | ||
32 | * Freely adjustable scaling factor for the UI | ||
33 | * Sidebar for managing bookmarks, subscribed feeds, and viewing browsing history and the page outline | ||
34 | * Multiple tabs | ||
35 | * Find text on the page | ||
36 | * Open image and audio links inline on the same page | ||
37 | * Smart suggestions when typing an URL — search bookmarks, history, identities | ||
38 | * Search engine integration | ||
39 | * Identity management — create and use TLS client certificates | ||
40 | * Subscribe to Gemini and Atom feeds | ||
41 | * Use Gemini pages as a source of bookmarks | ||
42 | * Audio playback: MP3, Ogg Vorbis, WAV | ||
43 | * Read Gempub books and view ZIP archive contents | ||
44 | * Built-in support for Gopher | ||
45 | * Built-in support for uploading data using the Titan protocol | ||
46 | * Use proxy servers for HTTP, Gopher, or Gemini content | ||
47 | |||
48 | # Work in progress! | ||
49 | |||
50 | This documentation is a work in progress. You may find it useful to alse see the desktop Help page: | ||
51 | => gemini://git.skyjake.fi:1968/lagrange/release/res/about/help.gmi Help page (desktop version, latest release) | ||
52 | |||
53 | # 1 User interface | ||
54 | |||
55 | ## 1.6 Identities (client certificates) | ||
56 | |||
57 | Gemini uses TLS client certificates for user/session identification purposes. Unlike on the web where user identity tracking is covert and automatic, client certificates must be manually taken into use, and you are able to define how long each certificate remains valid. The term "Identity" is used in Lagrange to refer to client certificates. | ||
58 | |||
59 | The Identities sidebar tab shows all identities known to Lagrange. This includes identities created in Lagrange and any identities based on imported X.509 certificates. | ||
60 | |||
61 | ### 1.6.1 Creating a new identity | ||
62 | |||
63 | Click on the 👤 button in the toolbar and select "New Identity...". | ||
64 | |||
65 | Consider any information you enter in the certificate as public — only the Common Name is required to be non-empty. The generated certificate will use the Common Name as the issuer and subject of the certificate, making it clear that the certificate is self-signed. The other required field is the expiration date in "Valid until". Entering a year is sufficient, and means that the certificate is valid until the end of that year. | ||
66 | |||
67 | ### 1.6.2 Using an identity | ||
68 | |||
69 | You will need to select an identity when you encounter this error message: | ||
70 | |||
71 | > 🔑 Certificate Required | ||
72 | |||
73 | Go to Settings > Identities and tap on an identity to toggle it on/off for the currently open URL. On subsequent page loads, the certificate will then be sent to the server when the URL or any URL under it is fetched. You can click on the 👤 button in the navigation bar to see which identity is being used for the current page. | ||
74 | |||
75 | As the sidebar is not keyboard-navigable, note that identities can also be accessed via lookup results. Identities matching the search terms are shown as the last category in the lookup results list. From there, one can toggle an identity for the current page, or stop using it on all pages. | ||
76 | |||
77 | ### 1.6.3 Importing existing certificates | ||
78 | |||
79 | To import an existing X.509 certificate as an identity, click on 👤 and select "Import...". | ||
80 | |||
81 | When the Import Identity dialog opens, it checks the currently open page and the system clipboard for any certificates and private keys in PEM format. If found, these are automatically loaded in. | ||
82 | |||
83 | ## 1.8 Uploads (with Titan) | ||
84 | |||
85 | Titan is a sister protocol to Gemini that enables sending arbitrary amounts of data from a client to a server. The Gemini protocol itself only enables sending up to 1024 bytes of data in a request. Furthermore, the request URL also counts against that limit, and the sent data must be percent-encoded so it can be parsed as a valid URL. Consequently, Gemini clients can only send very limited amounts of data to a server. Titan solves this by expanding the request so that the request URL is followed by a payload field. When it comes to TLS, Titan is equivalent to Gemini, so the same server and client certificates can be used with both. | ||
86 | |||
87 | => gemini://transjovian.org/titan Titan Protocol (by Alex Schroeder) | ||
88 | |||
89 | While Titan and Gemini are related, Titan is a separate protocol and regular Gemini servers are not expected to support it. Whether it makes sense to allow clients to upload large amounts of data is a service-specific question. For example, a server that hosts a gemlog could enable Titan uploads for submitting new posts, or editing existing posts by uploading a revised version. | ||
90 | |||
91 | As far as Lagrange is concerned, Titan is just one of the supported URL schemes. Whenever you try to open a "titan://" URL, no matter if it is manually entered into the URL field, or by clicking on a link, opening a bookmark, feed entry, or via a redirect, a dialog will open where you can specify the data to upload. | ||
92 | |||
93 | The Titan upload dialog supports two ways to enter the data: | ||
94 | |||
95 | * You can type text in the input field on the "Text" tab. It will be sent to the server using 'text/plain' as the media type. | ||
96 | * You can drag and drop a file on the dialog. The details of the file to be uploaded are visible on the "File" tab. The media type can be specified manually if Lagrange does not correctly detect it. | ||
97 | |||
98 | The upload token is a feature of Titan where servers can require a certain token text/passphrase for uploads. It is up to the server how this is interpreted. It could be used as a simple password, or even a command to further instruct the server about what to do with the uploaded data. Please refer to the server's instructions about what to enter here. The token may also be left empty. | ||
99 | |||
100 | The text entered into the upload dialog's main text field is protected against accidental closing of the dialog or the application, or a crash. The previous text is restored when the dialog is reopened. The text field contents are only cleared when the submitted Titan request has been successfully completed. | ||
101 | |||
102 | # 2 Customization | ||
103 | |||
104 | ## 2.1 Browsing behavior | ||
105 | |||
106 | The "Open archive indices" option controls whether index.gmi pages are automatically opened while browsing the contents of a ZIP archive. The purpose is to simulate the behavior of a Gemini server where opening a directory will by default show its index page. Enabling this option makes navigating an archived copy of a capsule a more streamlined experience. | ||
107 | |||
108 | ## 2.4 Fonts | ||
109 | |||
110 | This version of Lagrange supports TrueType fonts. To use a new font, simply view a .ttf (or .fontpack) file in the app and a page footer action is available for performing the installation. | ||
111 | |||
112 | The "Fonts" page of Settings contains options that affect the appearance of text in page content, the user interface, and text rendering in general. | ||
113 | |||
114 | To be precise, on this tab you can select which _typefaces_ to use for certain elements of the page and the UI; picking a particular font (including its size, weight, style, etc.) for specific elements is not possible. Lagrange controls the size and styling of text by choosing fonts according to your theme and typeface preferences. The term "font" is often used to mean "typeface" in this document and in the app UI. | ||
115 | |||
116 | The fonts for document headings, body text, preformatted blocks, and the user interface can be chosen separately. There is also a separate font for monospaced body text, used when the protocol-specific "Monospace body" option is enabled. | ||
117 | |||
118 | There are two built-in fonts available: | ||
119 | |||
120 | * "Source Sans" is the default UI font that is also used for page content. | ||
121 | * "Iosevka" is the monospaced font. | ||
122 | |||
123 | There is also an "Iosevka (compact)" variant that actually uses the font's original line spacing. It is the default for preformatted blocks to avoid gaps between lines of ASCII art, but not for body text for better legibility. | ||
124 | |||
125 | See sections 2.4.4 and 5 for more details about font management, compatibility, and configuration. | ||
126 | |||
127 | ### 2.4.1 Monospace body | ||
128 | |||
129 | The "Monospace body" option causes all pages to be displayed in a monospace font. For example, most Gopher content has been written with the assumption of a monospace font, so it may provide a better reading experience to enable this for Gopher pages. The selected "Monospace font" is applied to the entire document. | ||
130 | |||
131 | Handling of whitespace in page content also changes when this option is enabled: spaces are no longer normalized so if the source uses multiple spaces somewhere, those are shown as-is. | ||
132 | |||
133 | ### 2.4.2 ANSI escapes | ||
134 | |||
135 | => https://en.wikipedia.org/wiki/ANSI_escape_code ANSI escape code (Wikipedia): | ||
136 | > ANSI escape sequences are a standard for in-band signaling to control cursor location, color, font styling, and other options on video text terminals and terminal emulators. | ||
137 | |||
138 | Sometimes these codes are used for things like colored ASCII art. However, Lagrange is not a terminal emulator so only a very minimal set of codes have any effect; the rest are ignored. | ||
139 | |||
140 | The "ANSI escapes" setting controls which ANSI escape codes are enabled: | ||
141 | |||
142 | * "FG Color" enables changes to text foreground color. | ||
143 | * "BG Color" enables changes to text background color. | ||
144 | * "Font Style" enables changing the font style: bold, italic, or monospace. (These correspond to codes 1, 3, and 11.) | ||
145 | |||
146 | A warning banner is displayed if any codes are detected on a page. This helps you be aware of potential visual artifacts, like text color that is being forced to black regardless of the page background color. Click on the warning to dismiss it on a per-site basis. | ||
147 | |||
148 | If you serve content via Gemini, please be aware that ANSI escapes may not be supported by clients, and may in fact disrupt the behavior of a client in unexpected ways. For instance, consider a screen reader or a web proxy that doesn't filter out the codes. Only employ ANSI escapes when the user has somehow indicated that is their preference. | ||
149 | |||
150 | ### 2.4.3 Other font options | ||
151 | |||
152 | The "Glyph warnings" option controls whether a warning will be shown when a page is missing one or more characters. This is typically due to the page being in a language that is not covered by any of the installed fonts. Clicking on the glyph warning banner opens the font management page. | ||
153 | |||
154 | "Smoothing" enables or disables glyph antialiasing. In this version, it is recommended that smoothing is always enabled. This is because the text renderer does not support hinting of any kind, which means that without smoothing, glyph shapes will be severely distorted. You may still want to try disabling this option if antialiasing causes eye strain for you. | ||
155 | |||
156 | ### 2.4.4 Managing fonts | ||
157 | |||
158 | Open "about:fonts" to see all the installed fonts, and enable, disable or uninstall individual fontpacks. At the top of the page, there is a link to the skyjake.fi Font Library: a curated collection of fontpacks that can be freely distributed. From there you can conveniently install more fonts specifically tuned for Lagrange. | ||
159 | |||
160 | The rest of the page is divided to two sections: enabled and disabled fontpacks. Individual packs can be disabled, so they remain installed but not in use. (Tip: Use the Outline sidebar to see a list of all packs, if there are many.) | ||
161 | |||
162 | Click on the "View file" links to see what each fontpack contains. The fontpack format is described in section 5: it is simply a ZIP archive with some metadata and a bunch of font files. When you install a TrueType font (i.e., copy it to the user's fonts directory), it is treated as a fontpack containing a single file, although no ZIP archive is created for it. Use the "View fontpack.ini template" link to see the generated metadata that can be used as a basis for creating an actual fontpack. | ||
163 | |||
164 | About compatibility: fonts are complex, and while the TrueType format is not the most advanced one, it still has features that are not supported in Lagrange. The technical reason is that glyphs are rasterized using stb_truetype, a rather simple TrueType font library. (It's nice and small, though.) You may find that some fonts simply fail to load correctly, or look wrong in the app. | ||
165 | |||
166 | * Hinting is not supported. | ||
167 | * Bitmap glyphs are not supported. | ||
168 | * Multi-color glyphs are not supported. | ||
169 | |||
170 | TrueType Collections (.ttc) can be used, with the restriction that each declared font uses a single index from the collection. The index must be appended to the file name: | ||
171 | ```.ttc example | ||
172 | regular = "NotoSansCJK-Regular.ttc:2" | ||
173 | ``` | ||
diff --git a/res/about/android-version.gmi b/res/about/android-version.gmi new file mode 100644 index 00000000..fc7b444b --- /dev/null +++ b/res/about/android-version.gmi | |||
@@ -0,0 +1,25 @@ | |||
1 | ```LAGRANGE | ||
2 | __ __ __ ___ | ||
3 | | /\ / _` |__) /\ |\ | / _` |__ | ||
4 | |___ /~~\ \__> | \ /~~\ | \| \__> |___ | ||
5 | |||
6 | ``` | ||
7 | # Release notes | ||
8 | |||
9 | ## 1.10 (Alpha 3) | ||
10 | * Added Android-specific release notes. | ||
11 | * Added Settings > UI > Toolbar Actions: customize the two leftmost phone toolbar buttons. | ||
12 | * Show build version in Settings > About. | ||
13 | * Changed return key behavior to insert newlines where possible. | ||
14 | * Fixed sizing of the UI when the device has on-screen system keys. | ||
15 | * Fixed the copy/paste menu staying hidden behind the keyboard. | ||
16 | * Fixed system Auto-Rotate setting not locking the screen orientation. | ||
17 | |||
18 | ## 1.10 (Alpha 2) | ||
19 | * Upgraded SDL to 2.0.18, which fixed a lot of stability issues. | ||
20 | * Added native binaries for arm64, x86, and x86_64. | ||
21 | * Enabled bidirectional text and complex scripts (with HarfBuzz and FriBidi). | ||
22 | * Enabled switching to landscape orientation. | ||
23 | |||
24 | ## 1.10 (Alpha 1) | ||
25 | Initial test build with SDL 2.0.5 and 32-bit ARM binaries. It works, but barely. \ No newline at end of file | ||
diff --git a/res/about/help.gmi b/res/about/help.gmi index 8a63152e..7949b775 100644 --- a/res/about/help.gmi +++ b/res/about/help.gmi | |||
@@ -253,7 +253,7 @@ You will need to select an identity when you encounter this error message: | |||
253 | 253 | ||
254 | > 🔑 Certificate Required | 254 | > 🔑 Certificate Required |
255 | 255 | ||
256 | Clicking on an identity in the sidebar will toggle it on/off for the currently open URL. On subsequent page loads, the certificate will then be sent to the server when the URL or any URL under it is fetched. You can click on the 👤 button in the navigation bar to see which identity is being used for the current page. | 256 | Clicking on an identity in the sidebar shows a menu where you can control usage of the identity for the currently open URL. On subsequent page loads, the certificate will then be sent to the server when the URL or any URL under it is fetched. You can click on the 👤 button in the navigation bar to see which identity is being used for the current page. |
257 | 257 | ||
258 | As the sidebar is not keyboard-navigable, note that identities can also be accessed via lookup results. Identities matching the search terms are shown as the last category in the lookup results list. From there, one can toggle an identity for the current page, or stop using it on all pages. | 258 | As the sidebar is not keyboard-navigable, note that identities can also be accessed via lookup results. Identities matching the search terms are shown as the last category in the lookup results list. From there, one can toggle an identity for the current page, or stop using it on all pages. |
259 | 259 | ||
@@ -390,7 +390,7 @@ Page content color themes are selected on the "Colors" tab of Preferences. The " | |||
390 | 390 | ||
391 | ## 2.4 Fonts | 391 | ## 2.4 Fonts |
392 | 392 | ||
393 | This version of Lagrange supports TrueType fonts. To use a new font in the app, simply view the .ttf file in the app and a page footer action is available for performing the installation. For example, try drag-and-dropping a .ttf file on the window. Alternatively, you can manually copy the font to the "fonts" subdirectory of the user-specific configuration directory (see section 3.5). | 393 | This version of Lagrange supports TrueType fonts. To use a new font, simply view a .ttf file in the app and a page footer action is available for performing the installation. For example, try drag-and-dropping a .ttf file on the window. Alternatively, you can manually copy the font to the "fonts" subdirectory of the user-specific configuration directory (see section 3.5). |
394 | 394 | ||
395 | The "Fonts" tab of the Preferences dialog contains options that affect the appearance of text in page content, the user interface, and text rendering in general. | 395 | The "Fonts" tab of the Preferences dialog contains options that affect the appearance of text in page content, the user interface, and text rendering in general. |
396 | 396 | ||
diff --git a/res/about/ios-help.gmi b/res/about/ios-help.gmi new file mode 100644 index 00000000..41a8445b --- /dev/null +++ b/res/about/ios-help.gmi | |||
@@ -0,0 +1,204 @@ | |||
1 | ```LAGRANGE | ||
2 | __ __ __ ___ | ||
3 | | /\ / _` |__) /\ |\ | / _` |__ | ||
4 | |___ /~~\ \__> | \ /~~\ | \| \__> |___ | ||
5 | |||
6 | ``` | ||
7 | # Help | ||
8 | |||
9 | ## What is Gemini | ||
10 | |||
11 | Gemini is a simple protocol for serving content over the internet. It specifies a Markdown inspired format allowing basic plain text document markup. Compared to HTTP and HTML, Gemini is vastly simpler and easier to work with. | ||
12 | |||
13 | => gemini://gemini.circumlunar.space/docs/faq.gmi Project Gemini FAQ | ||
14 | => gemini://gemini.circumlunar.space/docs/specification.gmi Protocol and 'text/gemini' specification | ||
15 | |||
16 | ## What is Lagrange | ||
17 | |||
18 | Lagrange is a GUI client for browsing Geminispace. It offers modern conveniences familiar from web browsers, such as smooth scrolling, inline image viewing, multiple tabs, visual themes, Unicode fonts, bookmarks, history, and page outlines. | ||
19 | |||
20 | Like Gemini, Lagrange has been designed with minimalism in mind. It depends on a small number of essential libraries. It is written in C and uses SDL for hardware-accelerated graphics. OpenSSL is used for secure communications. | ||
21 | |||
22 | => about:lagrange About Lagrange | ||
23 | => https://www.libsdl.org SDL: Simple DirectMedia Layer | ||
24 | => https://www.openssl.org OpenSSL: Cryptography and SSL/TLS Toolkit | ||
25 | |||
26 | ### Features | ||
27 | |||
28 | * Beautiful typography with full Unicode support | ||
29 | * Autogenerated page style and symbol for each Gemini domain | ||
30 | * Light and dark color themes | ||
31 | * Scaling page content (50%...200%) | ||
32 | * Freely adjustable scaling factor for the UI | ||
33 | * Sidebar for managing bookmarks, subscribed feeds, and viewing browsing history and the page outline | ||
34 | * Multiple tabs | ||
35 | * Split view for browsing two pages at once (iPad only) | ||
36 | * Find text on the page | ||
37 | * Open image and audio links inline on the same page | ||
38 | * Smart suggestions when typing an URL — search bookmarks, history, identities | ||
39 | * Search engine integration | ||
40 | * Identity management — create and use TLS client certificates | ||
41 | * Subscribe to Gemini and Atom feeds | ||
42 | * Use Gemini pages as a source of bookmarks | ||
43 | * Audio playback: MP3, Ogg Vorbis, WAV | ||
44 | * Read Gempub books and view ZIP archive contents | ||
45 | * Built-in support for Gopher | ||
46 | * Built-in support for uploading data using the Titan protocol | ||
47 | * Use proxy servers for HTTP, Gopher, or Gemini content | ||
48 | |||
49 | # Work in progress! | ||
50 | |||
51 | This documentation is a work in progress. You may find it useful to alse see the desktop Help page: | ||
52 | => gemini://git.skyjake.fi:1968/lagrange/release/res/about/help.gmi Help page (desktop version, latest release) | ||
53 | |||
54 | # 1 User interface | ||
55 | |||
56 | ## 1.6 Identities (client certificates) | ||
57 | |||
58 | Gemini uses TLS client certificates for user/session identification purposes. Unlike on the web where user identity tracking is covert and automatic, client certificates must be manually taken into use, and you are able to define how long each certificate remains valid. The term "Identity" is used in Lagrange to refer to client certificates. | ||
59 | |||
60 | The Identities sidebar tab shows all identities known to Lagrange. This includes identities created in Lagrange and any identities based on imported X.509 certificates. | ||
61 | |||
62 | ### 1.6.1 Creating a new identity | ||
63 | |||
64 | Click on the 👤 button in the toolbar and select "New Identity...". | ||
65 | |||
66 | Consider any information you enter in the certificate as public — only the Common Name is required to be non-empty. The generated certificate will use the Common Name as the issuer and subject of the certificate, making it clear that the certificate is self-signed. The other required field is the expiration date in "Valid until". Entering a year is sufficient, and means that the certificate is valid until the end of that year. | ||
67 | |||
68 | ### 1.6.2 Using an identity | ||
69 | |||
70 | You will need to select an identity when you encounter this error message: | ||
71 | |||
72 | > 🔑 Certificate Required | ||
73 | |||
74 | Go to Settings > Identities and tap on an identity to toggle it on/off for the currently open URL. On subsequent page loads, the certificate will then be sent to the server when the URL or any URL under it is fetched. You can click on the 👤 button in the navigation bar to see which identity is being used for the current page. | ||
75 | |||
76 | As the sidebar is not keyboard-navigable, note that identities can also be accessed via lookup results. Identities matching the search terms are shown as the last category in the lookup results list. From there, one can toggle an identity for the current page, or stop using it on all pages. | ||
77 | |||
78 | ### 1.6.3 Importing existing certificates | ||
79 | |||
80 | To import an existing X.509 certificate as an identity, click on 👤 and select "Import...". | ||
81 | |||
82 | When the Import Identity dialog opens, it checks the currently open page and the system clipboard for any certificates and private keys in PEM format. If found, these are automatically loaded in. | ||
83 | |||
84 | ## 1.8 Uploads (with Titan) | ||
85 | |||
86 | Titan is a sister protocol to Gemini that enables sending arbitrary amounts of data from a client to a server. The Gemini protocol itself only enables sending up to 1024 bytes of data in a request. Furthermore, the request URL also counts against that limit, and the sent data must be percent-encoded so it can be parsed as a valid URL. Consequently, Gemini clients can only send very limited amounts of data to a server. Titan solves this by expanding the request so that the request URL is followed by a payload field. When it comes to TLS, Titan is equivalent to Gemini, so the same server and client certificates can be used with both. | ||
87 | |||
88 | => gemini://transjovian.org/titan Titan Protocol (by Alex Schroeder) | ||
89 | |||
90 | While Titan and Gemini are related, Titan is a separate protocol and regular Gemini servers are not expected to support it. Whether it makes sense to allow clients to upload large amounts of data is a service-specific question. For example, a server that hosts a gemlog could enable Titan uploads for submitting new posts, or editing existing posts by uploading a revised version. | ||
91 | |||
92 | As far as Lagrange is concerned, Titan is just one of the supported URL schemes. Whenever you try to open a "titan://" URL, no matter if it is manually entered into the URL field, or by clicking on a link, opening a bookmark, feed entry, or via a redirect, a dialog will open where you can specify the data to upload. | ||
93 | |||
94 | The Titan upload dialog supports two ways to enter the data: | ||
95 | |||
96 | * You can type text in the input field on the "Text" tab. It will be sent to the server using 'text/plain' as the media type. | ||
97 | * You can drag and drop a file on the dialog. The details of the file to be uploaded are visible on the "File" tab. The media type can be specified manually if Lagrange does not correctly detect it. | ||
98 | |||
99 | The upload token is a feature of Titan where servers can require a certain token text/passphrase for uploads. It is up to the server how this is interpreted. It could be used as a simple password, or even a command to further instruct the server about what to do with the uploaded data. Please refer to the server's instructions about what to enter here. The token may also be left empty. | ||
100 | |||
101 | The text entered into the upload dialog's main text field is protected against accidental closing of the dialog or the application, or a crash. The previous text is restored when the dialog is reopened. The text field contents are only cleared when the submitted Titan request has been successfully completed. | ||
102 | |||
103 | ## 1.9 Split view mode (iPad only) | ||
104 | |||
105 | By default, only one tab is visible at a time in the application window. However, sometimes it is beneficial to see two pages at once. For example, many capsules have top-level menus or lists of articles, and keeping the menu/index visible on the side makes navigation less cumbersome. | ||
106 | |||
107 | Split view mode divides the UI into two equivalent parts. You can have multiple tabs in each split. Closing all tabs on one side will remove the split and return back to the normal unsplit mode. | ||
108 | |||
109 | Each split has its own sidebars, which means that in split view mode you can have a total of four sidebars open at the same time. | ||
110 | |||
111 | ### 1.9.1 Switching focus | ||
112 | |||
113 | At any given time, one of the splits has input focus. This is indicated by a colored line at the top of the section, and some UI elements will be dimmed out on the unfocused side. | ||
114 | |||
115 | If a keyboard is connected, you can use the Next/Previous Tab keybindings or Ctrl+Tab to switch keyboard focus between the sections. Next/Previous Tab is particularly convenient as it cycles through all open tabs, jumping to the other side of the split when appropriate. You may also press Tab to cycle input focus between all the URL input fields. | ||
116 | |||
117 | ### 1.9.2 Pinning | ||
118 | |||
119 | While it is sometimes useful to simply have two independent browsers open side by side, by default view splitting is meant to assist in navigating hierarchies and lists. In the typical use case, you'll have a menu or an index page on the left, and a content page open on the right. Links clicked on the left will automatically open on the right. | ||
120 | |||
121 | This is called "pinning" and the behavior can be configured in Settings. The "Split view pinning" setting on the "General" page of Settings controls where links get opened in a split view. There are three modes available: | ||
122 | |||
123 | * "None" causes links to open in the tab where the link is clicked. In this mode, both sides of the split can be navigated independently. | ||
124 | * "Left Tab" causes links clicked on the left tab to open on the right side. The page open in the left tab is therefore "pinned" and does not change unless you enter a new URL or navigate to the parent or root. | ||
125 | * "Right Tab" is the same but works the other way around. The page open in the right tab is pinned and clicked links open on the left. | ||
126 | |||
127 | The default pinning mode is "Left Tab". | ||
128 | |||
129 | The ◧ indicator is shown in the URL input field when the current tab is pinned. | ||
130 | |||
131 | # 2 Customization | ||
132 | |||
133 | ## 2.1 Browsing behavior | ||
134 | |||
135 | The "Open archive indices" option controls whether index.gmi pages are automatically opened while browsing the contents of a ZIP archive. The purpose is to simulate the behavior of a Gemini server where opening a directory will by default show its index page. Enabling this option makes navigating an archived copy of a capsule a more streamlined experience. | ||
136 | |||
137 | "Split view pinning" controls which tab links will be opened on when browsing in split view mode. The default mode is "Left Tab", which means that the page in the left tab is pinned (remains unchanged) when clicking on a link. For more information, see section 1.9. | ||
138 | |||
139 | ## 2.4 Fonts | ||
140 | |||
141 | This version of Lagrange supports TrueType fonts. To use a new font, simply view a .ttf (or .fontpack) file in the app and a page footer action is available for performing the installation. | ||
142 | |||
143 | The "Fonts" page of Settings contains options that affect the appearance of text in page content, the user interface, and text rendering in general. | ||
144 | |||
145 | To be precise, on this tab you can select which _typefaces_ to use for certain elements of the page and the UI; picking a particular font (including its size, weight, style, etc.) for specific elements is not possible. Lagrange controls the size and styling of text by choosing fonts according to your theme and typeface preferences. The term "font" is often used to mean "typeface" in this document and in the app UI. | ||
146 | |||
147 | The fonts for document headings, body text, preformatted blocks, and the user interface can be chosen separately. There is also a separate font for monospaced body text, used when the protocol-specific "Monospace body" option is enabled. | ||
148 | |||
149 | There are two built-in fonts available: | ||
150 | |||
151 | * "Source Sans" is the default UI font that is also used for page content. | ||
152 | * "Iosevka" is the monospaced font. | ||
153 | |||
154 | There is also an "Iosevka (compact)" variant that actually uses the font's original line spacing. It is the default for preformatted blocks to avoid gaps between lines of ASCII art, but not for body text for better legibility. | ||
155 | |||
156 | See sections 2.4.4 and 5 for more details about font management, compatibility, and configuration. | ||
157 | |||
158 | ### 2.4.1 Monospace body | ||
159 | |||
160 | The "Monospace body" option causes all pages to be displayed in a monospace font. For example, most Gopher content has been written with the assumption of a monospace font, so it may provide a better reading experience to enable this for Gopher pages. The selected "Monospace font" is applied to the entire document. | ||
161 | |||
162 | Handling of whitespace in page content also changes when this option is enabled: spaces are no longer normalized so if the source uses multiple spaces somewhere, those are shown as-is. | ||
163 | |||
164 | ### 2.4.2 ANSI escapes | ||
165 | |||
166 | => https://en.wikipedia.org/wiki/ANSI_escape_code ANSI escape code (Wikipedia): | ||
167 | > ANSI escape sequences are a standard for in-band signaling to control cursor location, color, font styling, and other options on video text terminals and terminal emulators. | ||
168 | |||
169 | Sometimes these codes are used for things like colored ASCII art. However, Lagrange is not a terminal emulator so only a very minimal set of codes have any effect; the rest are ignored. | ||
170 | |||
171 | The "ANSI escapes" setting controls which ANSI escape codes are enabled: | ||
172 | |||
173 | * "FG Color" enables changes to text foreground color. | ||
174 | * "BG Color" enables changes to text background color. | ||
175 | * "Font Style" enables changing the font style: bold, italic, or monospace. (These correspond to codes 1, 3, and 11.) | ||
176 | |||
177 | A warning banner is displayed if any codes are detected on a page. This helps you be aware of potential visual artifacts, like text color that is being forced to black regardless of the page background color. Click on the warning to dismiss it on a per-site basis. | ||
178 | |||
179 | If you serve content via Gemini, please be aware that ANSI escapes may not be supported by clients, and may in fact disrupt the behavior of a client in unexpected ways. For instance, consider a screen reader or a web proxy that doesn't filter out the codes. Only employ ANSI escapes when the user has somehow indicated that is their preference. | ||
180 | |||
181 | ### 2.4.3 Other font options | ||
182 | |||
183 | The "Glyph warnings" option controls whether a warning will be shown when a page is missing one or more characters. This is typically due to the page being in a language that is not covered by any of the installed fonts. Clicking on the glyph warning banner opens the font management page. | ||
184 | |||
185 | "Smoothing" enables or disables glyph antialiasing. In this version, it is recommended that smoothing is always enabled. This is because the text renderer does not support hinting of any kind, which means that without smoothing, glyph shapes will be severely distorted. You may still want to try disabling this option if antialiasing causes eye strain for you. | ||
186 | |||
187 | ### 2.4.4 Managing fonts | ||
188 | |||
189 | Open "about:fonts" to see all the installed fonts, and enable, disable or uninstall individual fontpacks. At the top of the page, there is a link to the skyjake.fi Font Library: a curated collection of fontpacks that can be freely distributed. From there you can conveniently install more fonts specifically tuned for Lagrange. | ||
190 | |||
191 | The rest of the page is divided to two sections: enabled and disabled fontpacks. Individual packs can be disabled, so they remain installed but not in use. (Tip: Use the Outline sidebar to see a list of all packs, if there are many.) | ||
192 | |||
193 | Click on the "View file" links to see what each fontpack contains. The fontpack format is described in section 5: it is simply a ZIP archive with some metadata and a bunch of font files. When you install a TrueType font (i.e., copy it to the user's fonts directory), it is treated as a fontpack containing a single file, although no ZIP archive is created for it. Use the "View fontpack.ini template" link to see the generated metadata that can be used as a basis for creating an actual fontpack. | ||
194 | |||
195 | About compatibility: fonts are complex, and while the TrueType format is not the most advanced one, it still has features that are not supported in Lagrange. The technical reason is that glyphs are rasterized using stb_truetype, a rather simple TrueType font library. (It's nice and small, though.) You may find that some fonts simply fail to load correctly, or look wrong in the app. | ||
196 | |||
197 | * Hinting is not supported. | ||
198 | * Bitmap glyphs are not supported. | ||
199 | * Multi-color glyphs are not supported. | ||
200 | |||
201 | TrueType Collections (.ttc) can be used, with the restriction that each declared font uses a single index from the collection. The index must be appended to the file name: | ||
202 | ```.ttc example | ||
203 | regular = "NotoSansCJK-Regular.ttc:2" | ||
204 | ``` | ||
diff --git a/res/about/ios-version.gmi b/res/about/ios-version.gmi new file mode 100644 index 00000000..f3122dbe --- /dev/null +++ b/res/about/ios-version.gmi | |||
@@ -0,0 +1,83 @@ | |||
1 | ```LAGRANGE | ||
2 | __ __ __ ___ | ||
3 | | /\ / _` |__) /\ |\ | / _` |__ | ||
4 | |___ /~~\ \__> | \ /~~\ | \| \__> |___ | ||
5 | |||
6 | ``` | ||
7 | # Release notes | ||
8 | |||
9 | ## 1.10 (9) | ||
10 | * Added "Share" actions for downloaded files (via "Download Linked File") and selected text on page. | ||
11 | * Added "Edit Page with Titan": opens the Upload dialog with the page contents prefilled (previous contents are lost!). | ||
12 | * Inlining `image/*` responses into the current document regardless of file extension in URL. | ||
13 | * Fixed glitch with banner not being visible until page has finished loading. | ||
14 | * Fixed possible crash when creating a bookmark. | ||
15 | |||
16 | ## 1.10 (7) | ||
17 | * Link context menu shows used identity and date of last visit in addition to the URL. | ||
18 | * Removed the "Show URL on hover" setting. URLs are shown in the link context menu. | ||
19 | * Inline image metadata goes under the image instead of possibly overlapping the image caption text. | ||
20 | * Improved appearance of hover/open link highlighting. It no longer goes under the side elements on the page. | ||
21 | * Gempub: Open books in 1:2 split mode instead of 1:1. | ||
22 | * Fixed opening links in split view mode. Links would open on the wrong side. | ||
23 | * Upgraded SDL to version 2.0.18. | ||
24 | |||
25 | ## 1.10 (6) | ||
26 | * Added "Paste Preceding Line" in the input prompt dialog. Potential use cases include user-editable sections on a page and suggested/example input values. | ||
27 | * Fixed UI glitches and a potential memory leak when navigating via swipes. Sometimes swipe navigation would stop working because animation placeholders were not destroyed. | ||
28 | * Fixed Settings background fade. | ||
29 | * Fixed sidebar background fade in portrait phone layout. | ||
30 | |||
31 | ## 1.10 (5) | ||
32 | * Fixed positioning of native UI controls in non-animated input widgets. | ||
33 | * Fixed input widgets not reacting to keyboard being dismissed by system. | ||
34 | * iPad: Faster back swipe animation. | ||
35 | |||
36 | ## 1.10 (4) | ||
37 | * Fixed crash when closing sidebar in bookmark edit mode. | ||
38 | * Fixed incorrect initial height of an unfocused multiline input widget. | ||
39 | * Fixed lookup results having too narrow a width. | ||
40 | * Fixed padding at bottom of the upload text editor. | ||
41 | * Fixed missing "Folder" field in the bookmark editor. Edited bookmarks would be moved to the root folder. | ||
42 | * Fixed missing "Glyph Warnings" toggle in Settings. | ||
43 | * Removed "Return Key Behavior" from Settings since it has no effect. | ||
44 | * Minor improvements in page caching. | ||
45 | * Tuned page swipe animations. | ||
46 | * Optimized UI layout updates. | ||
47 | * Audio subsystem is only initialized when actually needed. | ||
48 | * Prevent state file corruption if the app happens to get killed while state is being saved. | ||
49 | |||
50 | ## 1.10 (3) | ||
51 | * Revised layout of the Upload dialog. There is a new edit field that lets you modify the file path of the URL. Identity names are in bold. | ||
52 | * Added an edit actions menu in the Upload text editor (only in portrait phone layout for now). | ||
53 | * Fixed persistent storage of the Upload text field contents. | ||
54 | * Fixed input widget positioning and behavior in the Upload dialog. | ||
55 | * Fixed minimum width of main panel in dialogs. | ||
56 | * Fixed use of cached content when the same URL was found multiple times in history. Previously, only the latest page was used. | ||
57 | * Changed input field tint color to match chosen UI accent color. | ||
58 | * Optimized memory use during UI event processing. | ||
59 | |||
60 | ## 1.10 (2) | ||
61 | * Fixed pull-to-refresh on short pages. | ||
62 | * Fixed URL field contents not being clipped to widget bounds. | ||
63 | * Fixed major glitches in back/forward swipe navigation, e.g., top banner showing incorrect contents, incorrect theme colors, scroll position jumping. | ||
64 | * Fixed major and minor UI element positioning glitches, e.g., native text fields, maximum height of input fields, input length counter, Translate dialog. | ||
65 | * Fixed inappropriate font sizes, e.g., sidebar action labels. | ||
66 | * Fixed color issues: tint color of native input, and footer buttons not being prominent enough. | ||
67 | * Bookmarks: In Edit mode, folders still get (un)folded when tapped. | ||
68 | * Feeds: Added "No Unread Entries" message. | ||
69 | * Identities: Show the current page's URL in the context menu to make it clearer what "This Page" refers to. | ||
70 | |||
71 | ## 1.10 (1) | ||
72 | * Use native iOS text input UI controls for entering text. | ||
73 | * Pull-to-refresh on pages. | ||
74 | * Redesigned phone sidebar that mimics Safari on iPhone. Opens half-height for better reachability of tab buttons, can be swiped up and down. | ||
75 | * Bookmark edit mode for reordering and organizing bookmarks into folders. | ||
76 | * Sidebar has new action buttons for Feeds and History. | ||
77 | * Identity toolbar button has been revised for quickly switching between alternate identities for current site, and opening Settings > Identities. | ||
78 | * Settings: Managing identities. | ||
79 | * Settings: Improved widgets used in button/radio groups to closer match iOS design. | ||
80 | * Settings: Added new options from desktop version. | ||
81 | * Mobile-friendly layout for value input dialogs. | ||
82 | * Various animation issues fixes, e.g., context menu animations on iPad. | ||
83 | * Various layout issues fixed, e.g., related to safe area insets. | ||
diff --git a/res/about/version.gmi b/res/about/version.gmi index 575dbf70..ff954fc6 100644 --- a/res/about/version.gmi +++ b/res/about/version.gmi | |||
@@ -6,6 +6,30 @@ | |||
6 | ``` | 6 | ``` |
7 | # Release notes | 7 | # Release notes |
8 | 8 | ||
9 | ## 1.10 | ||
10 | New features: | ||
11 | * Added "Paste Preceding Line" in the input prompt dialog. Potential use cases include user-editable sections on a page and suggested/example input values. | ||
12 | * Identity toolbar menu can be used to switch between alternate identities. If you have used multiple identities on one site, this makes it more convenient to switch between them. | ||
13 | * Added option to disable cursor blinking in input fields. | ||
14 | * UI language for Dutch. | ||
15 | |||
16 | Changes and enhancements: | ||
17 | * Inline image metadata goes under the image instead of possibly overlapping the image caption text. | ||
18 | * Improved apperance of opened links highlighting. It no longer goes under the side elements on the page. | ||
19 | * Entry dates in feed links are de-emphasized for improved readability. | ||
20 | * Revised layout of the Upload dialog. There is a new edit field that lets you modify the file path of the URL. Identity names are in bold. | ||
21 | * Optimized UI layout procedure and memory use during UI event processing. | ||
22 | * Audio subsystem is only initialized when actually needed. | ||
23 | * Prevent state file corruption if the app happens to get killed while state is being saved. | ||
24 | * Gempub: Open books in 1:2 split mode instead of 1:1. | ||
25 | * Minor improvements in page caching. | ||
26 | |||
27 | Fixes: | ||
28 | * Fixed a history caching issue: if there were multiple instances of the same URL in history, only the latest one's content would be used when navigating back/forward. | ||
29 | * Fixed very narrow input fields causing the app to hang. | ||
30 | * Fixed initial scroll position in multiline input fields. | ||
31 | * Fixed lookup results list becoming too narrow. | ||
32 | |||
9 | ## 1.9.5 | 33 | ## 1.9.5 |
10 | * Fixed misshapen button borders (SDL 2.0.16 line drawing workaround). | 34 | * Fixed misshapen button borders (SDL 2.0.16 line drawing workaround). |
11 | * Fixed actions being triggered when navigating via home row keys. | 35 | * Fixed actions being triggered when navigating via home row keys. |