diff --git a/Griddly.Mvc/Griddly.Mvc.csproj b/Griddly.Mvc/Griddly.Mvc.csproj index 0ce76e5..54b281b 100644 --- a/Griddly.Mvc/Griddly.Mvc.csproj +++ b/Griddly.Mvc/Griddly.Mvc.csproj @@ -91,6 +91,7 @@ + diff --git a/Griddly.Mvc/GriddlyContext.cs b/Griddly.Mvc/GriddlyContext.cs index f514862..b37a452 100644 --- a/Griddly.Mvc/GriddlyContext.cs +++ b/Griddly.Mvc/GriddlyContext.cs @@ -23,6 +23,7 @@ public class GriddlyContext public int PageSize { get; set; } public GriddlyExportFormat? ExportFormat { get; set; } public SortField[] SortFields { get; set; } + public GriddlySettings Settings { get; set; } } public class GriddlyFilterCookieData diff --git a/Griddly.Mvc/GriddlyCss.cs b/Griddly.Mvc/GriddlyCss.cs new file mode 100644 index 0000000..ec69aff --- /dev/null +++ b/Griddly.Mvc/GriddlyCss.cs @@ -0,0 +1,76 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Griddly.Mvc +{ + public class GriddlyCssIcons + { + public string Calendar { get; set; } + public string Remove { get; set; } + public string ListMultipleSelected { get; set; } + public string ListSingleSelected { get; set; } + public string Check { get; set; } + public string Filter { get; set; } + public string Clear { get; set; } + public string CaretDown { get; set; } + } + + public struct GriddlyCss + { + public string TextCenter { get; set; } + public string TextRight { get; set; } + public string FloatRight { get; set; } + public string GriddlyDefault { get; set; } + public string TableDefault { get; set; } + public string ButtonDefault { get; set; } + public GriddlyCssIcons Icons { get; set; } + public bool IsBootstrap4 { get; set; } + + public static GriddlyCss Bootstrap3Defaults = new GriddlyCss() + { + TextCenter = "text-center", + TextRight = "text-right", + FloatRight = "pull-right", + GriddlyDefault = null, + TableDefault = "table table-bordered table-hover", + ButtonDefault = "btn btn-default", + Icons = new GriddlyCssIcons() + { + Calendar = "glyphicon glyphicon-calendar", + Remove = "glyphicon glyphicon-remove", + ListMultipleSelected = "glyphicon glyphicon-ok", + ListSingleSelected = "glyphicon glyphicon-record", + Check = "glyphicon glyphicon-check", + Filter = "glyphicon glyphicon-filter", + Clear = "glyphicon glyphicon-ban-circle", + CaretDown = "caret" + } + }; + + public static GriddlyCss Bootstrap4Defaults = new GriddlyCss() + { + IsBootstrap4 = true, + TextCenter = "text-center", + TextRight = "text-right", + FloatRight = "float-right", + GriddlyDefault = null, + TableDefault = "table table-bordered table-hover", + ButtonDefault = "btn btn-outline-secondary", + Icons = new GriddlyCssIcons() + { + Calendar = "fa fa-calendar-alt", + Remove = "fa fa-times", + ListMultipleSelected = "fa fa-check", + ListSingleSelected = "fas fa-check-circle", + Check = "fa fa-check-square", + Filter = "fa fa-filter", + Clear = "fa fa-ban", + CaretDown = "fa fa-caret-down" + } + }; + } + +} diff --git a/Griddly.Mvc/GriddlyExport.cs b/Griddly.Mvc/GriddlyExport.cs index 89889b6..7296db3 100644 --- a/Griddly.Mvc/GriddlyExport.cs +++ b/Griddly.Mvc/GriddlyExport.cs @@ -53,9 +53,6 @@ public GriddlyExport Column(Expression> e { var compiledTemplate = expression.Compile(); - //if (type == typeof(bool) && (BoolTrueHtml != null || BoolFalseHtml != null)) - // template = (row) => (compiledTemplate(row) as bool? == true) ? BoolTrueHtml : BoolFalseHtml; - //else template = (row) => compiledTemplate(row); } } diff --git a/Griddly.Mvc/GriddlyResult.cs b/Griddly.Mvc/GriddlyResult.cs index 3325a79..cd05d2a 100644 --- a/Griddly.Mvc/GriddlyResult.cs +++ b/Griddly.Mvc/GriddlyResult.cs @@ -72,7 +72,7 @@ public override void ExecuteResult(ControllerContext context) if (context.IsChildAction) { - settings = GriddlySettingsResult.GetSettings(context, ViewName); + griddlyContext.Settings = settings = GriddlySettingsResult.GetSettings(context, ViewName); GriddlySettings.OnGriddlyResultExecuting?.Invoke(settings, context); @@ -127,7 +127,7 @@ public override void ExecuteResult(ControllerContext context) } else { - settings = GriddlySettingsResult.GetSettings(context, ViewName); + griddlyContext.Settings = settings = GriddlySettingsResult.GetSettings(context, ViewName); settings.Columns.RemoveAll(x => x is GriddlySelectColumn); diff --git a/Griddly.Mvc/GriddlySelectColumn.cs b/Griddly.Mvc/GriddlySelectColumn.cs index bd5d611..8aed9d1 100644 --- a/Griddly.Mvc/GriddlySelectColumn.cs +++ b/Griddly.Mvc/GriddlySelectColumn.cs @@ -12,9 +12,9 @@ public class GriddlySelectColumn : GriddlyColumn { public Func IsRowSelectable { get; set; } - public GriddlySelectColumn() + public GriddlySelectColumn(GriddlySettings settings) { - ClassName = $"griddly-select {GriddlySettings.Css.TextCenter}"; + ClassName = $"griddly-select {settings.Css.TextCenter}"; } public virtual IDictionary GenerateInputHtmlAttributes(object row) @@ -81,6 +81,10 @@ public override HtmlString RenderUnderlyingValue(object row) public class GriddlySelectColumn : GriddlySelectColumn { + public GriddlySelectColumn(GriddlySettings settings) : base(settings) + { + } + public Func InputHtmlAttributesTemplate { get; set; } public new Func IsRowSelectable diff --git a/Griddly.Mvc/GriddlySettings.cs b/Griddly.Mvc/GriddlySettings.cs index 49bb950..f1eef84 100644 --- a/Griddly.Mvc/GriddlySettings.cs +++ b/Griddly.Mvc/GriddlySettings.cs @@ -12,46 +12,29 @@ namespace Griddly.Mvc { public abstract class GriddlySettings: IGriddlyFilterSettings { - public static class Css - { - public static string TextCenter = "text-center"; - public static string TextRight = "text-right"; - public static string FloatRight = "pull-right"; - public static string GriddlyDefault = null; - public static string TableDefault = "table table-bordered table-hover"; - public static string ButtonDefault = "btn btn-default"; - - public static class Icons - { - public static string Calendar = "glyphicon glyphicon-calendar"; - public static string Remove = "glyphicon glyphicon-remove"; - public static string ListMultipleSelected = "glyphicon glyphicon-ok"; - public static string ListSingleSelected = "glyphicon glyphicon-record"; - public static string Check = "glyphicon glyphicon-check"; - public static string Filter = "glyphicon glyphicon-filter"; - public static string Clear = "glyphicon glyphicon-ban-circle"; - public static string CaretDown = "caret"; - } - } + public static GriddlyCss DefaultCss = GriddlyCss.Bootstrap3Defaults; + #region Obsolete shims retained only for backward compatibility [Obsolete("Use GriddlySettings.Css.GriddlyDefault")] - public static string DefaultClassName { get => Css.GriddlyDefault; set => Css.GriddlyDefault = value; } + public static string DefaultClassName { get => DefaultCss.GriddlyDefault; set => DefaultCss.GriddlyDefault = value; } [Obsolete("Use GriddlySettings.Css.TableDefault")] - public static string DefaultTableClassName { get => Css.TableDefault; set => Css.TableDefault = value; } + public static string DefaultTableClassName { get => DefaultCss.TableDefault; set => DefaultCss.TableDefault = value; } [Obsolete("Use GriddlySettings.Css.ButtonDefault")] - public static string DefaultButtonClassName { get => Css.ButtonDefault; set => Css.ButtonDefault = value; } - + public static string DefaultButtonClassName { get => DefaultCss.ButtonDefault; set => DefaultCss.ButtonDefault = value; } + [Obsolete("Use Css.IsBootstrap4")] + public static bool IsBootstrap4 => DefaultCss.IsBootstrap4; + #endregion + public static string ButtonTemplate = "~/Views/Shared/Griddly/BootstrapButton.cshtml"; public static string ButtonListTemplate = "~/Views/Shared/Griddly/ButtonStrip.cshtml"; - public static HtmlString BoolTrueHtml = null; - public static HtmlString BoolFalseHtml = null; + public static HtmlString DefaultBoolTrueHtml = null; + public static HtmlString DefaultBoolFalseHtml = null; public static int? DefaultPageSize = null; public static FilterMode? DefaultInitialFilterMode = FilterMode.Form; //public static FilterMode? DefaultAllowedFilterModes = FilterMode.Inline; public static bool DefaultShowRowSelectCount = true; public static bool ExportCurrencySymbol = true; public static bool DisableHistoryParameters = false; - public static bool IsBootstrap4 = false; public static Func IconTemplate = null; public static Func DefaultFooterTemplate = null; @@ -66,7 +49,7 @@ public static class Icons public static Action OnBeforeRender = null; public static Action OnGriddlyResultExecuting = null; public static Action OnGriddlyPageExecuting = null; - + public GriddlySettings() { IdProperty = "Id"; @@ -79,8 +62,8 @@ public GriddlySettings() HtmlAttributes = new RouteValueDictionary(); TableHtmlAttributes = new RouteValueDictionary(); - ClassName = Css.GriddlyDefault; - TableClassName = Css.TableDefault; + ClassName = DefaultCss.GriddlyDefault; + TableClassName = DefaultCss.TableDefault; FooterTemplate = DefaultFooterTemplate; HeaderTemplate = DefaultHeaderTemplate; EmptyGridMessageTemplate = DefaultEmptyGridMessageTemplate; @@ -93,22 +76,13 @@ public GriddlySettings() public static void ConfigureBootstrap4Defaults() { - IsBootstrap4 = true; - Css.TextCenter = "text-center"; - Css.TextRight = "text-right"; - Css.FloatRight = "float-right"; - Css.ButtonDefault = "btn btn-outline-secondary"; - - Css.Icons.Calendar = "fa fa-calendar-alt"; - Css.Icons.Remove = "fa fa-times"; - Css.Icons.ListMultipleSelected = "fa fa-check"; - Css.Icons.ListSingleSelected = "fas fa-check-circle"; - Css.Icons.Check = "fa fa-check-square"; - Css.Icons.Filter = "fa fa-filter"; - Css.Icons.Clear = "fa fa-ban"; - Css.Icons.CaretDown = "fa fa-caret-down"; + DefaultCss = GriddlyCss.Bootstrap4Defaults; } + public GriddlyCss Css = DefaultCss; + public HtmlString BoolTrueHtml = DefaultBoolTrueHtml; + public HtmlString BoolFalseHtml = DefaultBoolFalseHtml; + public string[] DefaultRowIds { get; set; } public string IdProperty { get; set; } public string Title { get; set; } @@ -362,7 +336,7 @@ public GriddlySettings SelectColumn(Expression> id, object { RowId(id, "id"); - return Add(new GriddlySelectColumn() + return Add(new GriddlySelectColumn(this) { SummaryValue = summaryValue }); @@ -375,7 +349,7 @@ public GriddlySettings SelectColumn(Dictionary> ids RowIds[x.Key] = x.Value; } - return Add(new GriddlySelectColumn() + return Add(new GriddlySelectColumn(this) { SummaryValue = summaryValue }); @@ -557,7 +531,7 @@ public GriddlySettings SelectColumn(Expression> id, obj { RowId(id, "id"); - Add(new GriddlySelectColumn() + Add(new GriddlySelectColumn(this) { SummaryValue = summaryValue, InputHtmlAttributesTemplate = inputHtmlAttributesTemplate @@ -573,7 +547,7 @@ public GriddlySettings SelectColumn(Dictionary> RowIds[x.Key] = (z) => x.Value((TRow)z); } - Add(new GriddlySelectColumn() + Add(new GriddlySelectColumn(this) { SummaryValue = summaryValue }); diff --git a/Griddly/Views/Shared/Griddly/BootstrapButton.cshtml b/Griddly/Views/Shared/Griddly/BootstrapButton.cshtml index 0e95eba..a60d57c 100644 --- a/Griddly/Views/Shared/Griddly/BootstrapButton.cshtml +++ b/Griddly/Views/Shared/Griddly/BootstrapButton.cshtml @@ -12,6 +12,7 @@ @model GriddlyButton @{ bool isListOnly = ViewBag.IsListOnly == true; + var css = (GriddlyCss?)ViewBag.GriddlyCss ?? GriddlySettings.DefaultCss; } @if (Model is GriddlyHtmlButton) { @@ -29,14 +30,14 @@ else @RenderLink(Model, true, false) @if (Model.DropdownCaret == GriddlyDropdownCaret.Split) { - } - @if (GriddlySettings.IsBootstrap4) + @if (css.IsBootstrap4) {