# PR Checklist
- [ ] Did you check if it works normally in all models? *ignore this
when it dosen't uses models*
- [x] Did you check if it works normally in all of web, local and node
hosted versions? if it dosen't, did you blocked it in those versions?
- [ ] Did you added a type def?
# Description
## Problem
This PR resolves an issue where assets were not visible on macOS when
using `asset://localhost/` URLs.
The problem occurred because **DOMPurify** was removing the `src`
attribute when its value started with `asset://localhost/`. This
behavior affected the visibility of assets on macOS for the Local
version of RisuAI.
## Solution
To address this, I chose to use `DOMPurify.addHook` to allow `src`
attributes starting with `asset://localhost/` for certain tags.
I also thought about another solution: passing `ALLOWED_URI_REGEXP` to
`DOMPurify.sanitize`. However, I decided not to use it because it would
require using regular expressions to check strings every time the method
is called, which might be less efficient in my opinion.
## Considerations
While this issue is specific to macOS and the Local version of RisuAI, I
opted not to include additional conditions for the following reasons:
1. The code change is simple and lightweight.
2. It doesn’t cause conflicts on other OSes or RisuAI versions.
3. Avoiding conditions improves readability and maintainability.
---
If you have any suggestions for a better approach, I’d be happy to hear
them!
---
## Linked Issue
This PR addresses and fixes#656
# PR Checklist
- [ ] Did you check if it works normally in all models? *ignore this
when it dosen't uses models*
- [x] Did you check if it works normally in all of web, local and node
hosted versions? if it dosen't, did you blocked it in those versions?
- [ ] Did you added a type def?
# Description
## Summary
This PR updates the `renderChilds` function to properly handle
`TextNode` rendering. Previously, `renderChilds` only iterated over
`children`, which excluded `TextNode`s and rendered only `HTMLElement`s.
Now, the function iterates over `childNodes`, ensuring that:
1. **TextNodes**: Are rendered by displaying their `textContent`.
2. **ElementNodes**: Are rendered as before, using `renderGuiHtmlPart`.
## Context
Initially, I wondered whether the absence of `TextNode` rendering might
have been due to security considerations. However, since elements like
headings (`h1`), lists (`ul`, `li`), and strong text (`strong`) were
already being rendered, it seems likely that the exclusion of `TextNode`
rendering was an oversight rather than an intentional decision.
I believe that these elements are meaningful only when they include
text. For example, elements like `h1`, `h2`, `h3`, `p`, `li`, `strong`,
`em`, and `code` rely on text content to fulfill their intended purpose.
## Notes
If there was a specific reason for excluding `TextNode`s in the original
implementation (e.g., for security, intentional design choices, or other
constraints), please feel free to reject this PR. I completely
understand if this change conflicts with any design decisions or
requirements of the project.
Thank you for your time and consideration!
# PR Checklist
- [/] Did you check if it works normally in all models? *ignore this
when it dosen't uses models*
- [Yes] Did you check if it works normally in all of web, local and node
hosted versions? if it dosen't, did you blocked it in those versions?
- [/] Did you added a type def?
# Description
Improve some Chinese translations and some outdated URLs