Skip to content

Commit 621c1ce

Browse files
authored
Merge pull request #1120 from adumesny/develop
OneColumnMode use setColumn(1)
2 parents 05d9329 + 128e608 commit 621c1ce

File tree

4 files changed

+27
-64
lines changed

4 files changed

+27
-64
lines changed

doc/CHANGES.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ Change log
2828

2929
## v0.6.0-dev (upcoming changes)
3030

31-
- TBD
31+
- one column mode (<768px by default) now simply calls `setColumn(1)` and remembers prev columns (so we can restore). This gives
32+
us full resize/re-order of items capabilities rathern than a locked CSS only layout (see prev rev changes).
3233

3334
## v0.6.0 (2019-12-24)
3435

src/gridstack.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -484,7 +484,7 @@ interface GridstackOptions {
484484
itemClass ? : string;
485485

486486
/**
487-
* minimal width. If window width is less, grid will be shown in one - column mode (default?: 768)
487+
* minimal width. If window width is less, grid will be shown in one column mode (default?: 768)
488488
*/
489489
minWidth ? : number;
490490

src/gridstack.js

Lines changed: 24 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -666,7 +666,7 @@
666666

667667
var GridStack = function(el, opts) {
668668
var self = this;
669-
var oneColumnMode, isAutoCellHeight;
669+
var _prevColumn, isAutoCellHeight;
670670

671671
opts = opts || {};
672672

@@ -814,52 +814,27 @@
814814
self.cellHeight(self.cellWidth(), false);
815815
}, 100);
816816

817+
/**
818+
* called when we are being resized - check if the one Column Mode needs to be turned on/off
819+
* and remember the prev columns we used.
820+
*/
817821
this.onResizeHandler = function() {
818822
if (isAutoCellHeight) {
819823
self._updateHeightsOnResize();
820824
}
821825

822-
if (self._isOneColumnMode() && !self.opts.disableOneColumnMode) {
823-
if (oneColumnMode) {
824-
return;
825-
}
826-
self.container.addClass(self.opts.oneColumnModeClass);
827-
oneColumnMode = true;
828-
829-
self.grid._sortNodes();
830-
self.grid.nodes.forEach(function(node) {
831-
self.container.append(node.el);
826+
var oneColumnWidth = (window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth) <= self.opts.minWidth;
832827

833-
if (self.opts.staticGrid) {
834-
return;
835-
}
836-
self.dd.draggable(node.el, 'disable');
837-
self.dd.resizable(node.el, 'disable');
828+
if (oneColumnWidth && !self.opts.disableOneColumnMode) {
829+
if (self._prevColumn || self.opts.staticGrid) { return; }
838830

839-
node.el.trigger('resize');
840-
});
831+
self.container.addClass(self.opts.oneColumnModeClass); // TODO: legacy do people still depend on style being there ?
832+
self.setColumn(1);
841833
} else {
842-
if (!oneColumnMode) {
843-
return;
844-
}
834+
if (!self._prevColumn || self.opts.staticGrid) { return; }
845835

846836
self.container.removeClass(self.opts.oneColumnModeClass);
847-
oneColumnMode = false;
848-
849-
if (self.opts.staticGrid) {
850-
return;
851-
}
852-
853-
self.grid.nodes.forEach(function(node) {
854-
if (!node.noMove && !self.opts.disableDrag) {
855-
self.dd.draggable(node.el, 'enable');
856-
}
857-
if (!node.noResize && !self.opts.disableResize) {
858-
self.dd.resizable(node.el, 'enable');
859-
}
860-
861-
node.el.trigger('resize');
862-
});
837+
self.setColumn(self._prevColumn);
863838
}
864839
};
865840

@@ -1170,11 +1145,6 @@
11701145
}
11711146
};
11721147

1173-
GridStack.prototype._isOneColumnMode = function() {
1174-
return (window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth) <=
1175-
this.opts.minWidth;
1176-
};
1177-
11781148
GridStack.prototype._setupRemovingTimeout = function(el) {
11791149
var self = this;
11801150
var node = $(el).data('_gridstack_node');
@@ -1383,13 +1353,11 @@
13831353
resize: dragOrResize
13841354
});
13851355

1386-
if (node.noMove || (this._isOneColumnMode() && !self.opts.disableOneColumnMode) || this.opts.disableDrag ||
1387-
this.opts.staticGrid) {
1356+
if (node.noMove || this.opts.disableDrag || this.opts.staticGrid) {
13881357
this.dd.draggable(el, 'disable');
13891358
}
13901359

1391-
if (node.noResize || (this._isOneColumnMode() && !self.opts.disableOneColumnMode) || this.opts.disableResize ||
1392-
this.opts.staticGrid) {
1360+
if (node.noResize || this.opts.disableResize || this.opts.staticGrid) {
13931361
this.dd.resizable(el, 'disable');
13941362
}
13951363

@@ -1546,7 +1514,7 @@
15461514
var node = el.data('_gridstack_node');
15471515
if (!node) { return; }
15481516
node.noResize = !(val || false);
1549-
if (node.noResize || (self._isOneColumnMode() && !self.opts.disableOneColumnMode)) {
1517+
if (node.noResize) {
15501518
self.dd.resizable(el, 'disable');
15511519
} else {
15521520
self.dd.resizable(el, 'enable');
@@ -1563,7 +1531,7 @@
15631531
var node = el.data('_gridstack_node');
15641532
if (!node) { return; }
15651533
node.noMove = !(val || false);
1566-
if (node.noMove || (self._isOneColumnMode() && !self.opts.disableOneColumnMode)) {
1534+
if (node.noMove) {
15671535
self.dd.draggable(el, 'disable');
15681536
el.removeClass('ui-draggable-handle');
15691537
} else {
@@ -1931,6 +1899,14 @@
19311899
if (this.opts.column === column) { return; }
19321900
var oldColumn = this.opts.column;
19331901

1902+
// if we go into 1 column mode (which happens if we're sized less than minWidth unless disableOneColumnMode is on)
1903+
// then remember the original columns so we can restore.
1904+
if (column === 1) {
1905+
this._prevColumn = oldColumn;
1906+
} else {
1907+
delete this._prevColumn;
1908+
}
1909+
19341910
this.container.removeClass('grid-stack-' + oldColumn);
19351911
this.container.addClass('grid-stack-' + column);
19361912
this.opts.column = this.grid.column = column;

src/gridstack.scss

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -129,18 +129,4 @@ $animation_speed: .3s !default;
129129
&.grid-stack-animate .grid-stack-item.grid-stack-placeholder{
130130
@include vendor(transition, left .0s, top .0s, height .0s, width .0s);
131131
}
132-
133-
&.grid-stack-one-column-mode {
134-
height: auto !important;
135-
&> .grid-stack-item {
136-
position: relative !important;
137-
width: auto !important;
138-
left: 0 !important;
139-
top: auto !important;
140-
margin-bottom: $vertical_padding;
141-
max-width: none !important;
142-
143-
&> .ui-resizable-handle { display: none; }
144-
}
145-
}
146132
}

0 commit comments

Comments
 (0)