Add UI.Styles
This commit is contained in:
parent
f8c5e75070
commit
3b83e49680
57
Ooui/UI.cs
57
Ooui/UI.cs
|
@ -1,6 +1,7 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
@ -16,6 +17,12 @@ namespace Ooui
|
|||
static readonly Dictionary<string, Func<Element>> publishedPaths =
|
||||
new Dictionary<string, Func<Element>> ();
|
||||
|
||||
static readonly Dictionary<string, Style> styles =
|
||||
new Dictionary<string, Style> ();
|
||||
static readonly StyleSelectors rules = new StyleSelectors ();
|
||||
|
||||
public static StyleSelectors Styles => rules;
|
||||
|
||||
static readonly byte[] clientJsBytes;
|
||||
|
||||
public static string Template { get; set; } = $@"<!DOCTYPE html>
|
||||
|
@ -24,6 +31,7 @@ namespace Ooui
|
|||
<title>@ElementPath</title>
|
||||
<meta name=""viewport"" content=""width=device-width, initial-scale=1"" />
|
||||
<link rel=""stylesheet"" href=""https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"" integrity=""sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u"" crossorigin=""anonymous"">
|
||||
<style>@Styles</style>
|
||||
</head>
|
||||
<body>
|
||||
<div id=""ooui-body"" class=""container-fluid""></div>
|
||||
|
@ -177,7 +185,7 @@ namespace Ooui
|
|||
|
||||
static string RenderTemplate (string elementPath)
|
||||
{
|
||||
return Template.Replace ("@ElementPath", elementPath);
|
||||
return Template.Replace ("@ElementPath", elementPath).Replace ("@Styles", rules.ToString ());
|
||||
}
|
||||
|
||||
static void WriteElementHtml (string elementPath, HttpListenerResponse response)
|
||||
|
@ -444,5 +452,52 @@ namespace Ooui
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class StyleSelectors
|
||||
{
|
||||
public Style this[string selector] {
|
||||
get {
|
||||
Style r;
|
||||
var key = selector ?? "";
|
||||
lock (styles) {
|
||||
if (!styles.TryGetValue (key, out r)) {
|
||||
r = new Style ();
|
||||
styles.Add (key, r);
|
||||
}
|
||||
return r;
|
||||
}
|
||||
}
|
||||
set {
|
||||
var key = selector ?? "";
|
||||
lock (styles) {
|
||||
if (value == null) {
|
||||
styles.Remove (key);
|
||||
}
|
||||
else {
|
||||
styles[key] = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void Clear ()
|
||||
{
|
||||
lock (styles) {
|
||||
styles.Clear ();
|
||||
}
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
lock (styles) {
|
||||
var q =
|
||||
from s in styles
|
||||
let v = s.Value.ToString ()
|
||||
where v.Length > 0
|
||||
select s.Key + " {" + s.Value.ToString () + "}";
|
||||
return String.Join ("\n", q);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,57 @@
|
|||
using System;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
|
||||
using Ooui;
|
||||
|
||||
namespace Tests
|
||||
{
|
||||
[TestClass]
|
||||
public class UITests
|
||||
{
|
||||
[TestMethod]
|
||||
public void UndefinedStylePropertyIsInherit ()
|
||||
{
|
||||
Assert.AreEqual ("inherit", UI.Styles["something random and made up"].BackgroundColor);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void SetStyleProperty ()
|
||||
{
|
||||
UI.Styles.Clear ();
|
||||
UI.Styles[".t1"].BackgroundColor = "red";
|
||||
Assert.AreEqual ("red", UI.Styles[".t1"].BackgroundColor);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void ClearWorks ()
|
||||
{
|
||||
UI.Styles[".t1"].BackgroundColor = "red";
|
||||
UI.Styles.Clear ();
|
||||
Assert.AreEqual ("inherit", UI.Styles[".t1"].BackgroundColor);
|
||||
Assert.AreEqual ("", UI.Styles.ToString ());
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void SetStyle ()
|
||||
{
|
||||
UI.Styles.Clear ();
|
||||
UI.Styles[".t2"] = new Style {
|
||||
BackgroundColor = "red",
|
||||
};
|
||||
Assert.AreEqual ("red", UI.Styles[".t2"].BackgroundColor);
|
||||
Assert.AreEqual (".t2 {background-color:red}", UI.Styles.ToString ());
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void SetNullStyle ()
|
||||
{
|
||||
UI.Styles.Clear ();
|
||||
UI.Styles[".t3"] = new Style {
|
||||
BackgroundColor = "red",
|
||||
};
|
||||
UI.Styles[".t3"] = null;
|
||||
Assert.AreEqual ("inherit", UI.Styles[".t3"].BackgroundColor);
|
||||
Assert.AreEqual ("", UI.Styles.ToString ());
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue