Drag and Drop, Grid move and reorder rows

Simple Drag and Drop 

drag source

a
b
c

drop target

show code
Shared/Demos/DragAndDrop.cshtml
<div class="dropZone">
<p>drag source</p>
<div class="ditem">a</div>
<div class="ditem">b</div>
<div class="ditem">c</div>
</div>
<br />
<div class="dropZone">
<p>drop target</p>
</div>

<script>
$(function () {
awem.dragReor({
from: $('.dropZone'),
sel: '.ditem', // what we can drag
to: '.dropZone',
noReorder: true
});
});
</script>

<style>
.dropZone {
border: 1px solid #9E9E9E;
border-radius: 2px;
height: 100px;
padding: 5px;
}

.dropZone.awe-highlight {
background-color: #ffdfb3 !important;
}

.ditem.o-plh {
filter: opacity(.5);
}

.ditem {
display: inline-block;
background: gray;
color: white;
padding: .5em 2.5em;
border-radius: 2px;
cursor: default;
margin-right: 5px;
}
</style>

Drag Cards and Items 

item 1
item 2
item 3
item 4
item 5
item 6
item 7


show code
Can drag cards to reorder them on the board and items to move them from one card to another.
Using o-dragCont and o-dragItm classes to avoid dragging a card when trying to drag an item (alternative would be to use cancel func for the drag card call to awem.dragReor).

Drag and Drop Count 

Mango
Apple
Papaya
Banana
Cherry
Tomato
Potato
Cucumber
Onion
Carrot
Apple 1
Papaya 2
show code
Dragging multiple times the same item will increase its count. Dragging it back will remove it.
Using onFakeDrop option to handle the drop ourselves instead of just dropping the drag element where the placeholder was shown.

Drag and Drop Groups 

All
Apple
Papaya
Potato
Cucumber
Broccoli
Artichoke
Chestnuts
Walnuts
Wheat
Buckwheat
Fruits
Mango
Legumes
Tomato
Vegetables
Celery
Nuts and Grains
Hazelnuts
Rice
show code
Restricting where the dragged item can be dropped by setting data-ogroup attribute on the dragged item and drag containers. The last basket accepts 2 groups, data-ogroup can have comma separated values. First (All) basket has no data-ogroup set and it can accept any item.
The dragged container will get an o-dragForb class when a non allowed item is hovering it.

Drag Handle 

a
b
c
show code
DragAndDropDemo/Index.cshtml
<script>
$(function () {
awem.dragReor({ from: $('#b2'), to: '#b2', sel: '.card', handle: '.handle' });
});
</script>

<div class="board" id="b2">
<div class="card">
<div class="handle"></div>
<div class="big">a</div>
</div>

<div class="card">
<div class="handle"></div>
<div class="big">b</div>
</div>

<div class="card">
<div class="handle"></div>
<div class="big">c</div>
</div>
</div>

Sticky placeholder, drag reorder and drop while outside of the drop area  

Cards can be reordered using drag and drop, you can drag and drop the card while dragging outside and around of the drop area.
Used for the multiselect to reorder selected items.
A
B
C
X
Y
Z
show code
Shared/Demos/ReorderCardsSplh.cshtml
<script>
$(function () {
awem.dragReor({
from: $('#board0'),
to: 'body', // execute drop/hover over body
sel: '.mcard',
splh: 1, // sticky placeholder
gcon: function (cx) {
// get drop/hov container ( default was 'body' (to) )
return $('#board0');
}
});
});
</script>

<div class="board" id="board0">
<div class="mcard">
<div class="big">A</div>
</div>
<div class="mcard">
<div class="big">B</div>
</div>
<div class="mcard">
<div class="big">C</div>
</div>

<div class="mcard">
<div class="big">X</div>
</div>
<div class="mcard">
<div class="big">Y</div>
</div>
<div class="mcard">
<div class="big">Z</div>
</div>
</div>

<style>
#board0 {
max-width: 26em;
}

.mcard.o-plh {
background: #f8da4e !important;
color: #915608 !important;
}
</style>

Grid reorder rows using drag handle 

Id
Name
Description
315
Barley a source of fermentable material for beer and certain distilled beverages, and as a component of various health foods
311
OatsThey have been in cultivation for over 4,000 years
307
BuckwheatDespite the name, buckwheat is not related to wheat
303
WheatWheat is a type of grass grown all over the world for its highly nutritious and useful grain.
299
RiceRice is a keystone of the grass family that produces a vast number of grains
295
MongongoIn addition to producing a highly useful lightweight, durable wood, the mongongo tree also yields a distinctive fruit
291
AlmondsAlmonds come in two varieties, sweet and bitter
287
WalnutsA walnut is a seed from a tree in the genus Juglans
283
ChestnutsThey have creamy white sweet flesh which appears in a number of cuisines
279
HazelnutsHazelnuts are produced by hazel trees
275
LettuceLeaf lettuce is often very lightweight and ruffly, with a wrinkly surface and a soft, almost velvety texture
271
CauliflowerAs a general rule, the head is white, but variants of cauliflower come in purple and green as well
267
ArtichokeThe globe artichoke enjoys a long history of both lore and cooking preparation
263
BroccoliSometimes broccoli is compared to tiny trees
259
CeleryAlthough originally cultivated for its perceived medicinal qualities, celery has since made the jump into the daily diets
255
CarrotThe rich orange color of carrots comes from beta carotene, which also happens to be very good for optical health
251
Onion It is possible to chop the greens into small pieces for salads and as a garnish
247
CucumberLike the tomato, the cucumber is a fruit. Botanically speaking, a fruit is the mature ovary of a flowering plant
243
PotatoA potato is a starchy edible tuber native to South America and cultivated all over the world
239
TomatoThe tomato fruit is consumed in diverse ways, including raw, as an ingredient in many dishes and sauces
235
CherryThe cherry is the fruit of many plants of the genus Prunus, and is a fleshy stone fruit
231
BananaBananas come in a variety of sizes and colors when ripe, including yellow, purple, and red.
227
PapayaThe papaya is a large tree-like plant, with a single stem growing from 5 to 10 metres
223
AppleThe apple is the pomaceous fruit of the apple tree
219
MangoThe mango is a fleshy stone fruit belonging to the genus Mangifera

show code
Shared/Demos/GridReorderRowsHandle.cshtml
@(Html.Awe().Grid("GridReordHandle")
.Url(Url.Action("MealsGrid", "Data"))
.MovableRows(new MoveRowsOpt { HandleSelector = ".rowDragHandle" })
.Mod(o => o.Main())
.Reorderable()
.Height(300)
.CssClass("noalt")
.Paging(false)
.Groupable(false)
.Sortable(false)
.Columns(
new Column { Bind = "Id", Width = 100, ClientFormatFunc = "dragColumn" },
new Column { Bind = "Name", Width = 200 },
new Column { Bind = "Description" }.Mod(o => o.Autohide())))
<br />
<button type="button" onclick="getIdsHand()" class="awe-btn">get ids</button>
<div id="logh" class="log"></div>

<script>
// drag handle column client format func
function dragColumn(model) {
return '<div><span class="rowDragHandle"><i class="gg-menu-grid-o"></i></span>' +
model.Id + '</div>';
}

// logging to #logh div
$(function () {
$('#GridReordHandle').on('awedrop', function (e, data) {
var row = $(e.target);
$('#logh').prepend(aweUtils.model(row).Name + ' moved from ' + data.previ + ' to ' + row.index() + '<br/>');
});
});

function getIdsHand() {
var ids = $('#GridReordHandle').find('.awe-row').map(function (i, el) { return $(el).data('k'); }).get();
$('#logh').html(JSON.stringify(ids));
}
</script>
<style>
.rowDragHandle {
display: inline-block;
vertical-align: text-bottom;
margin-right: .5em;
cursor: pointer;
padding: .1em;
}

/*css.gg*/
.gg-menu-grid-o {
box-sizing: border-box;
position: relative;
display: block;
transform: scale(1);
width: 16px;
height: 16px;
}

.gg-menu-grid-o::before {
content: "";
display: block;
box-sizing: border-box;
position: absolute;
width: 4px;
height: 4px;
background: currentColor;
box-shadow: 0 6px 0, 6px 6px 0, 12px 6px 0, 6px 12px 0, 12px 12px 0, 6px 0 0, 12px 0 0, 0 12px 0;
border-radius: 22px;
}
</style>

Grid reorder rows 

on touch you can scroll the grids with movable rows by touching from the right or left side of the grid
Id
Name
Description
315Barley a source of fermentable material for beer and certain distilled beverages, and as a component of various health foods
311OatsThey have been in cultivation for over 4,000 years
307BuckwheatDespite the name, buckwheat is not related to wheat
303WheatWheat is a type of grass grown all over the world for its highly nutritious and useful grain.
299RiceRice is a keystone of the grass family that produces a vast number of grains
295MongongoIn addition to producing a highly useful lightweight, durable wood, the mongongo tree also yields a distinctive fruit
291AlmondsAlmonds come in two varieties, sweet and bitter
287WalnutsA walnut is a seed from a tree in the genus Juglans
283ChestnutsThey have creamy white sweet flesh which appears in a number of cuisines
279HazelnutsHazelnuts are produced by hazel trees
275LettuceLeaf lettuce is often very lightweight and ruffly, with a wrinkly surface and a soft, almost velvety texture
271CauliflowerAs a general rule, the head is white, but variants of cauliflower come in purple and green as well
267ArtichokeThe globe artichoke enjoys a long history of both lore and cooking preparation
263BroccoliSometimes broccoli is compared to tiny trees
259CeleryAlthough originally cultivated for its perceived medicinal qualities, celery has since made the jump into the daily diets
255CarrotThe rich orange color of carrots comes from beta carotene, which also happens to be very good for optical health
251Onion It is possible to chop the greens into small pieces for salads and as a garnish
247CucumberLike the tomato, the cucumber is a fruit. Botanically speaking, a fruit is the mature ovary of a flowering plant
243PotatoA potato is a starchy edible tuber native to South America and cultivated all over the world
239TomatoThe tomato fruit is consumed in diverse ways, including raw, as an ingredient in many dishes and sauces
235CherryThe cherry is the fruit of many plants of the genus Prunus, and is a fleshy stone fruit
231BananaBananas come in a variety of sizes and colors when ripe, including yellow, purple, and red.
227PapayaThe papaya is a large tree-like plant, with a single stem growing from 5 to 10 metres
223AppleThe apple is the pomaceous fruit of the apple tree
219MangoThe mango is a fleshy stone fruit belonging to the genus Mangifera

show code
DragAndDropDemo/Index.cshtml
@(Html.Awe().Grid("GridReord")
.Url(Url.Action("MealsGrid", "Data"))
.Mod(o => o.Main())
.MovableRows()
.Height(300)
.Paging(false)
.Groupable(false)
.Sortable(false)
.Columns(
new Column { Bind = "Id", Width = 100 },
new Column { Bind = "Name", Width = 200 },
new Column { Bind = "Description" }.Mod(o => o.Autohide())))
<br />
<button type="button" onclick="getIds()" class="awe-btn">get ids</button>
<div id="log" class="log"></div>

<script>
$(function () {
$('#GridReord').on('awedrop', function (e, data) {
var row = $(e.target);
$('#log').prepend(aweUtils.model(row).Name + ' moved from ' + data.previ + ' to ' + row.index() + '<br/>');
});
});

function getIds() {
var ids = $('#GridReord').find('.awe-row').map(function (i, el) { return $(el).data('k'); }).get();
$('#log').html(JSON.stringify(ids));
}
</script>

From one grid to another 

Id
Name
Description
315Barley a source of fermentable material for beer and certain distilled beverages, and as a component of various health foods
311OatsThey have been in cultivation for over 4,000 years
307BuckwheatDespite the name, buckwheat is not related to wheat
303WheatWheat is a type of grass grown all over the world for its highly nutritious and useful grain.
299RiceRice is a keystone of the grass family that produces a vast number of grains
295MongongoIn addition to producing a highly useful lightweight, durable wood, the mongongo tree also yields a distinctive fruit
291AlmondsAlmonds come in two varieties, sweet and bitter
287WalnutsA walnut is a seed from a tree in the genus Juglans
283ChestnutsThey have creamy white sweet flesh which appears in a number of cuisines
279HazelnutsHazelnuts are produced by hazel trees
275LettuceLeaf lettuce is often very lightweight and ruffly, with a wrinkly surface and a soft, almost velvety texture
271CauliflowerAs a general rule, the head is white, but variants of cauliflower come in purple and green as well
267ArtichokeThe globe artichoke enjoys a long history of both lore and cooking preparation
263BroccoliSometimes broccoli is compared to tiny trees
259CeleryAlthough originally cultivated for its perceived medicinal qualities, celery has since made the jump into the daily diets
255CarrotThe rich orange color of carrots comes from beta carotene, which also happens to be very good for optical health
251Onion It is possible to chop the greens into small pieces for salads and as a garnish
247CucumberLike the tomato, the cucumber is a fruit. Botanically speaking, a fruit is the mature ovary of a flowering plant
243PotatoA potato is a starchy edible tuber native to South America and cultivated all over the world
239TomatoThe tomato fruit is consumed in diverse ways, including raw, as an ingredient in many dishes and sauces
235CherryThe cherry is the fruit of many plants of the genus Prunus, and is a fleshy stone fruit
231BananaBananas come in a variety of sizes and colors when ripe, including yellow, purple, and red.
227PapayaThe papaya is a large tree-like plant, with a single stem growing from 5 to 10 metres
223AppleThe apple is the pomaceous fruit of the apple tree
219MangoThe mango is a fleshy stone fruit belonging to the genus Mangifera


Id
Name
Description
show code
DragAndDropDemo/Index.cshtml
<div class="frame">
<script>
var selected = [];

// used by the grids to tell the server which items to include/exclude
function getSelected() {
return { selected: selected };
}

$(function () {
$('#MealsGrid1, #MealsGrid2').on('awedrop', function (e, data) {
var row = $(e.target);
$('#log').prepend(aweUtils.model(row).Name + ' moved from ' + data.from.closest('.awe-grid').attr('id') +
' to ' + row.closest('.awe-grid').attr('id') + '<br/>');

selected = $('#MealsGrid2').find('.awe-row').map(function (i, el) { return $(el).data('k'); }).get();
});
});
</script>

@{
var columns = new[]
{
new Column {Bind = "Id", Width = 100},
new Column {Bind = "Name"},
new Column {Bind = "Description", Grow = 7 }.Mod(o => o.Autohide())
};
}

@(Html.Awe().Grid("MealsGrid1")
.Url(Url.Action("MealsGridSrc"))
.Mod(o => o.ColumnsSelector())
.MovableRows(new MoveRowsOpt { Ids = new string[] { "MealsGrid1", "MealsGrid2" } })
.Height(200)
.Paging(false)
.ParameterFunc("getSelected")
.Groupable(false)
.Columns(columns))
<br />
<br />
@(Html.Awe().Grid("MealsGrid2")
.Url(Url.Action("MealsGridSel"))
.Mod(o => o.ColumnsSelector())
.MovableRows(new MoveRowsOpt { Ids = new string[] { "MealsGrid1", "MealsGrid2" } })
.Height(200)
.Paging(false)
.ParameterFunc("getSelected")
.Groupable(false)
.Columns(columns))
</div>



Comments