While SwiftUI's `Text` view won't display these in an `AttributedString` even if they get parsed from Markdown (which would also require the use of the `.full` option instead of the `.inlineOnlyPresrevingWhitespace` option), we can improve the appearance somewhat.
Currently, list elements are clumped together with no spaces between them, and there's no indication whatsoever that the author indicated these to be a list.
Change to insert Markdown list syntax with linebreaks and dashes, so users can at least understand there's a list there.
Similar change for ordered lists.
This will still be broken for nested lists, but it didn't seem worth it to put a lot of effort into this (or other revamps, like making bold/italics/code work properly) because it seems like the current text handling in Ice Cubes is suboptimal and eventually slated for improvement (according to https://github.com/Dimillian/IceCubesApp/issues/1459#issuecomment-1638562657).
So this is more designed to make lists "less broken" in some cases, rather than be a comprehensive fix for all lists in all cases.
* refactor data of `EditTagGroupView`
* lower case tags before saving because API is case-insensitive
* fix: "add new tag" `TextField` is not focused after adding the first tag (on both macOS and iOS)
* perf: improve symbol search performance
* improve layout and animation of symbol search
* fix: sort tags and remove duplicate tags
* fix: crash when open timeline for an empty tag group
* fix: revert concurrency code because performance issue at 1d3f271 is a false alarm
* add warning labels to help the users
* fix: state `tagGroup`
* fix: selecting symbol logic and warning labels
* refactor `EditTagGroupView.body`
* refactor warning labels
* Fix theme
* Move to its own folder
---------
Co-authored-by: Thomas Ricouard <ricouard77@gmail.com>
If the content settings specify their own post settings and override the
instance settings, a hint (and link to the content settings) is added to the
instance settings (infos) since that setting might introduce confusion (As
happened in #1677).
The size of the image is now set correctly to prevent the shifting of the
vertical bars. The handling of the compact view (regarding the indentation) is
now centrally handled in StatusDetailView.
Threads/replies are now shown more clearly. Each reply has an indentation level
(and therefore the number of vertical lines) one more than its direct parent.
This leads to siblings having the same indentation level. It makes
understanding somewhat complex thread structures way easier. Previously, a
reply was only indented if it came directly after its parent. If a toot had
more than one reply, the structure was nearly indecipherable, as it wasn't
clear which the parent post of the second (or later) toot was. An example is
"https://mastodon.social/@mhoye/110452462852364819" and all of its replies.
Signed-off-by: Paul Schuetz <pa.schuetz@web.de>
* improve the sensitive content overlay animation and refactor subviews
* fix alt text button and refactor views
* refactor `StatusRowMediaPreviewView.onTapGesture`
* simplify `MediaPreview` and `FeaturedImagePreView`
* make alt text button adaptable
* Fix flickering issues when resizing window, or hiding notifications on macOS
* Restore processor and add debouncing to the processor updates
* Fix indentation
* Add LazyResizableImage to the Design system module
The pending-button can now be shown in any corner the user prefers. This is
accomplished by allowing the user to move the counter left in addition to the
already present option to move it down. Fixes#1637
Signed-off-by: Paul Schuetz <pa.schuetz@web.de>
* - *WIP* Explore tab: Tap on tab to scroll to top.
* - Explore tab: Tap tab to scroll to top.
* - Explore: Tap tab again to focus on search bar.
- Explore: Set `.defaultMinListRowHeight` so scroll to view doesn't occupy more than 1pt height in grouped style list.
- Explore: Add padding to get Explore list view to look the same.
* - Explore: Minor adjust to padding.
* - Messages: Add tap tab to scroll to top.
* - Notifications: Add tap tab to scroll to top.
* - Profile: Add tap tab to scroll to top.
* Add `ScrollToView` that can be used across all views.
* Move scroll-to-top constants to ScrollToView.
* Format
---------
Co-authored-by: Thomas Ricouard <ricouard77@gmail.com>
- Using State property and Binding between ContextMenu and AccountDetailView to show a confirmation dialog when the block button is pressed.
Co-authored-by: Eric Chaing <eric@Erics-MacBook-Pro.local>
When you long tap a `AccountsListRow`, a `contextMenu` will be called, and then the app will be crashed.
This happens because two environments are missing; `QuickLook` and `RouterPath`
The crash will happen when you type something unexpected instance URL.
Example
```swift
let server = "mstdn.jp/"
var components = URLComponents()
components.scheme = "https"
components.host = server
components.path = "/api/v1/instance"
components.url! // 💥 error: Execution was interrupted, reason: EXC_BREAKPOINT (code=1, subcode=0x18c986650).
```
* Automatically remove spaces in server names
If a server name includes a space (which can happen if the string is pasted /
autocompleted), this space is removed, which results in the app not crashing.
Fixes#1599
Signed-off-by: Paul Schuetz <pa.schuetz@web.de>
* Format
---------
Signed-off-by: Paul Schuetz <pa.schuetz@web.de>
Co-authored-by: Thomas Ricouard <ricouard77@gmail.com>
The "Translate with DeepL"-option is removed to make the app better understandable for the average user. A person who wants to use DeepL can still insert their own API key to always use DeepL.
Fixes#1583
Signed-off-by: Paul Schuetz <pa.schuetz@web.de>
* Add simple test for escaping markdown content in statuses
* Add ~ as markdown character to be escaped in statuses
The ~ isn't documented in the original markdown syntax docs but is
commonly used (including by AttributedString) to surround text
formatted with a strikethrough.
* Allow creation of URL objects from strings containing non-ASCII characters
Adds a new initializer for creating URL objects with a flag to specify that
non-ASCII characters found in the path or query string should first be
URL encoded.
* Add basic test for creating HTMLString objects
* Encode link paths and queries when parsing statuses
It's common to use non-ASCII characters in URLs even though they're technically
invalid characters. Every modern browser handles this by silently encoding
the invalid characters on the user's behalf. However, trying to create a URL
object with un-encoded characters will result in nil so we need to encode the
invalid characters before creating the URL object. The unencoded version
should still be shown in the displayed status.
The parsing of the URL string is a little messy because we can't use the URL
class for this scenario and need to duplicate some of its work.
* Only encode link URLs as a backup
If a URL can be created from a status href, don't try URL encoding
it as this could result in double encoding. Only encode the string
if the creation of a URL fails. This is also more efficient.
* Allow specifying the visibility of replies
Replies can now have their own default visibility. This visibility is always at
least as restrictive as the default post visibility. When posting a reply, the
visibility is pre-populated with the more restrictive out of the default and
the visibility of the original post.
Signed-off-by: Paul Schuetz <pa.schuetz@web.de>
* Use iOS-specific modifier
If the app is run on iOS 17, the new onChange(...)-modifier is used.
Signed-off-by: Paul Schuetz <pa.schuetz@web.de>
* Restrict the extension of the onChange-Modifier
The extension of the view to allow the use of the version-appropriate
onChange-modifier is now only available in the relevant file.
Signed-off-by: Paul Schuetz <pa.schuetz@web.de>
* Reset to use Xcode 14 / iOS 16
The iOS 17 specific changes are removed to allow building in the older Xcode 14.
Signed-off-by: Paul Schuetz <pa.schuetz@web.de>
* Make the default reply visibility public
The standard default reply visibility is now public, the behavior of the app
isn't changed for a user who just updated.
Signed-off-by: Paul Schuetz <pa.schuetz@web.de>
---------
Signed-off-by: Paul Schuetz <pa.schuetz@web.de>