LOGC#90742: Rapportagekolommen verslepen in plaats van volgnummer invoeren.
svn path=/Website/trunk/; revision=71049
This commit is contained in:
@@ -56,6 +56,28 @@ FCLTHeader.Requires({ plugins: ["jQuery"],
|
||||
}
|
||||
}
|
||||
|
||||
// Return a helper with preserved width of cells
|
||||
var fixHelper = function(e, ui)
|
||||
{
|
||||
ui.children().each(function()
|
||||
{
|
||||
$(this).width($(this).width());
|
||||
});
|
||||
ui.css('left', "-2px");
|
||||
return ui;
|
||||
};
|
||||
|
||||
// Regels verplaatsen is alleen initieel mogelijk als op de kolom "volgnr" gesorteerd is.
|
||||
// Regels verplaatsen is alleen mogelijk als bij menuitems geldt:
|
||||
// 1) Er is 1 groep (tabblad) geselecteerd.
|
||||
// 2) Alleen "Gebruikt" is aangevinkt. "Niet gebruikt" is NIET aangevinkt.
|
||||
// 3) Er is NIET op een Label(tekst) gefiltert.
|
||||
// 4) Er is NIET op een Module gefiltert.
|
||||
// 5) Zolang er NIET clientside gesorteerd is op een (andere) kolom.
|
||||
// Initieel/Default is de lijst gesorteerd op tablad en daarna op volgnummer. Dan mogen er regels verplaatsen worden.
|
||||
//
|
||||
// Als er clientside op een (andere) kolom gesorteerd wordt, wordt het verplaatsen van regels uitgeschakel in de functie "doSort2" van bestand "sorttable.js".
|
||||
// Sortable moet daarbij op de tbody van een tabel gezet zijn.
|
||||
var scrollMode = 0;
|
||||
var scrollThreshold = 20;
|
||||
$('#menutable tbody').sortable({
|
||||
@@ -63,7 +85,7 @@ FCLTHeader.Requires({ plugins: ["jQuery"],
|
||||
axis: "y",
|
||||
distance: 10,
|
||||
scroll: false,
|
||||
helper: "clone",
|
||||
helper: fixHelper,
|
||||
sort: function(event, ui) {
|
||||
var myAbsY = event.originalEvent.clientY + frameElement.offsetTop - parent.scrollY;
|
||||
if (myAbsY < scrollThreshold) {
|
||||
@@ -92,12 +114,11 @@ FCLTHeader.Requires({ plugins: ["jQuery"],
|
||||
var menuKey = parseInt(ui.item.attr("rowKey"), 10) ?? -1;
|
||||
var nextMenuKey = parseInt(ui.item.next().attr("rowKey"), 10) || -1;
|
||||
|
||||
var data = {
|
||||
previous_menu_key: previousMenuKey,
|
||||
menu_key: menuKey,
|
||||
next_menu_key: nextMenuKey,
|
||||
mgroep: parseInt(<%=mgroep%>, 10),
|
||||
};
|
||||
var data = { previous_menu_key: previousMenuKey,
|
||||
menu_key: menuKey,
|
||||
next_menu_key: nextMenuKey,
|
||||
mgroep: parseInt(<%=mgroep%>, 10),
|
||||
};
|
||||
|
||||
<% protectRequest.dataToken("data"); %>
|
||||
$.post("fac_sort_menu_save.asp",
|
||||
|
||||
@@ -107,6 +107,9 @@
|
||||
"columns": {
|
||||
"list": {
|
||||
"requires": { js: ["./fac_reportx.js"] },
|
||||
"sortable": { params: {"fac_usrrap_key": getQParamInt("fac_usrrap_key", -1) /*, test: 54321*/},
|
||||
"file": "fac_sort_reportx_save.asp"
|
||||
},
|
||||
// da werkt hier niet "orderby": ["visible", "sequence"],
|
||||
"buttons": [{
|
||||
"title": L("lcl_usrrap_show"),
|
||||
|
||||
@@ -100,11 +100,15 @@ var sorttable = {
|
||||
sorttable.doSort2.apply(this);
|
||||
},
|
||||
doSort2: function(e)
|
||||
{
|
||||
sorttable.doSort.apply(this);
|
||||
/* JGL */ FcltMgr.resized();
|
||||
if (window.updateTableHeaders)
|
||||
preserveHeaderWidth();
|
||||
{ // Als er op een kolom wordt gesorteerd, dan zetten we het verslepen van regels uit.
|
||||
// Sortable is op de tbody van de tabel gezet.
|
||||
if ($("#" + e.target.closest("table").id + " tbody").sortable)
|
||||
$("#" + e.target.closest("table").id + " tbody").sortable("disable"); // Er is op een kolom gesorteerd. Verslepen regels uitzetten.
|
||||
|
||||
sorttable.doSort.apply(this);
|
||||
FcltMgr.resized(); /* JGL */
|
||||
if (window.updateTableHeaders)
|
||||
preserveHeaderWidth();
|
||||
|
||||
},
|
||||
doSort: function (e)
|
||||
@@ -116,7 +120,7 @@ var sorttable = {
|
||||
if (this.sorttable_sortfunction == sorttable.sort_ddmm || this.sorttable_sortfunction == sorttable.sort_mmdd)
|
||||
var icon = "fa-sort-amount";
|
||||
//alert(this.sorttable_sortfunction);
|
||||
/* JGL */ if (this.preSorttable) eval(this.preSorttable);
|
||||
if (this.preSorttable) eval(this.preSorttable); /* JGL */
|
||||
if (this.className.search(/\bsorttable_sorted\b/) != -1) {
|
||||
// if we're already sorted by this column, just
|
||||
// reverse the table, which is quicker
|
||||
@@ -543,4 +547,3 @@ var forEach = function(object, block, context) {
|
||||
resolve.forEach(object, block, context);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -166,33 +166,154 @@ function scaffolding_list(model, scf_params)
|
||||
FcltMgr.openModalDetail(url, scfKeyString.split(",").length + " " + "<%=safe.jsstring(model.records_title)%>", { callback: scf_reload, id: scfKeyString });
|
||||
}
|
||||
|
||||
// Sorteren door drag-and-drop experiment (niet actief)
|
||||
// Return a helper with preserved width of cells
|
||||
var fixHelper = function(e, ui) {
|
||||
ui.children().each(function() {
|
||||
$(this).width($(this).width());
|
||||
});
|
||||
ui.css('left', "-2px");
|
||||
return ui;
|
||||
};
|
||||
var scrollInterval;
|
||||
var scrollSpeed = 10;
|
||||
|
||||
if (window.$ && 0) // TODO: nog even uit, misschien if ("sequence" in fields)
|
||||
$(function () {
|
||||
$("#<%=model.table%> tbody").sortable({
|
||||
axis: "y",
|
||||
helper: fixHelper,
|
||||
stop: function( event, ui ) {
|
||||
//ui.item.children('td').css('color', 'red');
|
||||
var rows = [];
|
||||
$("#<%=model.table%> tbody tr").each(function()
|
||||
{
|
||||
rows.push(this.getAttribute("ROWKEY"));
|
||||
}
|
||||
);
|
||||
FcltMgr.alert(rows);
|
||||
}
|
||||
}).disableSelection() });;
|
||||
<%= scf_params.list.script %>
|
||||
// Autoscroll functie
|
||||
function parentScroll(mode)
|
||||
{
|
||||
clearInterval(scrollInterval);
|
||||
if (mode === 0) return;
|
||||
|
||||
var $container = $(window); // Of een specifieke scroll-container
|
||||
scrollInterval = setInterval(function ()
|
||||
{
|
||||
var currentScroll = $container.scrollTop();
|
||||
$container.scrollTop(currentScroll + (mode === 1 ? 10 : -10));
|
||||
},
|
||||
50);
|
||||
}
|
||||
|
||||
|
||||
// Helper die muis volgt.
|
||||
var fixHelper = function (e, ui)
|
||||
{
|
||||
var $clone = ui.clone();
|
||||
$clone.children().each(function(index)
|
||||
{
|
||||
$(this).width(ui.children().eq(index).width());
|
||||
});
|
||||
|
||||
$clone.css({ position: 'absolute',
|
||||
pointerEvents: 'none',
|
||||
zIndex: 1000,
|
||||
width: ui.width()
|
||||
}).appendTo('body');
|
||||
|
||||
// Volg muis tijdens drag.
|
||||
$(document).on('mousemove.helperFollow', function (event)
|
||||
{
|
||||
$clone.css({top: event.pageY - ($clone.height() * 1.5) + 'px'
|
||||
//, left: event.pageX + 'px'
|
||||
});
|
||||
});
|
||||
return $clone;
|
||||
};
|
||||
|
||||
|
||||
var scrollMode = 0;
|
||||
var scrollThreshold = 20;
|
||||
if (window.$ && <%=("sortable" in scf_params.list)? 1 : 0%> == 1)
|
||||
{
|
||||
$(function () {
|
||||
// Als er clientside op een (andere) kolom gesorteerd wordt, wordt het verplaatsen van regels uitgeschakel in de functie "doSort2" van bestand "sorttable.js".
|
||||
// Sortable moet daarbij op de tbody van een tabel gezet worden.
|
||||
// Daarnaast moet in het model in de columns.list de parameter sortable meegegeven worden die de volgende parameters moet bevatten:
|
||||
// 1) params: met een keys die nodig zijn voor de file.
|
||||
// 2) file: met een bestand die de verschovenn volgnummers aanpast aan de nieuwe volgorde.
|
||||
// Een voorbeeld hiervan zie je in bestand "fac_reportx.asp".
|
||||
// Daarin is het volgende toegevoegd:
|
||||
// "sortable": { params: {"fac_usrrap_key": getQParamInt("fac_usrrap_key", -1) /*, test: 54321*/},
|
||||
// "file": "fac_sort_reportx_save.asp"
|
||||
// Aan de parameter params kunnen meerdere parameters meegegeven worden als dat nodig is.
|
||||
// Alle parameters worden doorgegeven aan de file als die wordt aangeroepen.
|
||||
$("#<%=model.table%> tbody").sortable({
|
||||
items: "tr",
|
||||
axis: "y",
|
||||
distance: 10,
|
||||
scroll: false, // we doen zelf scroll
|
||||
helper: fixHelper,
|
||||
sort: function(event, ui)
|
||||
{
|
||||
var clientY = event.originalEvent.clientY;
|
||||
var windowHeight = $(window).height();
|
||||
//var scrollTop = $(window).scrollTop();
|
||||
|
||||
// Bereken positie van muis binnen viewport
|
||||
var relativeY = clientY;
|
||||
|
||||
if (relativeY < scrollThreshold)
|
||||
{
|
||||
if (scrollMode !== -1)
|
||||
{ // Start scrolling up.
|
||||
scrollMode = -1;
|
||||
parentScroll(scrollMode);
|
||||
}
|
||||
}
|
||||
else if (relativeY > windowHeight - scrollThreshold)
|
||||
{
|
||||
if (scrollMode !== 1) { // Start scrolling down.
|
||||
scrollMode = 1;
|
||||
parentScroll(scrollMode);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (scrollMode !== 0) { // Stop scrolling.
|
||||
scrollMode = 0;
|
||||
parentScroll(scrollMode);
|
||||
}
|
||||
}
|
||||
},
|
||||
stop: function(event, ui)
|
||||
{
|
||||
scrollMode = 0;
|
||||
parentScroll(scrollMode);
|
||||
e.currentTarget.removeEventListener("touchmove", touchmoveHandler);
|
||||
element.addEventListener("click", handler, false);
|
||||
if (document.off)
|
||||
(document).off('mousemove.helperFollow'); // opruimen
|
||||
},
|
||||
update: function(event, ui)
|
||||
{
|
||||
var previousRowKey = parseInt(ui.item.prev().attr("rowKey"), 10) || -1;
|
||||
var rowKey = parseInt(ui.item.attr("rowKey"), 10) ?? -1;
|
||||
var nextRowKey = parseInt(ui.item.next().attr("rowKey"), 10) || -1;
|
||||
|
||||
var data = { previous_row_key: previousRowKey,
|
||||
row_key: rowKey,
|
||||
next_row_key: nextRowKey,
|
||||
};
|
||||
|
||||
<% // In de list.sortable parameter zijn de volgende twee parameters meegegeven:
|
||||
// 1) params: met een keys die nodig zijn voor de file.
|
||||
// 2) file: met een bestand die de verschovenn volgnummers aanpast aan de nieuwe volgorde.
|
||||
// Aan de parameter params kunnen meerdere parameters meegegeven worden als dat nodig is.
|
||||
// Alle parameters worden doorgegeven aan de file als die wordt aangeroepen.
|
||||
if (scf_params.list.sortable && scf_params.list.sortable.params)
|
||||
{
|
||||
var sortParams = scf_params.list.sortable.params;
|
||||
var sortFile = scf_params.list.sortable.file;
|
||||
for (var keyName in sortParams)
|
||||
{
|
||||
if (sortParams.hasOwnProperty(keyName))
|
||||
{ %>
|
||||
data["<%=keyName%>"] = <%=sortParams[keyName]%>;
|
||||
<% }
|
||||
}
|
||||
} %>
|
||||
|
||||
<% protectRequest.dataToken("data"); %>
|
||||
$.post("<%=sortFile%>",
|
||||
data,
|
||||
FcltCallbackRefresh,
|
||||
"json");
|
||||
}
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
<%= scf_params.list.script %>
|
||||
</script>
|
||||
<% } %>
|
||||
</head>
|
||||
|
||||
Reference in New Issue
Block a user