add rudimentary ListView control
This commit is contained in:
parent
3569914d3f
commit
9a4dbda5df
@ -2,8 +2,9 @@ namespace MBS.Web.UI.HtmlControls;
|
|||||||
|
|
||||||
using System.Xml;
|
using System.Xml;
|
||||||
using MBS.Core.Collections.Generic;
|
using MBS.Core.Collections.Generic;
|
||||||
|
using MBS.Web.UI.WebControls;
|
||||||
|
|
||||||
public class HtmlGenericControl : Control
|
public class HtmlGenericControl : Container
|
||||||
{
|
{
|
||||||
private string _tagName;
|
private string _tagName;
|
||||||
protected override string TagName => _tagName;
|
protected override string TagName => _tagName;
|
||||||
@ -36,10 +37,16 @@ public class HtmlGenericControl : Control
|
|||||||
|
|
||||||
protected override void RenderContents(XmlWriter writer)
|
protected override void RenderContents(XmlWriter writer)
|
||||||
{
|
{
|
||||||
base.RenderContents(writer);
|
if (GetChildControls().Count == 0)
|
||||||
if (Content != null)
|
|
||||||
{
|
{
|
||||||
writer.WriteRaw(Content);
|
if (Content != null)
|
||||||
|
{
|
||||||
|
writer.WriteRaw(Content);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
base.RenderContents(writer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -16,7 +16,7 @@ public class Button : WebControlWithMnemonic
|
|||||||
// if (!UseSubmitBehavior)
|
// if (!UseSubmitBehavior)
|
||||||
{
|
{
|
||||||
WriteTextWithMnemonic(writer);
|
WriteTextWithMnemonic(writer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override IDictionary<string, string> GetControlAttributes()
|
protected override IDictionary<string, string> GetControlAttributes()
|
||||||
|
|||||||
144
src/lib/MBS.Web/UI/WebControls/ListView.cs
Normal file
144
src/lib/MBS.Web/UI/WebControls/ListView.cs
Normal file
@ -0,0 +1,144 @@
|
|||||||
|
using MBS.Core.Collections.Generic;
|
||||||
|
using MBS.Web.UI.HtmlControls;
|
||||||
|
|
||||||
|
namespace MBS.Web.UI.WebControls;
|
||||||
|
|
||||||
|
public class ListViewItemColumn
|
||||||
|
{
|
||||||
|
public class ListViewItemColumnCollection
|
||||||
|
: System.Collections.ObjectModel.Collection<ListViewItemColumn>
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public string ColumnName { get; set; }
|
||||||
|
public object Value { get; set; }
|
||||||
|
|
||||||
|
public ListViewItemColumn(string columnName, object value)
|
||||||
|
{
|
||||||
|
ColumnName = columnName;
|
||||||
|
Value = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class ListViewItem
|
||||||
|
{
|
||||||
|
public class ListViewItemCollection
|
||||||
|
: System.Collections.ObjectModel.Collection<ListViewItem>
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public ListViewItemColumn.ListViewItemColumnCollection Columns { get; } = new ListViewItemColumn.ListViewItemColumnCollection();
|
||||||
|
|
||||||
|
public ListViewItem(IEnumerable<ListViewItemColumn> columns = null)
|
||||||
|
{
|
||||||
|
if (columns != null)
|
||||||
|
{
|
||||||
|
Columns.AddRange(columns);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class ListViewColumn
|
||||||
|
{
|
||||||
|
public class ListViewColumnCollection
|
||||||
|
: System.Collections.ObjectModel.Collection<ListViewColumn>
|
||||||
|
{
|
||||||
|
private Dictionary<string, ListViewColumn> _itemsByName = new Dictionary<string, ListViewColumn>();
|
||||||
|
public ListViewColumn this[string name]
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (_itemsByName.ContainsKey(name))
|
||||||
|
{
|
||||||
|
return _itemsByName[name];
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void ClearItems()
|
||||||
|
{
|
||||||
|
foreach (ListViewColumn item in this)
|
||||||
|
{
|
||||||
|
if (_itemsByName[item.Name] == item)
|
||||||
|
{
|
||||||
|
_itemsByName.Remove(item.Name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
base.ClearItems();
|
||||||
|
}
|
||||||
|
protected override void RemoveItem(int index)
|
||||||
|
{
|
||||||
|
base.RemoveItem(index);
|
||||||
|
_itemsByName.Remove(this[index].Name);
|
||||||
|
}
|
||||||
|
protected override void InsertItem(int index, ListViewColumn item)
|
||||||
|
{
|
||||||
|
base.InsertItem(index, item);
|
||||||
|
_itemsByName[item.Name] = item;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Name { get; set; }
|
||||||
|
public string Title { get; set; }
|
||||||
|
|
||||||
|
public ListViewColumn(string name, string title)
|
||||||
|
{
|
||||||
|
Name = name;
|
||||||
|
Title = title;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class ListView : Container
|
||||||
|
{
|
||||||
|
protected override string TagName => "table";
|
||||||
|
|
||||||
|
public ListView(IEnumerable<ListViewColumn>? columns = null, IEnumerable<ListViewItem>? items = null)
|
||||||
|
{
|
||||||
|
if (columns != null)
|
||||||
|
{
|
||||||
|
Columns.AddRange(columns);
|
||||||
|
}
|
||||||
|
if (items != null)
|
||||||
|
{
|
||||||
|
Items.AddRange(items);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public ListViewColumn.ListViewColumnCollection Columns { get; } = new ListViewColumn.ListViewColumnCollection();
|
||||||
|
public ListViewItem.ListViewItemCollection Items { get; } = new ListViewItem.ListViewItemCollection();
|
||||||
|
|
||||||
|
private HtmlGenericControl thead = null, tbody = null;
|
||||||
|
|
||||||
|
protected override IList<Control> GetChildControls()
|
||||||
|
{
|
||||||
|
thead = new HtmlGenericControl("thead");
|
||||||
|
|
||||||
|
HtmlGenericControl tr = new HtmlGenericControl("tr");
|
||||||
|
foreach (ListViewColumn lvc in Columns)
|
||||||
|
{
|
||||||
|
HtmlGenericControl th = new HtmlGenericControl("th");
|
||||||
|
th.Content = lvc.Title;
|
||||||
|
tr.Controls.Add(th);
|
||||||
|
}
|
||||||
|
thead.Controls.Add(tr);
|
||||||
|
|
||||||
|
tbody = new HtmlGenericControl("tbody");
|
||||||
|
foreach (ListViewItem lvi in Items)
|
||||||
|
{
|
||||||
|
HtmlGenericControl tr2 = new HtmlGenericControl("tr");
|
||||||
|
foreach (ListViewItemColumn col in lvi.Columns)
|
||||||
|
{
|
||||||
|
HtmlGenericControl td = new HtmlGenericControl("td");
|
||||||
|
td.Content = col.Value?.ToString();
|
||||||
|
tr2.Controls.Add(td);
|
||||||
|
}
|
||||||
|
tbody.Controls.Add(tr2);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new Control[] { thead, tbody };
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -2,7 +2,7 @@ namespace MBS.Web;
|
|||||||
|
|
||||||
public class WebContext
|
public class WebContext
|
||||||
{
|
{
|
||||||
public WebContext(WebApplication application, WebRequest request, WebResponse response, Dictionary<string, string> session)
|
public WebContext(WebApplication application, WebRequest request, WebResponse response, Dictionary<string, object> session)
|
||||||
{
|
{
|
||||||
Application = application;
|
Application = application;
|
||||||
Request = request;
|
Request = request;
|
||||||
@ -14,5 +14,5 @@ public class WebContext
|
|||||||
public WebRequest Request { get; }
|
public WebRequest Request { get; }
|
||||||
public WebResponse Response { get; }
|
public WebResponse Response { get; }
|
||||||
|
|
||||||
public Dictionary<string, string> Session { get; }
|
public Dictionary<string, object> Session { get; }
|
||||||
}
|
}
|
||||||
|
|||||||
@ -133,7 +133,7 @@ public class WebServer
|
|||||||
return sb.ToString();
|
return sb.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
private Dictionary<string, Dictionary<string, string>> _sessions = new Dictionary<string, Dictionary<string, string>>();
|
private Dictionary<string, Dictionary<string, object>> _sessions = new Dictionary<string, Dictionary<string, object>>();
|
||||||
|
|
||||||
private void HandleClient(System.Net.Sockets.TcpClient client)
|
private void HandleClient(System.Net.Sockets.TcpClient client)
|
||||||
{
|
{
|
||||||
@ -204,15 +204,18 @@ public class WebServer
|
|||||||
sr.ReadBlock(buffer, 0, contentLengthInt);
|
sr.ReadBlock(buffer, 0, contentLengthInt);
|
||||||
|
|
||||||
string content = new string(buffer);
|
string content = new string(buffer);
|
||||||
string[] kvps = content.Split(new char[] { '&' });
|
if (!String.IsNullOrEmpty(content))
|
||||||
foreach (string kvp in kvps)
|
|
||||||
{
|
{
|
||||||
string[] pv = kvp.Split(new char[] { '=' });
|
string[] kvps = content.Split(new char[] { '&' });
|
||||||
form[pv[0]] = pv[1];
|
foreach (string kvp in kvps)
|
||||||
|
{
|
||||||
|
string[] pv = kvp.Split(new char[] { '=' });
|
||||||
|
form[pv[0]] = pv[1].Replace('+', ' ');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Dictionary<string, string> session;
|
Dictionary<string, object> session;
|
||||||
string cookie = "", cookieKey = "", cookieValue = "";
|
string cookie = "", cookieKey = "", cookieValue = "";
|
||||||
if (headers[HttpRequestHeader.Cookie] != null)
|
if (headers[HttpRequestHeader.Cookie] != null)
|
||||||
{
|
{
|
||||||
@ -231,14 +234,14 @@ public class WebServer
|
|||||||
|
|
||||||
if (!_sessions.ContainsKey(cookieValue))
|
if (!_sessions.ContainsKey(cookieValue))
|
||||||
{
|
{
|
||||||
_sessions[cookieValue] = new Dictionary<string, string>();
|
_sessions[cookieValue] = new Dictionary<string, object>();
|
||||||
}
|
}
|
||||||
|
|
||||||
session = _sessions[cookieValue];
|
session = _sessions[cookieValue];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
session = new Dictionary<string, string>();
|
session = new Dictionary<string, object>();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cookieValue == "")
|
if (cookieValue == "")
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user