Skip to content

Commit d10fa6f

Browse files
committed
feat: general improvements and minor bugs
1 parent 8b50111 commit d10fa6f

6 files changed

Lines changed: 33 additions & 10 deletions

File tree

src/WebExpress.WebUI/Assets/js/webexpress.webui.avatar.dropdown.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -381,5 +381,5 @@ webexpress.webui.AvatarDropdownCtrl = class extends webexpress.webui.Ctrl {
381381
}
382382
};
383383

384-
// Register the class in the controller
384+
// register the class in the controller
385385
webexpress.webui.Controller.registerClass("wx-webui-avatar-dropdown", webexpress.webui.AvatarDropdownCtrl);

src/WebExpress.WebUI/WebControl/ControlBreadcrumb.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using WebExpress.WebCore.Internationalization;
55
using WebExpress.WebCore.WebHtml;
66
using WebExpress.WebCore.WebPage;
7+
using WebExpress.WebCore.WebTheme;
78
using WebExpress.WebCore.WebUri;
89
using WebExpress.WebUI.WebPage;
910

@@ -108,7 +109,7 @@ public override IHtmlNode Render(IRenderControlContext renderContext, IVisualTre
108109
}
109110

110111
var displayText = path.GetDisplayText(renderContext);
111-
var pathIcon = path.GetIcon(renderContext);
112+
var pathIcon = path.GetIcon(renderContext)?.ApplyIconTheme(visualTree.IconTheme);
112113

113114
if (last?.IsHidden ?? false)
114115
{
@@ -140,7 +141,7 @@ pathIcon is not null
140141
else if (endpointContext is PageContext page)
141142
{
142143
var display = I18N.Translate(renderContext.Request?.Culture, page.PageTitle);
143-
var icon = page?.PageIcon;
144+
var icon = page?.PageIcon?.ApplyIconTheme(visualTree.IconTheme);
144145

145146
html.Add
146147
(

src/WebExpress.WebUI/WebControl/ControlButton.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using WebExpress.WebCore.Internationalization;
55
using WebExpress.WebCore.WebHtml;
66
using WebExpress.WebCore.WebIcon;
7+
using WebExpress.WebCore.WebTheme;
78
using WebExpress.WebUI.WebPage;
89

910
namespace WebExpress.WebUI.WebControl
@@ -165,7 +166,7 @@ public virtual IHtmlNode Render(IRenderControlContext renderContext, IVisualTree
165166
{
166167
var text = Text?.Invoke(renderContext);
167168
var value = Value?.Invoke(renderContext);
168-
var icon = Icon?.Invoke(renderContext);
169+
var icon = Icon?.Invoke(renderContext)?.ApplyIconTheme(visualTree?.IconTheme ?? TypeIconTheme.Default);
169170
var outline = Outline?.Invoke(renderContext) ?? false;
170171
var primaryAction = PrimaryAction?.Invoke(renderContext);
171172
var secondaryAction = SecondaryAction?.Invoke(renderContext);

src/WebExpress.WebUI/WebPage/IRenderControlContext.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using WebExpress.WebCore.WebPage;
1+
using WebExpress.WebCore.WebPage;
22

33
namespace WebExpress.WebUI.WebPage
44
{

src/WebExpress.WebUI/WebPage/RenderControlContext.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using WebExpress.WebCore.WebEndpoint;
1+
using WebExpress.WebCore.WebEndpoint;
22
using WebExpress.WebCore.WebMessage;
33
using WebExpress.WebCore.WebPage;
44

src/WebExpress.WebUI/WebPage/VisualTreeControl.cs

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,9 @@ public VisualTreeControl(IComponentHub componentHub, IPageContext pageContext)
137137
// convention documented in the Theme model).
138138
// 3. Otherwise leave Theme null - downstream IconTheme falls back
139139
// to TypeIconTheme.Default.
140+
// Per-user theme overrides are wired by application code: the
141+
// page's Process override calls UseTheme<T>() based on whatever
142+
// store the application maintains (session, identity profile, …).
140143
var applicationContext = pageContext?.ApplicationContext;
141144
Theme = applicationContext?.DefaultTheme
142145
?? componentHub?.ThemeManager?.Themes
@@ -189,19 +192,37 @@ public VisualTreeControl(IComponentHub componentHub, IPageContext pageContext)
189192
/// </summary>
190193
/// <typeparam name="TTheme">The theme type to use.</typeparam>
191194
/// <returns>The current instance for method chaining.</returns>
192-
public virtual VisualTreeControl UseTheme<TTheme>() where TTheme : class, ITheme
195+
public virtual VisualTreeControl UseTheme<TTheme>()
196+
where TTheme : class, ITheme
193197
{
194198
var resolved = _componentHub?.ThemeManager?
195199
.GetThemes(_pageContext?.ApplicationContext, typeof(TTheme))
196200
?.FirstOrDefault();
197-
if (resolved is null)
201+
202+
return UseTheme(resolved);
203+
}
204+
205+
/// <summary>
206+
/// Overrides the active theme with the supplied resolved theme
207+
/// context. The call is a no-op when <paramref name="theme"/> is
208+
/// <see langword="null"/>; otherwise the previous theme is replaced
209+
/// and <see cref="OnThemeChanged"/> is invoked so subclasses can
210+
/// re-apply theme-specific resources. Use this overload when the
211+
/// theme has been resolved through a non-type lookup (cookie,
212+
/// session, identity preference, …).
213+
/// </summary>
214+
/// <param name="theme">The theme to activate.</param>
215+
/// <returns>The current instance for method chaining.</returns>
216+
public virtual VisualTreeControl UseTheme(IThemeContext theme)
217+
{
218+
if (theme is null || theme == Theme)
198219
{
199220
return this;
200221
}
201222

202223
var previous = Theme;
203-
Theme = resolved;
204-
OnThemeChanged(previous, resolved);
224+
Theme = theme;
225+
OnThemeChanged(previous, theme);
205226
return this;
206227
}
207228

0 commit comments

Comments
 (0)