Skip to content

Commit 1ea5294

Browse files
committed
Griddly buttons now work with rowids
1 parent d4d2d9e commit 1ea5294

File tree

7 files changed

+51
-30
lines changed

7 files changed

+51
-30
lines changed

Griddly.Mvc/GriddlyButton.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ public class GriddlyButton
2020
public string Target { get; set; }
2121
public string ConfirmMessage { get; set; }
2222
public bool AlignRight { get; set; }
23+
public string[] RowIds { get; set; }
2324

2425
public GriddlyButtonAction Action { get; set; }
2526

Griddly.Mvc/GriddlySettings.cs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ public GriddlySettings Add(GriddlyButton button)
147147
});
148148
}*/
149149

150-
public GriddlySettings Button(Func<object, object> argumentTemplate, string caption, string icon = null, GriddlyButtonAction action = GriddlyButtonAction.Navigate, bool? enableOnSelection = null, string className = null, string target = null)
150+
public GriddlySettings Button(Func<object, object> argumentTemplate, string caption, string icon = null, GriddlyButtonAction action = GriddlyButtonAction.Navigate, bool? enableOnSelection = null, string className = null, string target = null, string[] rowIds = null)
151151
{
152152
if (enableOnSelection == null)
153153
enableOnSelection = (action == GriddlyButtonAction.Ajax || action == GriddlyButtonAction.AjaxBulk || action == GriddlyButtonAction.Post);
@@ -159,13 +159,14 @@ public GriddlySettings Button(Func<object, object> argumentTemplate, string capt
159159
Icon = icon,
160160
Action = action,
161161
EnableOnSelection = enableOnSelection.Value,
162-
Target = target
162+
Target = target,
163+
RowIds = rowIds
163164
};
164165

165166
return Add(button);
166167
}
167168

168-
public GriddlySettings Button(string argument, string caption, string icon = null, GriddlyButtonAction action = GriddlyButtonAction.Navigate, bool? enableOnSelection = null, string className = null, string target = null)
169+
public GriddlySettings Button(string argument, string caption, string icon = null, GriddlyButtonAction action = GriddlyButtonAction.Navigate, bool? enableOnSelection = null, string className = null, string target = null, string[] rowIds = null)
169170
{
170171
if (enableOnSelection == null)
171172
enableOnSelection = (action == GriddlyButtonAction.Ajax || action == GriddlyButtonAction.AjaxBulk || action == GriddlyButtonAction.Post);
@@ -177,7 +178,8 @@ public GriddlySettings Button(string argument, string caption, string icon = nul
177178
Icon = icon,
178179
Action = action,
179180
EnableOnSelection = enableOnSelection.Value,
180-
Target = target
181+
Target = target,
182+
RowIds = rowIds
181183
};
182184

183185
return Add(button);
@@ -407,14 +409,15 @@ public GriddlySettings<TRow> SelectColumn(Dictionary<string, Func<TRow, object>>
407409
return this;
408410
}
409411

410-
public GriddlySettings<TRow> Button<TModel>(Func<TModel, object> argumentTemplate, string caption, string icon = null, GriddlyButtonAction action = GriddlyButtonAction.Navigate)
412+
public GriddlySettings<TRow> Button<TModel>(Func<TModel, object> argumentTemplate, string caption, string icon = null, GriddlyButtonAction action = GriddlyButtonAction.Navigate, string[] rowIds = null)
411413
{
412414
Add(new GriddlyButton()
413415
{
414416
ArgumentTemplate = (x) => argumentTemplate((TModel)x),
415417
Text = caption,
416418
Icon = icon,
417-
Action = action
419+
Action = action,
420+
RowIds = rowIds
418421
});
419422

420423
return this;

Griddly/Scripts/griddly.js

Lines changed: 34 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -912,6 +912,7 @@
912912
var onclick = button.data("onclick");
913913
var confirmMessage = button.data("confirm-message");
914914
var enableOnSelection = button.data("enable-on-selection");
915+
var rowIds = button.data("rowids");
915916

916917
if ((typeof confirmMessage === "undefined" || confirm(confirmMessage)))
917918
{
@@ -922,24 +923,31 @@
922923
if (!url)
923924
url = button.attr("href");
924925

925-
var ids = {};
926-
926+
var selection = {};
927927
if (griddly)
928-
ids = griddly.griddly("getSelected");
928+
{
929+
selection = griddly.griddly("getSelected", rowIds);
930+
931+
if (selection.value)
932+
{
933+
selection.ids = selection.value;
934+
delete selection.value;
935+
}
936+
}
929937

930938
switch (toggle)
931939
{
932940
case "ajaxbulk":
933-
if (ids.length == 0 && enableOnSelection)
941+
if (selection[Object.keys(selection)[0]].length == 0 && enableOnSelection)
934942
return;
935943

936-
return this.ajaxBulk(url, ids, button, griddly);
944+
return this.ajaxBulk(url, selection, button, griddly);
937945

938946
case "post":
939-
if (ids.length == 0 && enableOnSelection)
947+
if (selection[Object.keys(selection)[0]].length == 0 && enableOnSelection)
940948
return;
941949

942-
return this.post(url, ids, button, griddly);
950+
return this.post(url, selection, button, griddly);
943951

944952
case "postcriteria":
945953
if (!griddly)
@@ -948,10 +956,10 @@
948956
return this.postCriteria(url, griddly.griddly("buildRequest"));
949957

950958
case "ajax":
951-
if (ids.length == 0)
959+
if (selection[Object.keys(selection)[0]].length == 0 && enableOnSelection)
952960
return;
953961

954-
return this.ajax(url, ids, button, griddly);
962+
return this.ajax(url, selection, button, griddly);
955963
}
956964
}
957965

@@ -960,7 +968,9 @@
960968
var f = window[onclick];
961969

962970
if ($.isFunction(f))
963-
return f.call(button);
971+
{
972+
return f.call(button, rowIds);
973+
}
964974

965975
throw "onclick must be a global function";
966976
// we do not support eval cause it's insecure
@@ -973,11 +983,11 @@
973983
return false;
974984
}, GriddlyButton);
975985

976-
GriddlyButton.ajaxBulk = function (url, ids, button, griddly)
986+
GriddlyButton.ajaxBulk = function (url, selection, button, griddly)
977987
{
978988
$.ajax(url,
979989
{
980-
data: { ids: ids },
990+
data: selection,
981991
traditional: true,
982992
type: "POST"
983993
}).done($.proxy(function (data, status, xhr)
@@ -990,7 +1000,7 @@
9901000
}, this));
9911001
};
9921002

993-
GriddlyButton.post = function (url, ids, button, griddly)
1003+
GriddlyButton.post = function (url, selection, button, griddly)
9941004
{
9951005
var inputs = "";
9961006

@@ -999,9 +1009,10 @@
9991009
if (token.length)
10001010
inputs += '<input type="hidden" name="' + token.attr("name") + '" value="' + token.val() + '" />';
10011011

1002-
$.each(ids, function ()
1003-
{
1004-
inputs += "<input name=\"ids\" value=\"" + this + "\" />";
1012+
$.each(selection, function () {
1013+
$.each(this, function () {
1014+
inputs += "<input name=\"ids\" value=\"" + this + "\" />";
1015+
});
10051016
});
10061017

10071018
$("<form action=\"" + url + "\" method=\"post\">" + inputs + "</form>")
@@ -1026,13 +1037,17 @@
10261037
.appendTo("body").submit().remove();
10271038
};
10281039

1029-
GriddlyButton.ajax = function (url, ids, button, griddly)
1040+
GriddlyButton.ajax = function (url, selection, button, griddly)
10301041
{
1031-
for (var i = 0; i < ids.length; i++)
1042+
for (var i = 0; i < selection[Object.keys(selection)[0]].length; i++)
10321043
{
1044+
var postdata = {};
1045+
for (var k in selection)
1046+
postdata[k] = selection[k][i];
1047+
10331048
$.ajax(url,
10341049
{
1035-
data: { id: ids[i] },
1050+
data: postdata,
10361051
type: "POST"
10371052
}).done($.proxy(function (data, status, xhr)
10381053
{

Griddly/Views/Home/Index.cshtml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@
1919
</div>
2020

2121
<script>
22-
function AlertSelectedIds()
22+
function AlertSelectedIds(rowIds)
2323
{
24-
var result = $(this).closest(".griddly").griddly("getSelected", [ "firstname", "lastname" ]);
24+
var result = $(this).closest(".griddly").griddly("getSelected", rowIds);
2525
2626
var str = "{\n";
2727
for (var k in result)

Griddly/Views/Home/TestGrid.cshtml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,6 @@
2121
.Column(x => x.PostalCode, "Zip", template: x => Html.ActionLink("&" + x.PostalCode, "Profile"))
2222
.Button("", "export", action: GriddlyButtonAction.Javascript, className: "export-xlsx")
2323
.Add(new GriddlyButton() { Text = "Confirm", Argument = "http://google.com", Action = GriddlyButtonAction.PostCriteria, ConfirmMessage = "Please confirm" })
24-
.Button("AlertSelectedIds", "Selected", action: GriddlyButtonAction.Javascript, enableOnSelection: true)
24+
.Button("AlertSelectedIds", "Alert Selected", action: GriddlyButtonAction.Javascript, enableOnSelection: true)
25+
.Button("TestPost", "Post Selected", action: GriddlyButtonAction.AjaxBulk, enableOnSelection: true)
2526
)

Griddly/Views/Shared/Griddly/BootstrapButton.cshtml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,8 @@ else
7777
@Html.AttributeIf("data-url", button.Action == GriddlyButtonAction.Ajax || button.Action == GriddlyButtonAction.AjaxBulk || button.Action == GriddlyButtonAction.Post || button.Action == GriddlyButtonAction.PostCriteria, button.Argument)
7878
@Html.AttributeIf("data-target", button.Action != GriddlyButtonAction.Navigate && !string.IsNullOrWhiteSpace(button.Target), button.Target)
7979
@Html.AttributeIf("data-enable-on-selection", button.EnableOnSelection, button.EnableOnSelection.ToString().ToLower())
80-
@Html.AttributeIf("data-confirm-message", button.ConfirmMessage != null, button.ConfirmMessage)>
80+
@Html.AttributeIf("data-confirm-message", button.ConfirmMessage != null, button.ConfirmMessage)
81+
@Html.AttributeIf("data-rowids", button.RowIds != null, button.RowIds != null ? Html.AttributeEncode(Json.Encode(button.RowIds.Select(x => x.ToLower()).ToArray())) : null)>
8182

8283
@if (!string.IsNullOrWhiteSpace(Model.Icon) && GriddlySettings.IconTemplate != null)
8384
{

Griddly/Views/Shared/Griddly/Griddly.cshtml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353
@: data-griddly-pagesize="@(settings.PageSize ?? Model.PageSize)"
5454
@: @Html.AttributeNullable("data-griddly-onrefresh", settings.OnClientRefresh)
5555
@: @Html.AttributeNullable("data-griddly-rowclickmodal", settings.RowClickModal)
56-
@: data-griddly-defaultrowids="@Json.Encode(settings.DefaultRowIds != null ? settings.DefaultRowIds : new string[] { "value" })"
56+
@: data-griddly-defaultrowids="@Json.Encode(settings.DefaultRowIds != null ? settings.DefaultRowIds.Select(x => x.ToLower()).ToArray() : new[] { "value" })"
5757
@: @Html.AttributeIf("data-griddly-defaultsort", defaultSort != null && defaultSort.Any(), Html.AttributeEncode(Json.Encode(defaultSort.Select(x => new { Field = x.Field, Direction = x.Direction.ToString() }))))>
5858
if (settings.Buttons.Any())
5959
{

0 commit comments

Comments
 (0)