Skip to content

Commit 547332c

Browse files
committed
Added dynamic column class name
Added button default class name Fixed html stripping/encoding on export
1 parent b6fe6bd commit 547332c

File tree

7 files changed

+48
-17
lines changed

7 files changed

+48
-17
lines changed

Griddly.Mvc/GriddlyButton.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ public GriddlyButton()
2929

3030
Enabled = true;
3131
Action = GriddlyButtonAction.Navigate;
32+
ClassName = GriddlySettings.DefaultButtonClassName;
3233
}
3334

3435
public GriddlyButton Add(GriddlyButton item)

Griddly.Mvc/GriddlyColumn.cs

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
using System;
2+
using System.Collections.Generic;
3+
using System.Text.RegularExpressions;
24
using System.Web;
35
using System.Web.Helpers;
46
using System.Web.WebPages;
@@ -18,7 +20,8 @@ public abstract class GriddlyColumn
1820
public GriddlyFilter Filter { get; set; }
1921

2022
public abstract HtmlString RenderCell(object row, bool encode = true);
21-
public abstract object RenderCellValue(object row);
23+
public abstract object RenderCellValue(object row, bool stripHtml = false);
24+
public abstract string RenderClassName(object row);
2225

2326
protected virtual HtmlString RenderValue(object value, bool encode = true)
2427
{
@@ -50,6 +53,33 @@ protected virtual HtmlString RenderValue(object value, bool encode = true)
5053
public class GriddlyColumn<TRow> : GriddlyColumn
5154
{
5255
public Func<TRow, object> Template { get; set; }
56+
public Func<TRow, string> ClassNameExpression { get; set; }
57+
58+
static readonly Regex _htmlMatch = new Regex(@"<[^>]*>", RegexOptions.Compiled);
59+
60+
public override string RenderClassName(object row)
61+
{
62+
HashSet<string> classes = new HashSet<string>();
63+
64+
if (!string.IsNullOrWhiteSpace(ClassName))
65+
classes.UnionWith(ClassName.Split(' '));
66+
67+
if (DefaultSort != null)
68+
classes.Add("sorted_" + (DefaultSort == SortDirection.Descending ? "d" : "a"));
69+
70+
if (ClassNameExpression != null)
71+
{
72+
string additional = ClassNameExpression((TRow)row);
73+
74+
if (!string.IsNullOrWhiteSpace(additional))
75+
classes.UnionWith(additional.Split(' '));
76+
}
77+
78+
if (classes.Count > 0)
79+
return string.Join(" ", classes);
80+
else
81+
return null;
82+
}
5383

5484
public override HtmlString RenderCell(object row, bool encode = true)
5585
{
@@ -78,7 +108,7 @@ public override HtmlString RenderCell(object row, bool encode = true)
78108
return RenderValue(value, encode);
79109
}
80110

81-
public override object RenderCellValue(object row)
111+
public override object RenderCellValue(object row, bool stripHtml = false)
82112
{
83113
object value = null;
84114

@@ -95,7 +125,10 @@ public override object RenderCellValue(object row)
95125
throw new InvalidOperationException("Error rendering column \"" + Caption + "\"", ex);
96126
}
97127

98-
if (value is HtmlString)
128+
// TODO: test if we need to match separately -- maybe we get a real string here and could strip?
129+
if (stripHtml && (value is HtmlString || value is HelperResult || value is string))
130+
value = _htmlMatch.Replace((string)value, "").Trim().Replace(" ", " ");
131+
else if (value is HtmlString)
99132
value = value.ToString();
100133
else if (value is HelperResult)
101134
value = new HtmlString(((HelperResult)value).ToString());

Griddly.Mvc/GriddlyCsvResult.cs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,6 @@ public GriddlyCsvResult(IEnumerable<T> data, GriddlySettings settings, string na
2323
_format = format;
2424
}
2525

26-
static readonly Regex _htmlMatch = new Regex(@"<[^>]*>", RegexOptions.Compiled);
27-
2826
public override void ExecuteResult(ControllerContext context)
2927
{
3028
string format = _format == GriddlyExportFormat.Tsv ? "tsv" : "csv";
@@ -45,10 +43,7 @@ public override void ExecuteResult(ControllerContext context)
4543
{
4644
for (int x = 0; x < _settings.Columns.Count; x++)
4745
{
48-
object renderedValue = _settings.Columns[x].RenderCellValue(row);
49-
50-
if (renderedValue is string)
51-
renderedValue = _htmlMatch.Replace((string)renderedValue, "").Trim().Replace(" ", " ");
46+
object renderedValue = _settings.Columns[x].RenderCellValue(row, true);
5247

5348
w.WriteField(renderedValue);
5449
}

Griddly.Mvc/GriddlyExcelResult.cs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@ public GriddlyExcelResult(IEnumerable<T> data, GriddlySettings settings, string
2020
_name = name;
2121
}
2222

23-
static readonly Regex _aMatch = new Regex(@"<a\s[^>]*\s?href=""(.*?)"">(.*?)</a>", RegexOptions.Compiled | RegexOptions.IgnoreCase);
24-
static readonly Regex _htmlMatch = new Regex(@"<[^>]*>", RegexOptions.Compiled);
23+
// static readonly Regex _aMatch = new Regex(@"<a\s[^>]*\s?href=""(.*?)"">(.*?)</a>", RegexOptions.Compiled | RegexOptions.IgnoreCase);
2524

2625
public override void ExecuteResult(ControllerContext context)
2726
{
@@ -41,10 +40,7 @@ public override void ExecuteResult(ControllerContext context)
4140
{
4241
for (int x = 0; x < _settings.Columns.Count; x++)
4342
{
44-
object renderedValue = _settings.Columns[x].RenderCellValue(row);
45-
46-
if (renderedValue is string)
47-
renderedValue = _htmlMatch.Replace((string)renderedValue, "").Trim().Replace(" ", " ");
43+
object renderedValue = _settings.Columns[x].RenderCellValue(row, true);
4844

4945
ExcelRange cell = ws.Cells[y + 2, x + 1];
5046

Griddly.Mvc/GriddlySelectColumn.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,12 @@ public override HtmlString RenderCell(object row, bool encode = true)
2424
return new HtmlString(input.ToString(TagRenderMode.SelfClosing));
2525
}
2626

27-
public override object RenderCellValue(object row)
27+
public override object RenderCellValue(object row, bool stripHtml = false)
28+
{
29+
return null;
30+
}
31+
32+
public override string RenderClassName(object row)
2833
{
2934
return null;
3035
}

Griddly.Mvc/GriddlySettings.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ public abstract class GriddlySettings
1313
{
1414
public static string DefaultClassName = null;
1515
public static string DefaultTableClassName = "table table-bordered table-hover";
16+
public static string DefaultButtonClassName = null;
1617
public static string ButtonTemplate = "~/Views/Shared/Griddly/BootstrapButton.cshtml";
1718
public static string ButtonListTemplate = "~/Views/Shared/Griddly/ButtonStrip.cshtml";
1819
public static HtmlString BoolTrueHtml = null;

Griddly/Views/Shared/Griddly/Griddly.cshtml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@
126126
@Html.AttributeNullable("data-id", TryEval(row, settings.IdProperty))>
127127
@foreach (GriddlyColumn column in settings.Columns)
128128
{
129-
<td class="@column.ClassName @(column.DefaultSort != null ? (column.DefaultSort == SortDirection.Descending ? "sorted_d" : "sorted_a") : null)">@column.RenderCell(row)</td>
129+
<td class="@column.RenderClassName()">@column.RenderCell(row)</td>
130130
}
131131
</tr>
132132
}

0 commit comments

Comments
 (0)