Skip to content

Commit 05cf7cc

Browse files
committed
Merge pull request #24 from ithielnor/master
Version 1.0.82
2 parents fbb2622 + 112939d commit 05cf7cc

File tree

7 files changed

+112
-30
lines changed

7 files changed

+112
-30
lines changed

.gitattributes

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# Auto detect text files and perform LF normalization
2+
* text=auto
3+
4+
# Custom for Visual Studio
5+
*.cs diff=csharp
6+
7+
# Standard to msysgit
8+
*.doc diff=astextplain
9+
*.DOC diff=astextplain
10+
*.docx diff=astextplain
11+
*.DOCX diff=astextplain
12+
*.dot diff=astextplain
13+
*.DOT diff=astextplain
14+
*.pdf diff=astextplain
15+
*.PDF diff=astextplain
16+
*.rtf diff=astextplain
17+
*.RTF diff=astextplain

Build/CommonAssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,5 @@
1515
//
1616
// You can specify all the values or you can default the Revision and Build Numbers
1717
// by using the '*' as shown below:
18-
[assembly: AssemblyVersion("1.0.81.0")]
19-
[assembly: AssemblyFileVersion("1.0.81.0")]
18+
[assembly: AssemblyVersion("1.0.82.0")]
19+
[assembly: AssemblyFileVersion("1.0.82.0")]

Griddly.Mvc/GriddlyExtensions.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,17 @@ public static object GetGriddlyDefault(this WebViewPage page, string field)
133133
return page.ViewData["_griddlyDefault_" + field];
134134
}
135135

136+
public static Dictionary<string, object> GetGriddlyDefaults(this WebViewPage page)
137+
{
138+
Dictionary<string, object> defaults = new Dictionary<string, object>();
139+
foreach (var key in page.ViewData.Keys.Where(k => k.StartsWith("_griddlyDefault_")))
140+
{
141+
defaults[key.Substring("_griddlyDefault_".Length)] = page.ViewData[key];
142+
}
143+
144+
return defaults;
145+
}
146+
136147
static IDictionary<string, object> ObjectToDictionary(object value)
137148
{
138149
if (value == null)

Griddly/Scripts/griddly.js

Lines changed: 58 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@
9595
var rowClickModal = this.$element.data("griddly-rowclickmodal");
9696
var filterMode = this.$element.data("griddly-filtermode");
9797
var allowedFilterModes = this.$element.data("griddly-allowedfiltermodes");
98+
var filterDefaults = this.$element.data("griddly-filter-defaults");
9899

99100
this.options.url = url;
100101
this.options.defaultRowIds = defaultRowIds;
@@ -103,7 +104,7 @@
103104
this.options.pageSize = parseInt(pageSize);
104105
this.options.pageCount = this.options.count * this.options.pageSize;
105106
this.options.rowClickModal = rowClickModal;
106-
107+
107108
if (!this.options.selectedRows) {
108109
this.options.selectedRows = {};
109110
}
@@ -118,6 +119,7 @@
118119

119120
this.options.filterMode = filterMode;
120121
this.options.allowedFilterModes = allowedFilterModes != null ? allowedFilterModes : null;
122+
this.options.filterDefaults = filterDefaults;
121123

122124
// TODO: should we do this later on so we handle dynamically added buttons?
123125
this.$element.find("[data-append-rowids-to-url]").each(function ()
@@ -693,17 +695,36 @@
693695
}
694696
},
695697

696-
toggleFilterMode: function()
698+
getFilterMode: function()
697699
{
698-
if (this.options.allowedFilterModes.length > 1)
700+
return this.options.filterMode;
701+
},
702+
703+
setFilterMode: function(mode)
704+
{
705+
if (this.options.allowedFilterModes.indexOf(mode) > -1)
699706
{
700-
this.options.filterMode = this.options.filterMode == "Inline" ? "Form" : "Inline";
707+
this.options.filterMode = mode;
708+
709+
var request1 = this.buildRequest();
701710

702711
this.$element.find("tr.griddly-filters:not(tr.griddly-filters-" + this.options.filterMode.toLowerCase() + ")").hide();
703712
this.$element.find("tr.griddly-filters-" + this.options.filterMode.toLowerCase()).show();
704713

705-
// TODO: only refresh if filter values changed
706-
this.refresh(true);
714+
var request2 = this.buildRequest();
715+
716+
if (JSON.stringify(request1) !== JSON.stringify(request2))
717+
{
718+
this.refresh(true);
719+
}
720+
}
721+
},
722+
723+
toggleFilterMode: function()
724+
{
725+
if (this.options.allowedFilterModes.length > 1)
726+
{
727+
this.setFilterMode(this.options.filterMode == "Inline" ? "Form" : "Inline");
707728
}
708729
},
709730

@@ -719,6 +740,29 @@
719740
return serializeObject(allFilters);
720741
},
721742

743+
setFilterValue: function(field, value)
744+
{
745+
var input = $(field);
746+
747+
if (value)
748+
{
749+
var datatype = input.data("griddly-filter-data-type");
750+
751+
switch (datatype)
752+
{
753+
case "Date":
754+
var date = new Date(value);
755+
value = date.toLocaleDateString();
756+
break;
757+
case "Currency":
758+
value = value.toFixed(2);
759+
break;
760+
}
761+
}
762+
763+
input.val(value).change();
764+
},
765+
722766
setFilterValues: function(filters, isPatch)
723767
{
724768
this.options.autoRefreshOnFilter = false;
@@ -727,15 +771,17 @@
727771
{
728772
var allFilters = $(".griddly-filters input, .griddly-filters select", this.$element).add(this.$inlineFilters);
729773

730-
allFilters.each(function ()
774+
allFilters.each($.proxy(function (i, e)
731775
{
732-
$(this).val(filters[this.name]).change();
733-
});
776+
this.setFilterValue(e, filters[e.name]);
777+
}, this));
734778
}
735779
else
736780
{
737781
for (var key in filters)
738-
$("[name='" + key + "']").val(filters[key]).change();
782+
{
783+
this.setFilterValue("[name='" + key + "']", filters[key]);
784+
}
739785
}
740786

741787
this.options.autoRefreshOnFilter = true;
@@ -744,11 +790,11 @@
744790

745791
resetFilterValues: function ()
746792
{
747-
// TODO: get defaults?
748-
749793
this.$element.find("form .transient").remove();
750794
this.$element.find("form")[0].reset();
751795

796+
this.setFilterValues(this.options.filterDefaults);
797+
752798
this.$element.trigger("resetfilters.griddly", this.$element);
753799

754800
this.refresh(true);

Griddly/Views/Shared/Griddly/Griddly.cshtml

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -89,14 +89,15 @@
8989
SortField[] defaultSort = settings.DefaultSort;
9090

9191
@:<div class="griddly @settings.ClassName" data-role="griddly"
92-
@: @Html.AttributeNullable("data-griddly-url", !simple ? Url.Current() : null)
93-
@: data-griddly-count="@Model.Total"
94-
@: @Html.AttributeNullable("data-griddly-filtermode", settings.InitialFilterMode != FilterMode.None ? settings.InitialFilterMode.ToString() : null)
95-
@: @Html.AttributeNullable("data-griddly-allowedfiltermodes", settings.AllowedFilterModes != FilterMode.None ? Json.Encode(Enum.GetValues(typeof(FilterMode)).Cast<FilterMode>().Where(x => settings.AllowedFilterModes.Value.HasFlag(x) && x != FilterMode.Both && x != FilterMode.None).Select(x => x.ToString())) : null)
96-
@: data-griddly-pagesize="@(settings.PageSize ?? Model.PageSize)"
97-
@: @Html.AttributeNullable("data-griddly-rowclickmodal", settings.RowClickModal)
98-
@: data-griddly-defaultrowids="@Json.Encode(settings.DefaultRowIds != null ? settings.DefaultRowIds.Select(x => x.ToLower()).ToArray() : new[] { "value" })"
99-
@: @Html.AttributeIf("data-griddly-defaultsort", defaultSort != null && defaultSort.Any(), Html.AttributeEncode(Json.Encode(defaultSort.Select(x => new { Field = x.Field, Direction = x.Direction.ToString() }))))>
92+
@: @Html.AttributeNullable("data-griddly-url", !simple ? Url.Current() : null)
93+
@: data-griddly-count="@Model.Total"
94+
@: @Html.AttributeNullable("data-griddly-filtermode", settings.InitialFilterMode != FilterMode.None ? settings.InitialFilterMode.ToString() : null)
95+
@: @Html.AttributeNullable("data-griddly-allowedfiltermodes", settings.AllowedFilterModes != FilterMode.None ? Json.Encode(Enum.GetValues(typeof(FilterMode)).Cast<FilterMode>().Where(x => settings.AllowedFilterModes.Value.HasFlag(x) && x != FilterMode.Both && x != FilterMode.None).Select(x => x.ToString())) : null)
96+
@: data-griddly-pagesize="@(settings.PageSize ?? Model.PageSize)"
97+
@: @Html.AttributeNullable("data-griddly-rowclickmodal", settings.RowClickModal)
98+
@: data-griddly-defaultrowids="@Json.Encode(settings.DefaultRowIds != null ? settings.DefaultRowIds.Select(x => x.ToLower()).ToArray() : new[] { "value" })"
99+
@: data-griddly-filter-defaults="@Newtonsoft.Json.JsonConvert.SerializeObject(this.GetGriddlyDefaults())"
100+
@: @Html.AttributeIf("data-griddly-defaultsort", defaultSort != null && defaultSort.Any(), Html.AttributeEncode(Json.Encode(defaultSort.Select(x => new { Field = x.Field, Direction = x.Direction.ToString() }))))>
100101
if (settings.Buttons.Any())
101102
{
102103
<div class="buttons">

Griddly/Views/Shared/Griddly/GriddlyFilterForm.cshtml

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
*@
1111

1212
@model GriddlySettings
13-
13+
1414
@foreach (GriddlyFilter filter in Model.Filters)
1515
{
1616
GriddlyFilterBox filterBox = filter as GriddlyFilterBox;
@@ -37,7 +37,8 @@
3737
<span class="input-group-addon"><i class="glyphicon glyphicon-calendar"></i></span>
3838
}
3939
}
40-
<input class="form-control" id="[email protected]" name="@filter.Field" type="text" value="@filter.GetEditValue(defaultValue)" />
40+
<input class="form-control" id="[email protected]" name="@filter.Field" type="text" value="@filter.GetEditValue(defaultValue)"
41+
data-griddly-filter-data-type="@filter.DataType" />
4142
@if (filter.DataType == FilterDataType.Currency || filter.DataType == FilterDataType.Date)
4243
{
4344
@*@if (filter.DataType == FilterDataType.Percent)
@@ -63,7 +64,8 @@
6364
<span class="input-group-addon"><i class="glyphicon glyphicon-calendar"></i></span>
6465
}
6566
}
66-
<input class="form-control" id="[email protected]" name="@filter.Field" type="text" value="@filter.GetEditValue(defaultValue)" />
67+
<input class="form-control" id="[email protected]" name="@filter.Field" type="text" value="@filter.GetEditValue(defaultValue)"
68+
data-griddly-filter-data-type="@filter.DataType" />
6769
@if (filter.DataType == FilterDataType.Currency || filter.DataType == FilterDataType.Date)
6870
{
6971
@*@if (filter.DataType == FilterDataType.Percent)
@@ -87,7 +89,8 @@
8789
<span class="input-group-addon"><i class="glyphicon glyphicon-calendar"></i></span>
8890
}
8991
}
90-
<input class="form-control" id="griddly-filter-@(filter.Field)-to" name="@filterRange.FieldEnd" type="text" value="@filter.GetEditValue(defaultValueEnd)" />
92+
<input class="form-control" id="griddly-filter-@(filter.Field)-to" name="@filterRange.FieldEnd" type="text" value="@filter.GetEditValue(defaultValueEnd)"
93+
data-griddly-filter-data-type="@filter.DataType" />
9194
@if (filter.DataType == FilterDataType.Currency || filter.DataType == FilterDataType.Date)
9295
{
9396
@*@if (filter.DataType == FilterDataType.Percent)
@@ -103,7 +106,8 @@
103106
filterList.SetSelectedItems(defaultValue);
104107

105108
<div class="col-sm-3">
106-
<select class="form-control col-sm-3" id="[email protected]" name="@filter.Field" @(filterList.IsMultiple ? "multiple" : null)>
109+
<select class="form-control col-sm-3" id="[email protected]" name="@filter.Field" @(filterList.IsMultiple ? "multiple" : null)
110+
data-griddly-filter-data-type="@filter.DataType">
107111
@foreach (SelectListItem item in filterList.Items)
108112
{
109113
<option value="@item.Value" @(item.Selected ? "selected" : null)>@item.Text</option>

Griddly/Views/Shared/Griddly/GriddlyFilterInline.cshtml

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,8 @@
111111
{
112112
<span class="input-group-addon"><i class="glyphicon glyphicon-calendar"></i></span>
113113
}
114-
<input class="form-control" name="@filter.Field" type="text" value="@filter.GetEditValue(defaultValue)" />
114+
<input class="form-control" name="@filter.Field" type="text" value="@filter.GetEditValue(defaultValue)"
115+
data-griddly-filter-data-type="@filter.DataType" />
115116
@*@if (filter.DataType == FilterDataType.Percent)
116117
{
117118
<span class="input-group-addon">%</span>
@@ -132,7 +133,8 @@
132133
{
133134
<span class="input-group-addon"><i class="glyphicon glyphicon-calendar"></i></span>
134135
}
135-
<input class="form-control" name="@filter.Field" type="text" value="@filter.GetEditValue(defaultValue)" />
136+
<input class="form-control" name="@filter.Field" type="text" value="@filter.GetEditValue(defaultValue)"
137+
data-griddly-filter-data-type="@filter.DataType" />
136138
@*@if (filter.DataType == FilterDataType.Percent)
137139
{
138140
<span class="input-group-addon">%</span>
@@ -151,7 +153,8 @@
151153
{
152154
<span class="input-group-addon"><i class="glyphicon glyphicon-calendar"></i></span>
153155
}
154-
<input class="form-control" name="@filterRange.FieldEnd" type="text" value="@filter.GetEditValue(defaultValueEnd)" />
156+
<input class="form-control" name="@filterRange.FieldEnd" type="text" value="@filter.GetEditValue(defaultValueEnd)"
157+
data-griddly-filter-data-type="@filter.DataType" />
155158
@*@if (filter.DataType == FilterDataType.Percent)
156159
{
157160
<span class="input-group-addon">%</span>

0 commit comments

Comments
 (0)