예제 #1
0
 public static IGridColumn <T> AddActionLink <T>(this IGridColumnsOf <T> columns, String action, String iconClass) where T : class
 {
     return(columns
            .Add(model => GetLink(columns.Grid.ViewContext, model, action, iconClass))
            .Css("action-cell")
            .Encoded(false));
 }
 public static IGridColumn <T> AddProperty <T, TProperty>(this IGridColumnsOf <T> columns, Expression <Func <T, TProperty> > expression)
 {
     return(columns
            .Add(expression)
            .Css(GetCssClassFor <TProperty>())
            .Titled(ResourceProvider.GetPropertyTitle(expression)));
 }
예제 #3
0
 public static IGridColumn <T, TProperty> AddProperty <T, TProperty>(this IGridColumnsOf <T> columns, Expression <Func <T, TProperty> > expression)
 {
     return(columns
            .Add(expression)
            .Named(NameFor(expression))
            .Css(CssClassFor <TProperty>())
            .Titled(Resource.ForProperty(expression)));
 }
예제 #4
0
        public static IGridColumn <T, Boolean> AddBoolean <T>(this IGridColumnsOf <T> columns, Expression <Func <T, Boolean> > expression)
        {
            Func <T, Boolean> valueFor = expression.Compile();

            return(columns
                   .AddProperty(expression)
                   .RenderedAs(model => valueFor(model) ? Resource.ForString("Yes") : Resource.ForString("No")));
        }
        public MvcGridExtensionsTests()
        {
            Grid <AllTypesView> grid       = new Grid <AllTypesView>(new AllTypesView[0]);
            IHtmlHelper         htmlHelper = HtmlHelperFactory.CreateHtmlHelper();

            html    = new HtmlGrid <AllTypesView>(htmlHelper, grid);
            columns = new GridColumns <AllTypesView>(grid);
        }
예제 #6
0
        public static IGridColumn <T, Boolean> AddBooleanProperty <T>(this IGridColumnsOf <T> columns, Expression <Func <T, Boolean> > expression)
        {
            Func <T, Boolean> valueFor = expression.Compile();

            return(columns
                   .AddProperty(expression)
                   .RenderedAs(model => valueFor(model) ? Strings.Yes : Strings.No));
        }
예제 #7
0
        public static IGridColumn <T, IHtmlContent> AddActionLink <T>(this IGridColumnsOf <T> columns, String action, String iconClass) where T : class
        {
            if (!IsAuthorizedTo(columns.Grid.ViewContext, action))
            {
                return(new GridColumn <T, IHtmlContent>(columns.Grid, model => null));
            }

            return(columns.Add(model => GetLink(columns.Grid.ViewContext, model, action, iconClass)).Css("action-cell"));
        }
        public MvcGridExtensionsTests()
        {
            Grid <AllTypesView> grid       = new Grid <AllTypesView>(Array.Empty <AllTypesView>());
            IHtmlHelper         htmlHelper = HtmlHelperFactory.CreateHtmlHelper();

            html    = new HtmlGrid <AllTypesView>(htmlHelper, grid);
            columns = new GridColumns <AllTypesView>(grid);
            context = html.Grid.ViewContext !;
        }
예제 #9
0
        public void Grid_SetsColumns()
        {
            Grid <GridModel> grid = new Grid <GridModel>(Array.Empty <GridModel>());

            IGridColumnsOf <GridModel> expected = new GridColumns <GridModel>(grid);
            IGridColumnsOf <GridModel> actual   = grid.Columns;

            Assert.Same(expected.Grid, actual.Grid);
            Assert.Equal(expected, actual);
        }
        public static IGridColumn <T> AddActionLink <T>(this IGridColumnsOf <T> columns, String action, String iconClass) where T : class
        {
            if (!IsAuthorizedToView(columns.Grid, action))
            {
                return(new GridColumn <T, String>(columns.Grid, model => ""));
            }

            return(columns
                   .Add(model => GetLink(columns.Grid, model, action, iconClass))
                   .Css("action-cell")
                   .Encoded(false));
        }
 public static void AddSorting <T>(this IGridColumnsOf <T> gridColumn) where T : ISortable
 {
     gridColumn.Add(m => m.Order)
     .RenderedAs(m => {
         var type = (m.GetType().Namespace ?? "").StartsWith("Castle.Proxies")
                 ? m.GetType().BaseType
                 : m.GetType();
         return("<button data-key=\"" + m.Id + "\" data-model=\"" + type?.FullName +
                "\" class=\"btn-link p-0 m-0 bg-transparent border-0 sort-handle\" type=\"button\"><i class=\"fas fa-sort\"></i></button>");
     })
     .Titled("").Encoded(false).CssClasses = "p-2";
 }
        public static void AddActions <T>(this IGridColumnsOf <T> gridColumn, Action <IActionBuilder <T> > action)
        {
            var viewContext = gridColumn.Grid.ViewContext;
            var httpContext = viewContext?.HttpContext;

            gridColumn.Add().RenderedAs(m => {
                var builder = new ActionBuilder <T>(m, httpContext,
                                                    httpContext?.RequestServices.GetService <LinkGenerator>(),
                                                    viewContext?.RouteData.Values["controller"]?.ToString());
                action(builder);
                return(builder.Html);
            }).Encoded(false).CssClasses = "p-2 w-1 white-space-nowrap align-middle";
        }
        public static IGridColumn <T> AddBooleanProperty <T>(this IGridColumnsOf <T> columns, Expression <Func <T, Boolean?> > expression)
        {
            Func <T, Boolean?> valueFor = expression.Compile();

            return(columns
                   .AddProperty(expression)
                   .RenderedAs(model =>
                               valueFor(model) != null
                        ? valueFor(model) == true
                            ? TableResources.Yes
                            : TableResources.No
                        : ""));
        }
예제 #14
0
        public void Build_Columns()
        {
            IGridColumnsOf <GridModel> expected = htmlGrid.Grid.Columns;
            Boolean builderCalled = false;

            htmlGrid.Build(actual =>
            {
                Assert.Same(expected, actual);
                builderCalled = true;
            });

            Assert.True(builderCalled);
        }
예제 #15
0
        public static IGridColumn <T, Boolean?> AddBooleanProperty <T>(this IGridColumnsOf <T> columns, Expression <Func <T, Boolean?> > expression)
        {
            Func <T, Boolean?> valueFor = expression.Compile();

            return(columns
                   .AddProperty(expression)
                   .MultiFilterable(false)
                   .RenderedAs(model =>
                               valueFor(model) != null
                        ? valueFor(model) == true
                            ? Strings.Yes
                            : Strings.No
                        : ""));
        }
 public static void AddActivating <T>(this IGridColumnsOf <T> gridColumn) where T : IActivable
 {
     gridColumn.Add()
     .RenderedAs(m => {
         var type = (m.GetType().Namespace ?? "").StartsWith("Castle.Proxies")
                 ? m.GetType().BaseType
                 : m.GetType();
         return(string.Format(
                    "<a data-key=\"" + m.Id + "\" data-model=\"" + type?.FullName +
                    "\" class=\"activable {0}\" href=\"\"><i class=\"fas fa-lg fa-toggle-on {1}\"></i></a>",
                    m.Active ? "activated" : "deactivated", !m.Active ? "fa-rotate-180" : ""));
     })
     .Encoded(false).CssClasses = "w-1 p-2";
 }
        public static IGridColumn <T, IHtmlContent> AddAction <T>(this IGridColumnsOf <T> columns, String action, String iconClass) where T : class
        {
            if (!IsAuthorizedFor(columns.Grid.ViewContext !, action))
            {
                return(new GridColumn <T, IHtmlContent>(columns.Grid, model => HtmlString.Empty));
            }

            IUrlHelperFactory?factory = columns.Grid.ViewContext?.HttpContext.RequestServices.GetService <IUrlHelperFactory>();
            IUrlHelper?       url     = factory?.GetUrlHelper(columns.Grid.ViewContext);

            return(columns
                   .Add(model => GenerateLink(model, url, action, iconClass))
                   .Css($"action-cell {action.ToLower()}"));
        }
예제 #18
0
        public static IGridColumn <DataRow, object> FormatGridColumn(IGridColumnsOf <DataRow> columns, DataColumn dataColumn, Models.ReportGrid.Column columnInfo)
        {
            IGridColumn <DataRow, object> thisColumn;

            //If the column name specifies formats, we parse the values.
            if (square.IsMatch(dataColumn.ColumnName))
            {
                var match = square.Match(dataColumn.ColumnName).Groups[0].Value;

                switch (match.ToLowerInvariant())
                {
                case "[date]":
                    DateTime dateTime;
                    thisColumn = columns.Add(t => DateTime.TryParse(t.ItemArray[dataColumn.Ordinal].ToString(), out dateTime) ? dateTime : null as object).FilteredAs("date");
                    break;

                case "[time]":
                    DateTime dateTimeTime;
                    thisColumn = columns.Add(t => DateTime.TryParse(t.ItemArray[dataColumn.Ordinal].ToString(), out dateTimeTime) ? dateTimeTime : null as object).FilteredAs("date")
                                 .Formatted("{0:hh:mm tt}");
                    break;

                case "[int]":
                    int intTemp;
                    thisColumn = columns.Add(t => int.TryParse(t.ItemArray[dataColumn.Ordinal].ToString(), out intTemp) ? intTemp : null as object).FilteredAs("number")
                    ;
                    break;

                case "[double]":
                    double doubleTemp;
                    thisColumn = columns.Add(t => double.TryParse(t.ItemArray[dataColumn.Ordinal].ToString(), out doubleTemp) ? doubleTemp : null as object).FilteredAs("number")
                    ;
                    break;

                case "[currency]":
                    decimal currencyTemp;
                    thisColumn = columns.Add(t => decimal.TryParse(t.ItemArray[dataColumn.Ordinal].ToString(), out currencyTemp) ? currencyTemp : null as object).FilteredAs("number")
                                 .Formatted("{0:C}");
                    break;

                default:
                    if (match.ToLowerInvariant().Contains("date") && curly.IsMatch(match))
                    {
                        var      matchedSq = curly.Match(match).Groups[0].Value;
                        DateTime dateTimeTemp;
                        thisColumn = columns.Add(t => DateTime.TryParse(t.ItemArray[dataColumn.Ordinal].ToString(), out dateTimeTemp) ? dateTimeTemp : null as object).FilteredAs("date")
                                     .Formatted(matchedSq);
                    }
                    else
                    {
                        thisColumn = columns.Add(t => t.ItemArray[dataColumn.Ordinal].ToString() as object).FilteredAs("text");
                    }
                    break;
                }
            }
            else
            {
                thisColumn = columns.Add(t => t.ItemArray[dataColumn.Ordinal].ToString() as object).FilteredAs("text");
            }

            thisColumn.Filterable(columnInfo.Filterable)
            .Sortable(columnInfo.Sortable)
            .Titled(!string.IsNullOrEmpty(columnInfo.Title) ? columnInfo.Title : square.Replace(dataColumn.ColumnName, ""))
            .Named(square.Replace(dataColumn.ColumnName, "").GetSanitizedName());

            if (columnInfo.Filterable && columnInfo.FilterType.HasValue)
            {
                thisColumn.Filterable(columnInfo.FilterType.Value);

                if (columnInfo.UseFilterOptions)
                {
                    thisColumn.UsingFilterOptions();
                }
            }

            return(thisColumn);
        }
예제 #19
0
 public static IGridColumn <T, IHtmlContent> AddAction <T>(this IGridColumnsOf <T> columns, Expression <Func <object, string> > href, string renderName)
 {
     return(columns.Add(model => GenerateLink(columns.Grid.ViewContext, href.Compile().Invoke(1), renderName)));
 }
예제 #20
0
 public static IGridColumn <T, DateTime?> AddDateTimeProperty <T>(this IGridColumnsOf <T> columns, Expression <Func <T, DateTime?> > expression)
 {
     return(columns.AddProperty(expression).Formatted("{0:g}"));
 }
 public static IGridColumn <T> AddProperty <T, TProperty>(this IGridColumnsOf <T> columns, Expression <Func <T, TProperty> > expression)
 {
     return(columns
            .Add(expression)
            .Css(GetCssClassFor <TProperty>()));
 }