Skip to content

Commit 125e45f

Browse files
column resize in any cursor position fix, animate column resize option
1 parent 0b815b5 commit 125e45f

File tree

4 files changed

+28
-54
lines changed

4 files changed

+28
-54
lines changed

example/index.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@
9999
container: document.getElementById("pivot") // HTMLElement which will contain table.
100100
//, locale: "en" // language to use (default: browser default or "en")
101101
, dataSource: {
102-
MDX2JSONSource: "http://" + location.hostname + ":57773/SAMPLES"
102+
MDX2JSONSource: "http://" + location.hostname + ":57773/MDX2JSON"
103103
//MDX2JSONSource: "http://37.139.4.54/MDX2JSON"
104104
// MDX2JSON server address
105105
, basicMDX: typeof req === "object" ? req.basicMDX : req

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "LightPivotTable",
33
"author": "ZitRo",
4-
"version": "1.0.0-beta.19",
4+
"version": "1.0.0-beta.20",
55
"description": "A lightweight pivot table for MDX2JSON source for InterSystems Cache",
66
"main": "test/testServer.js",
77
"repository": {

readme.md

+1
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ var setup = { // Object that contain settings. Properties in brackets can be mis
6969
[ , listingColumnMinWidth: 200 ] // minimal width of column in listing
7070
[ , maxHeaderWidth: 100 ] // maximum width of header
7171
[ , columnResizing: true ] // make columns resizable (default: true)
72+
[ , columnResizeAnimation: false ] // animate column when resizing
7273
[ , enableSearch: true ] // enables search panel in listing (default: true)
7374
},
7475
lp = new LightPivotTable(setup);

source/js/PivotView.js

+25-52
Original file line numberDiff line numberDiff line change
@@ -707,6 +707,7 @@ PivotView.prototype.renderRawData = function (data) {
707707
COLUMN_RESIZE_ON = !!this.controller.CONFIG.columnResizing,
708708
LISTING = info.leftHeaderColumnsNumber === 0,
709709
SEARCH_ENABLED = LISTING && this.controller.CONFIG["enableSearch"],
710+
RESIZE_ANIMATION = !!this.controller.CONFIG["columnResizeAnimation"],
710711

711712
container = this.elements.tableContainer,
712713
pivotTopSection = document.createElement("div"),
@@ -746,8 +747,6 @@ PivotView.prototype.renderRawData = function (data) {
746747
return arr;
747748
})() : null,
748749

749-
_RESIZING = false, _RESIZING_ELEMENT = null, _RESIZING_COLUMN_INDEX = 0,
750-
_RESIZING_ELEMENT_BASE_WIDTH, _RESIZING_ELEMENT_BASE_X,
751750
renderedGroups = {}, // keys of rendered groups; key = group, value = { x, y, element }
752751
i, x, y, tr = null, th, td, primaryColumns = [], primaryRows = [], ratio, cellStyle,
753752
tempI, tempJ, div;
@@ -788,67 +787,43 @@ PivotView.prototype.renderRawData = function (data) {
788787
}
789788
};
790789

791-
//var getMouseXY = function (e) {
792-
// var element = e.target || e.srcElement, offsetX = 0, offsetY = 0;
793-
// if (element.offsetParent) {
794-
// do {
795-
// offsetX += element.offsetLeft;
796-
// offsetY += element.offsetTop;
797-
// } while ((element = element.offsetParent));
798-
// }
799-
// return { x: e.pageX - offsetX, y: e.pageY - offsetY };
800-
//};
801-
802790
var bindResize = function (element, column) {
803791

804-
var el = element,
805-
colIndex = column;
792+
var baseWidth = 0,
793+
baseX = 0;
806794

807795
var moveListener = function (e) {
808-
if (!_RESIZING) return;
809796
e.cancelBubble = true;
810797
e.preventDefault();
811-
_RESIZING_ELEMENT.style.width = _RESIZING_ELEMENT.style.minWidth =
812-
_RESIZING_ELEMENT_BASE_WIDTH - _RESIZING_ELEMENT_BASE_X + e.pageX + "px";
798+
element.style.width = element.style.minWidth =
799+
baseWidth - baseX + e.pageX + "px";
800+
if (RESIZE_ANIMATION) {
801+
_.saveScrollPosition();
802+
_.recalculateSizes(container);
803+
_.restoreScrollPosition();
804+
}
813805
};
814806

815-
if (!el._HAS_MOUSE_MOVE_LISTENER) {
816-
el.parentNode.addEventListener("mousemove", moveListener);
817-
el._HAS_MOUSE_MOVE_LISTENER = true;
818-
}
819-
820-
el.addEventListener("mousedown", function (e) {
821-
//var cursorX = getMouseXY(e).x;
822-
//if (cursorX < el.offsetWidth - 5 && cursorX > 5) {
823-
// return;
824-
//}
825-
if ((e.target || e.srcElement) !== el) return;
826-
e.cancelBubble = true;
827-
e.preventDefault();
828-
_RESIZING = true;
829-
_RESIZING_ELEMENT = el;
830-
_RESIZING_ELEMENT_BASE_WIDTH = el.offsetWidth;
831-
_RESIZING_ELEMENT_BASE_X = e.pageX;
832-
_RESIZING_COLUMN_INDEX = colIndex;
833-
//el._CANCEL_CLICK_EVENT = true;
834-
});
835-
836-
el.addEventListener("mouseup", function (e) {
837-
if (!_RESIZING) return;
807+
var upListener = function (e) {
838808
e.cancelBubble = true;
839809
e.preventDefault();
840-
_RESIZING = false;
841-
_RESIZING_ELEMENT.style.width = _RESIZING_ELEMENT.style.minWidth =
842-
(_.FIXED_COLUMN_SIZES[_RESIZING_COLUMN_INDEX] =
843-
_RESIZING_ELEMENT_BASE_WIDTH - _RESIZING_ELEMENT_BASE_X + e.pageX
844-
) + "px";
810+
element.style.width = element.style.minWidth =
811+
(_.FIXED_COLUMN_SIZES[column] = baseWidth - baseX + e.pageX) + "px";
845812
_.saveScrollPosition();
846813
_.recalculateSizes(container);
847814
_.restoreScrollPosition();
848-
setTimeout(function () {
849-
//_RESIZING_ELEMENT._CANCEL_CLICK_EVENT = false;
850-
_RESIZING_ELEMENT = null;
851-
}, 1);
815+
document.removeEventListener("mousemove", moveListener);
816+
document.removeEventListener("mouseup", upListener);
817+
};
818+
819+
element.addEventListener("mousedown", function (e) {
820+
if ((e.target || e.srcElement) !== element) return;
821+
e.cancelBubble = true;
822+
e.preventDefault();
823+
baseWidth = element.offsetWidth;
824+
baseX = e.pageX;
825+
document.addEventListener("mousemove", moveListener);
826+
document.addEventListener("mouseup", upListener);
852827
});
853828

854829
};
@@ -888,11 +863,9 @@ PivotView.prototype.renderRawData = function (data) {
888863
th = document.createElement(rawData[y][x].isCaption ? "th" : "td")
889864
);
890865
div = document.createElement("div");
891-
//div2 = document.createElement("div");
892866
if (rawData[y][x].value) {
893867
div.textContent = rawData[y][x].value;
894868
} else div.innerHTML = "&nbsp;";
895-
//div2.appendChild(div);
896869
th.appendChild(div);
897870
if (rawData[y][x].style) th.setAttribute("style", rawData[y][x].style);
898871
if (info.leftHeaderColumnsNumber === 0

0 commit comments

Comments
 (0)