using Content.Client.Message;
+using Content.Client.RichText;
+using Content.Client.UserInterface.RichText;
using Content.Shared.MassMedia.Systems;
using Robust.Client.AutoGenerated;
using Robust.Client.UserInterface.Controls;
+using Robust.Client.UserInterface.RichText;
using Robust.Client.UserInterface.XAML;
+using Robust.Shared.Utility;
namespace Content.Client.CartridgeLoader.Cartridges;
Author.Visible = true;
PageName.Text = article.Title;
- PageText.SetMarkupPermissive(article.Content);
+ PageText.SetMessage(FormattedMessage.FromMarkupPermissive(article.Content), UserFormattableTags.BaseAllowedTags);
PageNum.Text = $"{targetNum}/{totalNum}";
NotificationSwitch.Text = Loc.GetString(notificationOn ? "news-read-ui-notification-on" : "news-read-ui-notification-off");
- string shareTime = article.ShareTime.ToString(@"hh\:mm\:ss");
+ var shareTime = article.ShareTime.ToString(@"hh\:mm\:ss");
ShareTime.SetMarkup(Loc.GetString("news-read-ui-time-prefix-text") + " " + shareTime);
- Author.SetMarkup(Loc.GetString("news-read-ui-author-prefix") + " " + (article.Author != null ? article.Author : Loc.GetString("news-read-ui-no-author")));
+ var author = Loc.GetString("news-read-ui-author-prefix") + " " + (article.Author ?? Loc.GetString("news-read-ui-no-author"));
+ Author.SetMessage(FormattedMessage.FromMarkupPermissive(author), UserFormattableTags.BaseAllowedTags);
Prev.Disabled = targetNum <= 1;
Next.Disabled = targetNum >= totalNum;
using Content.Client.Message;
+using Content.Client.RichText;
using Content.Client.Stylesheets;
+using Content.Client.UserInterface.RichText;
using Content.Shared.MassMedia.Systems;
using Robust.Client.AutoGenerated;
using Robust.Client.UserInterface;
using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.CustomControls;
+using Robust.Client.UserInterface.RichText;
using Robust.Client.UserInterface.XAML;
using Robust.Shared.Utility;
TextEditPanel.Visible = !_preview;
PreviewPanel.Visible = _preview;
- PreviewLabel.SetMarkupPermissive(Rope.Collapse(ContentField.TextRope));
+
+ var articleBody = Rope.Collapse(ContentField.TextRope);
+ PreviewLabel.SetMessage(FormattedMessage.FromMarkupPermissive(articleBody), UserFormattableTags.BaseAllowedTags);
}
private void OnCancel(BaseButton.ButtonEventArgs eventArgs)
using System.Numerics;
+using Content.Client.RichText;
using Content.Shared.Paper;
using Robust.Client.AutoGenerated;
using Robust.Client.Graphics;
// we're able to resize this UI or not. Default to everything enabled:
private DragMode _allowedResizeModes = ~DragMode.None;
- private readonly Type[] _allowedTags = new Type[] {
- typeof(BoldItalicTag),
- typeof(BoldTag),
- typeof(BulletTag),
- typeof(ColorTag),
- typeof(HeadingTag),
- typeof(ItalicTag),
- typeof(MonoTag)
- };
-
public event Action<string>? OnSaved;
private int _MaxInputLength = -1;
{
msg.AddMarkupPermissive("\r\n");
}
- WrittenTextLabel.SetMessage(msg, _allowedTags, DefaultTextColor);
+ WrittenTextLabel.SetMessage(msg, UserFormattableTags.BaseAllowedTags, DefaultTextColor);
WrittenTextLabel.Visible = !isEditing && state.Text.Length > 0;
BlankPaperIndicator.Visible = !isEditing && state.Text.Length == 0;
--- /dev/null
+using Content.Client.UserInterface.RichText;
+using Robust.Client.UserInterface.RichText;
+
+namespace Content.Client.RichText;
+
+/// <summary>
+/// Contains rules for what markup tags are allowed to be used by players.
+/// </summary>
+public static class UserFormattableTags
+{
+ /// <summary>
+ /// The basic set of "rich text" formatting tags that shouldn't cause any issues.
+ /// Limit user rich text to these by default.
+ /// </summary>
+ public static readonly Type[] BaseAllowedTags =
+ [
+ typeof(BoldItalicTag),
+ typeof(BoldTag),
+ typeof(BulletTag),
+ typeof(ColorTag),
+ typeof(HeadingTag),
+ typeof(ItalicTag),
+ typeof(MonoTag),
+ ];
+}