From 55f59ddd7ac2eb0e390dde62d86c1a5f79b1b702 Mon Sep 17 00:00:00 2001 From: James Kolpack Date: Fri, 26 Jun 2020 21:40:20 -0400 Subject: [PATCH] Update button rendering, move css classes to viewdata --- WebCms/Utility/CssClassUtil.cs | 35 +++++ WebCms/Views/Queue/Details.cshtml | 125 +++++++++++------- WebCms/Views/Queue/Index.cshtml | 82 +++++++----- WebCms/Views/Results/Index.cshtml | 9 +- .../LeafInputDataSiteViewModels.cshtml | 24 +++- .../DisplayTemplates/_CancelForm.cshtml | 7 +- .../DisplayTemplates/_ChartButton.cshtml | 9 +- .../Shared/DisplayTemplates/_ChartLink.cshtml | 5 +- .../DisplayTemplates/_DeleteForm.cshtml | 8 +- .../DisplayTemplates/_FieldLayout.cshtml | 15 ++- WebCms/WebCms.csproj | 1 + 11 files changed, 208 insertions(+), 112 deletions(-) create mode 100644 WebCms/Utility/CssClassUtil.cs diff --git a/WebCms/Utility/CssClassUtil.cs b/WebCms/Utility/CssClassUtil.cs new file mode 100644 index 0000000..9d437fd --- /dev/null +++ b/WebCms/Utility/CssClassUtil.cs @@ -0,0 +1,35 @@ +using System.Linq; +using System.Web.Mvc; + +namespace LeafWeb.WebCms.Utility +{ + public static class CssClassUtil + { + private const string KeyName = "cssClass"; + public static ViewDataDictionary CreateCssClassDataDictionary(params string[] cssClasses) + => new ViewDataDictionary { { KeyName, cssClasses.ToArray() } }; + + public static void AddCssClass(this ViewDataDictionary vdd, string cssClass) + { + if (!vdd.ContainsKey(KeyName)) + vdd["cssClass"] = new []{ cssClass }; + else + { + var cssClassList = ((string[])vdd[KeyName]).ToList(); + if (!cssClassList.Contains(cssClass)) + cssClassList.Add(cssClass); + vdd[KeyName] = cssClassList.ToArray(); + } + } + + public static void SetButtonDisabled(this ViewDataDictionary vdd) + { + vdd.AddCssClass("disabled"); + } + + public static bool IsButtonDisabled(this ViewDataDictionary vdd) + { + return vdd.ContainsKey(KeyName) && ((string[]) vdd[KeyName]).Contains("disabled"); + } + } +} \ No newline at end of file diff --git a/WebCms/Views/Queue/Details.cshtml b/WebCms/Views/Queue/Details.cshtml index f934019..d6bafde 100644 --- a/WebCms/Views/Queue/Details.cshtml +++ b/WebCms/Views/Queue/Details.cshtml @@ -1,62 +1,64 @@ @using LeafWeb.WebCms.Controllers +@using LeafWeb.WebCms.Utility @model LeafInputDetails
- @Html.Partial("DisplayTemplates/_ChartButton", Model.LeafInputId, new ViewDataDictionary {{"Disabled", !Model.HasLeafChart}}) + + @ChartLink(Model) - +
} @@ -83,11 +83,11 @@ grid.Columns( grid.Column("Identifier", "Identifier"), grid.Column("SiteId", "Site Id"), - grid.Column("Name", "Submitted By" ), + grid.Column("Name", "Submitted By"), grid.Column("TimeInProgress", "Statistics", item => Statistics(item.Value), canSort: false), grid.Column("CurrentStatus", "Status", item => Status(item.Value), canSort: false), grid.Column("", format: item => Actions(item.Value), canSort: false)), - htmlAttributes: new {@class = "table table-sm table-striped table-bordered table-hover"} + htmlAttributes: new { @class = "table table-sm table-striped table-bordered table-hover" } ) @grid.BootstrapPager() @@ -106,7 +106,7 @@ else {
- @@ -129,9 +129,9 @@ else @DownloadInput(item) - + @DownloadOutputToUser(item) - + @DeleteLink(item)
@@ -139,17 +139,20 @@ else @helper DetailsLink(dynamic item) { - @Html.Partial("DisplayTemplates/_DetailsLink", (int)item.Id, new ViewDataDictionary {{"cssClass", new[]{"dropdown-item"}}}) + var cssClass= CssClassUtil.CreateCssClassDataDictionary("dropdown-item"); + + @Html.Partial("DisplayTemplates/_DetailsLink", (int)item.Id, cssClass) } @helper ChartLink(dynamic item) { - var classes = new[]{"dropdown-item"}; + var cssClass= CssClassUtil.CreateCssClassDataDictionary("dropdown-item"); + if (!item.HasLeafChart) { - classes = classes.Concat(new[] {"disabled"}).ToArray(); + cssClass.SetButtonDisabled(); } - @Html.Partial("DisplayTemplates/_ChartLink", (int)item.Id, new ViewDataDictionary {{"cssClass", classes}}) + @Html.Partial("DisplayTemplates/_ChartLink", (int)item.Id, cssClass) } @helper DownloadInput(dynamic item) @@ -160,7 +163,7 @@ else } @helper DownloadOutputToUser(dynamic item) { - + ToUser } @@ -177,45 +180,64 @@ else } var summaryText = string.Join(Environment.NewLine, summary); - @leafInput.InputFiles.Count @if(leafInput.InputFiles.Count > 1) {inputs} else { input} + @leafInput.InputFiles.Count @if (leafInput.InputFiles.Count > 1) + {inputs} + else + { input}
@if (leafInput.TimeInProgress > TimeSpan.Zero) { - @leafInput.TimeInProgress.ToRoundedReadableString() + @leafInput.TimeInProgress.ToRoundedReadableString() } else if (leafInput.IsPending) { - @Html.Partial("DisplayTemplates/_TimeRemaining", Tuple.Create(leafInput, Model.TimeInProgressEstimater)) est. + @Html.Partial("DisplayTemplates/_TimeRemaining", Tuple.Create(leafInput, Model.TimeInProgressEstimater)) est. } @if (leafInput.IsRunning) { -
- @Html.Partial("DisplayTemplates/_TimeRemaining", Tuple.Create(leafInput, Model.TimeInProgressEstimater)) left +
+ @Html.Partial("DisplayTemplates/_TimeRemaining", Tuple.Create(leafInput, Model.TimeInProgressEstimater)) left
}
} @helper DeleteLink(LeafInput item) { - @Html.Partial("DisplayTemplates/_DeleteForm", Tuple.Create(item.Id, item.Identifier, item.IsDeletable, true), new ViewDataDictionary {{"cssClass", new[]{"dropdown-item"}}}) + var cssClass + = CssClassUtil.CreateCssClassDataDictionary("dropdown-item"); + if (!item.IsDeletable) + { + cssClass.SetButtonDisabled(); + } + @Html.Partial("DisplayTemplates/_DeleteForm", Tuple.Create(item.Id, item.Identifier), cssClass) } @helper CancelLink(LeafInput item) { - @Html.Partial("DisplayTemplates/_CancelForm", Tuple.Create(item.Id, item.Identifier, true), new ViewDataDictionary {{"cssClass", new[]{"dropdown-item"}}}) + var cssClass + = CssClassUtil.CreateCssClassDataDictionary("dropdown-item"); + if (!item.IsCancellable) + { + cssClass.SetButtonDisabled(); + } + @Html.Partial("DisplayTemplates/_CancelForm", Tuple.Create(item.Id, item.Identifier), cssClass) } @helper PriorityForm(LeafInput item, Priority priority) { - @Html.Partial("DisplayTemplates/_PriorityForm", Tuple.Create(item.Id, item.PendingPriority, priority), new ViewDataDictionary {{"cssClass", new[]{"dropdown-item"}}}) + var cssClass + = CssClassUtil.CreateCssClassDataDictionary("dropdown-item"); + + @Html.Partial("DisplayTemplates/_PriorityForm", Tuple.Create(item.Id, item.PendingPriority, priority), cssClass) } @helper DisableItem(bool disabled) { -if (disabled){disabled} + if (disabled) + {disabled} } \ No newline at end of file diff --git a/WebCms/Views/Results/Index.cshtml b/WebCms/Views/Results/Index.cshtml index 4279d5d..5d04d93 100644 --- a/WebCms/Views/Results/Index.cshtml +++ b/WebCms/Views/Results/Index.cshtml @@ -1,6 +1,6 @@ @using LeafWeb.Core.Entities +@using LeafWeb.WebCms.Utility @model IQueryable - @{ var grid = new WebGrid(Model, rowsPerPage: 45); } @@ -21,7 +21,12 @@ @helper ChartLink(LeafInput leafInput) { - @Html.Partial("DisplayTemplates/_ChartButton", leafInput.Id, new ViewDataDictionary { { "Disabled", !leafInput.HasLeafChart }, {"xs", true} }) + var cssClass = CssClassUtil.CreateCssClassDataDictionary("btn", " btn-outline-secondary", "btn-sm"); + if (!leafInput.HasLeafChart) + { + cssClass.SetButtonDisabled(); + } + @Html.Partial("DisplayTemplates/_ChartButton", leafInput.Id, cssClass) } @helper Status(LeafInput leafInput) diff --git a/WebCms/Views/Shared/DisplayTemplates/LeafInputDataSiteViewModels.cshtml b/WebCms/Views/Shared/DisplayTemplates/LeafInputDataSiteViewModels.cshtml index de5bd91..3a854d6 100644 --- a/WebCms/Views/Shared/DisplayTemplates/LeafInputDataSiteViewModels.cshtml +++ b/WebCms/Views/Shared/DisplayTemplates/LeafInputDataSiteViewModels.cshtml @@ -1,12 +1,24 @@ @model IEnumerable @{ - Layout = "~/Views/Shared/DisplayTemplates/_FieldLayout.cshtml"; - var grid = new WebGrid(Model, rowsPerPage: 45) - { - }; + //Layout = "~/Views/Shared/DisplayTemplates/_FieldLayout.cshtml"; + Rend("Site Id", string.Join(", ", Model.Select(m => m.SiteId).Distinct())); + Rend("Latitude", string.Join(", ", Model.Select(m => m.Latitude).Distinct())); } -@grid.GetHtml(columns: +@helper Rend(string label, string value) +{ +
+
+ @label +
+
+ @value +
+
+} + + +@*@grid.GetHtml(columns: grid.Columns( grid.Column("SiteId"), grid.Column("Latitude"), @@ -14,4 +26,4 @@ grid.Column("Elevation") ), htmlAttributes: new { @class = "table table-sm table-striped table-bordered table-hover" } - ) + )*@ diff --git a/WebCms/Views/Shared/DisplayTemplates/_CancelForm.cshtml b/WebCms/Views/Shared/DisplayTemplates/_CancelForm.cshtml index d0b0faa..c5649ae 100644 --- a/WebCms/Views/Shared/DisplayTemplates/_CancelForm.cshtml +++ b/WebCms/Views/Shared/DisplayTemplates/_CancelForm.cshtml @@ -1,16 +1,15 @@ @using LeafWeb.WebCms.Controllers -@model Tuple +@using LeafWeb.WebCms.Utility +@model Tuple @{ var leafInputId = Model.Item1; var identifier = Model.Item2; - // true for a link, false for a button - var buttonType = Model.Item3 ? "btn-link" : "btn-outline-secondary"; } @using (Html.BeginUmbracoForm("Cancel", null, new { @class = "confirm clearfix", confirm_msg = "Cancelling cannot be undone! Confirm cancelling '" + identifier + "'." })) { - } \ No newline at end of file diff --git a/WebCms/Views/Shared/DisplayTemplates/_ChartButton.cshtml b/WebCms/Views/Shared/DisplayTemplates/_ChartButton.cshtml index 0b2edfd..207dd95 100644 --- a/WebCms/Views/Shared/DisplayTemplates/_ChartButton.cshtml +++ b/WebCms/Views/Shared/DisplayTemplates/_ChartButton.cshtml @@ -1,14 +1,11 @@ @using LeafWeb.WebCms.Controllers +@using LeafWeb.WebCms.Utility @model int @{ var url = UmbracoContext.Current.UrlProvider.GetUrl(LeafWebPageIds.Chart); - var disabled = ViewData.ContainsKey("Disabled") && (bool) ViewData["Disabled"]; - var xs = ViewData.ContainsKey("xs") && (bool) ViewData["xs"]; } -title="No chart has been generated"}} > +title="No chart has been generated"} > Charts \ No newline at end of file diff --git a/WebCms/Views/Shared/DisplayTemplates/_ChartLink.cshtml b/WebCms/Views/Shared/DisplayTemplates/_ChartLink.cshtml index 76aa722..68803f7 100644 --- a/WebCms/Views/Shared/DisplayTemplates/_ChartLink.cshtml +++ b/WebCms/Views/Shared/DisplayTemplates/_ChartLink.cshtml @@ -3,7 +3,6 @@ @{ var url = UmbracoContext.Current.UrlProvider.GetUrl(LeafWebPageIds.Chart); } - - - Chart + + Charts \ No newline at end of file diff --git a/WebCms/Views/Shared/DisplayTemplates/_DeleteForm.cshtml b/WebCms/Views/Shared/DisplayTemplates/_DeleteForm.cshtml index 56de22b..fefb424 100644 --- a/WebCms/Views/Shared/DisplayTemplates/_DeleteForm.cshtml +++ b/WebCms/Views/Shared/DisplayTemplates/_DeleteForm.cshtml @@ -1,17 +1,15 @@ @using LeafWeb.WebCms.Controllers -@model Tuple +@using LeafWeb.WebCms.Utility +@model Tuple @{ var leafInputId = Model.Item1; var identifier = Model.Item2; - var isDeletable = Model.Item3; - // true for a link, false for a button - var buttonType = Model.Item4 ? "btn-link" : "btn-outline-secondary"; } @using (Html.BeginUmbracoForm("Delete", null, new { @class = "confirm clearfix", confirm_msg = "Deletion cannot be undone! Confirm deleting '" + identifier + "'." })) { - } \ No newline at end of file diff --git a/WebCms/Views/Shared/DisplayTemplates/_FieldLayout.cshtml b/WebCms/Views/Shared/DisplayTemplates/_FieldLayout.cshtml index 7fc8daf..007a641 100644 --- a/WebCms/Views/Shared/DisplayTemplates/_FieldLayout.cshtml +++ b/WebCms/Views/Shared/DisplayTemplates/_FieldLayout.cshtml @@ -1,20 +1,21 @@ @using LeafWeb.Core.Utility @{ Layout = null; - var lowerPropertyName = ViewData.ModelMetadata.PropertyName.ToFirstLower(); + var meta = ViewData.ModelMetadata; + var lowerPropertyName = meta.PropertyName.ToFirstLower(); var displayName = - string.IsNullOrEmpty(ViewData.ModelMetadata.DisplayName) - ? ViewData.ModelMetadata.PropertyName.SplitCamelCase() - : ViewData.ModelMetadata.DisplayName; + string.IsNullOrEmpty(meta.DisplayName) + ? meta.PropertyName.SplitCamelCase() + : meta.DisplayName; // string units = (string)ViewData.ModelMetadata.AdditionalValues.ContainsKey("Units") ? ["Units"]; } -
-
+
+
@displayName
-
+
@RenderBody()
\ No newline at end of file diff --git a/WebCms/WebCms.csproj b/WebCms/WebCms.csproj index 4ecacbe..833f527 100644 --- a/WebCms/WebCms.csproj +++ b/WebCms/WebCms.csproj @@ -1133,6 +1133,7 @@ +