|
666 | 666 |
|
667 | 667 | var GridStack = function(el, opts) { |
668 | 668 | var self = this; |
669 | | - var oneColumnMode, isAutoCellHeight; |
| 669 | + var _prevColumn, isAutoCellHeight; |
670 | 670 |
|
671 | 671 | opts = opts || {}; |
672 | 672 |
|
|
814 | 814 | self.cellHeight(self.cellWidth(), false); |
815 | 815 | }, 100); |
816 | 816 |
|
| 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 | + */ |
817 | 821 | this.onResizeHandler = function() { |
818 | 822 | if (isAutoCellHeight) { |
819 | 823 | self._updateHeightsOnResize(); |
820 | 824 | } |
821 | 825 |
|
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; |
832 | 827 |
|
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; } |
838 | 830 |
|
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); |
841 | 833 | } else { |
842 | | - if (!oneColumnMode) { |
843 | | - return; |
844 | | - } |
| 834 | + if (!self._prevColumn || self.opts.staticGrid) { return; } |
845 | 835 |
|
846 | 836 | 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); |
863 | 838 | } |
864 | 839 | }; |
865 | 840 |
|
|
1170 | 1145 | } |
1171 | 1146 | }; |
1172 | 1147 |
|
1173 | | - GridStack.prototype._isOneColumnMode = function() { |
1174 | | - return (window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth) <= |
1175 | | - this.opts.minWidth; |
1176 | | - }; |
1177 | | - |
1178 | 1148 | GridStack.prototype._setupRemovingTimeout = function(el) { |
1179 | 1149 | var self = this; |
1180 | 1150 | var node = $(el).data('_gridstack_node'); |
|
1383 | 1353 | resize: dragOrResize |
1384 | 1354 | }); |
1385 | 1355 |
|
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) { |
1388 | 1357 | this.dd.draggable(el, 'disable'); |
1389 | 1358 | } |
1390 | 1359 |
|
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) { |
1393 | 1361 | this.dd.resizable(el, 'disable'); |
1394 | 1362 | } |
1395 | 1363 |
|
|
1546 | 1514 | var node = el.data('_gridstack_node'); |
1547 | 1515 | if (!node) { return; } |
1548 | 1516 | node.noResize = !(val || false); |
1549 | | - if (node.noResize || (self._isOneColumnMode() && !self.opts.disableOneColumnMode)) { |
| 1517 | + if (node.noResize) { |
1550 | 1518 | self.dd.resizable(el, 'disable'); |
1551 | 1519 | } else { |
1552 | 1520 | self.dd.resizable(el, 'enable'); |
|
1563 | 1531 | var node = el.data('_gridstack_node'); |
1564 | 1532 | if (!node) { return; } |
1565 | 1533 | node.noMove = !(val || false); |
1566 | | - if (node.noMove || (self._isOneColumnMode() && !self.opts.disableOneColumnMode)) { |
| 1534 | + if (node.noMove) { |
1567 | 1535 | self.dd.draggable(el, 'disable'); |
1568 | 1536 | el.removeClass('ui-draggable-handle'); |
1569 | 1537 | } else { |
|
1931 | 1899 | if (this.opts.column === column) { return; } |
1932 | 1900 | var oldColumn = this.opts.column; |
1933 | 1901 |
|
| 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 | + |
1934 | 1910 | this.container.removeClass('grid-stack-' + oldColumn); |
1935 | 1911 | this.container.addClass('grid-stack-' + column); |
1936 | 1912 | this.opts.column = this.grid.column = column; |
|
0 commit comments