112 lines
4.0 KiB
JavaScript
112 lines
4.0 KiB
JavaScript
/**
|
|
* Shared list DataTable behavior (aligned with batch_list.php):
|
|
* - Temporarily neutralize scroll defaults during init
|
|
* - Force scrollX/Y/Collapse off, autoWidth/responsive false
|
|
* - Sync horizontal scroll between scrollHead and scrollBody when present
|
|
* - columns.adjust on draw, resize, and after first paint
|
|
*/
|
|
(function (window, $) {
|
|
"use strict";
|
|
if (typeof $ === "undefined" || !$ || !$.fn || !$.fn.DataTable) {
|
|
return;
|
|
}
|
|
|
|
var _savedDefaults = null;
|
|
|
|
window.nhanceListDataTableBeforeInit = function () {
|
|
_savedDefaults = {
|
|
scrollX: $.fn.dataTable.defaults.scrollX,
|
|
scrollY: $.fn.dataTable.defaults.scrollY,
|
|
scrollCollapse: $.fn.dataTable.defaults.scrollCollapse,
|
|
bScrollCollapse: $.fn.dataTable.defaults.bScrollCollapse,
|
|
sScrollX: $.fn.dataTable.defaults.sScrollX,
|
|
sScrollY: $.fn.dataTable.defaults.sScrollY,
|
|
sScrollXInner: $.fn.dataTable.defaults.sScrollXInner,
|
|
};
|
|
$.extend($.fn.dataTable.defaults, {
|
|
scrollX: false,
|
|
scrollY: false,
|
|
scrollCollapse: false,
|
|
bScrollCollapse: false,
|
|
sScrollX: "",
|
|
sScrollY: "",
|
|
sScrollXInner: "",
|
|
});
|
|
};
|
|
|
|
window.nhanceListDataTableAfterInit = function () {
|
|
if (_savedDefaults) {
|
|
$.extend($.fn.dataTable.defaults, _savedDefaults);
|
|
_savedDefaults = null;
|
|
}
|
|
};
|
|
|
|
window.nhanceListDataTableBaseInitComplete = function () {
|
|
return function () {
|
|
var api = this.api();
|
|
var $wrap = $(api.table().container());
|
|
var $body = $wrap.find(".dataTables_scrollBody");
|
|
var $head = $wrap.find(".dataTables_scrollHead");
|
|
if ($body.length && $head.length) {
|
|
$body.off("scroll.nhanceListHScroll").on("scroll.nhanceListHScroll", function () {
|
|
$head.scrollLeft($(this).scrollLeft());
|
|
});
|
|
$head.off("scroll.nhanceListHScroll").on("scroll.nhanceListHScroll", function () {
|
|
$body.scrollLeft($(this).scrollLeft());
|
|
});
|
|
}
|
|
};
|
|
};
|
|
|
|
/**
|
|
* Merge page-specific DataTable options with batch_list-style list defaults.
|
|
* User initComplete runs after base scroll sync.
|
|
*/
|
|
window.nhanceMergeListDataTableOptions = function (userOptions) {
|
|
userOptions = userOptions || {};
|
|
var userInit = userOptions.initComplete;
|
|
var merged = $.extend(true, {}, userOptions);
|
|
/* DataTables maps these to oScroll *before* pb()/tb() runs. CamelCase alone is not enough if
|
|
sScrollX/sScrollY were set via defaults, Hungarian options, or truthy strings. */
|
|
merged.scrollX = false;
|
|
merged.scrollY = false;
|
|
merged.scrollCollapse = false;
|
|
merged.sScrollX = "";
|
|
merged.sScrollY = "";
|
|
merged.sScrollXInner = "";
|
|
merged.bScrollCollapse = false;
|
|
merged.autoWidth = false;
|
|
merged.responsive = false;
|
|
if (merged.paging === undefined) {
|
|
merged.paging = true;
|
|
}
|
|
var baseInit = window.nhanceListDataTableBaseInitComplete();
|
|
merged.initComplete = function () {
|
|
baseInit.call(this);
|
|
if (typeof userInit === "function") {
|
|
userInit.call(this);
|
|
}
|
|
};
|
|
return merged;
|
|
};
|
|
|
|
window.nhanceListDataTableBindAdjust = function (dtApi) {
|
|
if (!dtApi || !dtApi.on) {
|
|
return;
|
|
}
|
|
var tid = $(dtApi.table().node()).attr("id") || "nhance_dt";
|
|
var resizeNs = "resize.nhanceListDt_" + tid;
|
|
|
|
dtApi.columns.adjust();
|
|
dtApi.on("draw.dt", function () {
|
|
dtApi.columns.adjust();
|
|
});
|
|
$(window).off(resizeNs).on(resizeNs, function () {
|
|
dtApi.columns.adjust();
|
|
});
|
|
setTimeout(function () {
|
|
dtApi.columns.adjust();
|
|
}, 0);
|
|
};
|
|
})(window, jQuery);
|